Перейти до основного вмісту

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.

OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури plugin із сфокусованими, задокументованими імпортами. Якщо ваш plugin було створено до нової архітектури, цей посібник допоможе вам виконати міграцію.

Що змінюється

Стара система plugin надавала дві широко відкриті поверхні, які дозволяли plugin імпортувати все потрібне з однієї точки входу:
  • openclaw/plugin-sdk/compat - один імпорт, який повторно експортував десятки допоміжних функцій. Його було запроваджено, щоб старі hook-based plugin продовжували працювати, поки будувалася нова архітектура plugin.
  • openclaw/plugin-sdk/infra-runtime - широкий barrel допоміжних runtime-функцій, який змішував системні події, стан heartbeat, черги доставлення, допоміжні функції fetch/proxy, допоміжні функції для файлів, типи схвалення та непов’язані утиліти.
  • openclaw/plugin-sdk/config-runtime - широкий barrel сумісності конфігурації, який досі містить застарілі прямі допоміжні функції завантаження/запису протягом вікна міграції.
  • openclaw/extension-api - міст, який давав plugin прямий доступ до host-side допоміжних функцій, як-от вбудований agent runner.
  • api.registerEmbeddedExtensionFactory(...) - видалений bundled extension hook лише для Pi, який міг спостерігати події embedded-runner, такі як tool_result.
Широкі поверхні імпорту тепер застарілі. Вони досі працюють у runtime, але нові plugin не повинні їх використовувати, а наявні plugin мають виконати міграцію до того, як наступний major release їх видалить. API реєстрації embedded extension factory лише для Pi було видалено; натомість використовуйте middleware для tool-result. OpenClaw не видаляє і не переінтерпретовує задокументовану поведінку plugin у тій самій зміні, яка запроваджує заміну. Зміни контракту, що порушують сумісність, спочатку мають пройти через адаптер сумісності, діагностику, документацію та вікно застарівання. Це стосується імпортів SDK, полів manifest, setup API, hooks і runtime-поведінки реєстрації.
Шар зворотної сумісності буде видалено в майбутньому major release. Plugin, які досі імпортують із цих поверхонь, перестануть працювати, коли це станеться. Реєстрації embedded extension factory лише для Pi вже більше не завантажуються.

Чому це змінилося

Старий підхід спричиняв проблеми:
  • Повільний запуск - імпорт однієї допоміжної функції завантажував десятки непов’язаних модулів
  • Циклічні залежності - широкі повторні експорти спрощували створення циклів імпорту
  • Нечітка поверхня API - не було способу визначити, які експорти стабільні, а які внутрішні
Сучасний plugin SDK це виправляє: кожен шлях імпорту (openclaw/plugin-sdk/\<subpath\>) є невеликим самодостатнім модулем із чітким призначенням і задокументованим контрактом. Застарілі provider convenience seams для bundled channels також видалено. Channel-branded helper seams були приватними скороченнями mono-repo, а не стабільними контрактами plugin. Натомість використовуйте вузькі generic SDK subpaths. Усередині bundled plugin workspace тримайте provider-owned допоміжні функції у власному api.ts або runtime-api.ts цього plugin. Поточні приклади bundled provider:
  • Anthropic зберігає специфічні для Claude stream helper у власному seam api.ts / contract-api.ts
  • OpenAI зберігає provider builders, default-model helpers і realtime provider builders у власному api.ts
  • OpenRouter зберігає provider builder і onboarding/config helpers у власному api.ts

План міграції Talk і realtime voice

Код realtime voice, телефонії, зустрічей і browser Talk переходить від surface-local обліку turn до спільного Talk session controller, що експортується з openclaw/plugin-sdk/realtime-voice. Новий controller володіє спільним конвертом подій Talk, станом active turn, станом capture, станом output-audio, нещодавньою історією подій і відхиленням stale-turn. Provider plugins мають і надалі володіти vendor-specific realtime sessions; surface plugins мають і надалі володіти capture, playback, особливостями телефонії та зустрічей. Ця міграція Talk навмисно є breaking-clean:
  1. Залишити спільні controller/runtime primitives у plugin-sdk/realtime-voice.
  2. Перевести bundled surfaces на спільний controller: browser relay, managed-room handoff, voice-call realtime, voice-call streaming STT, Google Meet realtime і native push-to-talk.
  3. Замінити старі сімейства Talk RPC на фінальні API talk.session.* і talk.client.*.
  4. Оголосити один live Talk event channel у Gateway hello-ok.features.events: talk.event.
  5. Видалити старий realtime HTTP endpoint і будь-який шлях request-time instruction override.
