Kompatibilitäts-Registry
Plugin-Kompatibilitätsverträge werden in der Core-Registry untersrc/plugins/compat/registry.ts nachverfolgt.
Jeder Eintrag hat:
- einen stabilen Kompatibilitätscode
- Status:
active,deprecated,removal-pendingoderremoved - Eigentümer: SDK, Konfiguration, Setup, Kanal, Provider, Plugin-Ausführung, Agent-Laufzeit oder Core
- Einführungs- und Veraltungsdaten, falls zutreffend
- Hinweise zum Ersatz
- Dokumentation, Diagnosen und Tests, die das alte und neue Verhalten abdecken
src/commands/doctor/shared/deprecation-compat.ts nachverfolgt. Diese Einträge
decken alte Konfigurationsformen, Installations-Ledger-Layouts und
Reparatur-Shims ab, die möglicherweise verfügbar bleiben müssen, nachdem der
Laufzeit-Kompatibilitätspfad entfernt wurde.
Release-Sweeps sollten beide Registries prüfen. Löschen Sie eine
Doctor-Migration nicht nur deshalb, weil der passende Laufzeit- oder
Konfigurations-Kompatibilitätseintrag abgelaufen ist; verifizieren Sie zuerst,
dass es keinen unterstützten Upgrade-Pfad gibt, der die Reparatur noch benötigt.
Validieren Sie außerdem jede Ersatzannotation während der Release-Planung erneut,
weil sich Plugin-Eigentümerschaft und Konfigurationsumfang ändern können, wenn
Provider und Kanäle aus dem Core verschoben werden.
Plugin-Inspector-Paket
Der Plugin-Inspector sollte außerhalb des Core-OpenClaw-Repos als separates Paket/Repository leben, gestützt auf die versionierten Kompatibilitäts- und Manifestverträge. Die CLI am ersten Tag sollte sein:- Manifest-/Schema-Validierung
- die geprüfte Vertragskompatibilitätsversion
- Prüfungen der Installations-/Quellmetadaten
- Cold-Path-Importprüfungen
- Veraltungs- und Kompatibilitätswarnungen
--json für stabile maschinenlesbare Ausgabe in CI-Annotationen.
OpenClaw Core sollte Verträge und Fixtures bereitstellen, die der Inspector
nutzen kann, aber das Inspector-Binary nicht aus dem Hauptpaket openclaw
veröffentlichen.
Maintainer-Akzeptanz-Lane
Verwenden Sie Crabbox-gestützte Blacksmith Testbox für die Akzeptanz-Lane für installierbare Pakete, wenn Sie den externen Inspector gegen OpenClaw Plugin-Pakete validieren. Führen Sie sie aus einem sauberen OpenClaw-Checkout aus, nachdem das Paket gebaut wurde:Veraltungsrichtlinie
OpenClaw sollte einen dokumentierten Plugin-Vertrag nicht in demselben Release entfernen, in dem sein Ersatz eingeführt wird. Die Migrationssequenz lautet:- Fügen Sie den neuen Vertrag hinzu.
- Halten Sie das alte Verhalten über einen benannten Kompatibilitätsadapter verdrahtet.
- Geben Sie Diagnosen oder Warnungen aus, wenn Plugin-Autoren handeln können.
- Dokumentieren Sie Ersatz und Zeitplan.
- Testen Sie alte und neue Pfade.
- Warten Sie das angekündigte Migrationsfenster ab.
- Entfernen Sie nur mit ausdrücklicher Genehmigung für ein Breaking-Release.
active.
Aktuelle Kompatibilitätsbereiche
Aktuelle Kompatibilitätseinträge umfassen:- ältere breite SDK-Importe wie
openclaw/plugin-sdk/compat - ältere reine Hook-Plugin-Formen und
before_agent_start - ältere
api.on("deactivate", ...)-Namen für Cleanup-Hooks, während Plugins zugateway_stopmigrieren - ältere
activate(api)-Plugin-Einstiegspunkte, während Plugins zuregister(api)migrieren - ältere SDK-Aliasse wie
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime,openclaw/plugin-sdk/command-authStatus-Builder,openclaw/plugin-sdk/test-utils(ersetzt durch fokussierteopenclaw/plugin-sdk/*-Test-Unterpfade) und die TypaliasseClawdbotConfig/OpenClawSchemaType - Zulassungslisten- und Aktivierungsverhalten für gebündelte Plugins
- ältere Provider-/Kanal-Env-Var-Manifestmetadaten
- ältere Provider-Plugin-Hooks und Typaliasse, während Provider zu expliziten Katalog-, Auth-, Thinking-, Replay- und Transport-Hooks wechseln
- ältere Laufzeit-Aliasse wie
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.sttund veralteteapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - flache WhatsApp-
WebInboundMessage-Callback-Felder wiebody,chatId,reply(...)undmediaPath, während Callback-Nutzer zu den verschachtelten Kontextenevent,payload,quote,groupundplatformvonWebInboundCallbackMessagemigrieren - WhatsApp-
WebInboundMessage-Admission-Felder auf oberster Ebene wiefrom,conversationId,accountId,accessControlPassedundchatType, während Callback-Nutzer zumadmission-Envelope migrieren - ältere Split-Registrierung für Memory-Plugins, während Memory-Plugins zu
registerMemoryCapabilitywechseln - ältere Memory-spezifische Registrierung von Embedding-Providern, während
Embedding-Provider zu
api.registerEmbeddingProvider(...)undcontracts.embeddingProviderswechseln - ältere Kanal-SDK-Helfer für native Nachrichtenschemas, Mention-Gating, Formatierung eingehender Envelopes und Verschachtelung von Approval-Capabilitys
- ältere Kanal-Routenschlüssel und vergleichbare Target-Helferaliasse, während
Plugins zu
openclaw/plugin-sdk/channel-routewechseln - Aktivierungshinweise, die durch Eigentümerschaft von Manifest-Contributions ersetzt werden
setup-api-Laufzeit-Fallback, während Setup-Deskriptoren zu kaltensetup.requiresRuntime: false-Metadaten wechseln- Provider-
discovery-Hooks, während Provider-Katalog-Hooks zucatalog.run(...)wechseln - Kanal-Metadaten
showConfigured/showInSetup, während Kanalpakete zuopenclaw.channel.exposurewechseln - ältere runtime-policy-Konfigurationsschlüssel, während Doctor Operatoren zu
agentRuntimemigriert - Fallback für generierte gebündelte Kanal-Konfigurationsmetadaten, während
Registry-first-
channelConfigs-Metadaten landen - persistierte Env-Flags für Deaktivierung der Plugin-Registry und
Installationsmigration, während Reparaturabläufe Operatoren zu
openclaw plugins registry --refreshundopenclaw doctor --fixmigrieren - ältere Plugin-eigene Konfigurationspfade für Websuche, Webabruf und x_search,
während Doctor sie zu
plugins.entries.<plugin>.configmigriert - ältere verfasste
plugins.installs-Konfiguration und Ladepfad-Aliasse für gebündelte Plugins, während Installationsmetadaten in das zustandsverwaltete Plugin-Ledger verschoben werden
Flache Aliasse für eingehende WhatsApp-Callbacks
WhatsApp-Laufzeit-Callbacks liefernWebInboundMessage: die kanonischen
verschachtelten Kontexte event, payload, quote, group und platform
plus veraltete flache Aliasse für die ausgelieferten Callback-Felder. Neuer
Callback-Code sollte die verschachtelten Kontexte lesen. Code, der saubere
verschachtelte Callback-Nachrichten konstruiert, kann
WebInboundCallbackMessage verwenden; Kompatibilitäts-Listener, die noch alte
flache Test- oder Plugin-Nachrichten injizieren, sollten
LegacyFlatWebInboundMessage oder WebInboundMessageInput verwenden.
Die flachen Aliasse bleiben bis 2026-08-30 verfügbar. Dieses
Entfernungsfenster gilt nur für den Zugriff über flache Aliasse; die
verschachtelte Callback-Form ist der kanonische Laufzeitvertrag. Die TypeScript-
@deprecated-Annotationen für jeden flachen Alias nennen seinen exakten
verschachtelten Ersatz. Häufige Beispiele:
id,timestampundisBatchedwandern unterevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,locationunduntrustedStructuredContextwandern unterpayload.to,chatId, Sender-/Self-Felder,sendComposing,reply(...)undsendMedia(...)wandern unterplatform.replyTo*-Felder wandern unterquote, und Felder für Gruppensubjekt, Teilnehmer und Mentions wandern untergroup.
payload.untrustedStructuredContext wird aus eingehenden Provider-Payloads
extrahiert. Plugins sollten label, source und type prüfen, bevor sie
dessen payload als autoritativ behandeln.
WhatsApp-Eingangs-Admission-Felder
Akzeptierte WhatsApp-Callback-Nachrichten tragen jetztadmission, ein öffentlich
sicheres Envelope für die Access-Control-Entscheidung, die die Nachricht
zugelassen hat. Neuer Callback-Code sollte Admission-Fakten aus msg.admission
lesen statt aus den älteren Admission-Feldern auf oberster Ebene.
Die Felder auf oberster Ebene bleiben bis 2026-08-30 verfügbar. Die
TypeScript-@deprecated-Annotationen nennen jeden Ersatz:
fromundconversationIdwandern zuadmission.conversation.id.accountIdwandert zuadmission.accountId.accessControlPassedist eine abgeleitete Kompatibilitätsansicht vonadmission.ingress.decision === "allow"; bei Nachrichten, die bereitsadmissiontragen, schreibt das Schreiben des älteren booleschen Werts den Ingress-Graphen nicht um.chatTypewandert zuadmission.conversation.kind.
Release Notes
Release Notes sollten kommende Plugin-Veraltungen mit Zieldaten und Links zu Migrationsdokumentation enthalten. Diese Warnung muss erfolgen, bevor ein Kompatibilitätspfad zuremoval-pending oder removed wechselt.