package.json должен направлять загрузку среды выполнения на собранный
JavaScript, когда он доступен:
extensions и setupEntry остаются допустимыми исходными точками входа для разработки в рабочей
области и checkout из git. runtimeExtensions и runtimeSetupEntry предпочтительны,
когда OpenClaw загружает установленный пакет, и позволяют npm-пакетам обходиться без компиляции
TypeScript во время выполнения. Явные точки входа среды выполнения обязательны: runtimeSetupEntry
требует setupEntry, а отсутствующие артефакты runtimeExtensions или runtimeSetupEntry
приводят к ошибке установки или обнаружения вместо тихого отката к исходникам. Если
установленный пакет объявляет только исходную точку входа TypeScript, OpenClaw использует
соответствующий собранный peer dist/*.js, если он существует, а затем откатится к исходникам
TypeScript.
Все пути входа должны оставаться внутри каталога пакета Plugin. Точки входа среды выполнения
и выведенные peer-файлы собранного JavaScript не делают допустимым исходный путь extensions или
setupEntry, выходящий за пределы пакета.
defineToolPlugin
Импорт: openclaw/plugin-sdk/tool-plugin
Для простых Plugin, которые только добавляют инструменты агента. defineToolPlugin сохраняет
исходный код для авторинга небольшим, выводит типы конфигурации и параметров инструмента из схем
TypeBox, оборачивает простые возвращаемые значения в формат результата инструмента OpenClaw и
предоставляет статические метаданные, которые openclaw plugins build записывает в манифест
Plugin.
configSchemaнеобязателен. Если он опущен, OpenClaw использует строгую схему пустого объекта, а сгенерированный манифест все равно включаетconfigSchema.executeвозвращает простую строку или JSON-сериализуемое значение. Вспомогательная функция оборачивает его как текстовый результат инструмента сdetails.- Имена инструментов статичны.
openclaw plugins buildвыводитcontracts.toolsиз объявленных инструментов, поэтому авторам не нужно вручную дублировать имена. - Загрузка среды выполнения остается строгой. Установленным Plugin по-прежнему нужны
openclaw.plugin.jsonиpackage.jsonopenclaw.extensions; OpenClaw не выполняет код Plugin для вывода отсутствующих данных манифеста.
definePluginEntry
Импорт: openclaw/plugin-sdk/plugin-entry
Для provider Plugin, продвинутых tool Plugin, hook Plugin и всего, что
не является каналом сообщений.
| Поле | Тип | Обязательно | По умолчанию |
|---|---|---|---|
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 }), предоставляет необязательный шов метаданных CLI корневой справки
и ограничивает 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вызывается во время регистрации, чтобы вы могли сохранить ссылку на среду выполнения (обычно черезcreatePluginRuntimeStore). Он пропускается во время захвата метаданных CLI.registerCliMetadataвыполняется во времяapi.registrationMode === "cli-metadata",api.registrationMode === "discovery"иapi.registrationMode === "full". Используйте его как каноническое место для принадлежащих каналу дескрипторов CLI, чтобы корневая справка оставалась неактивирующей, снимки обнаружения включали статические метаданные команд, а обычная регистрация команд CLI оставалась совместимой с полной загрузкой Plugin.- Регистрация обнаружения не активирует Plugin, но не свободна от импортов. OpenClaw может
вычислять доверенную точку входа Plugin и модуль channel Plugin для построения
снимка, поэтому держите импорты верхнего уровня без побочных эффектов и размещайте сокеты,
клиенты, воркеры и сервисы за путями только для
"full". registerFullвыполняется только когдаapi.registrationMode === "full". Он пропускается при загрузке только для настройки.- Как и
definePluginEntry,configSchemaможет быть ленивой фабрикой, и OpenClaw мемоизирует разрешенную схему при первом доступе. - Для принадлежащих Plugin корневых команд CLI предпочитайте
api.registerCli(..., { descriptors: [...] }), когда хотите, чтобы команда оставалась лениво загружаемой и при этом не исчезала из корневого дерева разбора CLI. Для команд функций парных узлов предпочитайтеapi.registerNodeCliFeature(...), чтобы команда попадала подopenclaw nodes. Для других вложенных команд Plugin добавьтеparentPathи регистрируйте команды на объектеprogram, переданном регистратору; OpenClaw разрешает его в родительскую команду перед вызовом Plugin. Для channel Plugin предпочитайте регистрировать эти дескрипторы изregisterCliMetadata(...)и держатьregisterFull(...)сосредоточенным на работе только среды выполнения. - Если
registerFull(...)также регистрирует методы Gateway RPC, держите их на префиксе, специфичном для Plugin. Зарезервированные пространства имен администрирования ядра (config.*,exec.approvals.*,wizard.*,update.*) всегда приводятся кoperator.admin.
defineSetupPluginEntry
Импорт: openclaw/plugin-sdk/channel-core
Для легковесного файла setup-entry.ts. Возвращает только { plugin } без
среды выполнения или проводки CLI.
defineSetupPluginEntry(...) с узкими семействами вспомогательных функций настройки:
openclaw/plugin-sdk/setup-runtimeдля безопасных для среды выполнения вспомогательных функций настройки, таких какcreateSetupTranslator, import-safe адаптеры патчей настройки, вывод примечаний поиска,promptResolvedAllowFrom,splitSetupEntriesи делегированные прокси настройкиopenclaw/plugin-sdk/channel-setupдля поверхностей настройки optional-installopenclaw/plugin-sdk/setup-toolsдля вспомогательных функций CLI/архива/документации настройки и установки
defineBundledChannelSetupEntry(...) из
openclaw/plugin-sdk/channel-entry-contract. Этот контракт позволяет
точке входа настройки сохранять безопасные для настройки экспорты Plugin/секретов, при этом все еще предоставляя
сеттер среды выполнения:
registerSetupRuntime выполняется только для загрузок "setup-runtime"; ограничьте его
маршрутами или методами только для конфигурации, которые должны существовать до отложенной полной активации.
Режим регистрации
api.registrationMode сообщает вашему Plugin, как он был загружен:
| Режим | Когда | Что регистрировать |
|---|---|---|
"full" | Обычный запуск Gateway | Все |
"discovery" | Обнаружение возможностей только для чтения | Регистрация канала плюс статические дескрипторы CLI; код входа может загружаться, но пропускайте сокеты, воркеры, клиенты и сервисы |
"setup-only" | Отключенный/ненастроенный канал | Только регистрация канала |
"setup-runtime" | Поток настройки с доступным рантаймом | Регистрация канала плюс только легковесный рантайм, необходимый до загрузки полного входа |
"cli-metadata" | Корневая справка / сбор метаданных CLI | Только дескрипторы CLI |
defineChannelPluginEntry обрабатывает это разделение автоматически. Если вы используете
definePluginEntry напрямую для канала, проверяйте режим самостоятельно:
"setup-runtime" окном, в котором поверхности запуска только для настройки должны
существовать без повторного входа в полный встроенный рантайм канала. Хорошо подходят
регистрация канала, безопасные для настройки HTTP-маршруты, безопасные для настройки методы
Gateway и делегированные помощники настройки. Тяжелые фоновые сервисы, регистраторы CLI и
инициализация SDK провайдеров/клиентов по-прежнему относятся к "full".
Конкретно для регистраторов CLI:
- используйте
descriptors, когда регистратор владеет одной или несколькими корневыми командами и вы хотите, чтобы OpenClaw лениво загружал настоящий модуль CLI при первом вызове - убедитесь, что эти дескрипторы покрывают каждый корень команды верхнего уровня, предоставляемый регистратором
- ограничивайте имена команд в дескрипторах буквами, цифрами, дефисом и подчеркиванием, начиная с буквы или цифры; OpenClaw отклоняет имена дескрипторов вне этой формы и удаляет терминальные управляющие последовательности из описаний перед отображением справки
- используйте только
commandsлишь для путей энергичной совместимости
Формы Plugin
OpenClaw классифицирует загруженные плагины по их поведению регистрации:| Форма | Описание |
|---|---|
| plain-capability | Один тип возможности (например, только провайдер) |
| hybrid-capability | Несколько типов возможностей (например, провайдер + речь) |
| hook-only | Только хуки, без возможностей |
| non-capability | Инструменты/команды/сервисы, но без возможностей |
openclaw plugins inspect <id>, чтобы увидеть форму плагина.
Связанные материалы
- Обзор SDK - API регистрации и справочник подпутей
- Помощники рантайма -
api.runtimeиcreatePluginRuntimeStore - Настройка и конфигурация - манифест, вход настройки, отложенная загрузка
- Plugin каналов - создание объекта
ChannelPlugin - Plugin провайдеров - регистрация провайдера и хуки