Реестр совместимости
Контракты совместимости Plugin отслеживаются в основном реестре по адресуsrc/plugins/compat/registry.ts.
Каждая запись содержит:
- стабильный код совместимости
- статус:
active,deprecated,removal-pendingилиremoved - владелец: SDK, конфигурация, настройка, канал, провайдер, выполнение Plugin, среда выполнения агента или ядро
- даты введения и устаревания, когда применимо
- рекомендации по замене
- документацию, диагностику и тесты, покрывающие старое и новое поведение
src/commands/doctor/shared/deprecation-compat.ts. Эти записи покрывают старые
формы конфигурации, структуры журнала установок и исправляющие совместимость
прокладки, которым может понадобиться оставаться доступными после удаления пути
совместимости среды выполнения.
Релизные проверки должны проверять оба реестра. Не удаляйте миграцию doctor
только потому, что соответствующая запись совместимости среды выполнения или
конфигурации истекла; сначала убедитесь, что не существует поддерживаемого пути
обновления, которому все еще нужно это исправление. Также повторно проверяйте
каждую аннотацию замены во время планирования релиза, потому что владение Plugin
и конфигурационный след могут меняться по мере выноса провайдеров и каналов из
ядра.
Пакет инспектора Plugin
Инспектор Plugin должен жить вне основного репозитория OpenClaw как отдельный пакет/репозиторий, опирающийся на версионированные контракты совместимости и манифеста. CLI первого дня должен быть:- проверку манифеста/схемы
- версию совместимости контракта, которая проверяется
- проверки метаданных установки/источника
- проверки импорта холодного пути
- предупреждения об устаревании и совместимости
--json для стабильного машиночитаемого вывода в аннотациях CI.
Ядро OpenClaw должно предоставлять контракты и фикстуры, которые инспектор может
использовать, но не должно публиковать бинарный файл инспектора из основного
пакета openclaw.
Приемочный путь сопровождающих
Используйте Blacksmith Testbox на базе Crabbox для приемочного пути устанавливаемого пакета при проверке внешнего инспектора на пакетах Plugin OpenClaw. Запускайте его из чистой рабочей копии OpenClaw после сборки пакета:Политика устаревания
OpenClaw не должен удалять документированный контракт Plugin в том же релизе, который вводит его замену. Последовательность миграции:- Добавить новый контракт.
- Сохранить старое поведение подключенным через именованный адаптер совместимости.
- Выводить диагностику или предупреждения, когда авторы Plugin могут действовать.
- Задокументировать замену и сроки.
- Протестировать старый и новый пути.
- Выждать объявленное окно миграции.
- Удалять только с явным одобрением релиза с несовместимыми изменениями.
active.
Текущие области совместимости
Текущие записи совместимости включают:- старые широкие импорты SDK, такие как
openclaw/plugin-sdk/compat - старые формы Plugin только с хуками и
before_agent_start - старые имена cleanup-хуков
api.on("deactivate", ...), пока Plugin переходят наgateway_stop - старые точки входа Plugin
activate(api), пока Plugin переходят наregister(api) - старые псевдонимы SDK, такие как
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, построители статусовopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(заменен сфокусированными тестовыми подпутямиopenclaw/plugin-sdk/*), а также псевдонимы типовClawdbotConfig/OpenClawSchemaType - поведение списка разрешенных встроенных Plugin и их включения
- старая manifest-метадата env-var для провайдеров/каналов
- старые хуки Plugin провайдеров и псевдонимы типов, пока провайдеры переходят на явные хуки каталога, аутентификации, thinking, replay и транспорта
- старые псевдонимы среды выполнения, такие как
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stt, а также устаревшиеapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - плоские поля обратного вызова WhatsApp
WebInboundMessage, такие какbody,chatId,reply(...)иmediaPath, пока потребители обратных вызовов переходят на вложенные контекстыWebInboundCallbackMessageevent,payload,quote,groupиplatform - поля допуска верхнего уровня WhatsApp
WebInboundMessage, такие какfrom,conversationId,accountId,accessControlPassedиchatType, пока потребители обратных вызовов переходят на оболочкуadmission - старая раздельная регистрация memory-plugin, пока Plugin памяти переходят на
registerMemoryCapability - старая регистрация embedding-провайдера, специфичная для памяти, пока
embedding-провайдеры переходят на
api.registerEmbeddingProvider(...)иcontracts.embeddingProviders - старые помощники SDK канала для нативных схем сообщений, ограничения упоминаний, форматирования входящей оболочки и вложенности возможностей approval
- старый ключ маршрута канала и псевдонимы помощников comparable-target, пока
Plugin переходят на
openclaw/plugin-sdk/channel-route - подсказки активации, которые заменяются владением вкладом в манифесте
- fallback среды выполнения
setup-api, пока дескрипторы настройки переходят на холодную метадатуsetup.requiresRuntime: false - хуки провайдера
discovery, пока хуки каталога провайдера переходят наcatalog.run(...) - метадата канала
showConfigured/showInSetup, пока пакеты каналов переходят наopenclaw.channel.exposure - старые конфигурационные ключи runtime-policy, пока doctor мигрирует операторов
на
agentRuntime - fallback сгенерированной метадаты конфигурации встроенного канала, пока
внедряется metadata
channelConfigsс приоритетом реестра - сохраненные env-флаги отключения реестра Plugin и миграции установок, пока
потоки исправления мигрируют операторов на
openclaw plugins registry --refreshиopenclaw doctor --fix - старые пути конфигурации web search, web fetch и x_search, принадлежащие Plugin,
пока doctor мигрирует их в
plugins.entries.<plugin>.config - старая авторская конфигурация
plugins.installsи псевдонимы путей загрузки встроенных Plugin, пока метаданные установки перемещаются в управляемый состоянием журнал Plugin
Плоские псевдонимы входящего обратного вызова WhatsApp
Обратные вызовы среды выполнения WhatsApp доставляютWebInboundMessage:
канонические вложенные контексты event, payload, quote, group и
platform, а также устаревшие плоские псевдонимы для поставленных полей
обратного вызова. Новый код обратных вызовов должен читать вложенные контексты.
Код, который создает чистые вложенные сообщения обратного вызова, может
использовать WebInboundCallbackMessage; слушатели совместимости, которые все
еще внедряют старые плоские тестовые сообщения или сообщения Plugin, должны
использовать LegacyFlatWebInboundMessage или WebInboundMessageInput.
Плоские псевдонимы остаются доступными до 2026-08-30. Это окно удаления
применяется только к доступу через плоские псевдонимы; вложенная форма обратного
вызова является каноническим контрактом среды выполнения. Аннотации TypeScript
@deprecated на каждом имени плоского псевдонима указывают его точную вложенную
замену. Распространенные примеры:
id,timestampиisBatchedперемещаются вevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,locationиuntrustedStructuredContextперемещаются вpayload.to,chatId, поля sender/self,sendComposing,reply(...)иsendMedia(...)перемещаются вplatform.- Поля
replyTo*перемещаются вquote, а поля темы группы/участника/упоминания перемещаются вgroup.
payload.untrustedStructuredContext извлекается из входящих payload провайдера.
Plugin должны проверять label, source и type, прежде чем считать его
payload авторитетным.
Поля допуска входящего сообщения WhatsApp
Принятые сообщения обратного вызова WhatsApp теперь содержатadmission —
публично безопасную оболочку для решения контроля доступа, которое допустило
сообщение. Новый код обратных вызовов должен читать факты допуска из
msg.admission вместо старых полей допуска верхнего уровня.
Поля верхнего уровня остаются доступными до 2026-08-30. Аннотации TypeScript
@deprecated указывают каждую замену:
fromиconversationIdперемещаются вadmission.conversation.id.accountIdперемещается вadmission.accountId.accessControlPassedявляется производным представлением совместимости дляadmission.ingress.decision === "allow"; в сообщениях, которые уже содержатadmission, запись старого boolean не переписывает граф ingress.chatTypeперемещается вadmission.conversation.kind.
Заметки к релизу
Заметки к релизу должны включать предстоящие устаревания Plugin с целевыми датами и ссылками на документацию по миграции. Это предупреждение должно появиться до того, как путь совместимости перейдет вremoval-pending или removed.