Новий код не повинен викликати createTalkEventSequencer(...) напряму, якщо він не реалізує низькорівневий adapter або test fixture. Надавайте перевагу спільному controller, щоб turn-scoped events не могли надсилатися без turn id, stale turnEnd / turnCancel виклики не могли очистити новіший active turn, а події життєвого циклу output-audio залишалися узгодженими в телефонії, зустрічах, browser relay, managed-room handoff і native Talk clients. Цільова форма публічного 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: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
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 поверхнею для gateway-relay realtime, gateway-relay transcription і managed-room native STT/TTS sessions. Застарілі конфігурації, які розміщували realtime selectors поруч із talk.provider / talk.providers, слід виправити за допомогою openclaw doctor --fix; runtime Talk не переінтерпретовує speech/TTS provider config як realtime provider config. Підтримувані комбінації talk.session.create навмисно нечисленні:
РежимTransportBrainВласникПримітки
realtimegateway-relayagent-consultGatewayFull-duplex provider audio передається через Gateway; tool calls маршрутизуються через agent-consult tool.
transcriptiongateway-relaynoneGatewayЛише streaming STT; callers надсилають input audio й отримують transcript events.
stt-ttsmanaged-roomagent-consultNative/client roomКімнати в стилі push-to-talk і walkie-talkie, де client володіє capture/playback, а Gateway володіє turn state.
stt-ttsmanaged-roomdirect-toolsNative/client roomAdmin-only room mode для довірених first-party surfaces, які виконують Gateway tool actions напряму.
Мапа видалених методів:
СтарийНовий
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput or talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
Уніфікований словник керування також навмисно вузький:
МетодЗастосовується доКонтракт
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayДодати base64 PCM audio chunk до provider session, що належить тому самому Gateway connection.
talk.session.startTurnstt-tts/managed-roomПочати managed-room user turn.
talk.session.endTurnstt-tts/managed-roomЗавершити active turn після stale-turn validation.
talk.session.cancelTurnусі Gateway-owned sessionsСкасувати active capture/provider/agent/TTS work для turn.
talk.session.cancelOutputrealtime/gateway-relayЗупинити assistant audio output без обов’язкового завершення user turn.
talk.session.submitToolResultrealtime/gateway-relayЗавершити provider tool call, згенерований relay; передайте options.willContinue для interim output або options.suppressResponse, щоб задовольнити call без ще однієї assistant response.
talk.session.closeусі unified sessionsЗупинити relay sessions або відкликати managed-room state, потім забути unified session id.
Не додавайте спеціальні випадки для провайдерів або платформ у core, щоб це запрацювало. Core відповідає за семантику сесії Talk. Plugin провайдерів відповідають за налаштування сесій постачальників. Voice-call і Google Meet відповідають за адаптери телефонії/зустрічей. Browser і native apps відповідають за UX захоплення/відтворення на пристрої.

Політика сумісності

Для зовнішніх Plugin робота із сумісністю виконується в такому порядку:
  1. додати новий контракт
  2. зберегти стару поведінку, під’єднану через адаптер сумісності
  3. видати діагностику або попередження, що називає старий шлях і заміну
  4. покрити обидва шляхи тестами
  5. задокументувати застарівання та шлях міграції
  6. видаляти лише після оголошеного вікна міграції, зазвичай у major-релізі
Мейнтейнери можуть перевірити поточну чергу міграції за допомогою pnpm plugins:boundary-report. Використовуйте pnpm plugins:boundary-report:summary для стислих підрахунків, --owner <id> для одного Plugin або власника сумісності, і pnpm plugins:boundary-report:ci, коли CI-гейт має падати через прострочені записи сумісності, міжвласницькі зарезервовані імпорти SDK або невикористані зарезервовані підшляхи SDK. Звіт групує застарілі записи сумісності за датою видалення, підраховує локальні посилання в коді/документації, показує міжвласницькі зарезервовані імпорти SDK і підсумовує приватний міст SDK memory-host, щоб очищення сумісності залишалося явним, а не спиралося на разові пошуки. Зарезервовані підшляхи SDK повинні мати відстежуване використання власниками; невикористані зарезервовані експорти helper слід видаляти з публічного SDK. Якщо поле manifest усе ще приймається, автори Plugin можуть продовжувати його використовувати, доки документація й діагностика не скажуть інакше. Новий код має віддавати перевагу задокументованій заміні, але наявні Plugin не повинні ламатися під час звичайних minor-релізів.

Як мігрувати

1

Мігруйте helper для завантаження/запису runtime config

Вбудовані Plugin мають припинити викликати api.runtime.config.loadConfig() і api.runtime.config.writeConfigFile(...) напряму. Віддавайте перевагу config, який уже було передано в активний шлях виклику. Довгоживучі handlers, яким потрібен поточний знімок процесу, можуть використовувати api.runtime.config.current(). Довгоживучі agent tools мають використовувати ctx.getRuntimeConfig() із контексту tool всередині execute, щоб tool, створений до запису config, усе ще бачив оновлений runtime config.Записи config мають проходити через транзакційні helpers і вибирати політику після запису:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Використовуйте afterWrite: { mode: "restart", reason: "..." }, коли викликачу відомо, що зміна потребує чистого перезапуску gateway, і afterWrite: { mode: "none", reason: "..." } лише коли викликач відповідає за подальшу дію й навмисно хоче придушити reload planner. Результати mutation містять типізований підсумок followUp для тестів і логування; gateway залишається відповідальним за застосування або планування перезапуску. loadConfig і writeConfigFile залишаються застарілими helpers сумісності для зовнішніх Plugin протягом вікна міграції й один раз попереджають із кодом сумісності runtime-config-load-write. Вбудовані Plugin і runtime-код репозиторію захищені scanner guardrails у pnpm check:deprecated-api-usage і pnpm check:no-runtime-action-load-config: нове production-використання в Plugin одразу падає, прямі записи config падають, методи gateway server мають використовувати runtime snapshot запиту, runtime helpers для channel send/action/client мають отримувати config зі своєї boundary, а довгоживучі runtime modules мають нуль дозволених ambient-викликів loadConfig().Новий код Plugin також має уникати імпорту широкого compatibility barrel openclaw/plugin-sdk/config-runtime. Використовуйте вузький підшлях SDK, що відповідає задачі:
ПотребаІмпорт
Типи config, як-от OpenClawConfigopenclaw/plugin-sdk/config-contracts
Assertions для вже завантаженого config і пошук config для plugin-entryopenclaw/plugin-sdk/plugin-config-runtime
Читання поточного runtime snapshotopenclaw/plugin-sdk/runtime-config-snapshot
Записи configopenclaw/plugin-sdk/config-mutation
Helpers session storeopenclaw/plugin-sdk/session-store-runtime
Markdown table configopenclaw/plugin-sdk/markdown-table-runtime
Runtime helpers для group policyopenclaw/plugin-sdk/runtime-group-policy
Розв’язання secret inputopenclaw/plugin-sdk/secret-input-runtime
Перевизначення model/sessionopenclaw/plugin-sdk/model-session-runtime
Вбудовані Plugin і їхні тести захищені сканером від широкого barrel, щоб імпорти й mocks залишалися локальними до потрібної поведінки. Широкий barrel усе ще існує для зовнішньої сумісності, але новий код не має залежати від нього.
2

