Plugins
Міграція Plugin SDK
OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури плагінів із вузько сфокусованими, задокументованими імпортами. Якщо ваш плагін було створено до появи нової архітектури, цей посібник допоможе вам виконати міграцію.
Що змінюється
Стара система плагінів надавала дві надто відкриті поверхні, які дозволяли плагінам імпортувати все потрібне з однієї точки входу:
openclaw/plugin-sdk/compat- єдиний імпорт, який повторно експортував десятки допоміжних функцій. Його було введено, щоб старі плагіни на основі хуків продовжували працювати, поки будувалася нова архітектура плагінів.openclaw/plugin-sdk/infra-runtime- широкий barrel для runtime-допоміжних засобів, який змішував системні події, стан heartbeat, черги доставки, допоміжні засоби fetch/proxy, допоміжні засоби для файлів, типи approval та непов’язані утиліти.openclaw/plugin-sdk/config-runtime- широкий barrel сумісності конфігурації, який досі містить застарілі прямі допоміжні засоби завантаження/запису протягом вікна міграції.openclaw/extension-api- міст, який давав плагінам прямий доступ до host-side допоміжних засобів, як-от вбудований agent runner.api.registerEmbeddedExtensionFactory(...)- видалений bundled extension hook лише для Pi, який міг спостерігати події embedded-runner, такі якtool_result.
Широкі поверхні імпорту тепер застарілі. Вони досі працюють під час runtime, але нові плагіни не повинні їх використовувати, а наявні плагіни мають виконати міграцію до того, як наступний major release їх видалить. API реєстрації Pi-only embedded extension factory було видалено; натомість використовуйте middleware для tool-result.
OpenClaw не видаляє й не переінтерпретовує задокументовану поведінку плагінів у тій самій зміні, яка вводить заміну. Зміни контракту, що ламають сумісність, спершу мають пройти через адаптер сумісності, діагностику, документацію та вікно застарівання. Це стосується імпортів SDK, полів manifest, API setup, hooks і поведінки runtime-реєстрації.
Чому це змінилося
Старий підхід спричиняв проблеми:
- Повільний запуск - імпорт одного допоміжного засобу завантажував десятки непов’язаних модулів
- Циклічні залежності - широкі повторні експорти спрощували створення import cycles
- Нечітка поверхня API - не було способу зрозуміти, які експорти стабільні, а які внутрішні
Сучасний plugin SDK це виправляє: кожен шлях імпорту (openclaw/plugin-sdk/\<subpath\>)
є невеликим, самодостатнім модулем із чіткою метою та задокументованим контрактом.
Застарілі provider convenience seams для bundled channels також зникли.
Channel-branded допоміжні seams були приватними mono-repo shortcuts, а не стабільними
контрактами плагінів. Натомість використовуйте вузькі generic SDK subpaths. Усередині bundled
plugin workspace тримайте provider-owned допоміжні засоби у власному api.ts або
runtime-api.ts цього плагіна.
Поточні приклади bundled providers:
- Anthropic тримає Claude-specific stream helpers у власному
api.ts/contract-api.tsseam - OpenAI тримає provider builders, default-model helpers і realtime provider
builders у власному
api.ts - OpenRouter тримає provider builder і onboarding/config helpers у власному
api.ts
План міграції Talk і голосу в реальному часі
Код Realtime voice, telephony, meeting і browser Talk переходить від
surface-local turn bookkeeping до спільного контролера Talk sessions, який експортується з
openclaw/plugin-sdk/realtime-voice. Новий контролер володіє спільним Talk
event envelope, active turn state, capture state, output-audio state, recent
event history і stale-turn rejection. Provider plugins мають і надалі володіти
vendor-specific realtime sessions; surface plugins мають і надалі володіти capture,
playback, telephony і meeting quirks.
Ця міграція Talk навмисно є breaking-clean:
- Зберігайте спільні controller/runtime primitives у
plugin-sdk/realtime-voice. - Переведіть bundled surfaces на спільний controller: browser relay, managed-room handoff, voice-call realtime, voice-call streaming STT, Google Meet realtime і native push-to-talk.
- Замініть старі сімейства Talk RPC на фінальні API
talk.session.*іtalk.client.*. - Оголосіть один live Talk event channel у Gateway
hello-ok.features.events:talk.event. - Видаліть старий realtime HTTP endpoint і будь-який request-time instruction override path.
Новий код не повинен напряму викликати createTalkEventSequencer(...), якщо тільки він не
реалізує low-level adapter або test fixture. Віддавайте перевагу спільному controller,
щоб turn-scoped events не могли надсилатися без turn id, застарілі виклики turnEnd /
turnCancel не могли очистити новіший active turn, а lifecycle events для output-audio
залишалися узгодженими в telephony, meetings, browser relay, managed-room
handoff і native Talk clients.
Цільова форма public API така:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
mode: "realtime",
transport: "gateway-relay",
brain: "agent-consult",
sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });
// Client-owned provider session API.
await gateway.request("talk.client.create", {
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
Browser-owned WebRTC/provider-websocket sessions використовують talk.client.create,
тому що browser володіє provider negotiation і media transport, тоді як
Gateway володіє credentials, instructions і tool policy. talk.session.* є
спільною Gateway-managed surface для gateway-relay realtime, gateway-relay
transcription і managed-room native STT/TTS sessions.
Legacy configs, які розміщували realtime selectors поруч із talk.provider /
talk.providers, слід виправляти за допомогою openclaw doctor --fix; runtime Talk
не переінтерпретовує speech/TTS provider config як realtime provider config.
Підтримувані комбінації talk.session.create навмисно обмежені:
| Режим | Transport | Brain | Власник | Примітки |
|---|---|---|---|---|
realtime |
gateway-relay |
agent-consult |
Gateway | Full-duplex provider audio, передане через Gateway; tool calls маршрутизуються через agent-consult tool. |
transcription |
gateway-relay |
none |
Gateway | Лише streaming STT; callers надсилають input audio й отримують transcript events. |
stt-tts |
managed-room |
agent-consult |
Native/client room | Push-to-talk і walkie-talkie style rooms, де client володіє capture/playback, а Gateway володіє turn state. |
stt-tts |
managed-room |
direct-tools |
Native/client room | Admin-only room mode для довірених first-party surfaces, які напряму виконують Gateway tool actions. |
Мапа видалених методів:
| Старий | Новий |
|---|---|
talk.realtime.session |
talk.client.create |
talk.realtime.toolCall |
talk.client.toolCall |
talk.realtime.relayAudio |
talk.session.appendAudio |
talk.realtime.relayCancel |
talk.session.cancelOutput or talk.session.cancelTurn |
talk.realtime.relayToolResult |
talk.session.submitToolResult |
talk.realtime.relayStop |
talk.session.close |
talk.transcription.session |
talk.session.create({ mode: "transcription" }) |
talk.transcription.relayAudio |
talk.session.appendAudio |
talk.transcription.relayCancel |
talk.session.cancelTurn |
talk.transcription.relayStop |
talk.session.close |
talk.handoff.create |
talk.session.create({ transport: "managed-room" }) |
talk.handoff.join |
talk.session.join |
talk.handoff.revoke |
talk.session.close |
Уніфікований словник керування також навмисно вузький:
| Метод | Застосовується до | Контракт |
|---|---|---|
talk.session.appendAudio |
realtime/gateway-relay, transcription/gateway-relay |
Додати base64 PCM audio chunk до provider session, що належить тому самому Gateway connection. |
talk.session.startTurn |
stt-tts/managed-room |
Почати managed-room user turn. |
talk.session.endTurn |
stt-tts/managed-room |
Завершити active turn після stale-turn validation. |
talk.session.cancelTurn |
all Gateway-owned sessions | Скасувати active capture/provider/agent/TTS work для turn. |
talk.session.cancelOutput |
realtime/gateway-relay |
Зупинити assistant audio output без обов’язкового завершення user turn. |
talk.session.submitToolResult |
realtime/gateway-relay |
Завершити provider tool call, який згенерував relay. |
talk.session.close |
all unified sessions | Зупинити relay sessions або відкликати managed-room state, а потім забути unified session id. |
Не вводьте provider або platform special cases у core, щоб це запрацювало. Core володіє Talk session semantics. Provider plugins володіють vendor session setup. Voice-call і Google Meet володіють telephony/meeting adapters. Browser і native apps володіють device capture/playback UX.
Політика сумісності
Для зовнішніх плагінів робота із сумісністю відбувається в такому порядку:
- додати новий контракт
- зберегти стару поведінку, підключену через compatibility adapter
- вивести diagnostic або warning, що називає старий шлях і заміну
- покрити обидва шляхи в tests
- задокументувати deprecation і migration path
- видалити лише після оголошеного migration window, зазвичай у major release
Супровідники можуть перевірити поточну чергу міграції за допомогою
pnpm plugins:boundary-report. Використовуйте pnpm plugins:boundary-report:summary для
стислих лічильників, --owner <id> для одного Plugin або власника сумісності, а також
pnpm plugins:boundary-report:ci, коли CI-гейт має завершуватися помилкою через прострочені
записи сумісності, міжвласницькі зарезервовані імпорти SDK або невикористані зарезервовані
підшляхи SDK. Звіт групує застарілі
записи сумісності за датою видалення, підраховує локальні посилання в коді/документації,
показує міжвласницькі зарезервовані імпорти SDK і підсумовує приватний
міст SDK хоста пам’яті, щоб очищення сумісності залишалося явним, а не
покладалося на ситуативні пошуки. Зарезервовані підшляхи SDK мають мати відстежене використання власником;
невикористані зарезервовані допоміжні експорти слід видаляти з публічного SDK.
Якщо поле маніфесту все ще приймається, автори Plugin можуть продовжувати його використовувати, доки документація й діагностика не скажуть інше. Новий код має надавати перевагу задокументованій заміні, але наявні плагіни не повинні ламатися під час звичайних мінорних релізів.
Як мігрувати
Мігруйте допоміжні засоби завантаження/запису конфігурації runtime
Вбудовані плагіни мають припинити напряму викликати
api.runtime.config.loadConfig() і
api.runtime.config.writeConfigFile(...). Надавайте перевагу конфігурації, яку
вже було передано в активний шлях виклику. Довгоживучі обробники, яким потрібен
поточний знімок процесу, можуть використовувати api.runtime.config.current(). Довгоживучі
інструменти агента мають використовувати ctx.getRuntimeConfig() із контексту інструмента всередині
execute, щоб інструмент, створений до запису конфігурації, усе ще бачив оновлену
runtime-конфігурацію.
Записи конфігурації мають проходити через транзакційні допоміжні засоби й вибирати політику після запису:
await api.runtime.config.mutateConfigFile({
afterWrite: { mode: "auto" },
mutate(draft) {
draft.plugins ??= {};
},
});
Використовуйте afterWrite: { mode: "restart", reason: "..." }, коли викликач знає,
що зміна потребує чистого перезапуску Gateway, і
afterWrite: { mode: "none", reason: "..." } лише тоді, коли викликач володіє
подальшими діями й навмисно хоче приглушити планувальник перезавантаження.
Результати мутації містять типізований підсумок followUp для тестів і журналювання;
Gateway залишається відповідальним за застосування або планування перезапуску.
loadConfig і writeConfigFile залишаються застарілими допоміжними засобами сумісності
для зовнішніх плагінів протягом вікна міграції та один раз попереджають із
кодом сумісності runtime-config-load-write. Вбудовані плагіни й runtime-код репозиторію
захищені сканерними обмеженнями в
pnpm check:deprecated-internal-config-api і
pnpm check:no-runtime-action-load-config: нове використання у виробничому Plugin
одразу завершується помилкою, прямі записи конфігурації завершуються помилкою, методи сервера Gateway мають використовувати
runtime-знімок запиту, допоміжні засоби runtime для надсилання/дій/клієнта каналу
мають отримувати конфігурацію зі своєї межі, а довгоживучі runtime-модулі мають
нуль дозволених фонових викликів loadConfig().
Новий код Plugin також має уникати імпорту широкого
compatibility-barrel openclaw/plugin-sdk/config-runtime. Використовуйте вузький
підшлях SDK, що відповідає завданню:
| Потреба | Імпорт |
|---|---|
Типи конфігурації, як-от OpenClawConfig |
openclaw/plugin-sdk/config-types |
| Твердження щодо вже завантаженої конфігурації та пошук конфігурації входу Plugin | openclaw/plugin-sdk/plugin-config-runtime |
| Читання поточного runtime-знімка | openclaw/plugin-sdk/runtime-config-snapshot |
| Записи конфігурації | openclaw/plugin-sdk/config-mutation |
| Допоміжні засоби сховища сесій | openclaw/plugin-sdk/session-store-runtime |
| Конфігурація Markdown-таблиці | openclaw/plugin-sdk/markdown-table-runtime |
| Runtime-допоміжні засоби групової політики | openclaw/plugin-sdk/runtime-group-policy |
| Вирішення секретного введення | openclaw/plugin-sdk/secret-input-runtime |
| Перевизначення моделі/сесії | openclaw/plugin-sdk/model-session-runtime |
Вбудовані плагіни та їхні тести захищені сканером від широкого barrel, щоб імпорти й mocks залишалися локальними для потрібної їм поведінки. Широкий barrel усе ще існує для зовнішньої сумісності, але новий код не повинен залежати від нього.
Мігруйте розширення результатів інструментів Pi до middleware
Вбудовані плагіни мають замінити Pi-only
обробники результатів інструментів api.registerEmbeddedExtensionFactory(...) на
runtime-нейтральне middleware.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
return compactToolResult(event);
}, {
runtimes: ["pi", "codex"],
});
Одночасно оновіть маніфест Plugin:
{
"contracts": {
"agentToolResultMiddleware": ["pi", "codex"]
}
}
Зовнішні плагіни не можуть реєструвати middleware результатів інструментів, оскільки воно може переписувати високодовірений вивід інструмента до того, як його побачить модель.
Мігруйте обробники з нативними approvals до фактів capability
Канальні плагіни з підтримкою approvals тепер показують нативну поведінку approval через
approvalCapability.nativeRuntime плюс спільний реєстр runtime-контексту.
Ключові зміни:
- Замініть
approvalCapability.handler.loadRuntime(...)наapprovalCapability.nativeRuntime - Перенесіть auth/delivery, специфічні для approvals, зі старої прив’язки
plugin.auth/plugin.approvalsдоapprovalCapability ChannelPlugin.approvalsвидалено з публічного контракту канального Plugin; перенесіть поля delivery/native/render доapprovalCapabilityplugin.authзалишається лише для потоків входу/виходу каналу; approval auth hooks там більше не читаються core- Реєструйте runtime-об’єкти, що належать каналу, як-от клієнти, токени або Bolt
apps, через
openclaw/plugin-sdk/channel-runtime-context - Не надсилайте повідомлення про reroute, що належать Plugin, із нативних обробників approval; core тепер володіє повідомленнями routed-elsewhere на основі фактичних результатів доставки
- Передаючи
channelRuntimeуcreateChannelManager(...), надайте реальну поверхнюcreatePluginRuntime().channel. Часткові stubs відхиляються.
Див. /plugins/sdk-channel-plugins щодо поточної структури approval capability.
Перевірте резервну поведінку Windows wrapper
Якщо ваш Plugin використовує openclaw/plugin-sdk/windows-spawn, нерозв’язані Windows
.cmd/.bat wrappers тепер fail closed, якщо ви явно не передасте
allowShellFallback: true.
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });
// After
const program = applyWindowsSpawnProgramPolicy({
candidate,
// Only set this for trusted compatibility callers that intentionally
// accept shell-mediated fallback.
allowShellFallback: true,
});
Якщо ваш викликач навмисно не покладається на shell fallback, не встановлюйте
allowShellFallback і натомість обробіть викинуту помилку.
Знайдіть застарілі імпорти
Знайдіть у своєму Plugin імпорти з будь-якої застарілої поверхні:
grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
Замініть на сфокусовані імпорти
Кожен експорт зі старої поверхні відповідає конкретному сучасному шляху імпорту:
// Before (deprecated backwards-compatibility layer)
import {
createChannelReplyPipeline,
createPluginRuntimeStore,
resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";
// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
Для допоміжних засобів на боці хоста використовуйте ін’єктований runtime Plugin замість прямого імпорту:
// Before (deprecated extension-api bridge)
import { runEmbeddedPiAgent } from "openclaw/extension-api";
const result = await runEmbeddedPiAgent({ sessionId, prompt });
// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
Той самий шаблон застосовується до інших старих допоміжних засобів bridge:
| Старий імпорт | Сучасний еквівалент |
|---|---|
resolveAgentDir |
api.runtime.agent.resolveAgentDir |
resolveAgentWorkspaceDir |
api.runtime.agent.resolveAgentWorkspaceDir |
resolveAgentIdentity |
api.runtime.agent.resolveAgentIdentity |
resolveThinkingDefault |
api.runtime.agent.resolveThinkingDefault |
resolveAgentTimeoutMs |
api.runtime.agent.resolveAgentTimeoutMs |
ensureAgentWorkspace |
api.runtime.agent.ensureAgentWorkspace |
| допоміжні засоби сховища сесій | api.runtime.agent.session.* |
Замініть широкі імпорти infra-runtime
openclaw/plugin-sdk/infra-runtime усе ще існує для зовнішньої
сумісності, але новий код має імпортувати сфокусовану поверхню допоміжних засобів, яка
йому фактично потрібна:
| Потреба | Імпорт |
|---|---|
| Допоміжні засоби черги системних подій | openclaw/plugin-sdk/system-event-runtime |
| Допоміжні засоби подій Heartbeat і видимості | openclaw/plugin-sdk/heartbeat-runtime |
| Спорожнення черги очікуваної доставки | openclaw/plugin-sdk/delivery-queue-runtime |
| Телеметрія активності каналу | openclaw/plugin-sdk/channel-activity-runtime |
| In-memory dedupe caches | openclaw/plugin-sdk/dedupe-runtime |
| Безпечні допоміжні засоби шляхів локальних файлів/медіа | openclaw/plugin-sdk/file-access-runtime |
| Dispatcher-aware fetch | openclaw/plugin-sdk/runtime-fetch |
| Допоміжні засоби proxy й guarded fetch | openclaw/plugin-sdk/fetch-runtime |
| Типи політики SSRF dispatcher | openclaw/plugin-sdk/ssrf-dispatcher |
| Типи запиту/вирішення approval | openclaw/plugin-sdk/approval-runtime |
| Допоміжні засоби payload відповіді approval і команд | openclaw/plugin-sdk/approval-reply-runtime |
| Допоміжні засоби форматування помилок | openclaw/plugin-sdk/error-runtime |
| Очікування готовності транспорту | openclaw/plugin-sdk/transport-ready-runtime |
| Допоміжні засоби безпечних токенів | openclaw/plugin-sdk/secure-random-runtime |
| Обмежена конкуренція async-завдань | openclaw/plugin-sdk/concurrency-runtime |
| Числове приведення | openclaw/plugin-sdk/number-runtime |
| Process-local async lock | openclaw/plugin-sdk/async-lock-runtime |
| File locks | openclaw/plugin-sdk/file-lock |
Вбудовані плагіни захищені сканером від infra-runtime, тому код репозиторію
не може регресувати до широкого barrel.
Мігруйте допоміжні засоби маршрутів каналів
Новий код маршрутів каналів має використовувати openclaw/plugin-sdk/channel-route.
Старі імена route-key і comparable-target залишаються aliases сумісності
протягом вікна міграції, але нові плагіни мають використовувати імена маршрутів,
які безпосередньо описують поведінку:
| Старий допоміжний засіб | Сучасний допоміжний засіб |
|---|---|
channelRouteIdentityKey(...) |
channelRouteDedupeKey(...) |
channelRouteKey(...) |
channelRouteCompactKey(...) |
ComparableChannelTarget |
ChannelRouteParsedTarget |
resolveComparableTargetForChannel(...) |
resolveRouteTargetForChannel(...) |
resolveComparableTargetForLoadedChannel(...) |
resolveRouteTargetForLoadedChannel(...) |
comparableChannelTargetsMatch(...) |
channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) |
channelRouteTargetsShareConversation(...) |
Сучасні допоміжні засоби маршрутів узгоджено нормалізують { channel, to, accountId, threadId }
для нативних підтверджень, придушення відповідей, дедуплікації вхідних повідомлень,
доставлення cron і маршрутизації сеансів. Якщо ваш плагін має власну граматику цілей,
використовуйте resolveChannelRouteTargetWithParser(...), щоб адаптувати цей
парсер до того самого контракту цілі маршруту.
Зберіть і протестуйте
pnpm build
pnpm test -- my-plugin/
Довідник шляхів імпорту
Common import path table
| Шлях імпорту | Призначення | Ключові експорти |
|---|---|---|
plugin-sdk/plugin-entry |
Канонічний помічник точки входу plugin | definePluginEntry |
plugin-sdk/core |
Застарілий об'єднаний реекспорт для визначень/будівників точок входу каналів | defineChannelPluginEntry, createChatChannelPlugin |
plugin-sdk/config-schema |
Експорт кореневої схеми конфігурації | OpenClawSchema |
plugin-sdk/provider-entry |
Помічник точки входу для одного провайдера | defineSingleProviderPluginEntry |
plugin-sdk/channel-core |
Сфокусовані визначення та будівники точок входу каналів | defineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase |
plugin-sdk/setup |
Спільні помічники майстра налаштування | Запити списку дозволених, будівники статусу налаштування |
plugin-sdk/setup-runtime |
Runtime-помічники часу налаштування | Безпечні для імпорту адаптери патчів налаштування, помічники приміток пошуку, promptResolvedAllowFrom, splitSetupEntries, делеговані проксі налаштування |
plugin-sdk/setup-adapter-runtime |
Помічники адаптерів налаштування | createEnvPatchedAccountSetupAdapter |
plugin-sdk/setup-tools |
Помічники інструментів налаштування | formatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR |
plugin-sdk/account-core |
Помічники кількох акаунтів | Помічники списку акаунтів/конфігурації/шлюзу дій |
plugin-sdk/account-id |
Помічники ідентифікаторів акаунтів | DEFAULT_ACCOUNT_ID, нормалізація ідентифікаторів акаунтів |
plugin-sdk/account-resolution |
Помічники пошуку акаунтів | Пошук акаунта + помічники резервного значення за замовчуванням |
plugin-sdk/account-helpers |
Вузькі помічники акаунтів | Помічники списку акаунтів/дій акаунта |
plugin-sdk/channel-setup |
Адаптери майстра налаштування | createOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, а також DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries |
plugin-sdk/channel-pairing |
Примітиви DM-сполучення | createChannelPairingController |
plugin-sdk/channel-reply-pipeline |
Префікс відповіді, індикація набору та зв'язування доставлення джерела | createChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode |
plugin-sdk/channel-config-helpers |
Фабрики адаптерів конфігурації та помічники доступу до DM | createHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases |
plugin-sdk/channel-config-schema |
Будівники схем конфігурації | Лише спільні примітиви схеми конфігурації каналів і загальний будівник |
plugin-sdk/bundled-channel-config-schema |
Схеми конфігурації в комплекті | Лише підтримувані OpenClaw plugins у комплекті; нові plugins мають визначати локальні для plugin схеми |
plugin-sdk/channel-config-schema-legacy |
Застарілі схеми конфігурації в комплекті | Лише псевдонім сумісності; використовуйте plugin-sdk/bundled-channel-config-schema для підтримуваних plugins у комплекті |
plugin-sdk/telegram-command-config |
Помічники конфігурації команд Telegram | Нормалізація назв команд, обрізання описів, перевірка дублікатів/конфліктів |
plugin-sdk/channel-policy |
Розв'язання політики груп/DM | resolveChannelGroupRequireMention |
plugin-sdk/channel-lifecycle |
Помічники статусу акаунта та життєвого циклу чернеткового потоку | createAccountStatusSink, помічники фіналізації попереднього перегляду чернетки |
plugin-sdk/inbound-envelope |
Помічники вхідних envelope | Спільні помічники маршруту + будівника envelope |
plugin-sdk/inbound-reply-dispatch |
Помічники вхідних відповідей | Спільні помічники запису й диспетчеризації |
plugin-sdk/messaging-targets |
Розбір цілі повідомлення | Помічники розбору/зіставлення цілей |
plugin-sdk/outbound-media |
Помічники вихідних медіа | Спільне завантаження вихідних медіа |
plugin-sdk/outbound-send-deps |
Помічники залежностей вихідного надсилання | Легкий пошук resolveOutboundSendDep без імпорту повного вихідного runtime |
plugin-sdk/outbound-runtime |
Помічники вихідного runtime | Помічники вихідного доставлення, делегата ідентичності/надсилання, сесії, форматування та планування payload |
plugin-sdk/thread-bindings-runtime |
Помічники прив'язування потоків | Помічники життєвого циклу прив'язування потоків і адаптерів |
plugin-sdk/agent-media-payload |
Застарілі помічники media payload | Будівник media payload агента для застарілих макетів полів |
plugin-sdk/channel-runtime |
Застарілий shim сумісності | Лише застарілі утиліти runtime каналу |
plugin-sdk/channel-send-result |
Типи результатів надсилання | Типи результатів відповіді |
plugin-sdk/runtime-store |
Постійне сховище plugin | createPluginRuntimeStore |
plugin-sdk/runtime |
Широкі runtime-помічники | Помічники runtime/логування/резервного копіювання/встановлення plugin |
plugin-sdk/runtime-env |
Вузькі помічники runtime-середовища | Помічники логера/runtime-середовища, тайм-ауту, повтору та backoff |
plugin-sdk/plugin-runtime |
Спільні runtime-помічники plugin | Помічники команд/hooks/http/інтерактивних функцій plugin |
plugin-sdk/hook-runtime |
Помічники конвеєра hook | Спільні помічники конвеєра webhook/внутрішніх hook |
plugin-sdk/lazy-runtime |
Ледачі runtime-помічники | createLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface |
plugin-sdk/process-runtime |
Помічники процесів | Спільні помічники exec |
plugin-sdk/cli-runtime |
Runtime-помічники CLI | Форматування команд, очікування, помічники версій |
plugin-sdk/gateway-runtime |
Помічники Gateway | Клієнт Gateway, помічник запуску готовності циклу подій і помічники патчів статусу каналу |
plugin-sdk/config-runtime |
Застарілий shim сумісності конфігурації | Віддавайте перевагу config-types, plugin-config-runtime, runtime-config-snapshot і config-mutation |
plugin-sdk/telegram-command-config |
Помічники команд Telegram | Резервно стабільні помічники перевірки команд Telegram, коли поверхня контракту Telegram у комплекті недоступна |
plugin-sdk/approval-runtime |
Помічники запитів схвалення | Payload схвалення exec/plugin, помічники можливостей/профілю схвалення, нативна маршрутизація/ runtime схвалення та форматування шляху структурованого відображення схвалення |
plugin-sdk/approval-auth-runtime |
Помічники авторизації схвалення | Розв'язання approver, авторизація дій у тому самому чаті |
plugin-sdk/approval-client-runtime |
Помічники клієнта схвалення | Помічники нативного профілю/фільтра схвалення exec |
plugin-sdk/approval-delivery-runtime |
Помічники доставлення схвалення | Нативні адаптери можливостей/доставлення схвалення |
plugin-sdk/approval-gateway-runtime |
Помічники Gateway схвалення | Спільний помічник розв'язання Gateway схвалення |
plugin-sdk/approval-handler-adapter-runtime |
Помічники адаптерів схвалення | Легкі помічники завантаження нативних адаптерів схвалення для гарячих точок входу каналів |
plugin-sdk/approval-handler-runtime |
Помічники обробників схвалення | Ширші runtime-помічники обробників схвалення; віддавайте перевагу вужчим адаптерним/Gateway-швам, коли їх достатньо |
plugin-sdk/approval-native-runtime |
Помічники цілей схвалення | Нативні помічники прив'язування цілі/акаунта схвалення |
plugin-sdk/approval-reply-runtime |
Помічники відповіді схвалення | Помічники payload відповіді схвалення exec/plugin |
plugin-sdk/channel-runtime-context |
Помічники runtime-контексту каналу | Загальні помічники реєстрації/отримання/спостереження runtime-контексту каналу |
plugin-sdk/security-runtime |
Помічники безпеки | Спільні помічники довіри, DM-шлюзування, root-обмежених файлів/шляхів, зовнішнього вмісту та збирання секретів |
plugin-sdk/ssrf-policy |
Помічники політики SSRF | Помічники списку дозволених хостів і політики приватної мережі |
plugin-sdk/ssrf-runtime |
Runtime-помічники SSRF | Закріплений dispatcher, захищений fetch, помічники політики SSRF |
plugin-sdk/system-event-runtime |
Помічники системних подій | enqueueSystemEvent, peekSystemEventEntries |
plugin-sdk/heartbeat-runtime |
Помічники Heartbeat | Помічники подій Heartbeat і видимості |
plugin-sdk/delivery-queue-runtime |
Помічники черги доставлення | drainPendingDeliveries |
plugin-sdk/channel-activity-runtime |
Помічники активності каналу | recordChannelActivity |
plugin-sdk/dedupe-runtime |
Помічники дедуплікації | In-memory кеші дедуплікації |
plugin-sdk/file-access-runtime |
Помічники доступу до файлів | Помічники безпечних шляхів до локальних файлів/медіа |
plugin-sdk/transport-ready-runtime |
Помічники готовності транспорту | waitForTransportReady |
plugin-sdk/collection-runtime |
Помічники обмеженого кешу | pruneMapToMaxSize |
plugin-sdk/diagnostic-runtime |
Помічники діагностичного шлюзування | isDiagnosticFlagEnabled, isDiagnosticsEnabled |
plugin-sdk/error-runtime |
Помічники форматування помилок | formatUncaughtError, isApprovalNotFoundError, помічники графа помилок |
plugin-sdk/fetch-runtime |
Помічники обгорнутого fetch/проксі | resolveFetch, помічники проксі, помічники опцій EnvHttpProxyAgent |
plugin-sdk/host-runtime |
Помічники нормалізації хоста | normalizeHostname, normalizeScpRemoteHost |
plugin-sdk/retry-runtime |
Помічники повторів | RetryConfig, retryAsync, виконавці політик |
plugin-sdk/allow-from |
Форматування списку дозволених | formatAllowFromLowercase |
plugin-sdk/allowlist-resolution |
Зіставлення введення списку дозволених | mapAllowlistResolutionInputs |
plugin-sdk/command-auth |
Шлюзування команд і помічники командної поверхні | resolveControlCommandGate, помічники авторизації відправника, помічники реєстру команд, включно з форматуванням меню динамічних аргументів |
plugin-sdk/command-status |
Рендерери статусу/довідки команд | buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage |
plugin-sdk/secret-input |
Розбір введення секретів | Помічники введення секретів |
plugin-sdk/webhook-ingress |
Помічники Webhook-запитів | Утиліти цілей Webhook |
plugin-sdk/webhook-request-guards |
Помічники захисту тіла Webhook | Помічники читання/обмеження тіла запиту |
plugin-sdk/reply-runtime |
Спільний runtime відповіді | Вхідна диспетчеризація, Heartbeat, планувальник відповідей, поділ на фрагменти |
plugin-sdk/reply-dispatch-runtime |
Вузькі помічники диспетчеризації відповідей | Фіналізація, диспетчеризація провайдера та помічники міток розмов |
plugin-sdk/reply-history |
Помічники історії відповідей | buildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled |
plugin-sdk/reply-reference |
Планування посилань відповіді | createReplyReferencePlanner |
plugin-sdk/reply-chunking |
Помічники фрагментів відповіді | Помічники поділу тексту/markdown на фрагменти |
plugin-sdk/session-store-runtime |
Помічники сховища сесій | Помічники шляху сховища + updated-at |
plugin-sdk/state-paths |
Помічники шляхів стану | Помічники каталогів стану та OAuth |
plugin-sdk/routing |
Помічники routing/session-key | resolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, помічники нормалізації session-key |
plugin-sdk/status-helpers |
Помічники статусу каналу | Будівники зведення статусу каналу/акаунта, стандартні значення runtime-стану, помічники метаданих проблем |
plugin-sdk/target-resolver-runtime |
Помічники розв'язувача цілей | Спільні помічники розв'язувача цілей |
plugin-sdk/string-normalization-runtime |
Помічники нормалізації рядків | Помічники нормалізації slug/рядків |
plugin-sdk/request-url |
Помічники URL запиту | Витягання рядкових URL з input, схожих на запит |
plugin-sdk/run-command |
Помічники команд із таймером | Виконавець команд із таймером і нормалізованими stdout/stderr |
plugin-sdk/param-readers |
Зчитувачі параметрів | Спільні зчитувачі параметрів інструментів/CLI |
plugin-sdk/tool-payload |
Видобування корисного навантаження інструмента | Видобуває нормалізовані корисні навантаження з об'єктів результатів інструментів |
plugin-sdk/tool-send |
Видобування надсилання інструмента | Видобуває канонічні поля цілі надсилання з аргументів інструмента |
plugin-sdk/temp-path |
Допоміжні засоби тимчасових шляхів | Спільні допоміжні засоби шляхів для тимчасових завантажень |
plugin-sdk/logging-core |
Допоміжні засоби журналювання | Допоміжні засоби логера підсистеми та редагування |
plugin-sdk/markdown-table-runtime |
Допоміжні засоби Markdown-таблиць | Допоміжні засоби режиму Markdown-таблиць |
plugin-sdk/reply-payload |
Типи відповіді повідомлення | Типи корисного навантаження відповіді |
plugin-sdk/provider-setup |
Кураторські допоміжні засоби налаштування локального/самостійно розміщеного провайдера | Допоміжні засоби виявлення/налаштування самостійно розміщеного провайдера |
plugin-sdk/self-hosted-provider-setup |
Спеціалізовані допоміжні засоби налаштування OpenAI-сумісного самостійно розміщеного провайдера | Ті самі допоміжні засоби виявлення/налаштування самостійно розміщеного провайдера |
plugin-sdk/provider-auth-runtime |
Допоміжні засоби автентифікації середовища виконання провайдера | Допоміжні засоби визначення API-ключів у середовищі виконання |
plugin-sdk/provider-auth-api-key |
Допоміжні засоби налаштування API-ключа провайдера | Допоміжні засоби онбордингу/запису профілю для API-ключів |
plugin-sdk/provider-auth-result |
Допоміжні засоби результату автентифікації провайдера | Стандартний побудовник результату автентифікації OAuth |
plugin-sdk/provider-auth-login |
Допоміжні засоби інтерактивного входу провайдера | Спільні допоміжні засоби інтерактивного входу |
plugin-sdk/provider-selection-runtime |
Допоміжні засоби вибору провайдера | Вибір налаштованого або автоматичного провайдера та об'єднання необробленої конфігурації провайдера |
plugin-sdk/provider-env-vars |
Допоміжні засоби змінних середовища провайдера | Допоміжні засоби пошуку змінних середовища автентифікації провайдера |
plugin-sdk/provider-model-shared |
Спільні допоміжні засоби моделей/відтворення провайдера | ProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, спільні побудовники політик відтворення, допоміжні засоби кінцевих точок провайдера та допоміжні засоби нормалізації ідентифікаторів моделей |
plugin-sdk/provider-catalog-shared |
Спільні допоміжні засоби каталогу провайдера | findCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat |
plugin-sdk/provider-onboard |
Патчі онбордингу провайдера | Допоміжні засоби конфігурації онбордингу |
plugin-sdk/provider-http |
HTTP-допоміжні засоби провайдера | Загальні допоміжні засоби можливостей HTTP/кінцевих точок провайдера, зокрема допоміжні засоби multipart-форм для транскрипції аудіо |
plugin-sdk/provider-web-fetch |
Допоміжні засоби web-fetch провайдера | Допоміжні засоби реєстрації/кешу провайдера web-fetch |
plugin-sdk/provider-web-search-config-contract |
Допоміжні засоби конфігурації вебпошуку провайдера | Вузькі допоміжні засоби конфігурації/облікових даних вебпошуку для провайдерів, яким не потрібне підключення ввімкнення Plugin |
plugin-sdk/provider-web-search-contract |
Допоміжні засоби контракту вебпошуку провайдера | Вузькі допоміжні засоби контракту конфігурації/облікових даних вебпошуку, як-от createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig і обмежені за областю сетери/гетери облікових даних |
plugin-sdk/provider-web-search |
Допоміжні засоби вебпошуку провайдера | Допоміжні засоби реєстрації/кешу/середовища виконання провайдера вебпошуку |
plugin-sdk/provider-tools |
Допоміжні засоби сумісності інструментів/схем провайдера | ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, очищення схем Gemini + діагностика, а також допоміжні засоби сумісності xAI, як-от resolveXaiModelCompatPatch / applyXaiModelCompat |
plugin-sdk/provider-usage |
Допоміжні засоби використання провайдера | fetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage та інші допоміжні засоби використання провайдера |
plugin-sdk/provider-stream |
Допоміжні засоби обгортки потоку провайдера | ProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, типи обгорток потоків і спільні допоміжні засоби обгорток Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
plugin-sdk/provider-transport-runtime |
Допоміжні засоби транспорту провайдера | Нативні допоміжні засоби транспорту провайдера, як-от захищений fetch, перетворення транспортних повідомлень і записувані потоки транспортних подій |
plugin-sdk/keyed-async-queue |
Упорядкована асинхронна черга | KeyedAsyncQueue |
plugin-sdk/media-runtime |
Спільні допоміжні засоби медіа | Допоміжні засоби отримання/перетворення/зберігання медіа, визначення розмірів відео на основі ffprobe та побудовники корисного навантаження медіа |
plugin-sdk/media-generation-runtime |
Спільні допоміжні засоби генерації медіа | Спільні допоміжні засоби аварійного перемикання, вибір кандидатів і повідомлення про відсутню модель для генерації зображень/відео/музики |
plugin-sdk/media-understanding |
Допоміжні засоби розуміння медіа | Типи провайдера розуміння медіа, а також експорти допоміжних засобів для зображень/аудіо, орієнтовані на провайдера |
plugin-sdk/text-runtime |
Спільні допоміжні засоби тексту | Вилучення видимого для асистента тексту, допоміжні засоби рендерингу/нарізання/таблиць Markdown, допоміжні засоби редагування, допоміжні засоби тегів директив, утиліти безпечного тексту та пов'язані допоміжні засоби тексту/журналювання |
plugin-sdk/text-chunking |
Допоміжні засоби нарізання тексту | Допоміжний засіб нарізання вихідного тексту |
plugin-sdk/speech |
Допоміжні засоби мовлення | Типи провайдера мовлення, а також орієнтовані на провайдера допоміжні засоби директив, реєстру й валідації та OpenAI-сумісний побудовник TTS |
plugin-sdk/speech-core |
Спільне ядро мовлення | Типи провайдера мовлення, реєстр, директиви, нормалізація |
plugin-sdk/realtime-transcription |
Допоміжні засоби транскрипції в реальному часі | Типи провайдера, допоміжні засоби реєстру та спільний допоміжний засіб сесії WebSocket |
plugin-sdk/realtime-voice |
Допоміжні засоби голосу в реальному часі | Типи провайдера, допоміжні засоби реєстру/визначення, допоміжні засоби мостових сесій, спільні черги відповіді голосом агента, справність транскрипта/подій, приглушення відлуння та швидкі допоміжні засоби консультації контексту |
plugin-sdk/image-generation |
Допоміжні засоби генерації зображень | Типи провайдера генерації зображень, а також допоміжні засоби ресурсів зображень/data URL і OpenAI-сумісний побудовник провайдера зображень |
plugin-sdk/image-generation-core |
Спільне ядро генерації зображень | Типи генерації зображень, аварійне перемикання, автентифікація та допоміжні засоби реєстру |
plugin-sdk/music-generation |
Допоміжні засоби генерації музики | Типи провайдера/запиту/результату генерації музики |
plugin-sdk/music-generation-core |
Спільне ядро генерації музики | Типи генерації музики, допоміжні засоби аварійного перемикання, пошук провайдера та розбір посилань на модель |
plugin-sdk/video-generation |
Допоміжні засоби генерації відео | Типи провайдера/запиту/результату генерації відео |
plugin-sdk/video-generation-core |
Спільне ядро генерації відео | Типи генерації відео, допоміжні засоби аварійного перемикання, пошук провайдера та розбір посилань на модель |
plugin-sdk/interactive-runtime |
Допоміжні засоби інтерактивної відповіді | Нормалізація/скорочення корисного навантаження інтерактивної відповіді |
plugin-sdk/channel-config-primitives |
Примітиви конфігурації каналу | Вузькі примітиви схеми конфігурації каналу |
plugin-sdk/channel-config-writes |
Допоміжні засоби запису конфігурації каналу | Допоміжні засоби авторизації запису конфігурації каналу |
plugin-sdk/channel-plugin-common |
Спільна преамбула каналу | Спільні експорти преамбули Plugin каналу |
plugin-sdk/channel-status |
Допоміжні засоби стану каналу | Спільні допоміжні засоби знімка/підсумку стану каналу |
plugin-sdk/allowlist-config-edit |
Допоміжні засоби конфігурації списку дозволених | Допоміжні засоби редагування/читання конфігурації списку дозволених |
plugin-sdk/group-access |
Допоміжні засоби групового доступу | Спільні допоміжні засоби ухвалення рішень щодо групового доступу |
plugin-sdk/direct-dm |
Допоміжні засоби прямих DM | Спільні допоміжні засоби автентифікації/захисту прямих DM |
plugin-sdk/extension-shared |
Спільні допоміжні засоби розширення | Примітиви допоміжних засобів пасивного каналу/стану та зовнішнього проксі |
plugin-sdk/webhook-targets |
Допоміжні засоби цілей Webhook | Реєстр цілей Webhook і допоміжні засоби встановлення маршрутів |
plugin-sdk/webhook-path |
Допоміжні засоби шляху Webhook | Допоміжні засоби нормалізації шляху Webhook |
plugin-sdk/web-media |
Спільні допоміжні засоби вебмедіа | Допоміжні засоби завантаження віддалених/локальних медіа |
plugin-sdk/zod |
Повторний експорт Zod | Повторно експортований zod для споживачів SDK Plugin |
plugin-sdk/memory-core |
Вбудовані допоміжні засоби memory-core | Поверхня допоміжних засобів менеджера пам'яті/конфігурації/файлів/CLI |
plugin-sdk/memory-core-engine-runtime |
Фасад середовища виконання рушія пам'яті | Фасад середовища виконання індексу/пошуку пам'яті |
plugin-sdk/memory-core-host-engine-foundation |
Базовий рушій хоста пам'яті | Експорти базового рушія хоста пам'яті |
plugin-sdk/memory-core-host-engine-embeddings |
Рушій вбудовувань хоста пам'яті | Контракти вбудовувань пам'яті, доступ до реєстру, локальний провайдер і загальні допоміжні засоби пакетної/віддаленої обробки; конкретні віддалені провайдери живуть у Plugin, які ними володіють |
plugin-sdk/memory-core-host-engine-qmd |
Рушій QMD хоста пам'яті | Експорти рушія QMD хоста пам'яті |
plugin-sdk/memory-core-host-engine-storage |
Рушій сховища хоста пам'яті | Експорти рушія сховища хоста пам'яті |
plugin-sdk/memory-core-host-multimodal |
Мультимодальні допоміжні засоби хоста пам'яті | Мультимодальні допоміжні засоби хоста пам'яті |
plugin-sdk/memory-core-host-query |
Допоміжні засоби запитів хоста пам'яті | Допоміжні засоби запитів хоста пам'яті |
plugin-sdk/memory-core-host-secret |
Допоміжні засоби секретів хоста пам'яті | Допоміжні засоби секретів хоста пам'яті |
plugin-sdk/memory-core-host-events |
Допоміжні засоби журналу подій хоста пам'яті | Допоміжні засоби журналу подій хоста пам'яті |
plugin-sdk/memory-core-host-status |
Допоміжні засоби стану хоста пам'яті | Допоміжні засоби стану хоста пам'яті |
plugin-sdk/memory-core-host-runtime-cli |
Середовище виконання CLI хоста пам'яті | Допоміжні засоби середовища виконання CLI хоста пам'яті |
plugin-sdk/memory-core-host-runtime-core |
Основне середовище виконання хоста пам'яті | Допоміжні засоби основного середовища виконання хоста пам'яті |
plugin-sdk/memory-core-host-runtime-files |
Допоміжні засоби файлів/середовища виконання хоста пам'яті | Допоміжні засоби файлів/середовища виконання хоста пам'яті |
plugin-sdk/memory-host-core |
Псевдонім основного середовища виконання хоста пам'яті | Нейтральний щодо постачальника псевдонім для допоміжних засобів основного середовища виконання хоста пам'яті |
plugin-sdk/memory-host-events |
Псевдонім журналу подій хоста пам'яті | Нейтральний щодо постачальника псевдонім для допоміжних засобів журналу подій хоста пам'яті |
plugin-sdk/memory-host-files |
Псевдонім файлів/середовища виконання хоста пам'яті | Нейтральний щодо постачальника псевдонім для допоміжних засобів файлів/середовища виконання хоста пам'яті |
plugin-sdk/memory-host-markdown |
Керовані допоміжні засоби Markdown | Спільні допоміжні засоби керованого Markdown для Plugin, суміжних із пам'яттю |
plugin-sdk/memory-host-search |
Фасад пошуку Active Memory | Лінивий фасад середовища виконання менеджера пошуку активної пам'яті |
plugin-sdk/memory-host-status |
Псевдонім стану хоста пам'яті | Нейтральний щодо постачальника псевдонім для допоміжних засобів стану хоста пам'яті |
plugin-sdk/testing |
Тестові утиліти | Застарілий широкий барель сумісності; віддавайте перевагу спеціалізованим тестовим підшляхам, як-от plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env і plugin-sdk/test-fixtures |
Ця таблиця навмисно містить спільну підмножину для міграції, а не повну
поверхню SDK. Повний список із понад 200 точок входу міститься в
scripts/lib/plugin-sdk-entrypoints.json.
Зарезервовані допоміжні шви вбудованих plugin вилучено з публічної карти
експорту SDK, за винятком явно задокументованих фасадів сумісності, таких як
застарілий shim plugin-sdk/discord, збережений для опублікованого пакета
@openclaw/[email protected]. Допоміжні засоби, специфічні для власника,
містяться всередині пакета plugin-власника; спільна поведінка хоста має
переходити через загальні контракти SDK, як-от plugin-sdk/gateway-runtime,
plugin-sdk/security-runtime і plugin-sdk/plugin-config-runtime.
Використовуйте найвужчий імпорт, що відповідає завданню. Якщо не можете знайти
експорт, перевірте вихідний код у src/plugin-sdk/ або запитайте
супровідників, який загальний контракт має ним володіти.
Активні застарівання
Вужчі застарівання, що застосовуються до SDK plugin, контракту провайдера, runtime-поверхні та маніфесту. Кожне з них усе ще працює сьогодні, але буде видалене в майбутньому мажорному випуску. Запис під кожним пунктом зіставляє старий API з його канонічною заміною.
Допоміжні побудовники command-auth → command-status
Старе (openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.
Нове (openclaw/plugin-sdk/command-status): ті самі сигнатури, ті самі
експорти - просто імпортовані з вужчого підшляху. command-auth
реекспортує їх як заглушки сумісності.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";
// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Допоміжні засоби gating для згадок → resolveInboundMentionDecision
Старе: resolveInboundMentionRequirement({ facts, policy }) і
shouldDropInboundForMention(...) з
openclaw/plugin-sdk/channel-inbound або
openclaw/plugin-sdk/channel-mention-gating.
Нове: resolveInboundMentionDecision({ facts, policy }) - повертає
єдиний об'єкт рішення замість двох окремих викликів.
Нижчі channel plugins (Slack, Discord, Matrix, MS Teams) уже перейшли.
Shim runtime каналу та допоміжні засоби дій каналу
openclaw/plugin-sdk/channel-runtime є shim сумісності для старіших
channel plugins. Не імпортуйте його з нового коду; використовуйте
openclaw/plugin-sdk/channel-runtime-context для реєстрації runtime
об'єктів.
Допоміжні засоби channelActions* у openclaw/plugin-sdk/channel-actions
застаріли разом із сирими експортами канальних "actions". Натомість
надавайте можливості через семантичну поверхню presentation - channel plugins
оголошують, що вони рендерять (картки, кнопки, селекти), а не які сирі
назви дій вони приймають.
Допоміжний tool() провайдера вебпошуку → createTool() у plugin
Старе: фабрика tool() з openclaw/plugin-sdk/provider-web-search.
Нове: реалізуйте createTool(...) безпосередньо в provider plugin.
OpenClaw більше не потребує допоміжного засобу SDK для реєстрації обгортки
інструмента.
Відкритотекстові конверти каналів → BodyForAgent
Старе: formatInboundEnvelope(...) (і
ChannelMessageForAgent.channelEnvelope) для побудови плоского
відкритотекстового prompt-конверта з вхідних повідомлень каналу.
Нове: BodyForAgent плюс структуровані блоки контексту користувача.
Channel plugins додають метадані маршрутизації (тред, тему, відповідь-на,
реакції) як типізовані поля замість конкатенації їх у prompt-рядок.
Допоміжний засіб formatAgentEnvelope(...) усе ще підтримується для
синтезованих конвертів, спрямованих до assistant, але вхідні відкритотекстові
конверти поступово виводяться з використання.
Зачеплені області: inbound_claim, message_received і будь-який
власний channel plugin, який постобробляв текст channelEnvelope.
Типи виявлення провайдерів → типи каталогу провайдерів
Чотири псевдоніми типів виявлення тепер є тонкими обгортками над типами епохи каталогу:
| Старий псевдонім | Новий тип |
|---|---|
ProviderDiscoveryOrder |
ProviderCatalogOrder |
ProviderDiscoveryContext |
ProviderCatalogContext |
ProviderDiscoveryResult |
ProviderCatalogResult |
ProviderPluginDiscovery |
ProviderPluginCatalog |
Плюс застарілий статичний набір ProviderCapabilities - provider plugins
мають використовувати явні хуки провайдера, як-от buildReplayPolicy,
normalizeToolSchemas і wrapStreamFn, а не статичний об'єкт.
Хуки політики мислення → resolveThinkingProfile
Старе (три окремі хуки в ProviderThinkingPolicy):
isBinaryThinking(ctx), supportsXHighThinking(ctx) і
resolveDefaultThinkingLevel(ctx).
Нове: єдиний resolveThinkingProfile(ctx), який повертає
ProviderThinkingProfile з канонічним id, необов'язковим label і
ранжованим списком рівнів. OpenClaw автоматично понижує застарілі збережені
значення за рангом профілю.
Реалізуйте один хук замість трьох. Застарілі хуки продовжують працювати протягом вікна застарівання, але не компонуються з результатом профілю.
Fallback зовнішнього OAuth-провайдера → contracts.externalAuthProviders
Старе: реалізація resolveExternalOAuthProfiles(...) без
оголошення провайдера в маніфесті plugin.
Нове: оголосіть contracts.externalAuthProviders у маніфесті plugin
і реалізуйте resolveExternalAuthProfiles(...). Старий шлях "auth
fallback" виводить попередження під час runtime і буде видалений.
{
"contracts": {
"externalAuthProviders": ["anthropic", "openai"]
}
}
Пошук env-var провайдера → setup.providers[].envVars
Старе поле маніфесту: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.
Нове: віддзеркальте той самий пошук env-var у setup.providers[].envVars
у маніфесті. Це консолідує env-метадані налаштування/статусу в одному
місці та уникає запуску runtime plugin лише для відповіді на пошуки
env-var.
providerAuthEnvVars лишається підтримуваним через адаптер сумісності,
доки не закриється вікно застарівання.
Реєстрація memory plugin → registerMemoryCapability
Старе: три окремі виклики -
api.registerMemoryPromptSection(...),
api.registerMemoryFlushPlan(...),
api.registerMemoryRuntime(...).
Нове: один виклик в API memory-state -
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).
Ті самі слоти, єдиний виклик реєстрації. Адитивні допоміжні засоби пам'яті
(registerMemoryPromptSupplement, registerMemoryCorpusSupplement,
registerMemoryEmbeddingProvider) не зачеплені.
Типи повідомлень сесій subagent перейменовано
Два застарілі псевдоніми типів усе ще експортуються з src/plugins/runtime/types.ts:
| Старе | Нове |
|---|---|
SubagentReadSessionParams |
SubagentGetSessionMessagesParams |
SubagentReadSessionResult |
SubagentGetSessionMessagesResult |
Метод runtime readSession застарів на користь
getSessionMessages. Та сама сигнатура; старий метод викликає
новий.
runtime.tasks.flow → runtime.tasks.managedFlows
Старе: runtime.tasks.flow (в однині) повертав live task-flow accessor.
Нове: runtime.tasks.managedFlows зберігає managed runtime мутацій
TaskFlow для plugins, які створюють, оновлюють, скасовують або запускають
дочірні задачі з flow. Використовуйте runtime.tasks.flows, коли plugin
потребує лише читання на основі DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Вбудовані фабрики extension → middleware результатів інструментів agent
Розглянуто вище в "Як мігрувати → Перенесіть Pi extensions результатів
інструментів на middleware". Включено тут для повноти: видалений шлях лише
для Pi api.registerEmbeddedExtensionFactory(...) замінено на
api.registerAgentToolResultMiddleware(...) з явним списком runtime
у contracts.agentToolResultMiddleware.
Псевдонім OpenClawSchemaType → OpenClawConfig
OpenClawSchemaType, реекспортований з openclaw/plugin-sdk, тепер є
однорядковим псевдонімом для OpenClawConfig. Надавайте перевагу
канонічній назві.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Графік видалення
| Коли | Що відбувається |
|---|---|
| Зараз | Застарілі поверхні виводять попередження runtime |
| Наступний мажорний випуск | Застарілі поверхні буде видалено; plugins, які все ще їх використовують, завершаться помилкою |
Усі core plugins уже мігровано. Зовнішні plugins мають мігрувати до наступного мажорного випуску.
Тимчасове приглушення попереджень
Установіть ці змінні середовища, поки працюєте над міграцією:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Це тимчасовий аварійний вихід, а не постійне рішення.
Пов'язане
- Початок роботи - створіть свій перший plugin
- Огляд SDK - повна довідка імпортів підшляхів
- Channel Plugins - створення channel plugins
- Provider Plugins - створення provider plugins
- Внутрішній устрій Plugin - глибокий огляд архітектури
- Маніфест Plugin - довідка схеми маніфесту