Plugin maintainer reference
Миграция SDK плагина
OpenClaw заменил обширный слой обратной совместимости современной архитектурой плагинов, построенной на небольших специализированных импортах. Если ваш плагин появился до этого изменения, данное руководство поможет перевести его на текущие контракты.
Что изменилось
Раньше две чрезмерно широкие поверхности импорта позволяли плагинам получать доступ почти к чему угодно через единую точку входа:
openclaw/plugin-sdk/compat— повторно экспортировал десятки вспомогательных средств, чтобы старые плагины на основе перехватчиков продолжали работать во время создания новой архитектуры.openclaw/plugin-sdk/infra-runtime— широкий сводный модуль, объединявший системные события, состояние Heartbeat, очереди доставки, вспомогательные средства получения данных и прокси, средства работы с файлами, типы подтверждений и не связанные между собой утилиты.openclaw/plugin-sdk/config-runtime— широкий сводный модуль конфигурации, который в течение периода миграции всё ещё содержал устаревшие вспомогательные средства прямой загрузки и записи.openclaw/extension-api— мост, предоставлявший плагинам прямой доступ к вспомогательным средствам хоста, таким как встроенный механизм запуска агента.api.registerEmbeddedExtensionFactory(...)— удалённый перехватчик, предназначенный только для встроенного механизма запуска и отслеживавший его события, напримерtool_result. Вместо него используйте промежуточное ПО для результатов инструментов агента (см. Перенос расширений результатов инструментов встроенного механизма запуска в промежуточное ПО).
Эти поверхности устарели: они всё ещё работают, но новые плагины не должны
их использовать, а существующие плагины следует перенести до следующего основного выпуска,
в котором они будут удалены. registerEmbeddedExtensionFactory уже удалён;
устаревшие регистрации больше не загружаются.
OpenClaw не удаляет и не переосмысливает документированное поведение плагинов в том же изменении, в котором вводится замена. Изменения контрактов, нарушающие совместимость, сначала проходят через адаптер совместимости, диагностику, документацию и период устаревания. Это относится к импортам SDK, полям манифеста, API настройки, перехватчикам и поведению регистрации во время выполнения.
Причины
- Медленный запуск — импорт одного вспомогательного средства загружал десятки не связанных с ним модулей.
- Циклические зависимости — широкие повторные экспорты упрощали создание циклов импорта.
- Неясная поверхность API — невозможно было отличить стабильные экспорты от внутренних.
Теперь каждый openclaw/plugin-sdk/<subpath> представляет собой небольшой автономный модуль с
документированным контрактом.
Устаревшие вспомогательные интерфейсы провайдеров для встроенных каналов также удалены —
вспомогательные сокращения с названиями каналов были внутренним удобством монорепозитория, а не
стабильными контрактами плагинов. Вместо них используйте узкие универсальные подпути SDK. Внутри
рабочего пространства встроенного плагина храните принадлежащие провайдеру вспомогательные средства в собственном
api.ts или runtime-api.ts этого плагина:
- Anthropic хранит специфичные для Claude вспомогательные средства потоковой передачи в собственном интерфейсе
api.ts/contract-api.ts. - OpenAI хранит построители провайдера, вспомогательные средства модели по умолчанию и построители
провайдера реального времени в собственном
api.ts. - OpenRouter хранит построитель провайдера и вспомогательные средства первоначальной настройки и конфигурации в собственном
api.ts.
Политика совместимости
Работа по обеспечению совместимости внешних плагинов выполняется в следующем порядке:
- Добавить новый контракт.
- Сохранить прежнее поведение через адаптер совместимости.
- Вывести диагностику или предупреждение с указанием старого пути и его замены.
- Охватить оба пути тестами.
- Документировать устаревание и путь миграции.
- Удалить только после завершения объявленного периода миграции, обычно в основном выпуске.
Если поле манифеста по-прежнему принимается, продолжайте использовать его, пока документация и диагностика не укажут обратное. Новый код должен предпочитать документированную замену; существующие плагины не должны переставать работать при обычных дополнительных выпусках.
Проверьте текущую очередь миграции с помощью pnpm plugins:boundary-report:
| Флаг | Результат |
|---|---|
--summary (или pnpm plugins:boundary-report:summary) |
Краткие количества вместо полной детализации. |
--json |
Машиночитаемый отчёт. |
--owner <id> |
Фильтрация по одному плагину или владельцу совместимости. |
--fail-on-cross-owner |
Завершение с ненулевым кодом при импортах зарезервированного SDK между разными владельцами. |
--fail-on-eligible-compat |
Завершение с ненулевым кодом, если дата removeAfter устаревшей записи совместимости уже наступила. |
--fail-on-unclassified-unused-reserved |
Завершение с ненулевым кодом при наличии неиспользуемых зарезервированных прослоек SDK. |
pnpm plugins:boundary-report:ci запускается со всеми тремя флагами ошибок. Каждая
запись совместимости содержит явную дату removeAfter (а не расплывчатое указание «следующий
основной выпуск») — отчёт группирует устаревшие записи по этой дате, подсчитывает
локальные ссылки в коде и документации, выявляет импорты зарезервированного SDK между владельцами и
суммирует сведения о закрытом мосте SDK хоста памяти. Зарезервированные подпути SDK должны иметь
отслеживаемое использование владельцем; неиспользуемые зарезервированные экспорты следует удалить из публичного
SDK.
Как выполнить миграцию
Перенесите вспомогательные средства загрузки и записи конфигурации среды выполнения
Встроенные плагины должны прекратить прямые вызовы api.runtime.config.loadConfig() и
api.runtime.config.writeConfigFile(...). Предпочтительно использовать конфигурацию, уже
переданную в активный путь вызова. Долгоживущие обработчики, которым нужен
текущий снимок процесса, могут использовать api.runtime.config.current(). Долгоживущие
инструменты агента должны читать ctx.getRuntimeConfig() внутри execute, чтобы инструмент,
созданный до записи конфигурации, всё равно видел обновлённую конфигурацию.
Запись конфигурации выполняется через транзакционное вспомогательное средство с явной политикой после записи:
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. Встроенные плагины и код среды выполнения
репозитория защищены средствами pnpm check:deprecated-api-usage и
pnpm check:no-runtime-action-load-config: новое использование в рабочем коде плагина
немедленно завершается ошибкой, прямая запись конфигурации запрещена, методы сервера Gateway должны использовать
снимок среды выполнения запроса, вспомогательные средства отправки, действий и клиентов каналов среды выполнения
должны получать конфигурацию со своей границы, а в долгоживущих модулях среды выполнения
не допускаются никакие фоновые вызовы loadConfig().
В новом коде плагинов следует избегать широкого сводного модуля openclaw/plugin-sdk/config-runtime.
Используйте узкий подпуть, соответствующий задаче:
| Потребность | Импорт |
|---|---|
Типы конфигурации, такие как OpenClawConfig |
openclaw/plugin-sdk/config-contracts |
| Проверки уже загруженной конфигурации и поиск конфигурации точки входа плагина | openclaw/plugin-sdk/plugin-config-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 |
| Вспомогательные средства среды выполнения групповых политик | openclaw/plugin-sdk/runtime-group-policy |
| Разрешение ввода секретов | openclaw/plugin-sdk/secret-input-runtime |
| Переопределения моделей и сеансов | openclaw/plugin-sdk/model-session-runtime |
Встроенные плагины и их тесты защищены сканером от использования широкого сводного модуля, чтобы импорты и имитации оставались локальными для нужного поведения. Этот сводный модуль по-прежнему существует для совместимости с внешними плагинами, но новый код не должен от него зависеть.
Перенесите расширения результатов инструментов встроенного механизма запуска в промежуточное ПО
Встроенные плагины должны заменить обработчики результатов инструментов
api.registerEmbeddedExtensionFactory(...), предназначенные только для встроенного механизма запуска,
нейтральным к среде выполнения промежуточным ПО:
// Динамические инструменты среды выполнения OpenClaw и Codexapi.registerAgentToolResultMiddleware(async (event) => { return compactToolResult(event);}, { runtimes: ["openclaw", "codex"],});Одновременно обновите манифест плагина:
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"] }}Установленные плагины также могут регистрировать промежуточное ПО результатов инструментов, если оно явно
включено и каждая целевая среда выполнения объявлена в
contracts.agentToolResultMiddleware. Регистрации промежуточного ПО установленных плагинов
без такого объявления отклоняются.
Перенесите собственные обработчики подтверждений на сведения о возможностях
Плагины каналов с поддержкой подтверждений предоставляют собственное поведение подтверждений через
approvalCapability.nativeRuntime и общий реестр контекста
среды выполнения:
- Замените
approvalCapability.handler.loadRuntime(...)наapprovalCapability.nativeRuntime. - Перенесите специфичные для подтверждений аутентификацию и доставку с устаревшей связки
plugin.auth/plugin.approvalsнаapprovalCapability. ChannelPlugin.approvalsудалён из публичного контракта плагина канала; перенесите поля доставки, собственного поведения и отображения вapprovalCapability.plugin.authостаётся только для потоков входа и выхода из канала; ядро больше не читает там перехватчики аутентификации подтверждений.- Регистрируйте принадлежащие каналу объекты среды выполнения (клиенты, токены, приложения Bolt)
через
openclaw/plugin-sdk/channel-runtime-context. - Не отправляйте принадлежащие плагину уведомления о перенаправлении из собственных обработчиков подтверждений; ядро отвечает за уведомления о доставке в другое место на основе фактических результатов доставки.
- При передаче
channelRuntimeвcreateChannelManager(...)предоставляйте полноценную поверхностьcreatePluginRuntime().channel— частичные заглушки отклоняются.
Текущую структуру возможностей подтверждений см. в разделе Плагины каналов.
Проверьте резервное поведение оболочки Windows
Если ваш плагин использует openclaw/plugin-sdk/windows-spawn, неразрешённые оболочки Windows
.cmd/.bat теперь по умолчанию завершаются ошибкой, если явно не передан
allowShellFallback: true:
// Доconst program = applyWindowsSpawnProgramPolicy({ candidate }); // Послеconst program = applyWindowsSpawnProgramPolicy({ candidate, // Устанавливайте только для доверенных вызывающих сторон совместимости, которые намеренно // допускают резервный вариант через командную оболочку. allowShellFallback: true,});Если вызывающая сторона намеренно не зависит от резервного варианта через командную оболочку, не задавайте
allowShellFallback, а вместо этого обработайте выброшенную ошибку.
Найдите устаревшие импорты
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/Замените их специализированными импортами
Каждый экспорт из старой поверхности соответствует определённому современному пути импорта:
// До (устаревший слой обратной совместимости)import { createChannelReplyPipeline, createPluginRuntimeStore, resolveControlCommandGate,} from "openclaw/plugin-sdk/compat"; // После (современные специализированные импорты)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";Для вспомогательных средств на стороне хоста используйте внедрённую среду выполнения плагина вместо прямого импорта:
// До (устаревший мост extension-api)import { runEmbeddedAgent } from "openclaw/extension-api";const result = await runEmbeddedAgent({ sessionId, prompt }); // После (внедрённая среда выполнения)const result = await api.runtime.agent.runEmbeddedAgent({ sessionId, prompt });Тот же шаблон применяется к другим устаревшим вспомогательным функциям моста:
| Старый импорт | Современный эквивалент |
|---|---|
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 |
| Кэши дедупликации в памяти и с постоянным хранилищем | openclaw/plugin-sdk/dedupe-runtime |
| Вспомогательные функции для безопасных путей к локальным файлам и медиафайлам | openclaw/plugin-sdk/file-access-runtime |
| Запрос с учётом диспетчера | openclaw/plugin-sdk/runtime-fetch |
| Вспомогательные функции для прокси и защищённых запросов | openclaw/plugin-sdk/fetch-runtime |
| Типы политики диспетчера SSRF | openclaw/plugin-sdk/ssrf-dispatcher |
| Типы запросов и результатов подтверждения | openclaw/plugin-sdk/approval-runtime |
| Полезная нагрузка ответа на подтверждение и вспомогательные функции команд | openclaw/plugin-sdk/approval-reply-runtime |
| Вспомогательные функции форматирования ошибок | openclaw/plugin-sdk/error-runtime |
| Ожидание готовности транспорта | openclaw/plugin-sdk/transport-ready-runtime |
| Вспомогательные функции для безопасной работы с токенами | openclaw/plugin-sdk/secure-random-runtime |
| Ограниченный параллелизм асинхронных задач | openclaw/plugin-sdk/concurrency-runtime |
| Проверки обязательных значений для доказуемых инвариантов | openclaw/plugin-sdk/expect-runtime |
| Числовое приведение | openclaw/plugin-sdk/number-runtime |
| Локальная для процесса асинхронная блокировка | openclaw/plugin-sdk/async-lock-runtime |
| Файловые блокировки | openclaw/plugin-sdk/file-lock |
Встроенные плагины защищены сканером от infra-runtime, поэтому код
репозитория не может вернуться к общему модулю экспорта.
Перенесите вспомогательные функции маршрутов каналов
Новый код маршрутов каналов использует openclaw/plugin-sdk/channel-route. Прежние
имена ключей маршрутов и сопоставимых целей сохраняются как псевдонимы
совместимости:
| Старая вспомогательная функция | Современная вспомогательная функция |
|---|---|
channelRouteIdentityKey(...) |
channelRouteDedupeKey(...) |
channelRouteKey(...) |
channelRouteCompactKey(...) |
ComparableChannelTarget |
ChannelRouteParsedTarget |
comparableChannelTargetsMatch(...) |
channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) |
channelRouteTargetsShareConversation(...) |
Современные вспомогательные функции маршрутов единообразно нормализуют
{ channel, to, accountId, threadId } для нативных подтверждений, подавления ответов,
дедупликации входящих сообщений, доставки Cron и маршрутизации сеансов.
Не добавляйте новые случаи использования ChannelMessagingAdapter.parseExplicitTarget,
основанных на синтаксическом анализаторе вспомогательных функций загруженных
маршрутов (parseExplicitTargetForLoadedChannel, resolveRouteTargetForLoadedChannel) или
resolveChannelRouteTargetWithParser(...) из plugin-sdk/channel-route —
они устарели и сохраняются только для старых плагинов. Новые плагины
каналов должны использовать messaging.targetResolver.resolveTarget(...) для
нормализации идентификаторов целей и резервного поведения при отсутствии
записи в каталоге, messaging.inferTargetChatType(...), когда ядру требуется раннее
определение типа однорангового узла, и messaging.resolveOutboundSessionRoute(...) для нативной
для провайдера идентификации сеансов и веток.
Выполните сборку и тестирование
pnpm buildpnpm test my-plugin/Справочник путей импорта
Common import path table
| Путь импорта | Назначение | Основные экспорты |
|---|---|---|
plugin-sdk/plugin-entry |
Канонический вспомогательный модуль точки входа плагина | definePluginEntry |
plugin-sdk/core |
Устаревший сводный реэкспорт определений и построителей точек входа каналов | defineChannelPluginEntry, createChatChannelPlugin |
plugin-sdk/config-schema |
Экспорт корневой схемы конфигурации | OpenClawSchema |
plugin-sdk/provider-entry |
Вспомогательный модуль точки входа для одного провайдера | defineSingleProviderPluginEntry |
plugin-sdk/channel-core |
Специализированные определения и построители точек входа каналов | defineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase, createChannelConfigUiHints |
plugin-sdk/setup |
Общие вспомогательные модули мастера настройки | Переводчик настройки, запросы списков разрешений, построители состояния настройки |
plugin-sdk/setup-runtime |
Вспомогательные модули среды выполнения на этапе настройки | createSetupTranslator, безопасные для импорта адаптеры исправлений настройки, вспомогательные модули примечаний к поиску, 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 |
Вспомогательные модули идентификаторов учётных записей | 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 |
Примитивы сопряжения личных сообщений | createChannelPairingController |
plugin-sdk/channel-reply-pipeline |
Подключение префикса ответа, индикации набора текста и доставки из источника | createChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode |
plugin-sdk/channel-config-helpers |
Фабрики адаптеров конфигурации и вспомогательные модули доступа к личным сообщениям | createHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases |
plugin-sdk/channel-config-schema |
Построители схем конфигурации | Только общие примитивы схем конфигурации каналов и универсальный построитель |
plugin-sdk/bundled-channel-config-schema |
Встроенные схемы конфигурации | Только встроенные плагины, сопровождаемые OpenClaw; новые плагины должны определять локальные схемы плагина |
plugin-sdk/channel-config-schema-legacy |
Устаревшие встроенные схемы конфигурации | Только псевдоним совместимости; для сопровождаемых встроенных плагинов используйте plugin-sdk/bundled-channel-config-schema |
plugin-sdk/telegram-command-config |
Вспомогательные модули конфигурации команд Telegram | Нормализация имён команд, сокращение описаний, проверка дубликатов и конфликтов |
plugin-sdk/channel-policy |
Разрешение политик групп и личных сообщений | resolveChannelGroupRequireMention |
plugin-sdk/channel-lifecycle |
Устаревший фасад совместимости | Используйте plugin-sdk/channel-outbound |
plugin-sdk/inbound-envelope |
Вспомогательные модули входящих конвертов | Общие вспомогательные модули маршрутизации и построения конвертов |
plugin-sdk/channel-inbound |
Вспомогательные модули приёма входящих данных | Построение контекста, форматирование, корневые каталоги, исполнители, отправка подготовленного ответа и предикаты отправки |
plugin-sdk/messaging-targets |
Устаревший путь импорта разбора цели | Используйте plugin-sdk/channel-targets для универсальных вспомогательных модулей разбора целей, plugin-sdk/channel-route для сравнения маршрутов и принадлежащие плагину messaging.targetResolver / messaging.resolveOutboundSessionRoute для разрешения целей конкретного провайдера |
plugin-sdk/outbound-media |
Вспомогательные модули исходящих медиафайлов | Общая загрузка исходящих медиафайлов |
plugin-sdk/outbound-send-deps |
Устаревший фасад совместимости | Используйте plugin-sdk/channel-outbound |
plugin-sdk/channel-outbound |
Вспомогательные модули жизненного цикла исходящих сообщений | Адаптеры сообщений, подтверждения, вспомогательные модули надёжной отправки, динамического предпросмотра и потоковой передачи, параметры ответа, вспомогательные модули жизненного цикла, исходная идентификация и планирование полезной нагрузки |
plugin-sdk/channel-streaming |
Устаревший фасад совместимости | Используйте plugin-sdk/channel-outbound |
plugin-sdk/outbound-runtime |
Устаревший фасад совместимости | Используйте plugin-sdk/channel-outbound |
plugin-sdk/thread-bindings-runtime |
Вспомогательные модули привязки потоков | Вспомогательные модули жизненного цикла и адаптеров привязки потоков |
plugin-sdk/agent-media-payload |
Устаревшие вспомогательные модули полезной нагрузки медиафайлов | Построитель полезной нагрузки медиафайлов агента для устаревших компоновок полей |
plugin-sdk/channel-runtime |
Устаревшая прослойка совместимости | Только устаревшие утилиты среды выполнения каналов |
plugin-sdk/channel-send-result |
Типы результатов отправки | Типы результатов ответа |
plugin-sdk/runtime-store |
Постоянное хранилище плагина | createPluginRuntimeStore |
plugin-sdk/runtime |
Универсальные вспомогательные модули среды выполнения | Вспомогательные модули среды выполнения, журналирования, резервного копирования и установки плагинов |
plugin-sdk/runtime-env |
Узкоспециализированные вспомогательные модули окружения среды выполнения | Вспомогательные модули регистратора и окружения среды выполнения, тайм-аутов, повторных попыток и задержки |
plugin-sdk/plugin-runtime |
Общие вспомогательные модули среды выполнения плагинов | Вспомогательные модули команд, перехватчиков, HTTP и интерактивных функций плагина |
plugin-sdk/hook-runtime |
Вспомогательные модули конвейера перехватчиков | Общие вспомогательные модули конвейеров Webhook и внутренних перехватчиков |
plugin-sdk/lazy-runtime |
Вспомогательные модули отложенной среды выполнения | createLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface |
plugin-sdk/process-runtime |
Вспомогательные модули процессов | Общие вспомогательные модули выполнения |
plugin-sdk/cli-runtime |
Вспомогательные модули среды выполнения CLI | Форматирование команд, ожидание, вспомогательные модули версий |
plugin-sdk/gateway-runtime |
Вспомогательные модули Gateway | Клиент Gateway, вспомогательный модуль запуска после готовности цикла событий, разрешение объявляемого узла локальной сети и вспомогательные модули исправления состояния каналов |
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 |
Вспомогательные модули запросов подтверждения | Полезная нагрузка подтверждения выполнения и плагина, вспомогательные модули возможностей и профилей подтверждения, встроенной маршрутизации и среды выполнения подтверждений, а также форматирование пути структурированного отображения подтверждения |
plugin-sdk/approval-auth-runtime |
Вспомогательные модули авторизации подтверждений | Разрешение подтверждающего лица, авторизация действий в том же чате |
plugin-sdk/approval-client-runtime |
Клиентские вспомогательные модули подтверждений | Встроенные вспомогательные модули профилей и фильтров подтверждения выполнения |
plugin-sdk/approval-delivery-runtime |
Вспомогательные модули доставки подтверждений | Встроенные адаптеры возможностей и доставки подтверждений |
plugin-sdk/approval-gateway-runtime |
Вспомогательные модули Gateway для подтверждений | Общий разрешитель Gateway для подтверждений |
plugin-sdk/approval-reference-runtime |
Ссылки транспорта подтверждений | Детерминированный вспомогательный модуль надёжного указателя для обратных вызовов с ограничениями транспорта |
plugin-sdk/approval-handler-adapter-runtime |
Вспомогательные модули адаптера подтверждений | Облегчённые вспомогательные модули загрузки встроенного адаптера подтверждений для горячих точек входа каналов |
plugin-sdk/approval-handler-runtime |
Вспомогательные модули обработчика подтверждений | Более универсальные вспомогательные модули среды выполнения обработчика подтверждений; когда достаточно более узких интерфейсов адаптера и Gateway, предпочитайте их |
plugin-sdk/approval-native-runtime |
Вспомогательные модули целей подтверждения | Встроенные вспомогательные модули привязки цели подтверждения и учётной записи |
plugin-sdk/approval-reply-runtime |
Вспомогательные модули ответов на подтверждения | Вспомогательные модули полезной нагрузки ответа на подтверждение выполнения и плагина |
plugin-sdk/channel-runtime-context |
Вспомогательные модули контекста среды выполнения каналов | Универсальные вспомогательные модули регистрации, получения и наблюдения за контекстом среды выполнения каналов |
plugin-sdk/security-runtime |
Вспомогательные модули безопасности | Общие вспомогательные модули доверия, ограничения личных сообщений, файлов и путей в пределах корневого каталога, внешнего содержимого и сбора секретов |
plugin-sdk/ssrf-policy |
Вспомогательные модули политики SSRF | Вспомогательные модули списка разрешённых узлов и политики частных сетей |
plugin-sdk/ssrf-runtime |
Вспомогательные модули среды выполнения SSRF | Закреплённый диспетчер, защищённое получение, вспомогательные модули политики 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 |
Вспомогательные модули дедупликации | Кэши дедупликации в памяти и с постоянным хранилищем |
plugin-sdk/file-access-runtime |
Вспомогательные модули доступа к файлам | Вспомогательные модули безопасных путей к локальным файлам и медиафайлам |
plugin-sdk/transport-ready-runtime |
Вспомогательные модули готовности транспорта | waitForTransportReady |
plugin-sdk/exec-approvals-runtime |
Вспомогательные модули политики подтверждения выполнения | loadExecApprovals, resolveExecApprovalsFromFile, ExecApprovalsFile |
plugin-sdk/collection-runtime |
Вспомогательные модули ограниченного кэша | pruneMapToMaxSize |
plugin-sdk/diagnostic-runtime |
Вспомогательные модули ограничения диагностики | isDiagnosticFlagEnabled, isDiagnosticsEnabled |
plugin-sdk/error-runtime |
Вспомогательные модули ошибок | formatUncaughtError, isApprovalNotFoundError, вспомогательные модули графа ошибок, PlatformMessageNotDispatchedError |
plugin-sdk/fetch-runtime |
Вспомогательные модули обёрнутого получения и прокси | resolveFetch, вспомогательные модули прокси, вспомогательные модули параметров EnvHttpProxyAgent |
plugin-sdk/host-runtime |
Вспомогательные модули нормализации узлов | normalizeHostname, normalizeScpRemoteHost |
plugin-sdk/retry-runtime |
Вспомогательные модули повторных попыток | RetryConfig, retryAsync, исполнители политик |
plugin-sdk/allow-from |
Форматирование списка разрешений и сопоставление ввода | formatAllowFromLowercase, 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 |
Общая среда выполнения ответов | Отправка входящих данных, Heartbeat, планировщик ответов, разбиение на части |
plugin-sdk/reply-dispatch-runtime |
Узкоспециализированные вспомогательные модули отправки ответов | Вспомогательные модули завершения, отправки провайдером и меток беседы |
plugin-sdk/reply-history |
Вспомогательные модули истории ответов | createChannelHistoryWindow; устаревшие экспорты совместимости вспомогательных модулей отображения, например buildPendingHistoryContextFromMap, recordPendingHistoryEntry и clearHistoryEntriesIfEnabled |
plugin-sdk/reply-reference |
Планирование ссылок на ответы | createReplyReferencePlanner |
plugin-sdk/reply-chunking |
Вспомогательные модули частей ответа | Вспомогательные модули разбиения текста и Markdown на части |
plugin-sdk/session-store-runtime |
Вспомогательные модули хранилища сеансов | Вспомогательные модули строк сеансов с областью действия, путей хранилища и чтения времени обновления |
plugin-sdk/state-paths |
Вспомогательные модули путей состояния | Вспомогательные модули каталогов состояния и OAuth |
plugin-sdk/routing |
Вспомогательные модули маршрутизации и ключей сеансов | resolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, вспомогательные модули нормализации ключей сеансов |
plugin-sdk/status-helpers |
Вспомогательные модули состояния каналов | Построители сводок состояния каналов и учётных записей, значения состояния среды выполнения по умолчанию, вспомогательные модули метаданных проблем |
plugin-sdk/target-resolver-runtime |
Вспомогательные модули разрешения целей | Общие вспомогательные модули разрешения целей |
plugin-sdk/string-normalization-runtime |
Вспомогательные модули нормализации строк | Вспомогательные модули нормализации слагов и строк |
plugin-sdk/request-url |
Вспомогательные модули URL запросов | Извлечение строковых URL из входных данных, подобных запросам |
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-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 |
Вспомогательные функции веб-загрузки провайдеров | Вспомогательные функции регистрации и кэширования провайдеров веб-загрузки |
plugin-sdk/provider-web-search-config-contract |
Вспомогательные функции конфигурации веб-поиска провайдеров | Узкоспециализированные вспомогательные функции конфигурации и учетных данных веб-поиска для провайдеров, которым не требуется подключение логики включения плагина |
plugin-sdk/provider-web-search-contract |
Вспомогательные функции контракта веб-поиска провайдеров | Узкоспециализированные вспомогательные функции контрактов конфигурации и учетных данных веб-поиска, такие как createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, а также ограниченные областью действия функции задания и получения учетных данных |
plugin-sdk/provider-web-search |
Вспомогательные функции веб-поиска провайдеров | Вспомогательные функции регистрации, кэширования и среды выполнения провайдеров веб-поиска |
plugin-sdk/provider-tools |
Вспомогательные функции совместимости инструментов и схем провайдеров | ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, а также очистка и диагностика схем DeepSeek/Gemini/OpenAI |
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 |
Вспомогательные функции транспорта провайдеров | Нативные вспомогательные функции транспорта провайдеров, такие как защищенная загрузка, извлечение текста результатов инструментов, преобразования транспортных сообщений и доступные для записи потоки транспортных событий |
plugin-sdk/keyed-async-queue |
Упорядоченная асинхронная очередь | KeyedAsyncQueue |
plugin-sdk/media-runtime |
Общие вспомогательные функции мультимедиа | Вспомогательные функции загрузки, преобразования и хранения мультимедиа, определение размеров видео с помощью ffprobe и построители полезной нагрузки мультимедиа |
plugin-sdk/media-generation-runtime |
Общие вспомогательные функции генерации мультимедиа | Общие вспомогательные функции переключения при сбое, выбора кандидатов и сообщений об отсутствующих моделях для генерации изображений, видео и музыки |
plugin-sdk/media-understanding |
Вспомогательные функции анализа мультимедиа | Типы провайдеров анализа мультимедиа и экспортируемые для провайдеров вспомогательные функции обработки изображений и аудио |
plugin-sdk/text-runtime |
Устаревший экспорт широкой совместимости текста | Используйте string-coerce-runtime, text-chunking, text-utility-runtime и logging-core |
plugin-sdk/text-chunking |
Вспомогательные функции разбиения текста | Вспомогательные функции разбиения исходящего текста и диапазонов с сохранением смещений |
plugin-sdk/speech |
Вспомогательные функции речи | Типы речевых провайдеров, вспомогательные функции директив, реестра и проверки для провайдеров, а также построитель TTS, совместимый с OpenAI |
plugin-sdk/speech-core |
Общее ядро речи | Типы речевых провайдеров, реестр, директивы, нормализация |
plugin-sdk/realtime-transcription |
Вспомогательные функции расшифровки в реальном времени | Типы провайдеров, вспомогательные функции реестра и общая вспомогательная функция сеанса WebSocket |
plugin-sdk/realtime-voice |
Вспомогательные функции голосового взаимодействия в реальном времени | Типы провайдеров, вспомогательные функции реестра и разрешения, вспомогательные функции сеансов моста, общие очереди голосовых ответов агента, голосовое управление активным выполнением, контроль состояния расшифровки и событий, подавление эха, сопоставление вопросов для консультации, координация принудительных консультаций, отслеживание контекста хода, отслеживание активности вывода и вспомогательные функции быстрой консультации по контексту |
plugin-sdk/image-generation |
Вспомогательные функции генерации изображений | Типы провайдеров генерации изображений, вспомогательные функции ресурсов изображений и 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-sdk/channel-status |
Вспомогательные функции состояния каналов | Общие вспомогательные функции снимков и сводок состояния каналов |
plugin-sdk/allowlist-config-edit |
Вспомогательные функции конфигурации списка разрешений | Вспомогательные функции редактирования и чтения конфигурации списка разрешений |
plugin-sdk/group-access |
Вспомогательные функции группового доступа | Общие вспомогательные функции принятия решений о групповом доступе |
plugin-sdk/direct-dm, plugin-sdk/direct-dm-access |
Устаревшие фасады совместимости | Используйте plugin-sdk/channel-inbound |
plugin-sdk/direct-dm-guard-policy |
Вспомогательные функции защиты прямых личных сообщений | Узкоспециализированные вспомогательные функции политики защиты перед криптографической обработкой |
plugin-sdk/extension-shared |
Общие вспомогательные функции расширений | Примитивы вспомогательных функций пассивных каналов, состояния и фонового прокси |
plugin-sdk/webhook-targets |
Вспомогательные функции целей Webhook | Реестр целей Webhook и вспомогательные функции установки маршрутов |
plugin-sdk/webhook-path |
Устаревший псевдоним пути Webhook | Используйте plugin-sdk/webhook-ingress |
plugin-sdk/web-media |
Общие вспомогательные функции веб-мультимедиа | Вспомогательные функции загрузки удаленных и локальных мультимедиа |
plugin-sdk/zod |
Устаревший реэкспорт совместимости Zod | Импортируйте zod напрямую из zod |
plugin-sdk/memory-core |
Встроенные вспомогательные функции ядра памяти | Поверхность вспомогательных функций диспетчера памяти, конфигурации, файлов и CLI |
plugin-sdk/memory-core-engine-runtime |
Фасад среды выполнения движка памяти | Фасад среды выполнения индексации и поиска в памяти |
plugin-sdk/memory-core-host-embedding-registry |
Реестр эмбеддингов памяти | Облегченные вспомогательные функции реестра провайдеров эмбеддингов памяти |
plugin-sdk/memory-core-host-engine-foundation |
Базовый движок хоста памяти | Экспортируемые элементы базового движка хоста памяти |
plugin-sdk/memory-core-host-engine-embeddings |
Движок эмбеддингов хоста памяти | Контракты эмбеддингов памяти, доступ к реестру, локальный провайдер и универсальные вспомогательные функции пакетной и удаленной обработки; конкретные удаленные провайдеры находятся в принадлежащих им плагинах |
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-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-core-host-runtime-files |
plugin-sdk/memory-host-markdown |
Вспомогательные функции управляемого Markdown | Общие вспомогательные функции управляемого Markdown для плагинов, связанных с памятью |
plugin-sdk/memory-host-search |
Фасад поиска Active Memory | Лениво загружаемый фасад среды выполнения диспетчера поиска Active Memory |
plugin-sdk/memory-host-status |
Устаревший псевдоним состояния хоста памяти | Используйте plugin-sdk/memory-core-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.
Список точек входа компилятора находится в scripts/lib/plugin-sdk-entrypoints.json;
экспорты пакетов создаются из общедоступного поднабора.
Зарезервированные вспомогательные интерфейсы встроенных плагинов удалены из
карты экспорта общедоступного SDK, за исключением явно документированных
фасадов совместимости, таких как устаревшая прослойка plugin-sdk/discord,
сохранённая для внешних плагинов, которые по-прежнему напрямую импортируют
опубликованный пакет @openclaw/discord. Вспомогательные средства конкретного
владельца находятся в пакете соответствующего плагина; общее поведение хоста
реализуется через универсальные контракты SDK, такие как
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime и plugin-sdk/plugin-config-runtime.
Используйте наиболее узкий импорт, соответствующий задаче. Если вы не можете
найти экспорт, проверьте исходный код в src/plugin-sdk/ или спросите
сопровождающих, какому универсальному контракту он должен принадлежать.
Активные устаревания
Более узкие устаревания в SDK плагинов, контракте провайдера, поверхности среды выполнения и манифесте. Каждый из этих элементов по-прежнему работает, но будет удалён в одном из будущих мажорных выпусков. Для каждой записи указана каноническая замена старого API.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQktGB0L_QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUg0YHRgNC10LTRgdGC0LLQsCDRgdC_0YDQsNCy0LrQuCBjb21tYW5kLWF1dGggLQ
command-status">
Старое (openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.
Новое (openclaw/plugin-sdk/command-status): те же сигнатуры и
экспорты — меняется только импорт на более узкий подпуть. command-auth
повторно экспортирует их как заглушки совместимости.
// Доimport { buildHelpMessage } from "openclaw/plugin-sdk/command-auth"; // Послеimport { buildHelpMessage } from "openclaw/plugin-sdk/command-status";OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQodGA0LXQtNGB0YLQstCwINC-0LPRgNCw0L3QuNGH0LXQvdC40Y8g0L_QviDRg9C_0L7QvNC40L3QsNC90LjRj9C8IC0
resolveInboundMentionDecision">
Старое: resolveMentionGating(params) и
resolveMentionGatingWithBypass(params) из
openclaw/plugin-sdk/channel-inbound или
openclaw/plugin-sdk/channel-mention-gating.
Новое: resolveInboundMentionDecision({ facts, policy }) — один объект
решения вместо двух раздельных форм вызова.
Используется в Discord, iMessage, Matrix, MS Teams, QQBot, Signal,
Telegram, WhatsApp и Zalo. Собственная модель событий app_mention
в Slack не использует это вспомогательное средство.
Прослойка среды выполнения канала и средства действий канала
openclaw/plugin-sdk/channel-runtime — это прослойка совместимости для старых
плагинов каналов. Не импортируйте её в новом коде; используйте
openclaw/plugin-sdk/channel-runtime-context для регистрации объектов
среды выполнения.
Вспомогательные средства channelActions* в openclaw/plugin-sdk/channel-actions
объявлены устаревшими вместе с необработанными экспортами канальных
«действий». Вместо этого предоставляйте возможности через семантическую
поверхность presentation: плагины каналов объявляют, что именно они
отображают (карточки, кнопки, списки выбора), а не какие необработанные
имена действий они принимают.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQodGA0LXQtNGB0YLQstC-IHRvb2woKSDQv9GA0L7QstCw0LnQtNC10YDQsCDQstC10LEt0L_QvtC40YHQutCwIC0
createTool() в плагине">
Старое: фабрика tool() из openclaw/plugin-sdk/provider-web-search.
Новое: реализуйте createTool(...) непосредственно в плагине
провайдера. OpenClaw больше не требуется вспомогательное средство SDK для
регистрации обёртки инструмента.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQotC10LrRgdGC0L7QstGL0LUg0LrQvtC90LLQtdGA0YLRiyDQutCw0L3QsNC70L7QsiAt
BodyForAgent">
Старое: api.runtime.channel.reply.formatInboundEnvelope(...) (и поле
channelEnvelope во входящих объектах сообщений) для создания плоского
текстового конверта промпта из входящих сообщений канала.
Новое: BodyForAgent вместе со структурированными блоками
пользовательского контекста. Плагины каналов прикрепляют метаданные
маршрутизации (ветку, тему, ответ на сообщение, реакции) как типизированные
поля, а не объединяют их в строку промпта. Вспомогательное средство
formatAgentEnvelope(...) по-прежнему поддерживается для синтезированных
конвертов, предназначенных для ассистента, но входящие текстовые конверты
постепенно выводятся из использования.
Затронутые области: inbound_claim, message_received и любой
пользовательский плагин канала, который выполнял постобработку старого
текста конверта.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQpdGD0LogZGVhY3RpdmF0ZSAt
gateway_stop">
Старое: api.on("deactivate", handler).
Новое: api.on("gateway_stop", handler). Тот же контракт очистки
при завершении работы; меняется только имя хука.
// Доapi.on("deactivate", async (event, ctx) => { await stopPluginService(ctx);}); // Послеapi.on("gateway_stop", async (event, ctx) => { await stopPluginService(ctx);});deactivate остаётся подключённым как устаревший псевдоним
совместимости до его удаления после 2026-08-16.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQpdGD0Logc3ViYWdlbnRfc3Bhd25pbmcgLQ
привязка ветки в ядре">
Старое: api.on("subagent_spawning", handler), возвращающий
threadBindingReady или deliveryOrigin.
Новое: позвольте ядру подготавливать привязки субагентов
thread: true через адаптер привязки сеансов канала. Используйте
api.on("subagent_spawned", handler) только для наблюдения после запуска.
// Доapi.on("subagent_spawning", async () => ({ status: "ok", threadBindingReady: true, deliveryOrigin: { channel: "discord", to: "channel:123", threadId: "456" },})); // Послеapi.on("subagent_spawned", async (event) => { await observeSubagentLaunch(event);});subagent_spawning, PluginHookSubagentSpawningEvent,
PluginHookSubagentSpawningResult и
SubagentLifecycleHookRunner.runSubagentSpawning(...) остаются только как
устаревшие поверхности совместимости на время миграции внешних плагинов и
будут удалены после 2026-08-30.
"Типы
| Старый псевдоним | Новый тип |
|---|---|
ProviderDiscoveryOrder |
ProviderCatalogOrder |
ProviderDiscoveryContext |
ProviderCatalogContext |
ProviderDiscoveryResult |
ProviderCatalogResult |
ProviderPluginDiscovery |
ProviderPluginCatalog |
Кроме того, вместо устаревшего статического контейнера
ProviderCapabilities плагины провайдеров должны использовать явные хуки
провайдера, такие как buildReplayPolicy, normalizeToolSchemas и
wrapStreamFn.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQpdGD0LrQuCDQv9C-0LvQuNGC0LjQutC4INGA0LDRgdGB0YPQttC00LXQvdC40LkgLQ
resolveThinkingProfile">
Старое (три отдельных хука в ProviderThinkingPolicy):
isBinaryThinking(ctx), supportsXHighThinking(ctx) и
resolveDefaultThinkingLevel(ctx).
Новое: единый resolveThinkingProfile(ctx), возвращающий
ProviderThinkingProfile с каноническим id, необязательным
label и ранжированным списком уровней. OpenClaw автоматически
понижает устаревшие сохранённые значения в соответствии с рангом профиля.
Контекст включает provider, modelId, необязательный
объединённый reasoning и необязательные объединённые сведения о
модели compat. Плагины провайдеров могут использовать эти
сведения каталога, чтобы предоставлять профиль для конкретной модели,
только если настроенный контракт запроса его поддерживает.
Реализуйте один хук вместо трёх. Устаревшие хуки продолжают работать в течение периода устаревания, но не объединяются с результатом профиля.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQktC90LXRiNC90LjQtSDQv9GA0L7QstCw0LnQtNC10YDRiyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4IC0 contracts.externalAuthProviders"> Старое: реализация внешних хуков аутентификации без объявления провайдера в манифесте плагина.
Новое: объявите contracts.externalAuthProviders в манифесте плагина
и реализуйте resolveExternalAuthProfiles(...).
{ "contracts": { "externalAuthProviders": ["anthropic", "openai"] }}OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQn9C-0LjRgdC6INC_0LXRgNC10LzQtdC90L3Ri9GFINC-0LrRgNGD0LbQtdC90LjRjyDQv9GA0L7QstCw0LnQtNC10YDQsCAt
setup.providers[].envVars">
Старое поле манифеста: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.
Новое: продублируйте тот же поиск переменных окружения в
setup.providers[].envVars манифеста. Это объединяет метаданные окружения для
настройки и состояния в одном месте и позволяет не запускать среду
выполнения плагина только ради поиска переменных окружения.
providerAuthEnvVars продолжает поддерживаться через адаптер совместимости
до окончания периода устаревания.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC_0LvQsNCz0LjQvdCwINC_0LDQvNGP0YLQuCAt
registerMemoryCapability">
Старое: три отдельных вызова — api.registerMemoryPromptSection(...),
api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).
Новое: один вызов API состояния памяти —
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).
Те же слоты, один вызов регистрации. Дополнительные вспомогательные
средства промптов и корпуса (registerMemoryPromptSupplement, registerMemoryCorpusSupplement)
не затрагиваются.
API провайдера векторных представлений памяти
Старое: api.registerMemoryEmbeddingProvider(...) вместе с
contracts.memoryEmbeddingProviders.
Новое: api.registerEmbeddingProvider(...) вместе с
contracts.embeddingProviders.
Универсальный контракт провайдера векторных представлений можно повторно использовать вне памяти; это поддерживаемый путь для новых провайдеров. API регистрации для памяти остаётся подключённым как устаревший интерфейс совместимости на время миграции существующих провайдеров. При проверке плагинов использование этого API невстроенными плагинами отмечается как долг совместимости.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQndC10L7QsdGA0LDQsdC-0YLQsNC90L3Ri9C1INGA0LXQt9GD0LvRjNGC0LDRgtGLINC-0YLQv9GA0LDQstC60Lgg0LrQsNC90LDQu9CwIC0
OutboundDeliveryResult">
Старое: возвращайте { ok, messageId, error } через
ChannelSendRawResult и нормализуйте его с помощью
createRawChannelSendResultAdapter(...).
Новое: возвращайте поля OutboundDeliveryResult и прикрепляйте канал с
помощью createAttachedChannelResultAdapter(...). При неудачной отправке следует выбрасывать
исключение вместо возврата строки ошибки. Тип необработанного результата
останется доступным до следующего мажорного выпуска SDK плагинов.
Переименование типов сообщений сеансов субагентов
Два устаревших псевдонима типов по-прежнему экспортируются из
src/plugins/runtime/types.ts:
| Старое | Новое |
|---|---|
SubagentReadSessionParams |
SubagentGetSessionMessagesParams |
SubagentReadSessionResult |
SubagentGetSessionMessagesResult |
Метод среды выполнения readSession объявлен устаревшим в пользу
getSessionMessages. Сигнатура та же; старый метод вызывает новый.
Удалённые API файлов сеансов и расшифровок
Переход сеансов и расшифровок на SQLite удаляет или объявляет устаревшими
API для плагинов, которые предоставляли активные хранилища
sessions.json, пути к расшифровкам JSONL или списки файлов сеансов.
Плагины среды выполнения должны использовать идентификаторы сеансов и
вспомогательные средства среды выполнения SDK вместо разрешения или
изменения активных файлов.
| Мигрируемая поверхность | Замена |
|---|---|
Устаревшие loadSessionStore(...), updateSessionStore(...) и resolveSessionStoreEntry(...) |
getSessionEntry(...), listSessionEntries(...) и изменения сеансов на уровне строк. |
Устаревший resolveSessionFilePath(...) |
Идентификатор сеанса (sessionKey, sessionId и вспомогательные средства целевых объектов среды выполнения SDK), а также методы Gateway, работающие с текущим сеансом. |
Удалённый saveSessionStore(...) |
API среды выполнения сеансов, принадлежащие Gateway; код плагина должен запрашивать или изменять состояние сеанса через документированные вспомогательные средства среды выполнения или контекста вместо записи в файл активного хранилища. |
Удалённые resolveSessionTranscriptPathInDir(...) и resolveAndPersistSessionFile(...) |
Идентификатор сеанса и методы Gateway, работающие с текущим сеансом. |
readLatestAssistantTextFromSessionTranscript(...) |
Средства чтения расшифровок на основе идентификаторов, предоставляемые текущим контекстом среды выполнения, либо методы истории или сеансов Gateway, когда плагин находится вне пути владельца расшифровки. |
SessionTranscriptUpdate.sessionFile |
SessionTranscriptUpdate.target с agentId, sessionKey и sessionId. |
Входные данные синхронизации памяти, такие как sessionFiles |
Источники расшифровок или сеансов на основе идентификаторов, предоставляемые хостом; не сканируйте активные файлы JSONL для действующих сеансов. |
Параметры среды выполнения с именами transcriptPath или sessionFile для активных сеансов |
sessionTarget/целевые объекты среды выполнения, содержащие нейтральный к хранилищу идентификатор сеанса. |
Устаревшие файлы расшифровок JSONL остаются допустимыми артефактами импорта, архивации, экспорта и поддержки. Они больше не являются контрактом штатной работы среды выполнения для активных сеансов.
Официальные плагины, выпущенные с v2026.7.1-beta.5, импортировали четыре
устаревших вспомогательных функции выше. openclaw/plugin-sdk/session-store-runtime сохраняет
этот точный мост до 2026-10-12; новые плагины должны использовать замены.
resolveStorePath(...) остаётся поддерживаемой вспомогательной функцией SDK и не входит
в эту депрекацию.
openclaw plugins inspect --all --runtime сообщает о невстроенных плагинах, в
ошибках загрузки или диагностике которых всё ещё упоминаются эти удалённые файловые API.
Рекомендательная проверка @openclaw/plugin-inspector должна использовать версию 0.3.17 или
новее, чтобы сканирование внешних пакетов также выявляло вспомогательные функции сеансов
для всего хранилища, вспомогательные функции путей к файлам сеансов, устаревшие целевые файлы
транскриптов и низкоуровневые вспомогательные функции транскриптов до выпуска.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSJydW50aW1lLnRhc2tzLmZsb3cgLQ
runtime.tasks.managedFlows">
Ранее: runtime.tasks.flow (единственное число) возвращал активный
интерфейс доступа к потоку задач.
Теперь: runtime.tasks.managedFlows сохраняет среду выполнения управляемых изменений TaskFlow
для плагинов, которые создают, обновляют, отменяют или запускают дочерние задачи из
потока. Используйте runtime.tasks.flows, когда плагину нужны только
операции чтения на основе DTO.
// Ранееconst flow = api.runtime.tasks.flow.fromToolContext(ctx);// Теперьconst flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);Удалено после 2026-07-26.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQktGB0YLRgNC-0LXQvdC90YvQtSDRhNCw0LHRgNC40LrQuCDRgNCw0YHRiNC40YDQtdC90LjQuSAt
промежуточное ПО результатов инструментов агента">
Описано выше в разделе Как выполнить миграцию. Для
полноты здесь также указано: удалённый путь api.registerEmbeddedExtensionFactory(...),
предназначенный только для встроенного исполнителя, заменён на
api.registerAgentToolResultMiddleware(...) с явным списком сред выполнения
в contracts.agentToolResultMiddleware.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSLQn9GB0LXQstC00L7QvdC40LwgT3BlbkNsYXdTY2hlbWFUeXBlIC0
OpenClawConfig">
OpenClawSchemaType, повторно экспортировавшийся из openclaw/plugin-sdk, теперь является
однострочным псевдонимом для OpenClawConfig. Предпочитайте каноническое имя.
// Ранееimport type { OpenClawSchemaType } from "openclaw/plugin-sdk";// Теперьimport type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";Миграция Talk и голосовой связи в реальном времени
Код голосовой связи в реальном времени, телефонии, совещаний и браузерного Talk использует общий
контроллер сеансов Talk, экспортируемый из openclaw/plugin-sdk/realtime-voice.
Контроллер управляет общей оболочкой событий Talk, состоянием активной реплики, состоянием захвата,
состоянием вывода звука, историей недавних событий и отклонением устаревших реплик.
Плагины провайдеров управляют специфичными для поставщиков сеансами реального времени; плагины
интерфейсов управляют особенностями захвата, воспроизведения, телефонии и совещаний.
Все встроенные интерфейсы работают на общем контроллере: браузерная ретрансляция,
передача управления в управляемую комнату, голосовой вызов в реальном времени, потоковое STT
голосового вызова, Google Meet в реальном времени и нативный режим «нажми и говори». Gateway
объявляет один активный канал событий Talk в hello-ok.features.events: talk.event.
Новый код не должен вызывать createTalkEventSequencer(...) напрямую, кроме случаев
реализации низкоуровневого адаптера или тестовой фикстуры. Используйте общий контроллер, чтобы
события, относящиеся к реплике, нельзя было отправлять без идентификатора реплики, устаревшие вызовы turnEnd /
turnCancel не могли очистить более новую активную реплику, а события жизненного цикла
выходного аудио оставались согласованными для телефонии, совещаний, браузерной ретрансляции,
передачи управления в управляемую комнату и нативных клиентов Talk.
Форма публичного API:
// API сеанса Talk под управлением Gateway.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 }); // 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 });await gateway.request("talk.client.steer", { sessionKey, text, mode: "steer" });Сеансы WebRTC/веб-сокетов провайдера под управлением браузера используют talk.client.create,
поскольку браузер управляет согласованием с провайдером и транспортом мультимедиа, а
Gateway управляет учётными данными, инструкциями и политикой инструментов. talk.session.* —
общий интерфейс под управлением Gateway для работы в реальном времени через gateway-relay,
транскрибирования через gateway-relay и нативных сеансов STT/TTS в управляемых комнатах.
Устаревшие конфигурации, в которых селекторы реального времени размещены рядом с talk.provider /
talk.providers, следует исправить с помощью openclaw doctor --fix; среда выполнения Talk
не интерпретирует конфигурацию провайдера речи/TTS как конфигурацию провайдера реального времени.
Поддерживаемый набор сочетаний talk.session.create намеренно ограничен:
| Режим | Транспорт | Мозг | Владелец | Примечания |
|---|---|---|---|---|
realtime |
gateway-relay |
agent-consult |
Gateway | Полнодуплексный звук провайдера передаётся через Gateway; вызовы инструментов направляются через инструмент agent-consult. |
transcription |
gateway-relay |
none |
Gateway | Только потоковое STT; вызывающие стороны отправляют входной звук и получают события транскрипта. |
stt-tts |
managed-room |
agent-consult |
Нативная/клиентская комната | Комнаты в стиле «нажми и говори» и рации, где клиент управляет захватом и воспроизведением, а Gateway — состоянием реплики. |
stt-tts |
managed-room |
direct-tools |
Нативная/клиентская комната | Режим комнаты только для администраторов для доверенных собственных интерфейсов, которые напрямую выполняют действия инструментов Gateway. |
Таблица соответствия методов для переходящих со старых семейств talk.realtime.* /
talk.transcription.* / talk.handoff.* (все удалены):
| Ранее | Теперь |
|---|---|
talk.realtime.session |
talk.client.create |
talk.realtime.toolCall |
talk.client.toolCall |
talk.realtime.relayAudio |
talk.session.appendAudio |
talk.realtime.relayCancel |
talk.session.cancelOutput или 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 |
Добавляет фрагмент аудио PCM в кодировке base64 в сеанс провайдера, принадлежащий тому же соединению Gateway. |
talk.session.startTurn |
stt-tts/managed-room |
Начинает пользовательскую реплику в управляемой комнате. |
talk.session.endTurn |
stt-tts/managed-room |
Завершает активную реплику после проверки на устаревание. |
talk.session.cancelTurn |
все сеансы под управлением Gateway | Отменяет активную работу захвата, провайдера, агента и TTS для реплики. |
talk.session.cancelOutput |
realtime/gateway-relay |
Останавливает вывод звука ассистента, не обязательно завершая пользовательскую реплику. |
talk.session.submitToolResult |
realtime/gateway-relay |
Завершает вызов инструмента провайдера после любого асинхронного завершения, предоставленного его мостом; передайте options.willContinue для промежуточного вывода или, если поддерживается, options.suppressResponse, чтобы избежать ещё одного ответа ассистента. |
talk.session.steer |
сеансы Talk с поддержкой агента | Отправляет голосовую управляющую команду status, steer, cancel или followup активному встроенному запуску, определённому из сеанса Talk. |
talk.session.close |
все унифицированные сеансы | Останавливает сеансы ретрансляции или отзывает состояние управляемой комнаты, затем удаляет из памяти унифицированный идентификатор сеанса. |
Не добавляйте в ядро особые случаи для провайдеров или платформ, чтобы обеспечить эту работу. Ядро управляет семантикой сеансов Talk. Плагины провайдеров управляют настройкой сеансов поставщиков. Voice-call и Google Meet управляют адаптерами телефонии и совещаний. Браузерные и нативные приложения управляют взаимодействием с пользователем при захвате и воспроизведении на устройстве.
График удаления
| Когда | Что происходит |
|---|---|
| Сейчас | Устаревшие поверхности API выдают предупреждения во время выполнения. |
Дата removeAfter каждой записи совместимости |
Соответствующая поверхность API может быть удалена; после наступления этой даты pnpm plugins:boundary-report --fail-on-eligible-compat приводит к сбою CI. |
| Следующий основной выпуск | Все ещё не перенесённые поверхности API удаляются; использующие их плагины перестанут работать. |
Все плагины ядра уже перенесены. Внешние плагины следует перенести
до следующего основного выпуска. Запустите pnpm plugins:boundary-report, чтобы узнать, для каких
записей совместимости используемых вашим плагином поверхностей API срок наступит раньше всего.
Временное отключение предупреждений
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway runOPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway runЭто временный обходной путь, а не постоянное решение.
См. также
- Начало работы — создайте свой первый плагин
- Обзор SDK — полный справочник по импорту из подпутей
- Плагины каналов — создание плагинов каналов
- Плагины провайдеров — создание плагинов провайдеров
- Внутреннее устройство плагинов — подробный обзор архитектуры
- Манифест плагина — справочник по схеме манифеста