Мігруйте Pi tool-result extensions до middleware

Вбудовані Plugin мають замінити Pi-only handlers результатів tool api.registerEmbeddedExtensionFactory(...) на runtime-neutral middleware.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["pi", "codex"],
});
Одночасно оновіть manifest Plugin:
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"]
  }
}
Зовнішні Plugin не можуть реєструвати tool-result middleware, бо воно може переписати high-trust вихідні дані tool до того, як їх побачить модель.
3

Мігруйте approval-native handlers до capability facts

Channel Plugin із підтримкою approval тепер відкривають native approval behavior через approvalCapability.nativeRuntime плюс спільний runtime-context registry.Ключові зміни:
  • Замініть approvalCapability.handler.loadRuntime(...) на approvalCapability.nativeRuntime
  • Перенесіть approval-specific auth/delivery зі старого wiring plugin.auth / plugin.approvals на approvalCapability
  • ChannelPlugin.approvals видалено з публічного контракту channel-plugin; перенесіть поля delivery/native/render на approvalCapability
  • plugin.auth залишається лише для потоків входу/виходу channel; approval auth hooks там більше не читаються core
  • Реєструйте runtime objects, якими володіє channel, як-от clients, tokens або Bolt apps, через openclaw/plugin-sdk/channel-runtime-context
  • Не надсилайте plugin-owned reroute notices з native approval handlers; core тепер відповідає за routed-elsewhere notices із фактичних delivery results
  • Передаючи channelRuntime у createChannelManager(...), надайте справжню surface createPluginRuntime().channel. Partial stubs відхиляються.
Див. /plugins/sdk-channel-plugins щодо поточного layout approval capability.
4

Перевірте fallback-поведінку 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, а натомість обробіть викинуту помилку.
5

Знайдіть застарілі імпорти

Знайдіть у своєму Plugin імпорти з будь-якої із застарілих surfaces:
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/
6

Замініть на сфокусовані імпорти

Кожен export зі старої surface відповідає певному сучасному шляху імпорту:
// 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";
Для host-side helpers використовуйте injected plugin runtime замість прямого імпорту:
// 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 });
Такий самий pattern застосовується до інших legacy bridge helpers:
Старий імпортСучасний еквівалент
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
session store helpersapi.runtime.agent.session.*
7

Замініть широкі імпорти infra-runtime

openclaw/plugin-sdk/infra-runtime усе ще існує для зовнішньої сумісності, але новий код має імпортувати сфокусовану surface helper, яка справді потрібна:
ПотребаІмпорт
Helpers system event queueopenclaw/plugin-sdk/system-event-runtime
Helpers Heartbeat wake, event і visibilityopenclaw/plugin-sdk/heartbeat-runtime
Pending delivery queue drainopenclaw/plugin-sdk/delivery-queue-runtime
Channel activity telemetryopenclaw/plugin-sdk/channel-activity-runtime
In-memory dedupe cachesopenclaw/plugin-sdk/dedupe-runtime
Helpers безпечних local-file/media pathsopenclaw/plugin-sdk/file-access-runtime
Dispatcher-aware fetchopenclaw/plugin-sdk/runtime-fetch
Helpers proxy і guarded fetchopenclaw/plugin-sdk/fetch-runtime
Типи SSRF dispatcher policyopenclaw/plugin-sdk/ssrf-dispatcher
Типи approval request/resolutionopenclaw/plugin-sdk/approval-runtime
Helpers approval reply payload і commandopenclaw/plugin-sdk/approval-reply-runtime
Helpers форматування помилокopenclaw/plugin-sdk/error-runtime
Очікування transport readinessopenclaw/plugin-sdk/transport-ready-runtime
Helpers secure tokenopenclaw/plugin-sdk/secure-random-runtime
Bounded async task concurrencyopenclaw/plugin-sdk/concurrency-runtime
Numeric coercionopenclaw/plugin-sdk/number-runtime
Process-local async lockopenclaw/plugin-sdk/async-lock-runtime
File locksopenclaw/plugin-sdk/file-lock
Вбудовані Plugin захищені сканером від infra-runtime, тому код репозиторію не може регресувати до широкого barrel.
8

Мігруйте helpers channel route

