SDK Plugin є типізованим контрактом між Plugin і ядром. Ця сторінка є довідником щодо того, що імпортувати і що можна реєструвати.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Ця сторінка призначена для авторів Plugin, які використовують
openclaw/plugin-sdk/* всередині
OpenClaw. Для зовнішніх застосунків, скриптів, панелей моніторингу, завдань CI та розширень IDE,
які хочуть запускати агентів через Gateway, використовуйте
OpenClaw App SDK і пакет @openclaw/sdk
натомість.Угода щодо імпорту
Завжди імпортуйте з конкретного підшляху:openclaw/plugin-sdk/channel-core; залишайте openclaw/plugin-sdk/core для
ширшої узагальненої поверхні та спільних помічників, таких як
buildChannelConfigSchema.
Для конфігурації каналу публікуйте JSON Schema, що належить каналу, через
openclaw.plugin.json#channelConfigs. Підшлях plugin-sdk/channel-config-schema
призначений для спільних примітивів схеми та загального builder. Вбудовані Plugin OpenClaw
використовують plugin-sdk/bundled-channel-config-schema для збережених
схем вбудованих каналів. Застарілі експорти сумісності залишаються на
plugin-sdk/channel-config-schema-legacy; жоден підшлях вбудованих схем не є
шаблоном для нових Plugin.
Довідник підшляхів
SDK Plugin надається як набір вузьких підшляхів, згрупованих за областями (entry Plugin, канал, provider, auth, runtime, capability, memory і зарезервовані помічники вбудованих Plugin). Повний каталог, згрупований і з посиланнями, дивіться в Підшляхи SDK Plugin. Інвентар compiler entrypoint розміщений уscripts/lib/plugin-sdk-entrypoints.json; package exports генеруються з
публічної підмножини після віднімання локальних для репозиторію test/internal підшляхів, перелічених у
scripts/lib/plugin-sdk-private-local-only-subpaths.json. Виконайте
pnpm plugin-sdk:surface, щоб перевірити кількість публічних експортів. Застарілі публічні
підшляхи, які достатньо старі й не використовуються production-кодом вбудованих extensions,
відстежуються в scripts/lib/plugin-sdk-deprecated-public-subpaths.json; широкі
застарілі barrels повторного експорту відстежуються в
scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json.
API реєстрації
Callbackregister(api) отримує об’єкт OpenClawPluginApi з такими
методами:
Реєстрація capability
| Метод | Що він реєструє |
|---|---|
api.registerProvider(...) | Текстовий inference (LLM) |
api.registerAgentHarness(...) | Експериментальний низькорівневий executor агента |
api.registerCliBackend(...) | Локальний backend CLI inference |
api.registerChannel(...) | Канал обміну повідомленнями |
api.registerSpeechProvider(...) | Text-to-speech / STT synthesis |
api.registerRealtimeTranscriptionProvider(...) | Потокова транскрипція в реальному часі |
api.registerRealtimeVoiceProvider(...) | Дуплексні голосові сесії в реальному часі |
api.registerMediaUnderstandingProvider(...) | Аналіз зображень/аудіо/відео |
api.registerImageGenerationProvider(...) | Генерація зображень |
api.registerMusicGenerationProvider(...) | Генерація музики |
api.registerVideoGenerationProvider(...) | Генерація відео |
api.registerWebFetchProvider(...) | Provider web fetch / scrape |
api.registerWebSearchProvider(...) | Вебпошук |
Інструменти та команди
| Метод | Що він реєструє |
|---|---|
api.registerTool(tool, opts?) | Інструмент агента (обов’язковий або { optional: true }) |
api.registerCommand(def) | Користувацька команда (обходить LLM) |
agentPromptGuidance, коли агенту потрібна коротка,
належна команді підказка маршрутизації. Тримайте цей текст про саму команду; не додавайте
provider- або plugin-specific політику до builder prompt ядра.
Інфраструктура
| Метод | Що він реєструє |
|---|---|
api.registerHook(events, handler, opts?) | Event hook |
api.registerHttpRoute(params) | HTTP endpoint Gateway |
api.registerGatewayMethod(name, handler) | RPC method Gateway |
api.registerGatewayDiscoveryService(service) | Локальний advertiser виявлення Gateway |
api.registerCli(registrar, opts?) | Підкоманда CLI |
api.registerNodeCliFeature(registrar, opts?) | Node feature CLI під openclaw nodes |
api.registerService(service) | Фоновий service |
api.registerInteractiveHandler(registration) | Інтерактивний handler |
api.registerAgentToolResultMiddleware(...) | Runtime middleware результатів інструментів |
api.registerMemoryPromptSupplement(builder) | Additive memory-adjacent prompt section |
api.registerMemoryCorpusSupplement(adapter) | Additive memory search/read corpus |
Host hooks для workflow Plugin
Host hooks є SDK seams для Plugin, яким потрібно брати участь у життєвому циклі host, а не лише додавати provider, канал або інструмент. Це загальні контракти; Plan Mode може їх використовувати, але так само можуть approval workflows, workspace policy gates, background monitors, setup wizards і UI companion Plugin.| Метод | Контракт, яким він володіє |
|---|---|
api.session.state.registerSessionExtension(...) | Належний Plugin, JSON-сумісний стан сесії, спроєктований через сесії Gateway |
api.session.workflow.enqueueNextTurnInjection(...) | Стійкий контекст exactly-once, інжектований у наступний хід агента для однієї сесії |
api.registerTrustedToolPolicy(...) | Bundled/trusted pre-plugin політика інструментів, яка може блокувати або переписувати params інструментів |
api.registerToolMetadata(...) | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
api.registerCommand(...) | Scoped команди Plugin; результати команд можуть задавати continueAgent: true; native команди Discord підтримують descriptionLocalizations |
api.session.controls.registerControlUiDescriptor(...) | Дескриптори внеску Control UI для поверхонь session, tool, run або settings |
api.lifecycle.registerRuntimeLifecycle(...) | Cleanup callbacks для runtime ресурсів, що належать Plugin, на шляхах reset/delete/reload |
api.agent.events.registerAgentEventSubscription(...) | Sanitized event subscriptions для workflow state і monitors |
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...) | Per-run plugin scratch state, очищений на terminal run lifecycle |
api.session.workflow.registerSessionSchedulerJob(...) | Cleanup metadata для scheduler jobs, що належать Plugin; не планує роботу і не створює task records |
api.session.workflow.sendSessionAttachment(...) | Bundled-only host-mediated доставка file attachment до active direct-outbound session route |
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...) | Bundled-only Cron-backed scheduled session turns плюс tag-based cleanup |
api.session.controls.registerSessionAction(...) | Типізовані session actions, які клієнти можуть dispatch через Gateway |
api.session.state.registerSessionExtension(...)api.session.workflow.enqueueNextTurnInjection(...)api.session.workflow.registerSessionSchedulerJob(...)api.session.workflow.sendSessionAttachment(...)api.session.workflow.scheduleSessionTurn(...)api.session.workflow.unscheduleSessionTurnsByTag(...)api.session.controls.registerSessionAction(...)api.session.controls.registerControlUiDescriptor(...)api.agent.events.registerAgentEventSubscription(...)api.agent.events.emitAgentEvent(...)api.runContext.setRunContext(...)/getRunContext(...)/clearRunContext(...)api.lifecycle.registerRuntimeLifecycle(...)
api.registerSessionExtension, api.enqueueNextTurnInjection,
api.registerControlUiDescriptor, api.registerRuntimeLifecycle,
api.registerAgentEventSubscription, api.emitAgentEvent,
api.setRunContext, api.getRunContext, api.clearRunContext,
api.registerSessionSchedulerJob, api.registerSessionAction,
api.sendSessionAttachment, api.scheduleSessionTurn або
api.unscheduleSessionTurnsByTag напряму.
scheduleSessionTurn(...) — це зручна сесійна обгортка над планувальником
Gateway Cron. Cron відповідає за таймінг і створює запис фонової задачі, коли
запускається хід; Plugin SDK лише обмежує цільову сесію, назви, що належать
plugin, і очищення. Використовуйте api.runtime.tasks.managedFlows усередині
запланованого ходу, коли сама робота потребує довготривалого багатоетапного
стану TaskFlow.
Контракти навмисно розділяють повноваження:
- Зовнішні plugins можуть володіти розширеннями сесій, дескрипторами UI, командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними хуками.
- Довірені політики інструментів виконуються перед звичайними хуками
before_tool_callі доступні лише в комплекті, бо вони беруть участь у політиці безпеки хоста. - Володіння зарезервованими командами доступне лише в комплекті. Зовнішні plugins мають використовувати власні назви команд або псевдоніми.
allowPromptInjection=falseвимикає хуки, що змінюють промпт, зокремаagent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, поля промпта зі спадковогоbefore_agent_startтаenqueueNextTurnInjection.
| Архетип plugin | Використані хуки |
|---|---|
| Робочий процес затвердження | Розширення сесії, продовження команди, ін’єкція наступного ходу, дескриптор UI |
| Шлюз політики бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сесії |
| Фоновий монітор життєвого циклу | Очищення життєвого циклу runtime, підписка на події агента, володіння/очищення планувальника сесії, внесок Heartbeat у промпт, дескриптор UI |
| Майстер налаштування або онбордингу | Розширення сесії, команди з обмеженою областю дії, дескриптор Control UI |
Зарезервовані основні простори назв адміністрування (
config.*, exec.approvals.*, wizard.*,
update.*) завжди залишаються operator.admin, навіть якщо plugin намагається призначити
вужчу область методу gateway. Надавайте перевагу префіксам, специфічним для plugin, для
методів, що належать plugin.Коли використовувати middleware результатів інструментів
Коли використовувати middleware результатів інструментів
Plugins, що постачаються в комплекті, можуть використовувати
api.registerAgentToolResultMiddleware(...), коли
їм потрібно переписати результат інструмента після виконання й до того, як runtime
передасть цей результат назад у модель. Це довірена нейтральна до runtime
межа для асинхронних редукторів виводу, таких як tokenjuice.Plugins, що постачаються в комплекті, мають оголошувати contracts.agentToolResultMiddleware для кожного
цільового runtime, наприклад ["pi", "codex"]. Зовнішні plugins
не можуть реєструвати це middleware; залишайте звичайні хуки OpenClaw plugin для роботи,
яка не потребує таймінгу результату інструмента перед моделлю. Старий шлях реєстрації вбудованої
фабрики розширень лише для Pi видалено.Реєстрація виявлення Gateway
api.registerGatewayDiscoveryService(...) дає plugin змогу оголошувати активний
Gateway у локальному транспорті виявлення, такому як mDNS/Bonjour. OpenClaw викликає
сервіс під час запуску Gateway, коли локальне виявлення ввімкнено, передає
поточні порти Gateway і несекретні дані підказок TXT, а під час завершення роботи Gateway
викликає повернений обробник stop.
Метадані реєстрації CLI
api.registerCli(registrar, opts?) приймає два види метаданих команд:
commands: явні назви команд, що належать реєстраторуdescriptors: дескриптори команд на етапі розбору, які використовуються для довідки CLI, маршрутизації та лінивої реєстрації CLI pluginparentPath: необов’язковий шлях батьківської команди для вкладених груп команд, наприклад["nodes"]
api.registerNodeCliFeature(registrar, opts?). Це невелика обгортка навколо
api.registerCli(..., { parentPath: ["nodes"] }), яка робить команди на кшталт
openclaw nodes canvas явними функціями вузлів, що належать plugin.
Якщо ви хочете, щоб команда plugin залишалася ліниво завантажуваною у звичайному кореневому шляху CLI,
надайте descriptors, які покривають кожен корінь команди верхнього рівня, відкритий цим
реєстратором.
program:
commands окремо лише тоді, коли вам не потрібна лінива реєстрація кореневого CLI.
Цей шлях сумісності з негайним завантаженням залишається підтримуваним, але він не встановлює
заповнювачі на основі дескрипторів для лінивого завантаження на етапі розбору.
Реєстрація бекенда CLI
api.registerCliBackend(...) дає plugin змогу володіти типовою конфігурацією для локального
бекенда AI CLI, такого як codex-cli.
idбекенда стає префіксом провайдера в посиланнях на моделі на кшталтcodex-cli/gpt-5.configбекенда використовує ту саму форму, що йagents.defaults.cliBackends.<id>.- Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує
agents.defaults.cliBackends.<id>поверх типових значень plugin перед запуском CLI. - Використовуйте
normalizeConfig, коли бекенду потрібні переписування сумісності після об’єднання (наприклад, нормалізація старих форм прапорців). - Використовуйте
resolveExecutionArgsдля переписувань argv в області запиту, які належать діалекту CLI, наприклад зіставлення рівнів мислення OpenClaw із нативним прапорцем зусилля.
Ексклюзивні слоти
| Метод | Що він реєструє |
|---|---|
api.registerContextEngine(id, factory) | Рушій контексту (одночасно активний один). Callback assemble() отримує availableTools і citationsMode, щоб рушій міг адаптувати доповнення до промпта. |
api.registerMemoryCapability(capability) | Уніфікована можливість пам’яті |
api.registerMemoryPromptSection(builder) | Конструктор розділу промпта пам’яті |
api.registerMemoryFlushPlan(resolver) | Розв’язувач плану скидання пам’яті |
api.registerMemoryRuntime(runtime) | Адаптер runtime пам’яті |
Адаптери embedding пам’яті
| Метод | Що він реєструє |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | Адаптер embedding пам’яті для активного plugin |
registerMemoryCapability— бажаний ексклюзивний API plugin пам’яті.registerMemoryCapabilityтакож може відкриватиpublicArtifacts.listArtifacts(...), щоб супутні plugins могли споживати експортовані артефакти пам’яті черезopenclaw/plugin-sdk/memory-host-coreзамість звернення до приватної структури конкретного plugin пам’яті.registerMemoryPromptSection,registerMemoryFlushPlanіregisterMemoryRuntime— це сумісні зі спадком ексклюзивні API plugin пам’яті.MemoryFlushPlan.modelможе прив’язати хід скидання до точного посиланняprovider/model, такого якollama/qwen3:8b, без успадкування активного ланцюга fallback.registerMemoryEmbeddingProviderдає активному plugin пам’яті змогу зареєструвати один або більше id адаптерів embedding (наприкладopenai,geminiабо користувацький id, визначений plugin).- Конфігурація користувача, така як
agents.defaults.memorySearch.providerіagents.defaults.memorySearch.fallback, розв’язується відносно цих зареєстрованих id адаптерів.
Події та життєвий цикл
| Метод | Що він робить |
|---|---|
api.on(hookName, handler, opts?) | Типізований хук життєвого циклу |
api.onConversationBindingResolved(handler) | Callback прив’язки розмови |
Семантика рішень хуків
before_tool_call: повернення{ block: true }є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.before_tool_call: повернення{ block: false }розглядається як відсутність рішення (так само, як пропускblock), а не як перевизначення.before_install: повернення{ block: true }є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.before_install: повернення{ block: false }розглядається як відсутність рішення (так само, як пропускblock), а не як перевизначення.reply_dispatch: повернення{ handled: true, ... }є термінальним. Щойно будь-який обробник заявляє dispatch, обробники з нижчим пріоритетом і типовий шлях dispatch моделі пропускаються.message_sending: повернення{ cancel: true }є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.message_sending: повернення{ cancel: false }розглядається як відсутність рішення (так само, як пропускcancel), а не як перевизначення.message_received: використовуйте типізоване полеthreadId, коли вам потрібна маршрутизація вхідного потоку/теми. Залишайтеmetadataдля специфічних для каналу додаткових даних.message_sending: використовуйте типізовані поля маршрутизаціїreplyToId/threadId, перш ніж переходити до специфічних для каналуmetadata.gateway_start: використовуйтеctx.config,ctx.workspaceDirіctx.getCron?.()для стану запуску, що належить gateway, замість покладання на внутрішні хукиgateway:startup.cron_changed: спостерігайте за змінами життєвого циклу Cron, що належать gateway. Використовуйтеevent.job?.state?.nextRunAtMsіctx.getCron?.()під час синхронізації зовнішніх планувальників пробудження, і залишайте OpenClaw джерелом істини для перевірок строку виконання та виконання.
Поля об’єкта API
| Поле | Тип | Опис |
|---|---|---|
api.id | string | Ідентифікатор Plugin |
api.name | string | Відображуване ім’я |
api.version | string? | Версія Plugin (необов’язково) |
api.description | string? | Опис Plugin (необов’язково) |
api.source | string | Шлях до джерела Plugin |
api.rootDir | string? | Кореневий каталог Plugin (необов’язково) |
api.config | OpenClawConfig | Поточний знімок конфігурації (активний runtime-знімок у пам’яті, коли доступний) |
api.pluginConfig | Record<string, unknown> | Конфігурація, специфічна для Plugin, з plugins.entries.<id>.config |
api.runtime | PluginRuntime | Допоміжні засоби runtime |
api.logger | PluginLogger | Логер із визначеною областю (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | Поточний режим завантаження; "setup-runtime" — легке стартове/налаштувальне вікно перед повним входом |
api.resolvePath(input) | (string) => string | Розв’язати шлях відносно кореня Plugin |
Угода щодо внутрішніх модулів
Усередині свого Plugin використовуйте локальні barrel-файли для внутрішніх імпортів:api.ts, runtime-api.ts,
index.ts, setup-entry.ts та подібні публічні вхідні файли), надають перевагу
активному runtime-знімку конфігурації, коли OpenClaw уже запущено. Якщо runtime-знімка
ще немає, вони повертаються до розв’язаного файлу конфігурації на диску.
Пакетовані фасади вбудованого Plugin слід завантажувати через фасадні завантажувачі Plugin
OpenClaw; прямі імпорти з dist/extensions/... оминають маніфест
і перевірки runtime-sidecar, які пакетовані встановлення використовують для коду, що належить Plugin.
Provider-плагіни можуть надавати вузький локальний для Plugin контрактний barrel, коли
допоміжний засіб навмисно є специфічним для provider і ще не належить до універсального
підшляху SDK. Вбудовані приклади:
- Anthropic: публічна межа
api.ts/contract-api.tsдля Claude beta-header і stream-допоміжних засобівservice_tier. @openclaw/openai-provider:api.tsекспортує builder-и provider, допоміжні засоби для моделей за замовчуванням і builder-и realtime-provider.@openclaw/openrouter-provider:api.tsекспортує builder provider разом із допоміжними засобами onboarding/config.
Пов’язане
Точки входу
Параметри
definePluginEntry і defineChannelPluginEntry.Допоміжні засоби runtime
Повний довідник простору імен
api.runtime.Налаштування та конфігурація
Пакування, маніфести та схеми конфігурації.
Тестування
Утиліти тестування та правила lint.
Міграція SDK
Міграція із застарілих поверхонь.
Внутрішня архітектура Plugin
Глибока архітектура та модель capability.