feat(skill): add lampa-plugin-builder skill with template

This commit is contained in:
OpenClaw Assistant
2026-03-03 01:43:47 +03:00
parent 4d6d5e76cd
commit e8d386f45a
2 changed files with 77 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
---
name: lampa-plugin-builder
description: Создание и доработка плагинов для приложения Lampa (JS plugin URL). Использовать, когда нужно: (1) создать новый плагин Lampa с нуля, (2) добавить/исправить хуки Lampa.Listener или расширения Lampa.* прототипов, (3) подготовить плагин к публикации по прямому URL .js, (4) проверить безопасную инициализацию (app ready + защита от двойного старта).
---
# Lampa Plugin Builder
1. Уточнить цель плагина и критерий готовности:
- что именно должен менять плагин в Lampa;
- где это должно срабатывать (карточки, меню, источники, фильтры и т.д.);
- как пользователь проверит результат.
2. Создать каркас плагина по шаблону из `references/plugin-template.js`:
- IIFE + `use strict`;
- `window.<flag>` защита от повторной инициализации;
- запуск через `window.appready` или `Lampa.Listener.follow('app', ...)`.
3. Реализовать логику через API Lampa:
- подписки на события через `Lampa.Listener.follow(...)`;
- отправка событий через `Lampa.Listener.send(...)` (если нужно);
- точечные патчи прототипов только при необходимости и с guard-проверками.
4. Добавить безопасные ограничения:
- не ломать стандартный UX;
- не вызывать бесконечные циклы/повторные хуки;
- не переопределять методы без сохранения оригинального поведения.
5. Проверить готовность плагина:
- файл один, самодостаточный `.js`;
- нет синтаксических ошибок;
- повторное подключение не дублирует эффекты;
- есть короткая инструкция установки (URL файла плагина).
6. Выдать результат в формате:
- `plugin-name.js`;
- кратко: что делает;
- как подключить в Lampa (URL плагина);
- быстрый чек-лист тестирования.
Если нужна генерация с нуля — брать шаблон `references/plugin-template.js` и адаптировать его под задачу.

View File

@@ -0,0 +1,37 @@
(function () {
'use strict';
var FLAG = 'lampa_plugin_template_started';
function start() {
if (window[FLAG]) return;
window[FLAG] = true;
// TODO: основная логика плагина
// Пример подписки на события:
// Lampa.Listener.follow('app', function (e) {
// if (e.type === 'ready') {
// console.log('[lampa-plugin] app ready');
// }
// });
// Пример расширения карточки (осторожно с переопределениями):
// if (window.Lampa && Lampa.Card && Lampa.Card.prototype) {
// var original = Lampa.Card.prototype.build;
// if (typeof original === 'function') {
// Lampa.Card.prototype.build = function () {
// original.apply(this, arguments);
// // TODO: post-build логика
// };
// }
// }
}
if (window.appready) {
start();
} else if (window.Lampa && Lampa.Listener) {
Lampa.Listener.follow('app', function (event) {
if (event.type === 'ready') start();
});
}
})();