Новий код channel route має використовувати openclaw/plugin-sdk/channel-route. Старі назви route-key і comparable-target залишаються compatibility aliases протягом вікна міграції, але нові Plugin мають використовувати назви route, які прямо описують поведінку:
Стара допоміжна функціяСучасна допоміжна функція
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Сучасні допоміжні функції маршрутів узгоджено нормалізують { channel, to, accountId, threadId } для вбудованих схвалень, приглушення відповідей, дедуплікації вхідних повідомлень, доставки cron і маршрутизації сеансів. Якщо ваш плагін має власну граматику цілей, використовуйте resolveChannelRouteTargetWithParser(...), щоб адаптувати цей парсер до того самого контракту цілі маршруту.
9

Зберіть і протестуйте

pnpm build
pnpm test -- my-plugin/

Довідник шляхів імпорту

Шлях імпортуПризначенняКлючові експорти
plugin-sdk/plugin-entryКанонічний допоміжний засіб входу PlugindefinePluginEntry
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Застарілий псевдонім адаптера налаштуванняВикористовуйте plugin-sdk/setup-runtime
plugin-sdk/setup-toolsДопоміжні засоби інструментів налаштуванняformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreДопоміжні засоби для кількох облікових записівДопоміжні засоби списку облікових записів/конфігурації/шлюзу дій
plugin-sdk/account-idДопоміжні засоби account-idDEFAULT_ACCOUNT_ID, нормалізація 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Примітиви сполучення DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineПрефікс відповіді, набір тексту та зв’язування доставки джерелаcreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersФабрики адаптерів конфігурації та допоміжні засоби доступу DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaПобудовники схем конфігураціїСпільні примітиви схеми конфігурації каналу та лише універсальний побудовник
plugin-sdk/bundled-channel-config-schemaВбудовані схеми конфігураціїЛише вбудовані plugins, які підтримує OpenClaw; нові 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Розв’язання політики групи/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleДопоміжні засоби стану облікового запису та життєвого циклу потоку чернетокcreateAccountStatusSink, допоміжні засоби фіналізації попереднього перегляду чернетки
plugin-sdk/inbound-envelopeДопоміжні засоби вхідного конвертаСпільні допоміжні засоби маршруту + побудовника конверта
plugin-sdk/inbound-reply-dispatchДопоміжні засоби вхідних відповідейСпільні допоміжні засоби запису й диспетчеризації
plugin-sdk/messaging-targetsРозбір цілей повідомленьДопоміжні засоби розбору/зіставлення цілей
plugin-sdk/outbound-mediaДопоміжні засоби вихідних медіаСпільне завантаження вихідних медіа
plugin-sdk/outbound-send-depsДопоміжні засоби залежностей вихідного надсиланняЛегкий пошук resolveOutboundSendDep без імпорту повного outbound runtime
plugin-sdk/outbound-runtimeДопоміжні засоби outbound runtimeДопоміжні засоби вихідної доставки, делегата ідентичності/надсилання, сесії, форматування та планування payload
plugin-sdk/thread-bindings-runtimeДопоміжні засоби прив’язування потоківЖиттєвий цикл прив’язування потоків і допоміжні засоби адаптерів
plugin-sdk/agent-media-payloadЗастарілі допоміжні засоби payload медіаПобудовник payload медіа агента для застарілих макетів полів
plugin-sdk/channel-runtimeЗастаріла прокладка сумісностіЛише застарілі утиліти channel runtime
plugin-sdk/channel-send-resultТипи результатів надсиланняТипи результатів відповіді
plugin-sdk/runtime-storeПостійне сховище PlugincreatePluginRuntimeStore
plugin-sdk/runtimeШирокі допоміжні засоби runtimeДопоміжні засоби runtime/журналювання/резервного копіювання/встановлення Plugin
plugin-sdk/runtime-envВузькі допоміжні засоби env runtimeДопоміжні засоби logger/runtime env, тайм-ауту, повтору та backoff
plugin-sdk/plugin-runtimeСпільні допоміжні засоби runtime PluginДопоміжні засоби команд/хуків/http/інтерактивності Plugin
plugin-sdk/hook-runtimeДопоміжні засоби конвеєра хуківСпільні допоміжні засоби конвеєра Webhook/внутрішніх хуків
plugin-sdk/lazy-runtimeДопоміжні засоби lazy runtimecreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeДопоміжні засоби процесівСпільні допоміжні засоби exec
plugin-sdk/cli-runtimeДопоміжні засоби CLI runtimeФорматування команд, очікування, допоміжні засоби версій
plugin-sdk/gateway-runtimeДопоміжні засоби GatewayКлієнт Gateway, допоміжний засіб запуску готовності event loop і допоміжні засоби патчів стану каналу
plugin-sdk/config-runtimeЗастаріла прокладка сумісності конфігураціїНадавайте перевагу config-contracts, 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Допоміжні засоби auth затвердженняРозв’язання затверджувача, auth дії в тому самому чаті
plugin-sdk/approval-client-runtimeДопоміжні засоби клієнта затвердженняДопоміжні засоби нативного профілю/фільтра затвердження exec
plugin-sdk/approval-delivery-runtimeДопоміжні засоби доставки затвердженняНативні адаптери можливостей/доставки затвердження
plugin-sdk/approval-gateway-runtimeДопоміжні засоби approval gatewayСпільний допоміжний засіб розв’язання approval gateway
plugin-sdk/approval-handler-adapter-runtimeДопоміжні засоби адаптера затвердженняЛегкі допоміжні засоби завантаження нативного адаптера затвердження для гарячих entrypoints каналу
plugin-sdk/approval-handler-runtimeДопоміжні засоби обробника затвердженняШирші допоміжні засоби runtime обробника затвердження; надавайте перевагу вужчим adapter/gateway seam, коли їх достатньо
plugin-sdk/approval-native-runtimeДопоміжні засоби цілі затвердженняДопоміжні засоби нативної прив’язки цілі/облікового запису затвердження
plugin-sdk/approval-reply-runtimeДопоміжні засоби відповіді затвердженняДопоміжні засоби payload відповіді затвердження exec/Plugin
plugin-sdk/channel-runtime-contextДопоміжні засоби runtime-context каналуУніверсальні допоміжні засоби register/get/watch runtime-context каналу
plugin-sdk/security-runtimeДопоміжні засоби безпекиСпільні допоміжні засоби довіри, gating DM, обмежених коренем файлів/шляхів, зовнішнього вмісту та збирання секретів
plugin-sdk/ssrf-policyДопоміжні засоби політики SSRFДопоміжні засоби списку дозволених хостів і політики приватної мережі
plugin-sdk/ssrf-runtimeДопоміжні засоби SSRF runtimePinned-dispatcher, guarded 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Допоміжні засоби gating діагностикиisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeДопоміжні засоби форматування помилокformatUncaughtError, isApprovalNotFoundError, допоміжні засоби графа помилок
plugin-sdk/fetch-runtimeОбгорнуті допоміжні засоби fetch/proxyresolveFetch, допоміжні засоби proxy, допоміжні засоби опцій 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Допоміжні засоби gating команд і поверхні командresolveControlCommandGate, допоміжні засоби авторизації відправника, допоміжні засоби реєстру команд, зокрема форматування меню динамічних аргументів
plugin-sdk/command-statusРендерери стану/довідки командbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputРозбір введення секретівДопоміжні засоби введення секретів
plugin-sdk/webhook-ingressДопоміжні засоби запитів WebhookУтиліти цілей Webhook
plugin-sdk/webhook-request-guardsДопоміжні засоби guard тіла WebhookДопоміжні засоби читання/обмеження тіла запиту
plugin-sdk/reply-runtimeСпільний reply runtimeВхідна диспетчеризація, heartbeat, планувальник відповіді, chunking
plugin-sdk/reply-dispatch-runtimeВузькі допоміжні засоби диспетчеризації відповідейДопоміжні засоби фіналізації, диспетчеризації провайдера та міток розмов
plugin-sdk/reply-historyДопоміжні засоби історії відповідейbuildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
plugin-sdk/reply-referenceПланування посилань відповідіcreateReplyReferencePlanner
plugin-sdk/reply-chunkingДопоміжні засоби chunk відповідіДопоміжні засоби chunking тексту/markdown
plugin-sdk/session-store-runtimeДопоміжні засоби session storeДопоміжні засоби шляху сховища + updated-at
plugin-sdk/state-pathsДопоміжні засоби шляхів стануДопоміжні засоби каталогів стану й OAuth
plugin-sdk/routingДопоміжні засоби routing/session-keyresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, допоміжні засоби нормалізації session-key
plugin-sdk/status-helpersДопоміжні засоби стану каналуПобудовники зведення стану каналу/облікового запису, значення runtime-state за замовчуванням, допоміжні засоби метаданих проблем
plugin-sdk/target-resolver-runtimeДопоміжні засоби розв’язувача цілейСпільні допоміжні засоби розв’язувача цілей
plugin-sdk/string-normalization-runtimeДопоміжні засоби нормалізації рядківДопоміжні засоби нормалізації slug/рядків
plugin-sdk/request-urlДопоміжні засоби URL запитуВитягування рядкових URL із request-like вхідних даних
plugin-sdk/run-commandДопоміжні засоби команд із таймеромВиконавець команд із таймером і нормалізованими stdout/stderr
plugin-sdk/param-readersЗчитувачі параметрівСпільні зчитувачі параметрів інструментів/CLI
plugin-sdk/tool-payloadВидобування payload інструментаВидобування нормалізованих payload з об’єктів результатів інструментів
plugin-sdk/tool-sendВидобування надсилання інструментаВидобування канонічних полів цілі надсилання з аргументів інструмента
plugin-sdk/temp-pathДопоміжні засоби тимчасових шляхівСпільні допоміжні засоби для шляхів тимчасових завантажень
plugin-sdk/logging-coreДопоміжні засоби журналюванняДопоміжні засоби для логера підсистеми та редагування чутливих даних
plugin-sdk/markdown-table-runtimeДопоміжні засоби Markdown-таблицьДопоміжні засоби режиму Markdown-таблиць
plugin-sdk/reply-payloadТипи відповідей повідомленьТипи payload відповіді
plugin-sdk/provider-setupДобірні допоміжні засоби налаштування локального/self-hosted постачальникаДопоміжні засоби виявлення/налаштування self-hosted постачальника
plugin-sdk/self-hosted-provider-setupСфокусовані допоміжні засоби налаштування OpenAI-сумісного self-hosted постачальникаТі самі допоміжні засоби виявлення/налаштування self-hosted постачальника
plugin-sdk/provider-auth-runtimeДопоміжні засоби runtime-автентифікації постачальникаДопоміжні засоби runtime-визначення API-ключа
plugin-sdk/provider-auth-api-keyДопоміжні засоби налаштування API-ключа постачальникаДопоміжні засоби онбордингу/запису профілю API-ключа
plugin-sdk/provider-auth-resultДопоміжні засоби auth-result постачальникаСтандартний builder OAuth auth-result
plugin-sdk/provider-selection-runtimeДопоміжні засоби вибору постачальникаВибір налаштованого або автоматичного постачальника та об’єднання raw-конфігурації постачальника
plugin-sdk/provider-env-varsДопоміжні засоби env-var постачальникаДопоміжні засоби пошуку env-var автентифікації постачальника
plugin-sdk/provider-model-sharedСпільні допоміжні засоби моделі/відтворення постачальникаProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, спільні builders політик відтворення, допоміжні засоби endpoint постачальника та допоміжні засоби нормалізації model-id
plugin-sdk/provider-catalog-sharedСпільні допоміжні засоби каталогу постачальникаfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardПатчі онбордингу постачальникаДопоміжні засоби конфігурації онбордингу
plugin-sdk/provider-httpHTTP-допоміжні засоби постачальникаУніверсальні допоміжні засоби HTTP/endpoint capabilities постачальника, зокрема допоміжні засоби multipart-форм для транскрипції аудіо
plugin-sdk/provider-web-fetchДопоміжні засоби web-fetch постачальникаДопоміжні засоби реєстрації/кешу web-fetch постачальника
plugin-sdk/provider-web-search-config-contractДопоміжні засоби конфігурації web-search постачальникаВузькі допоміжні засоби конфігурації/облікових даних web-search для постачальників, яким не потрібне підключення ввімкнення Plugin
plugin-sdk/provider-web-search-contractДопоміжні засоби контракту web-search постачальникаВузькі допоміжні засоби контракту конфігурації/облікових даних web-search, як-от createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, а також scoped setters/getters облікових даних
plugin-sdk/provider-web-searchДопоміжні засоби web-search постачальникаДопоміжні засоби реєстрації/кешу/runtime web-search постачальника
plugin-sdk/provider-toolsДопоміжні засоби сумісності інструментів/схем постачальникаProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, а також очищення схем Gemini і діагностика
plugin-sdk/provider-usageДопоміжні засоби використання постачальникаfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage та інші допоміжні засоби використання постачальника
plugin-sdk/provider-streamДопоміжні засоби обгорток stream постачальникаProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, типи обгорток stream та спільні допоміжні засоби обгорток Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimeДопоміжні засоби transport постачальникаНативні допоміжні засоби transport постачальника, як-от захищений fetch, перетворення транспортних повідомлень і writable transport event streams
plugin-sdk/keyed-async-queueВпорядкована асинхронна чергаKeyedAsyncQueue
plugin-sdk/media-runtimeСпільні допоміжні засоби mediaДопоміжні засоби fetch/transform/store для media, визначення розмірів відео через ffprobe та builders payload для media
plugin-sdk/media-generation-runtimeСпільні допоміжні засоби генерації mediaСпільні допоміжні засоби failover, вибір кандидатів і повідомлення про відсутні моделі для генерації зображень/відео/музики
plugin-sdk/media-understandingДопоміжні засоби розуміння mediaТипи постачальників розуміння media, а також provider-facing експорти допоміжних засобів для зображень/аудіо
plugin-sdk/text-runtimeЗастарілий широкий експорт сумісності текстуВикористовуйте string-coerce-runtime, text-chunking, text-utility-runtime і logging-core
plugin-sdk/text-chunkingДопоміжні засоби розбиття текстуДопоміжний засіб розбиття вихідного тексту
plugin-sdk/speechДопоміжні засоби мовленняТипи постачальників мовлення, а також provider-facing допоміжні засоби директив, реєстру, валідації та OpenAI-сумісний builder TTS
plugin-sdk/speech-coreСпільне ядро мовленняТипи постачальників мовлення, реєстр, директиви, нормалізація
plugin-sdk/realtime-transcriptionДопоміжні засоби транскрипції в реальному часіТипи постачальників, допоміжні засоби реєстру та спільний допоміжний засіб WebSocket-сесії
plugin-sdk/realtime-voiceДопоміжні засоби голосу в реальному часіТипи постачальників, допоміжні засоби реєстру/визначення, допоміжні засоби bridge-сесій, спільні черги talk-back агента, стан транскриптів/подій, придушення відлуння та допоміжні засоби швидкого звернення до контексту
plugin-sdk/image-generationДопоміжні засоби генерації зображеньТипи постачальників генерації зображень, а також допоміжні засоби image asset/data URL і OpenAI-сумісний builder постачальника зображень
plugin-sdk/image-generation-coreСпільне ядро генерації зображеньТипи генерації зображень, failover, auth і допоміжні засоби реєстру
plugin-sdk/music-generationДопоміжні засоби генерації музикиТипи постачальника/запиту/результату генерації музики
plugin-sdk/music-generation-coreСпільне ядро генерації музикиТипи генерації музики, допоміжні засоби failover, пошук постачальника та parsing model-ref
plugin-sdk/video-generationДопоміжні засоби генерації відеоТипи постачальника/запиту/результату генерації відео
plugin-sdk/video-generation-coreСпільне ядро генерації відеоТипи генерації відео, допоміжні засоби failover, пошук постачальника та parsing model-ref
plugin-sdk/interactive-runtimeДопоміжні засоби інтерактивної відповідіНормалізація/скорочення payload інтерактивної відповіді
plugin-sdk/channel-config-primitivesПримітиви конфігурації каналуВузькі примітиви schema конфігурації каналу
plugin-sdk/channel-config-writesДопоміжні засоби запису конфігурації каналуДопоміжні засоби авторизації запису конфігурації каналу
plugin-sdk/channel-plugin-commonСпільна преамбула каналуСпільні експорти преамбули Plugin каналу
plugin-sdk/channel-statusДопоміжні засоби статусу каналуСпільні допоміжні засоби snapshot/summary статусу каналу
plugin-sdk/allowlist-config-editДопоміжні засоби конфігурації allowlistДопоміжні засоби редагування/читання конфігурації allowlist
plugin-sdk/group-accessДопоміжні засоби доступу групСпільні допоміжні засоби ухвалення рішень щодо доступу груп
plugin-sdk/direct-dmДопоміжні засоби Direct-DMСпільні допоміжні засоби auth/guard для Direct-DM
plugin-sdk/extension-sharedСпільні допоміжні засоби extensionПримітиви допоміжних засобів passive-channel/status і ambient proxy
plugin-sdk/webhook-targetsДопоміжні засоби цілей WebhookРеєстр цілей Webhook і допоміжні засоби встановлення маршрутів
plugin-sdk/webhook-pathЗастарілий alias шляху WebhookВикористовуйте plugin-sdk/webhook-ingress
plugin-sdk/web-mediaСпільні допоміжні засоби web mediaДопоміжні засоби завантаження віддалених/локальних media
plugin-sdk/zodЗастарілий re-export сумісності ZodІмпортуйте zod з zod напряму
plugin-sdk/memory-coreBundled допоміжні засоби memory-coreПоверхня допоміжних засобів менеджера пам’яті/конфігурації/файлів/CLI
plugin-sdk/memory-core-engine-runtimeRuntime-фасад memory engineRuntime-фасад індексу/пошуку пам’яті
plugin-sdk/memory-core-host-engine-foundationFoundation engine хоста пам’ятіЕкспорти foundation engine хоста пам’яті
plugin-sdk/memory-core-host-engine-embeddingsEmbedding engine хоста пам’ятіКонтракти embeddings пам’яті, доступ до реєстру, локальний постачальник і універсальні batch/remote допоміжні засоби; конкретні віддалені постачальники живуть у своїх Plugin-власниках
plugin-sdk/memory-core-host-engine-qmdQMD engine хоста пам’ятіЕкспорти QMD engine хоста пам’яті
plugin-sdk/memory-core-host-engine-storageStorage engine хоста пам’ятіЕкспорти storage engine хоста пам’яті
plugin-sdk/memory-core-host-multimodalДопоміжні засоби multimodal хоста пам’ятіДопоміжні засоби multimodal хоста пам’яті
plugin-sdk/memory-core-host-queryДопоміжні засоби query хоста пам’ятіДопоміжні засоби query хоста пам’яті
plugin-sdk/memory-core-host-secretДопоміжні засоби secret хоста пам’ятіДопоміжні засоби secret хоста пам’яті
plugin-sdk/memory-core-host-eventsЗастарілий alias подій пам’ятіВикористовуйте plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusДопоміжні засоби статусу хоста пам’ятіДопоміжні засоби статусу хоста пам’яті
plugin-sdk/memory-core-host-runtime-cliCLI runtime хоста пам’ятіДопоміжні засоби CLI runtime хоста пам’яті
plugin-sdk/memory-core-host-runtime-coreCore runtime хоста пам’ятіДопоміжні засоби core runtime хоста пам’яті
plugin-sdk/memory-core-host-runtime-filesДопоміжні засоби file/runtime хоста пам’ятіДопоміжні засоби file/runtime хоста пам’яті
plugin-sdk/memory-host-coreAlias core runtime хоста пам’ятіVendor-neutral alias для допоміжних засобів core runtime хоста пам’яті
plugin-sdk/memory-host-eventsAlias event journal хоста пам’ятіVendor-neutral alias для допоміжних засобів event journal хоста пам’яті
plugin-sdk/memory-host-filesЗастарілий alias file/runtime пам’ятіВикористовуйте plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownДопоміжні засоби managed markdownСпільні допоміжні засоби managed-markdown для plugins, суміжних із пам’яттю
plugin-sdk/memory-host-searchФасад пошуку Active MemoryLazy runtime-фасад search-manager Active Memory
plugin-sdk/memory-host-statusЗастарілий alias статусу хоста пам’ятіВикористовуйте plugin-sdk/memory-core-host-status
plugin-sdk/testingТестові утилітиRepo-local застарілий barrel сумісності; використовуйте сфокусовані repo-local тестові subpaths, як-от plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env і plugin-sdk/test-fixtures
Ця таблиця навмисно містить спільну підмножину для міграції, а не всю поверхню SDK. Інвентар точки входу компілятора міститься в scripts/lib/plugin-sdk-entrypoints.json; експорти пакетів генеруються з публічної підмножини. Зарезервовані допоміжні шви вбудованих plugin виведено з публічної мапи експортів SDK, окрім явно задокументованих фасадів сумісності, як-от застарілий shim plugin-sdk/discord, залишений для опублікованого пакета @openclaw/discord@2026.3.13. Допоміжні засоби, специфічні для власника, містяться всередині пакета plugin-власника; спільну поведінку host слід проводити через загальні контракти SDK, як-от plugin-sdk/gateway-runtime, plugin-sdk/security-runtime і plugin-sdk/plugin-config-runtime. Використовуйте найвужчий імпорт, що відповідає завданню. Якщо не можете знайти експорт, перевірте джерело в src/plugin-sdk/ або запитайте maintainer, який загальний контракт має ним володіти.

