Registro di compatibilità
I contratti di compatibilità dei Plugin sono registrati nel registro principale insrc/plugins/compat/registry.ts. Ogni voce include:
- un codice di compatibilità stabile
- stato:
active,deprecated,removal-pendingoremoved - responsabile:
sdk,config,setup,channel,provider,plugin-execution,agent-runtimeocore - date di introduzione e deprecazione, quando applicabili
- indicazioni per la sostituzione
- documentazione, diagnostica e test che coprono il comportamento precedente e quello nuovo
src/commands/doctor/shared/deprecation-compat.ts. Queste voci
coprono le precedenti strutture di configurazione, le strutture del registro delle
installazioni e gli shim di riparazione che potrebbe essere necessario mantenere
disponibili dopo la rimozione del percorso di compatibilità del runtime.
Le verifiche di rilascio devono controllare entrambi i registri. Non eliminare una
migrazione di Doctor solo perché la voce di compatibilità del runtime o della
configurazione corrispondente è scaduta; verificare prima che non esista un
percorso di aggiornamento supportato che richieda ancora la riparazione. Durante
la pianificazione del rilascio, convalidare nuovamente anche ogni annotazione di
sostituzione, poiché la responsabilità dei Plugin e l’ambito della configurazione
possono cambiare quando i provider e i canali vengono spostati fuori dal core.
Criteri di deprecazione
OpenClaw non deve rimuovere un contratto Plugin documentato nella stessa versione che introduce il relativo sostituto. Sequenza di migrazione:- Aggiungere il nuovo contratto.
- Mantenere operativo il comportamento precedente tramite un adattatore di compatibilità denominato.
- Emettere messaggi diagnostici o avvisi quando gli autori dei Plugin possono intervenire.
- Documentare la sostituzione e la tempistica.
- Verificare con test sia il percorso precedente sia quello nuovo.
- Attendere il termine della finestra di migrazione annunciata.
- Rimuovere solo con l’approvazione esplicita di una versione con modifiche incompatibili.
active.
Aree di compatibilità attuali
Il registro attualmente contiene circa 70 codici di compatibilità relativi alle aree seguenti. Il nuovo codice dei Plugin deve utilizzare la sostituzione prevista in ogni area e nella guida di migrazione specifica; i Plugin esistenti possono continuare a utilizzare un percorso di compatibilità finché la documentazione, la diagnostica e le note di rilascio non annunciano una finestra di rimozione.- precedenti importazioni generiche dell’SDK, come
openclaw/plugin-sdk/compat - precedenti strutture dei Plugin basate esclusivamente sugli hook e
before_agent_start - precedenti nomi degli hook di pulizia
api.on("deactivate", ...)durante la migrazione dei Plugin agateway_stop - precedenti punti di ingresso dei Plugin
activate(api)durante la migrazione dei Plugin aregister(api) - precedenti alias dell’SDK, come
openclaw/extension-api,openclaw/plugin-sdk/channel-runtime, i costruttori di stato diopenclaw/plugin-sdk/command-auth,openclaw/plugin-sdk/test-utils(sostituito dai sottopercorsi di test specificiopenclaw/plugin-sdk/*) e gli alias di tipoClawdbotConfig/OpenClawSchemaType - comportamento relativo all’elenco consentito e all’abilitazione dei Plugin inclusi
- precedenti metadati del manifesto per le variabili di ambiente di provider e canali
- precedenti hook e alias di tipo dei Plugin provider durante la migrazione dei provider a hook espliciti per catalogo, autenticazione, ragionamento, riproduzione e trasporto
- precedenti alias del runtime, come
api.runtime.taskFlow,api.runtime.subagent.getSession,api.runtime.stte gli elementi deprecatiapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...) - campi piatti dei callback
WebInboundMessagedi WhatsApp (vedere sotto) - campi di ammissione di primo livello di
WebInboundMessagedi WhatsApp (vedere sotto) - precedente registrazione separata dei Plugin di memoria durante la migrazione dei
Plugin di memoria a
registerMemoryCapability - precedente registrazione dei provider di incorporamento specifica per la memoria,
durante la migrazione dei provider di incorporamento a
api.registerEmbeddingProvider(...)econtracts.embeddingProviders - precedenti helper dell’SDK dei canali per gli schemi dei messaggi nativi, il controllo delle menzioni, la formattazione degli involucri in ingresso e l’annidamento delle funzionalità di approvazione
- precedenti alias per la chiave di instradamento dei canali e per gli helper dei
destinatari confrontabili, durante la migrazione dei Plugin a
openclaw/plugin-sdk/channel-route - suggerimenti di attivazione sostituiti dalla responsabilità dei contributi del manifesto
- fallback del runtime
setup-apidurante la migrazione dei descrittori di configurazione iniziale ai metadati a freddosetup.requiresRuntime: false - hook
discoverydei provider durante la migrazione degli hook del catalogo dei provider acatalog.run(...) - metadati
showConfigured/showInSetupdei canali durante la migrazione dei pacchetti dei canali aopenclaw.channel.exposure - precedenti chiavi di configurazione dei criteri del runtime durante la migrazione
degli operatori ad
agentRuntimetramite Doctor - fallback dei metadati di configurazione generati per i canali inclusi durante
l’introduzione dei metadati
channelConfigsbasati prioritariamente sul registro - variabili di ambiente persistenti per la disabilitazione del registro dei Plugin
e per la migrazione delle installazioni, durante la migrazione degli operatori
tramite i flussi di riparazione a
openclaw plugins registry --refresheopenclaw doctor --fix - precedenti percorsi di configurazione di ricerca web, recupero web e x_search
gestiti dai Plugin, durante la migrazione tramite Doctor a
plugins.entries.<plugin>.config - precedente configurazione
plugins.installscreata manualmente e alias dei percorsi di caricamento dei Plugin inclusi, durante lo spostamento dei metadati di installazione nel registro dei Plugin gestito dallo stato
Alias piatti dei callback in ingresso di WhatsApp
I callback del runtime di WhatsApp fornisconoWebInboundMessage: i contesti
canonici annidati event, payload, quote, group e platform, oltre agli
alias piatti deprecati per i campi dei callback distribuiti. Il nuovo codice dei
callback deve leggere i contesti annidati. Il codice che crea messaggi di callback
annidati puliti può utilizzare WebInboundCallbackMessage; i listener di
compatibilità che inseriscono ancora vecchi messaggi piatti di test o dei Plugin
devono utilizzare LegacyFlatWebInboundMessage o WebInboundMessageInput.
Gli alias piatti rimangono disponibili fino al 2026-08-30; questa finestra si
applica solo all’accesso tramite alias piatti, non alla struttura annidata, che è
il contratto canonico del runtime. L’annotazione TypeScript @deprecated di ogni
alias piatto indica la relativa sostituzione annidata esatta. Esempi comuni:
id,timestampeisBatchedvengono spostati sottoevent.body,mediaPath,mediaType,mediaFileName,mediaUrl,locationeuntrustedStructuredContextvengono spostati sottopayload.to,chatId, i campi relativi al mittente e all’identità del sistema,sendComposing,reply(...)esendMedia(...)vengono spostati sottoplatform.- I campi
replyTo*vengono spostati sottoquote; i campi relativi all’oggetto, ai partecipanti e alle menzioni del gruppo vengono spostati sottogroup.
payload.untrustedStructuredContext viene estratto dai payload in ingresso dei
provider. I Plugin devono esaminare label, source e type prima di considerare
autorevole il relativo payload.
Campi di ammissione in ingresso di WhatsApp
I messaggi di callback WhatsApp accettati contengonoadmission, un involucro
sicuro per l’esposizione pubblica della decisione di controllo degli accessi che
ha ammesso il messaggio. Il nuovo codice dei callback deve leggere i dati
sull’ammissione da msg.admission anziché dai precedenti campi di ammissione di
primo livello.
I campi di primo livello rimangono disponibili fino al 2026-08-30.
L’annotazione TypeScript @deprecated di ogni campo indica la relativa
sostituzione:
fromeconversationIdvengono spostati inadmission.conversation.id.accountIdviene spostato inadmission.accountId.accessControlPassedè una vista di compatibilità derivata daadmission.ingress.decision === "allow"; nei messaggi che contengono giàadmission, la scrittura del valore booleano precedente non riscrive il grafo di ingresso.chatTypeviene spostato inadmission.conversation.kind.
Pacchetto dell’analizzatore dei Plugin
L’analizzatore dei Plugin deve risiedere al di fuori del repository principale di OpenClaw come pacchetto/repository separato, basato sui contratti di compatibilità e del manifesto con controllo delle versioni. La CLI iniziale deve essere:--json per ottenere un
output stabile e leggibile dalle macchine nelle annotazioni CI. Il core di
OpenClaw deve esporre i contratti e i dati di test utilizzabili dall’analizzatore,
ma non deve pubblicare il binario dell’analizzatore dal pacchetto principale
openclaw.
Percorso di accettazione per i manutentori
Utilizzare Blacksmith Testbox con supporto Crabbox per il percorso di accettazione dei pacchetti installabili quando si convalida l’analizzatore esterno rispetto ai pacchetti Plugin di OpenClaw. Eseguirlo da un checkout pulito di OpenClaw dopo la compilazione del pacchetto:Note di rilascio
Le note di rilascio devono includere le imminenti deprecazioni dei Plugin, con le date previste e i collegamenti alla documentazione di migrazione, prima che un percorso di compatibilità passi aremoval-pending o removed.