From e8d386f45adbf0b7eec9de4527c07429404651e9 Mon Sep 17 00:00:00 2001 From: OpenClaw Assistant Date: Tue, 3 Mar 2026 01:43:47 +0300 Subject: [PATCH] feat(skill): add lampa-plugin-builder skill with template --- skills/lampa-plugin-builder/SKILL.md | 40 +++++++++++++++++++ .../references/plugin-template.js | 37 +++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 skills/lampa-plugin-builder/SKILL.md create mode 100644 skills/lampa-plugin-builder/references/plugin-template.js diff --git a/skills/lampa-plugin-builder/SKILL.md b/skills/lampa-plugin-builder/SKILL.md new file mode 100644 index 0000000..4284c0d --- /dev/null +++ b/skills/lampa-plugin-builder/SKILL.md @@ -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.` защита от повторной инициализации; +- запуск через `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` и адаптировать его под задачу. \ No newline at end of file diff --git a/skills/lampa-plugin-builder/references/plugin-template.js b/skills/lampa-plugin-builder/references/plugin-template.js new file mode 100644 index 0000000..eb411c0 --- /dev/null +++ b/skills/lampa-plugin-builder/references/plugin-template.js @@ -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(); + }); + } +})(); \ No newline at end of file