Активні застаріння

Вужчі застаріння, що застосовуються в SDK plugin, контракті provider, runtime-поверхні та manifest. Кожне з них досі працює сьогодні, але буде видалене в майбутньому major-релізі. Запис під кожним пунктом зіставляє старий API з його канонічною заміною.
Старе (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Нове (openclaw/plugin-sdk/command-status): ті самі сигнатури, ті самі експорти - просто імпортовані з вужчого підшляху. command-auth реекспортує їх як compat stub-и.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Старе: 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) уже перейшли.
openclaw/plugin-sdk/channel-runtime є shim сумісності для старіших channel plugins. Не імпортуйте його з нового коду; використовуйте openclaw/plugin-sdk/channel-runtime-context для реєстрації runtime об’єктів.Допоміжні засоби channelActions* у openclaw/plugin-sdk/channel-actions застарілі разом із сирими channel-експортами “actions”. Натомість надавайте capabilities через семантичну поверхню presentation - channel plugins оголошують, що вони відтворюють (cards, buttons, selects), а не які сирі назви actions вони приймають.
Старе: фабрика tool() з openclaw/plugin-sdk/provider-web-search.Нове: реалізуйте createTool(...) безпосередньо на provider plugin. OpenClaw більше не потребує допоміжного засобу SDK для реєстрації tool wrapper.
Старе: formatInboundEnvelope(...)ChannelMessageForAgent.channelEnvelope) для побудови плаского plaintext prompt envelope з вхідних channel messages.Нове: BodyForAgent плюс структуровані блоки user-context. Channel plugins прикріплюють routing metadata (thread, topic, reply-to, reactions) як типізовані поля замість конкатенації їх у prompt string. Допоміжний formatAgentEnvelope(...) досі підтримується для синтезованих assistant-facing envelopes, але вхідні plaintext envelopes поступово виводяться.Зачеплені області: inbound_claim, message_received і будь-який користувацький channel plugin, що постобробляв текст channelEnvelope.
Чотири псевдоніми типів discovery тепер є тонкими обгортками над типами епохи catalog:
Старий псевдонімНовий тип
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Плюс застарілий статичний набір ProviderCapabilities - provider plugins мають використовувати явні provider hooks, як-от buildReplayPolicy, normalizeToolSchemas і wrapStreamFn, а не статичний об’єкт.
Старе (три окремі hooks на ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) і resolveDefaultThinkingLevel(ctx).Нове: один resolveThinkingProfile(ctx), який повертає ProviderThinkingProfile з канонічним id, необов’язковим label і ранжованим списком рівнів. OpenClaw автоматично понижує застарілі збережені значення за рангом profile.Реалізуйте один hook замість трьох. Застарілі hooks продовжують працювати протягом вікна застаріння, але не компонуються з результатом profile.
Старе: реалізація resolveExternalOAuthProfiles(...) без оголошення provider у manifest plugin.Нове: оголосіть contracts.externalAuthProviders у manifest plugin і реалізуйте resolveExternalAuthProfiles(...). Старий шлях “auth fallback” видає попередження під час runtime і буде видалений.
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Старе поле manifest: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Нове: віддзеркальте той самий пошук env-var у setup.providers[].envVars у manifest. Це консолідує metadata setup/status env в одному місці й уникає запуску plugin runtime лише для відповіді на env-var lookups.providerAuthEnvVars залишається підтримуваним через адаптер сумісності до закриття вікна застаріння.
Старе: три окремі виклики - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Нове: один виклик на API memory-state - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Ті самі slots, один виклик реєстрації. Додаткові memory helpers (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) не зачеплені.
Два застарілі псевдоніми типів досі експортуються з src/plugins/runtime/types.ts:
СтареНове
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
Runtime-метод readSession застарів на користь getSessionMessages. Та сама сигнатура; старий метод викликає новий.
Старе: runtime.tasks.flow (в однині) повертав live task-flow accessor.Нове: runtime.tasks.managedFlows зберігає managed TaskFlow mutation runtime для plugins, які створюють, оновлюють, скасовують або запускають дочірні tasks із flow. Використовуйте runtime.tasks.flows, коли plugin потрібні лише reads на основі DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Розглянуто в розділі “Як мігрувати → Міграція Pi tool-result extensions на middleware” вище. Додано тут для повноти: видалений шлях лише для Pi api.registerEmbeddedExtensionFactory(...) замінено на api.registerAgentToolResultMiddleware(...) з явним runtime list у contracts.agentToolResultMiddleware.
OpenClawSchemaType, реекспортований з openclaw/plugin-sdk, тепер є однорядковим псевдонімом для OpenClawConfig. Надавайте перевагу канонічній назві.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Застаріння рівня extension (усередині вбудованих channel/provider plugins у extensions/) відстежуються в їхніх власних barrel-файлах api.ts і runtime-api.ts. Вони не впливають на контракти сторонніх plugins і тут не перелічені. Якщо ви напряму споживаєте локальний barrel вбудованого plugin, прочитайте коментарі про застаріння в цьому barrel перед оновленням.

Графік видалення

КолиЩо відбувається
ЗаразЗастарілі поверхні видають runtime-попередження
Наступний major-релізЗастарілі поверхні буде видалено; plugins, що досі їх використовують, зазнають збою
Усі core plugins уже мігровано. Зовнішні plugins мають мігрувати до наступного major-релізу.

Тимчасове приглушення попереджень

Встановіть ці змінні середовища, поки працюєте над міграцією:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Це тимчасовий аварійний вихід, а не постійне рішення.

Пов’язане