Rejestr zgodności
Kontrakty zgodności Plugin są śledzone w głównym rejestrze pod adresemsrc/plugins/compat/registry.ts.
Każdy rekord ma:
- stabilny kod zgodności
- status:
active,deprecated,removal-pendinglubremoved - właściciela: SDK, konfigurację, ustawienia, kanał, dostawcę, wykonywanie Plugin, środowisko uruchomieniowe agenta albo core
- daty wprowadzenia i wycofania, gdy mają zastosowanie
- wskazówki dotyczące zamiennika
- dokumentację, diagnostykę i testy obejmujące stare i nowe zachowanie
src/commands/doctor/shared/deprecation-compat.ts. Te rekordy obejmują stare
kształty konfiguracji, układy ledger instalacji i shimy naprawcze, które mogą
musić pozostać dostępne po usunięciu ścieżki zgodności środowiska
uruchomieniowego.
Przeglądy wydań powinny sprawdzać oba rejestry. Nie usuwaj migracji Doctor
tylko dlatego, że pasujący rekord zgodności środowiska uruchomieniowego lub
konfiguracji wygasł; najpierw sprawdź, czy nie istnieje obsługiwana ścieżka
aktualizacji, która nadal potrzebuje tej naprawy. Ponownie zweryfikuj też każdą
adnotację zamiennika podczas planowania wydania, ponieważ właścicielstwo Plugin
i zakres konfiguracji mogą się zmieniać, gdy dostawcy i kanały wychodzą z core.
Pakiet inspektora Plugin
Inspektor Plugin powinien znajdować się poza głównym repozytorium OpenClaw jako osobny pakiet/repozytorium oparte na wersjonowanych kontraktach zgodności i manifestu. CLI pierwszego dnia powinno wyglądać tak:- walidację manifestu/schematu
- sprawdzaną wersję zgodności kontraktu
- kontrole metadanych instalacji/źródła
- kontrole importu ścieżki zimnej
- ostrzeżenia o wycofaniu i zgodności
--json, aby uzyskać stabilne, czytelne maszynowo wyjście w adnotacjach
CI. Core OpenClaw powinien udostępniać kontrakty i fixtures, które inspektor
może konsumować, ale nie powinien publikować binarium inspektora z głównego
pakietu openclaw.
Ścieżka akceptacyjna opiekunów
Użyj Blacksmith Testbox wspieranego przez Crabbox dla ścieżki akceptacyjnej pakietu instalowalnego podczas walidowania zewnętrznego inspektora względem pakietów Plugin OpenClaw. Uruchom ją z czystego checkoutu OpenClaw po zbudowaniu pakietu:Polityka wycofywania
OpenClaw nie powinien usuwać udokumentowanego kontraktu Plugin w tym samym wydaniu, które wprowadza jego zamiennik. Sekwencja migracji jest następująca:- Dodaj nowy kontrakt.
- Utrzymaj stare zachowanie podłączone przez nazwany adapter zgodności.
- Emituj diagnostykę lub ostrzeżenia, gdy autorzy Plugin mogą podjąć działanie.
- Udokumentuj zamiennik i harmonogram.
- Przetestuj zarówno stare, jak i nowe ścieżki.
- Odczekaj przez ogłoszone okno migracji.
- Usuń tylko za wyraźną zgodą na wydanie łamiące zgodność.
active.
Obecne obszary zgodności
Obecne rekordy zgodności obejmują:- starsze szerokie importy SDK, takie jak
openclaw/plugin-sdk/compat - starsze kształty Plugin oparte wyłącznie na hookach i
before_agent_start - starsze nazwy hooków czyszczenia
api.on("deactivate", ...), gdy Pluginy migrują dogateway_stop - starsze punkty wejścia Plugin
activate(api), gdy Pluginy migrują doregister(api) - starsze aliasy SDK, takie jak
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, konstruktory statusuopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(zastąpione przez ukierunkowane podścieżki testoweopenclaw/plugin-sdk/*) oraz aliasy typówClawdbotConfig/OpenClawSchemaType - listę dozwolonych bundled Plugin i zachowanie włączania
- starsze metadane manifestu zmiennych środowiskowych dostawcy/kanału
- starsze hooki Plugin dostawcy i aliasy typów, gdy dostawcy przechodzą na jawne hooki katalogu, uwierzytelniania, myślenia, replay i transportu
- starsze aliasy środowiska uruchomieniowego, takie jak
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.sttoraz wycofaneapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - płaskie pola callbacku WhatsApp
WebInboundMessage, takie jakbody,chatId,reply(...)imediaPath, gdy konsumenci callbacków migrują do zagnieżdżonych kontekstówevent,payload,quote,groupiplatformwWebInboundCallbackMessage - pola admission najwyższego poziomu WhatsApp
WebInboundMessage, takie jakfrom,conversationId,accountId,accessControlPassedichatType, gdy konsumenci callbacków migrują do kopertyadmission - starszą dzieloną rejestrację memory-plugin, gdy Pluginy pamięci przechodzą do
registerMemoryCapability - starszą rejestrację dostawcy embedding specyficzną dla pamięci, gdy dostawcy
embedding przechodzą do
api.registerEmbeddingProvider(...)icontracts.embeddingProviders - starsze helpery SDK kanału dla natywnych schematów wiadomości, bramkowania wzmianek, formatowania kopert przychodzących i zagnieżdżania capability zatwierdzania
- starszy klucz trasy kanału i aliasy helperów porównywalnego celu, gdy Pluginy
przechodzą do
openclaw/plugin-sdk/channel-route - wskazówki aktywacji, które są zastępowane przez właścicielstwo kontrybucji manifestu
- fallback środowiska uruchomieniowego
setup-api, gdy deskryptory ustawień przechodzą do zimnych metadanychsetup.requiresRuntime: false - hooki
discoverydostawcy, gdy hooki katalogu dostawcy przechodzą docatalog.run(...) - metadane kanału
showConfigured/showInSetup, gdy pakiety kanałów przechodzą doopenclaw.channel.exposure - starsze klucze konfiguracji runtime-policy, gdy Doctor migruje operatorów do
agentRuntime - wygenerowany fallback metadanych konfiguracji bundled channel, gdy trafiają
metadane
channelConfigsoparte najpierw na rejestrze - utrwalone flagi środowiskowe wyłączenia rejestru Plugin i migracji instalacji,
gdy przepływy naprawcze migrują operatorów do
openclaw plugins registry --refreshiopenclaw doctor --fix - starsze ścieżki konfiguracji web search, web fetch i x_search należące do
Plugin, gdy Doctor migruje je do
plugins.entries.<plugin>.config - starszą autorską konfigurację
plugins.installsi aliasy ścieżki ładowania bundled plugin, gdy metadane instalacji przechodzą do ledger Plugin zarządzanego przez stan
Płaskie aliasy callbacków przychodzących WhatsApp
Callbacki środowiska uruchomieniowego WhatsApp dostarczająWebInboundMessage:
kanoniczne zagnieżdżone konteksty event, payload, quote, group i
platform oraz wycofane płaskie aliasy dla dostarczonych pól callbacku. Nowy
kod callbacków powinien odczytywać zagnieżdżone konteksty. Kod, który konstruuje
czyste zagnieżdżone wiadomości callbacku, może używać
WebInboundCallbackMessage; listenery zgodności, które nadal wstrzykują stare
płaskie wiadomości testowe lub Plugin, powinny używać
LegacyFlatWebInboundMessage albo WebInboundMessageInput.
Płaskie aliasy pozostają dostępne do 2026-08-30. To okno usunięcia dotyczy
tylko dostępu przez płaskie aliasy; zagnieżdżony kształt callbacku jest
kanonicznym kontraktem środowiska uruchomieniowego. Adnotacje TypeScript
@deprecated przy każdym płaskim aliasie wskazują jego dokładny zagnieżdżony
zamiennik. Typowe przykłady:
id,timestampiisBatchedprzechodzą podevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,locationiuntrustedStructuredContextprzechodzą podpayload.to,chatId, pola nadawcy/własne,sendComposing,reply(...)isendMedia(...)przechodzą podplatform.- pola
replyTo*przechodzą podquote, a pola tematu grupy, uczestnika i wzmianki przechodzą podgroup.
payload.untrustedStructuredContext jest wyodrębniany z przychodzących payloadów
dostawcy. Pluginy powinny sprawdzić label, source i type, zanim potraktują
jego payload jako autorytatywny.
Pola admission przychodzących WhatsApp
Zaakceptowane wiadomości callbacków WhatsApp zawierają terazadmission,
publicznie bezpieczną kopertę decyzji kontroli dostępu, która dopuściła
wiadomość. Nowy kod callbacków powinien odczytywać fakty admission z
msg.admission zamiast ze starszych pól admission najwyższego poziomu.
Pola najwyższego poziomu pozostają dostępne do 2026-08-30. Adnotacje
TypeScript @deprecated wskazują każdy zamiennik:
fromiconversationIdprzechodzą doadmission.conversation.id.accountIdprzechodzi doadmission.accountId.accessControlPassedjest pochodnym widokiem zgodności dlaadmission.ingress.decision === "allow"; w wiadomościach, które już zawierająadmission, zapis starszej wartości boolean nie przepisuje grafu ingress.chatTypeprzechodzi doadmission.conversation.kind.
Notatki wydania
Notatki wydania powinny obejmować nadchodzące wycofania Plugin z docelowymi datami i linkami do dokumentacji migracji. To ostrzeżenie musi nastąpić, zanim ścieżka zgodności przejdzie doremoval-pending albo removed.