Реєстр сумісності
Контракти сумісності 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.
Канал приймання супровідником
Використовуйте Crabbox-backed Blacksmith Testbox для каналу приймання встановлюваного пакета під час перевірки зовнішнього інспектора з пакетами plugins OpenClaw. Запускайте його з чистого checkout OpenClaw після збирання пакета:Політика виведення з ужитку
OpenClaw не має видаляти задокументований контракт plugin у тому самому релізі, який запроваджує його заміну. Послідовність міграції така:- Додайте новий контракт.
- Залиште стару поведінку підключеною через іменований адаптер сумісності.
- Виводьте діагностику або попередження, коли автори plugins можуть діяти.
- Задокументуйте заміну та графік.
- Протестуйте і старий, і новий шляхи.
- Дочекайтеся оголошеного вікна міграції.
- Видаляйте лише з явним схваленням breaking-release.
active натомість.
Поточні області сумісності
Поточні записи сумісності включають:- старі широкі імпорти SDK, як-от
openclaw/plugin-sdk/compat - старі hook-only форми plugin і
before_agent_start - старі назви хуків очищення
api.on("deactivate", ...), поки plugins мігрують наgateway_stop - старі точки входу plugin
activate(api), поки plugins мігрують на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 - поведінку списку дозволених і ввімкнення вбудованих plugins
- старі метадані маніфесту env-var провайдера/каналу
- старі хуки plugin провайдера та псевдоніми типів, поки провайдери переходять на явні хуки каталогу, автентифікації, thinking, replay і транспорту
- старі псевдоніми середовища виконання, як-от
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stt, і застаріліapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - плоскі поля callback
WebInboundMessageWhatsApp, як-отbody,chatId,reply(...)іmediaPath, поки споживачі callback мігрують на вкладені контекстиWebInboundCallbackMessageevent,payload,quote,groupіplatform - поля допуску верхнього рівня
WebInboundMessageWhatsApp, як-отfrom,conversationId,accountId,accessControlPassedіchatType, поки споживачі callback мігрують на оболонкуadmission - стару розділену реєстрацію memory-plugin, поки plugins пам’яті переходять на
registerMemoryCapability - стару специфічну для пам’яті реєстрацію embedding provider, поки embedding
providers переходять на
api.registerEmbeddingProvider(...)іcontracts.embeddingProviders - старі помічники SDK каналу для нативних схем повідомлень, gating згадок, форматування вхідної оболонки та вкладення можливості затвердження
- старий ключ маршруту каналу та псевдоніми помічників comparable-target, поки plugins переходять на
openclaw/plugin-sdk/channel-route - підказки активації, які замінюються власністю внеску маніфесту
- fallback середовища виконання
setup-api, поки дескриптори налаштування переходять на холодні метаданіsetup.requiresRuntime: false - хуки
discoveryпровайдера, поки хуки каталогу провайдера переходять наcatalog.run(...) - метадані каналу
showConfigured/showInSetup, поки пакети каналів переходять наopenclaw.channel.exposure - старі ключі конфігурації runtime-policy, поки doctor мігрує операторів на
agentRuntime - fallback згенерованих метаданих конфігурації вбудованого каналу, поки з’являються registry-first метадані
channelConfigs - збережені env flags вимкнення реєстру plugin і міграції встановлень, поки потоки виправлення мігрують операторів на
openclaw plugins registry --refreshіopenclaw doctor --fix - старі шляхи конфігурації web search, web fetch і x_search, що належать plugin, поки doctor мігрує їх до
plugins.entries.<plugin>.config - стару авторську конфігурацію
plugins.installsі псевдоніми шляхів завантаження вбудованих plugins, поки метадані встановлення переходять у керований станом журнал plugin
Плоскі псевдоніми вхідного callback WhatsApp
Callbacks середовища виконання WhatsApp доставляютьWebInboundMessage: канонічні вкладені контексти event, payload, quote, group і platform плюс застарілі плоскі псевдоніми для доставлених полів callback. Новий код callback має читати вкладені контексти. Код, який створює чисті вкладені повідомлення callback, може використовувати WebInboundCallbackMessage; слухачі сумісності, які все ще інжектують старі плоскі тестові повідомлення або повідомлення plugin, мають використовувати LegacyFlatWebInboundMessage або
WebInboundMessageInput.
Плоскі псевдоніми залишаються доступними до 2026-08-30. Це вікно видалення застосовується лише до доступу через плоскі псевдоніми; вкладена форма callback є канонічним контрактом середовища виконання. Анотації TypeScript @deprecated для кожної назви плоского псевдоніма вказують її точну вкладену заміну. Поширені приклади:
id,timestampіisBatchedпереходять підevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,locationіuntrustedStructuredContextпереходять підpayload.to,chatId, поля відправника/себе,sendComposing,reply(...)іsendMedia(...)переходять підplatform.- Поля
replyTo*переходять підquote, а поля теми групи/учасника/згадки переходять підgroup.
payload.untrustedStructuredContext витягується з вхідних payloads провайдера.
Plugins мають перевіряти label, source і type, перш ніж вважати його
payload авторитетним.
Поля допуску вхідних повідомлень WhatsApp
Прийняті повідомлення callback WhatsApp тепер містятьadmission, публічно безпечну оболонку для рішення контролю доступу, яке допустило повідомлення. Новий код callback має читати факти допуску з msg.admission замість старіших полів допуску верхнього рівня.
Поля верхнього рівня залишаються доступними до 2026-08-30. Анотації TypeScript
@deprecated називають кожну заміну:
fromіconversationIdпереходять доadmission.conversation.id.accountIdпереходить доadmission.accountId.accessControlPassedє похідним сумісним представленнямadmission.ingress.decision === "allow"; у повідомленнях, які вже містятьadmission, запис старого булевого значення не переписує граф ingress.chatTypeпереходить доadmission.conversation.kind.
Примітки до релізу
Примітки до релізу мають містити майбутні виведення з ужитку plugins із цільовими датами та посиланнями на документацію з міграції. Це попередження має відбутися до того, як шлях сумісності перейде вremoval-pending або removed.