Building plugins
Додавання можливостей (посібник для контриб’юторів)
Використовуйте це, коли OpenClaw потрібен новий спільний домен, як-от embeddings, генерація зображень, генерація відео або майбутня область функцій, підтримувана постачальником.
Правило:
- plugin = межа володіння
- можливість = спільний контракт ядра
Не починайте з прямого підключення постачальника до каналу або інструмента. Почніть із визначення можливості.
Коли створювати можливість
Створюйте нову можливість, коли всі ці умови істинні:
- Її потенційно може реалізувати більше ніж один постачальник.
- Канали, інструменти або feature plugins мають споживати її, не зважаючи на постачальника.
- Ядро має володіти резервною логікою, політикою, конфігурацією або поведінкою доставки.
Якщо робота стосується лише постачальника і спільного контракту ще немає, зупиніться й спочатку визначте контракт.
Стандартна послідовність
- Визначте типізований контракт ядра.
- Додайте реєстрацію plugin для цього контракту.
- Додайте спільний допоміжний засіб середовища виконання.
- Підключіть один реальний vendor plugin як доказ.
- Переведіть споживачів функцій/каналів на допоміжний засіб середовища виконання.
- Додайте контрактні тести.
- Задокументуйте конфігурацію для оператора й модель володіння.
Що куди належить
Ядро:
- Типи запиту/відповіді.
- Реєстр постачальників + розв’язання.
- Резервна поведінка.
- Схема конфігурації з поширеними метаданими документації
title/descriptionна вкладених об’єктах, wildcard, елементах масиву та вузлах композиції. - Поверхня допоміжних засобів середовища виконання.
Vendor plugin:
- Виклики API постачальника.
- Обробка автентифікації постачальника.
- Нормалізація запитів, специфічна для постачальника.
- Реєстрація реалізації можливості.
Feature/channel plugin:
- Викликає
api.runtime.*або відповідний допоміжний засібplugin-sdk/*-runtime. - Ніколи не викликає реалізацію постачальника напряму.
Межі постачальників і harness
Використовуйте provider hooks, коли поведінка належить до контракту постачальника моделі, а не до загального циклу агента. Приклади включають параметри запиту, специфічні для постачальника, після вибору транспорту, пріоритет auth-profile, накладки prompt і резервну маршрутизацію подальших запитів після failover моделі/профілю.
Використовуйте agent harness hooks, коли поведінка належить до середовища виконання, яке виконує turn. Harnesses можуть класифікувати явні результати протоколу, як-от порожній вивід, reasoning без видимого виводу або структурований план без фінальної відповіді, щоб зовнішня політика резервного використання моделі могла ухвалити рішення про повторну спробу.
Тримайте обидві межі вузькими:
- Ядро володіє політикою повторів/резервного використання.
- Provider plugins володіють підказками щодо запитів/auth/маршрутизації, специфічними для постачальника.
- Harness plugins володіють класифікацією спроб, специфічною для середовища виконання.
- Сторонні plugins повертають підказки, а не прямі мутації стану ядра.
Контрольний список файлів
Для нової можливості очікуйте змін у таких областях:
src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- Один або кілька bundled plugin packages.
- Конфігурація, документація, тести.
Опрацьований приклад: генерація зображень
Генерація зображень має стандартну форму:
- Ядро визначає
ImageGenerationProvider. - Ядро надає
registerImageGenerationProvider(...). - Ядро надає
runtime.imageGeneration.generate(...). - Plugins
openai,google,falіminimaxреєструють реалізації, підтримувані постачальниками. - Майбутні постачальники реєструють той самий контракт без змін у каналах/інструментах.
Ключ конфігурації навмисно відокремлений від маршрутизації аналізу зору:
agents.defaults.imageModelаналізує зображення.agents.defaults.imageGenerationModelгенерує зображення.
Тримайте їх окремо, щоб резервна логіка й політика залишалися явними.
Постачальники embedding
Використовуйте embeddingProviders для reusable vector embedding providers. Цей контракт
навмисно ширший за пам’ять: інструменти, пошук, retrieval, імпортери або
майбутні feature plugins можуть споживати embeddings, не залежачи від рушія пам’яті.
Пошук у пам’яті може споживати загальні embeddingProviders. Старіший
контракт memoryEmbeddingProviders є застарілою сумісністю, доки наявні
постачальники, специфічні для пам’яті, мігрують; нові reusable embedding providers мають використовувати
embeddingProviders.
Контрольний список перевірки
Перед випуском нової можливості перевірте:
- Жоден канал/інструмент не імпортує код постачальника напряму.
- Допоміжний засіб середовища виконання є спільним шляхом.
- Принаймні один контрактний тест перевіряє bundled ownership.
- Документація конфігурації називає нову модель/ключ конфігурації.
- Документація Plugin пояснює межу володіння.
Якщо PR пропускає рівень можливості й жорстко вбудовує поведінку постачальника в канал/інструмент, поверніть його й спочатку визначте контракт.
Пов’язане
- Внутрішня архітектура Plugin — модель можливостей, володіння, конвеєр завантаження, допоміжні засоби середовища виконання.
- Створення plugins — навчальний посібник для першого plugin.
- Огляд SDK — довідник мапи імпортів і API реєстрації.
- Створення Skills — супровідна поверхня для контриб’юторів.