package.json має спрямовувати завантаження runtime на зібраний
JavaScript, коли він доступний:
extensions і setupEntry залишаються чинними вихідними точками входу для розробки
в робочому просторі та git checkout. runtimeExtensions і runtimeSetupEntry є
бажаними, коли OpenClaw завантажує встановлений пакет, і дають змогу npm-пакетам
уникати runtime-компіляції TypeScript. Явні runtime-точки входу обов’язкові:
runtimeSetupEntry вимагає setupEntry, а відсутні артефакти runtimeExtensions
або runtimeSetupEntry спричиняють помилку встановлення/виявлення замість тихого
повернення до вихідного коду. Якщо встановлений пакет оголошує лише вихідну точку
входу TypeScript, OpenClaw використає відповідний зібраний peer dist/*.js, коли
він існує, а потім повернеться до вихідного TypeScript.
Усі шляхи входу мають залишатися всередині каталогу пакета plugin. Runtime-точки
входу та виведені зібрані JavaScript peers не роблять вихідний шлях extensions або
setupEntry, що виходить назовні, чинним.
definePluginEntry
Імпорт: openclaw/plugin-sdk/plugin-entry
Для provider plugins, tool plugins, hook plugins і всього, що не є
каналом обміну повідомленнями.
| Поле | Тип | Обов’язково | Типове значення |
|---|---|---|---|
id | string | Так | - |
name | string | Так | - |
description | string | Так | - |
kind | string | Ні | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Ні | Схема порожнього об’єкта |
register | (api: OpenClawPluginApi) => void | Так | - |
idмає відповідати вашому маніфестуopenclaw.plugin.json.kindпризначено для ексклюзивних слотів:"memory"або"context-engine".configSchemaможе бути функцією для лінивого обчислення.- OpenClaw розв’язує та мемоізує цю схему під час першого доступу, тому дорогі побудовники схем виконуються лише один раз.
defineChannelPluginEntry
Імпорт: openclaw/plugin-sdk/channel-core
Огортає definePluginEntry проводкою, специфічною для каналів. Автоматично викликає
api.registerChannel({ plugin }), відкриває опційний seam метаданих CLI для root-help
і обмежує registerFull режимом реєстрації.
| Поле | Тип | Обов’язково | Типове значення |
|---|---|---|---|
id | string | Так | - |
name | string | Так | - |
description | string | Так | - |
plugin | ChannelPlugin | Так | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Ні | Схема порожнього об’єкта |
setRuntime | (runtime: PluginRuntime) => void | Ні | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | Ні | - |
registerFull | (api: OpenClawPluginApi) => void | Ні | - |
setRuntimeвикликається під час реєстрації, щоб ви могли зберегти посилання на runtime (зазвичай черезcreatePluginRuntimeStore). Він пропускається під час захоплення метаданих CLI.registerCliMetadataвиконується під часapi.registrationMode === "cli-metadata",api.registrationMode === "discovery"іapi.registrationMode === "full". Використовуйте його як канонічне місце для CLI-дескрипторів, якими володіє канал, щоб root help залишався неактивуючим, discovery-знімки містили статичні метадані команд, а звичайна реєстрація команд CLI залишалася сумісною з повним завантаженням plugin.- Реєстрація discovery є неактивуючою, але не вільною від імпорту. OpenClaw може
обчислювати довірену точку входу plugin і модуль channel plugin для побудови
знімка, тому тримайте імпорти верхнього рівня без побічних ефектів і розміщуйте сокети,
клієнти, workers та сервіси за шляхами лише для
"full". registerFullвиконується лише колиapi.registrationMode === "full". Він пропускається під час setup-only завантаження.- Як і
definePluginEntry,configSchemaможе бути лінивою фабрикою, а OpenClaw мемоізує розв’язану схему під час першого доступу. - Для root CLI-команд, якими володіє plugin, віддавайте перевагу
api.registerCli(..., { descriptors: [...] }), коли потрібно, щоб команда залишалася ліниво завантажуваною, не зникаючи з дерева розбору root CLI. Для команд функцій paired-node віддавайте перевагуapi.registerNodeCliFeature(...), щоб команда потрапляла підopenclaw nodes. Для інших вкладених команд plugin додайтеparentPathі реєструйте команди на об’єктіprogram, переданому реєстратору; OpenClaw розв’язує його до батьківської команди перед викликом plugin. Для channel plugins віддавайте перевагу реєстрації цих дескрипторів ізregisterCliMetadata(...)і тримайтеregisterFull(...)зосередженим на роботі лише runtime. - Якщо
registerFull(...)також реєструє gateway RPC-методи, тримайте їх на префіксі, специфічному для plugin. Зарезервовані core admin namespaces (config.*,exec.approvals.*,wizard.*,update.*) завжди примусово переводяться доoperator.admin.
defineSetupPluginEntry
Імпорт: openclaw/plugin-sdk/channel-core
Для легкого файла setup-entry.ts. Повертає лише { plugin } без
runtime або CLI-проводки.
defineSetupPluginEntry(...) з вузькими сімействами
допоміжних засобів setup:
openclaw/plugin-sdk/setup-runtimeдля runtime-безпечних setup-допоміжних засобів, таких як import-safe setup patch adapters, lookup-note output,promptResolvedAllowFrom,splitSetupEntriesі делеговані setup proxiesopenclaw/plugin-sdk/channel-setupдля optional-install setup surfacesopenclaw/plugin-sdk/setup-toolsдля setup/install CLI/archive/docs допоміжних засобів
defineBundledChannelSetupEntry(...) з
openclaw/plugin-sdk/channel-entry-contract. Цей контракт дає setup-точці входу змогу
зберігати setup-safe plugin/secrets exports, водночас усе ще відкриваючи
runtime setter:
Режим реєстрації
api.registrationMode повідомляє вашому plugin, як його було завантажено:
| Режим | Коли | Що реєструвати |
|---|---|---|
"full" | Звичайний запуск gateway | Усе |
"discovery" | Виявлення можливостей лише для читання | Реєстрація каналу плюс статичні CLI-дескриптори; код точки входу може завантажуватися, але пропускайте сокети, workers, клієнти й сервіси |
"setup-only" | Вимкнений/не налаштований канал | Лише реєстрація каналу |
"setup-runtime" | Setup flow із доступним runtime | Реєстрація каналу плюс лише легкий runtime, потрібний до завантаження повної точки входу |
"cli-metadata" | Захоплення root help / метаданих CLI | Лише CLI-дескриптори |
defineChannelPluginEntry обробляє цей поділ автоматично. Якщо ви використовуєте
definePluginEntry безпосередньо для каналу, перевіряйте режим самостійно:
"setup-runtime" як вікно, у якому startup surfaces лише для setup мають
існувати без повторного входу в повний bundled channel runtime. Добре підходять
реєстрація каналу, setup-safe HTTP routes, setup-safe gateway methods і
делеговані setup helpers. Важкі background services, CLI registrars і
provider/client SDK bootstraps усе ще належать до "full".
Окремо для CLI registrars:
- використовуйте
descriptors, коли реєстратор володіє однією або кількома кореневими командами і ви хочете, щоб OpenClaw ліниво завантажував справжній модуль CLI під час першого виклику - переконайтеся, що ці дескриптори охоплюють кожен корінь команди верхнього рівня, який відкриває реєстратор
- обмежуйте імена команд дескрипторів літерами, цифрами, дефісом і підкресленням, починаючи з літери або цифри; OpenClaw відхиляє імена дескрипторів поза цією формою та видаляє керівні послідовності термінала з описів перед відображенням довідки
- використовуйте лише
commandsтільки для шляхів нетерплячої сумісності
Форми Plugin
OpenClaw класифікує завантажені plugins за їхньою поведінкою реєстрації:| Форма | Опис |
|---|---|
| plain-capability | Один тип можливості (наприклад, лише provider) |
| hybrid-capability | Кілька типів можливостей (наприклад, provider + speech) |
| hook-only | Лише хуки, без можливостей |
| non-capability | Інструменти/команди/сервіси, але без можливостей |
openclaw plugins inspect <id>, щоб побачити форму plugin.
Пов’язане
- Огляд SDK - API реєстрації та довідник підшляхів
- Допоміжні засоби Runtime -
api.runtimeіcreatePluginRuntimeStore - Налаштування та конфігурація - маніфест, точка входу налаштування, відкладене завантаження
- Channel Plugins - побудова об’єкта
ChannelPlugin - Provider Plugins - реєстрація provider і хуки