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.

Политика совместимости

Работа по обеспечению совместимости внешних плагинов выполняется в следующем порядке:

  1. Добавить новый контракт.
  2. Сохранить прежнее поведение через адаптер совместимости.
  3. Вывести диагностику или предупреждение с указанием старого пути и его замены.
  4. Охватить оба пути тестами.
  5. Документировать устаревание и путь миграции.
  6. Удалить только после завершения объявленного периода миграции, обычно в основном выпуске.

Если поле манифеста по-прежнему принимается, продолжайте использовать его, пока документация и диагностика не укажут обратное. Новый код должен предпочитать документированную замену; существующие плагины не должны переставать работать при обычных дополнительных выпусках.

Проверьте текущую очередь миграции с помощью 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, чтобы инструмент, созданный до записи конфигурации, всё равно видел обновлённую конфигурацию.

    Запись конфигурации выполняется через транзакционное вспомогательное средство с явной политикой после записи:

    typescript
    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(...), предназначенные только для встроенного механизма запуска, нейтральным к среде выполнения промежуточным ПО:

    typescript
    // Динамические инструменты среды выполнения OpenClaw и Codexapi.registerAgentToolResultMiddleware(async (event) => {  return compactToolResult(event);}, {  runtimes: ["openclaw", "codex"],});

    Одновременно обновите манифест плагина:

    json
    {  "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:

    typescript
    // Доconst program = applyWindowsSpawnProgramPolicy({ candidate }); // Послеconst program = applyWindowsSpawnProgramPolicy({  candidate,  // Устанавливайте только для доверенных вызывающих сторон совместимости, которые намеренно  // допускают резервный вариант через командную оболочку.  allowShellFallback: true,});

    Если вызывающая сторона намеренно не зависит от резервного варианта через командную оболочку, не задавайте allowShellFallback, а вместо этого обработайте выброшенную ошибку.

  • Найдите устаревшие импорты

    bash
    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/
  • Замените их специализированными импортами

    Каждый экспорт из старой поверхности соответствует определённому современному пути импорта:

    typescript
    // До (устаревший слой обратной совместимости)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";

    Для вспомогательных средств на стороне хоста используйте внедрённую среду выполнения плагина вместо прямого импорта:

    typescript
    // До (устаревший мост 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(...) для нативной для провайдера идентификации сеансов и веток.

  • Выполните сборку и тестирование

    bash
    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 повторно экспортирует их как заглушки совместимости.

    typescript
    // До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). Тот же контракт очистки при завершении работы; меняется только имя хука.

    typescript
    // До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) только для наблюдения после запуска.

    typescript
    // До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(...).

    json
    {  "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.

    typescript
    // Ранее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. Предпочитайте каноническое имя.

    typescript
    // Ранее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:

    typescript
    // 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 срок наступит раньше всего.

    Временное отключение предупреждений

    bash
    OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway runOPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run

    Это временный обходной путь, а не постоянное решение.

    См. также

    Was this useful?
    On this page

    On this page