Vai al contenuto principale

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

OpenClaw è passato da un ampio livello di compatibilità retroattiva a una moderna architettura a plugin con import focalizzati e documentati. Se il tuo plugin è stato creato prima della nuova architettura, questa guida ti aiuta a migrarlo.

Cosa cambia

Il vecchio sistema di plugin forniva due superfici molto aperte che consentivano ai plugin di importare tutto ciò di cui avevano bisogno da un unico punto di ingresso:
  • openclaw/plugin-sdk/compat - un singolo import che riesportava decine di helper. È stato introdotto per mantenere funzionanti i plugin più vecchi basati su hook mentre veniva costruita la nuova architettura a plugin.
  • openclaw/plugin-sdk/infra-runtime - un ampio barrel di helper runtime che mescolava eventi di sistema, stato Heartbeat, code di consegna, helper fetch/proxy, helper per file, tipi di approvazione e utility non correlate.
  • openclaw/plugin-sdk/config-runtime - un ampio barrel di compatibilità della configurazione che contiene ancora helper diretti di caricamento/scrittura deprecati durante la finestra di migrazione.
  • openclaw/extension-api - un bridge che forniva ai plugin accesso diretto agli helper lato host, come il runner agente incorporato.
  • api.registerEmbeddedExtensionFactory(...) - un hook di estensione in bundle solo per Pi rimosso che poteva osservare eventi dell’embedded-runner come tool_result.
Le ampie superfici di import sono ora deprecate. Funzionano ancora a runtime, ma i nuovi plugin non devono usarle, e i plugin esistenti dovrebbero migrare prima che la prossima release major le rimuova. L’API di registrazione dell’embedded extension factory solo per Pi è stata rimossa; usa invece il middleware dei risultati degli strumenti. OpenClaw non rimuove né reinterpreta il comportamento documentato dei plugin nello stesso cambiamento che introduce un sostituto. Le modifiche incompatibili al contratto devono prima passare attraverso un adapter di compatibilità, diagnostica, documentazione e una finestra di deprecazione. Questo vale per import SDK, campi del manifest, API di setup, hook e comportamento di registrazione runtime.
Il livello di compatibilità retroattiva verrà rimosso in una futura release major. I plugin che importano ancora da queste superfici si romperanno quando accadrà. Le registrazioni dell’embedded extension factory solo per Pi già non vengono più caricate.

Perché è cambiato

Il vecchio approccio causava problemi:
  • Avvio lento - importare un helper caricava decine di moduli non correlati
  • Dipendenze circolari - le ampie riesportazioni rendevano facile creare cicli di import
  • Superficie API poco chiara - non c’era modo di capire quali export fossero stabili e quali interni
Il moderno SDK per plugin risolve questo problema: ogni percorso di import (openclaw/plugin-sdk/\<subpath\>) è un modulo piccolo, autonomo, con uno scopo chiaro e un contratto documentato. Anche le seam legacy di comodità dei provider per i canali in bundle sono state rimosse. Le seam helper brandizzate per canale erano scorciatoie private del mono-repo, non contratti stabili per plugin. Usa invece sottopercorsi SDK generici e ristretti. All’interno del workspace dei plugin in bundle, mantieni gli helper di proprietà del provider nel api.ts o runtime-api.ts del plugin stesso. Esempi attuali di provider in bundle:
  • Anthropic mantiene gli helper di stream specifici per Claude nella propria seam api.ts / contract-api.ts
  • OpenAI mantiene provider builder, helper per modelli predefiniti e builder di provider realtime nel proprio api.ts
  • OpenRouter mantiene provider builder e helper di onboarding/configurazione nel proprio api.ts

Piano di migrazione per Talk e voce realtime

Il codice Talk per voce realtime, telefonia, riunioni e browser si sta spostando dalla contabilità dei turni locale alla superficie a un controller condiviso di sessione Talk esportato da openclaw/plugin-sdk/realtime-voice. Il nuovo controller possiede l’envelope comune degli eventi Talk, lo stato del turno attivo, lo stato di acquisizione, lo stato dell’audio in uscita, la cronologia recente degli eventi e il rifiuto dei turni obsoleti. I plugin provider dovrebbero continuare a possedere le sessioni realtime specifiche del vendor; i plugin di superficie dovrebbero continuare a possedere acquisizione, riproduzione, telefonia e particolarità delle riunioni. Questa migrazione di Talk è intenzionalmente incompatibile e pulita:
  1. Mantieni le primitive condivise di controller/runtime in plugin-sdk/realtime-voice.
  2. Sposta le superfici in bundle sul controller condiviso: browser relay, handoff managed-room, voice-call realtime, voice-call streaming STT, Google Meet realtime e push-to-talk nativo.
  3. Sostituisci le vecchie famiglie RPC di Talk con l’API finale talk.session.* e talk.client.*.
  4. Pubblicizza un unico canale di eventi Talk live in Gateway hello-ok.features.events: talk.event.
  5. Elimina il vecchio endpoint HTTP realtime e qualsiasi percorso di override delle istruzioni al momento della richiesta.
Il nuovo codice non dovrebbe chiamare direttamente createTalkEventSequencer(...), salvo che stia implementando un adapter di basso livello o una fixture di test. Preferisci il controller condiviso così gli eventi con scope di turno non possono essere emessi senza un id di turno, le chiamate obsolete turnEnd / turnCancel non possono cancellare un turno attivo più recente, e gli eventi del ciclo di vita dell’audio in uscita restano coerenti tra telefonia, riunioni, browser relay, handoff managed-room e client Talk nativi. La forma dell’API pubblica target è:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
  mode: "realtime",
  transport: "gateway-relay",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });

// Client-owned provider session API.
await gateway.request("talk.client.create", {
  mode: "realtime",
  transport: "webrtc",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
Le sessioni WebRTC/provider-websocket di proprietà del browser usano talk.client.create, perché il browser possiede la negoziazione del provider e il trasporto media, mentre il Gateway possiede credenziali, istruzioni e policy degli strumenti. talk.session.* è la superficie comune gestita dal Gateway per sessioni realtime gateway-relay, trascrizione gateway-relay e STT/TTS native managed-room. Le configurazioni legacy che mettevano selettori realtime accanto a talk.provider / talk.providers dovrebbero essere riparate con openclaw doctor --fix; Talk a runtime non reinterpreta la configurazione del provider speech/TTS come configurazione del provider realtime. Le combinazioni supportate di talk.session.create sono intenzionalmente ridotte:
ModalitàTrasportoBrainProprietarioNote
realtimegateway-relayagent-consultGatewayAudio provider full-duplex bridged tramite il Gateway; le chiamate agli strumenti vengono instradate attraverso lo strumento agent-consult.
transcriptiongateway-relaynoneGatewaySolo STT in streaming; i chiamanti inviano audio in input e ricevono eventi di trascrizione.
stt-ttsmanaged-roomagent-consultStanza nativa/clientStanze in stile push-to-talk e walkie-talkie dove il client possiede acquisizione/riproduzione e il Gateway possiede lo stato del turno.
stt-ttsmanaged-roomdirect-toolsStanza nativa/clientModalità stanza solo admin per superfici first-party affidabili che eseguono direttamente azioni strumento del Gateway.
Mappa dei metodi rimossi:
VecchioNuovo
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput or talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
Anche il vocabolario di controllo unificato è deliberatamente ristretto:
MetodoSi applica aContratto
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayAccoda un chunk audio PCM base64 alla sessione provider posseduta dalla stessa connessione Gateway.
talk.session.startTurnstt-tts/managed-roomAvvia un turno utente managed-room.
talk.session.endTurnstt-tts/managed-roomTermina il turno attivo dopo la validazione del turno obsoleto.
talk.session.cancelTurntutte le sessioni di proprietà del GatewayAnnulla il lavoro attivo di acquisizione/provider/agente/TTS per un turno.
talk.session.cancelOutputrealtime/gateway-relayInterrompe l’output audio dell’assistente senza necessariamente terminare il turno utente.
talk.session.submitToolResultrealtime/gateway-relayCompleta una chiamata a strumento del provider emessa dal relay; passa options.willContinue per output intermedio o options.suppressResponse per soddisfare la chiamata senza un’altra risposta dell’assistente.
talk.session.closetutte le sessioni unificateInterrompe le sessioni relay o revoca lo stato managed-room, poi dimentica l’id della sessione unificata.
Non introdurre casi speciali per provider o piattaforme nel core per far funzionare questo. Il core possiede la semantica delle sessioni Talk. I Plugin provider possiedono la configurazione delle sessioni dei vendor. Le chiamate vocali e Google Meet possiedono gli adattatori di telefonia/riunione. Browser e app native possiedono l’esperienza utente di acquisizione/riproduzione del dispositivo.

Criterio di compatibilità

Per i Plugin esterni, il lavoro di compatibilità segue questo ordine:
  1. aggiungere il nuovo contratto
  2. mantenere il vecchio comportamento collegato tramite un adattatore di compatibilità
  3. emettere una diagnostica o un avviso che indichi il vecchio percorso e il sostituto
  4. coprire entrambi i percorsi nei test
  5. documentare la deprecazione e il percorso di migrazione
  6. rimuovere solo dopo la finestra di migrazione annunciata, di solito in una release major
I maintainer possono verificare la coda di migrazione corrente con pnpm plugins:boundary-report. Usa pnpm plugins:boundary-report:summary per conteggi compatti, --owner <id> per un Plugin o un proprietario di compatibilità, e pnpm plugins:boundary-report:ci quando un gate CI deve fallire su record di compatibilità scaduti, import SDK riservati tra proprietari o sottopercorsi SDK riservati inutilizzati. Il report raggruppa i record di compatibilità deprecati per data di rimozione, conta i riferimenti locali in codice/docs, evidenzia gli import SDK riservati tra proprietari e riassume il bridge SDK privato dell’host di memoria, così la pulizia della compatibilità resta esplicita invece di affidarsi a ricerche ad hoc. I sottopercorsi SDK riservati devono avere un uso del proprietario tracciato; gli export di helper riservati inutilizzati devono essere rimossi dall’SDK pubblico. Se un campo manifest è ancora accettato, gli autori di Plugin possono continuare a usarlo finché la documentazione e le diagnostiche non dicono altrimenti. Il nuovo codice dovrebbe preferire il sostituto documentato, ma i Plugin esistenti non dovrebbero rompersi durante le normali release minor.

Come migrare

1

Migra gli helper di caricamento/scrittura della configurazione runtime

I Plugin inclusi dovrebbero smettere di chiamare direttamente api.runtime.config.loadConfig() e api.runtime.config.writeConfigFile(...). Preferisci la configurazione che è già stata passata nel percorso di chiamata attivo. Gli handler a lunga durata che hanno bisogno dello snapshot del processo corrente possono usare api.runtime.config.current(). Gli strumenti agent a lunga durata dovrebbero usare ctx.getRuntimeConfig() del contesto dello strumento dentro execute, così uno strumento creato prima di una scrittura della configurazione vede comunque la configurazione runtime aggiornata.Le scritture della configurazione devono passare dagli helper transazionali e scegliere una policy post-scrittura:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Usa afterWrite: { mode: "restart", reason: "..." } quando il chiamante sa che la modifica richiede un riavvio pulito del Gateway, e afterWrite: { mode: "none", reason: "..." } solo quando il chiamante possiede il follow-up e vuole deliberatamente sopprimere il pianificatore di reload. I risultati della mutazione includono un riepilogo followUp tipizzato per test e logging; il Gateway resta responsabile dell’applicazione o pianificazione del riavvio. loadConfig e writeConfigFile restano helper di compatibilità deprecati per i Plugin esterni durante la finestra di migrazione e avvisano una sola volta con il codice di compatibilità runtime-config-load-write. I Plugin inclusi e il codice runtime del repo sono protetti da guardrail scanner in pnpm check:deprecated-api-usage e pnpm check:no-runtime-action-load-config: il nuovo uso nei Plugin di produzione fallisce direttamente, le scritture dirette della configurazione falliscono, i metodi del server Gateway devono usare lo snapshot runtime della richiesta, gli helper runtime di invio/azione/client del canale devono ricevere la configurazione dal loro confine, e i moduli runtime a lunga durata hanno zero chiamate ambientali loadConfig() consentite.Il nuovo codice Plugin dovrebbe anche evitare di importare il barrel di compatibilità ampio openclaw/plugin-sdk/config-runtime. Usa il sottopercorso SDK ristretto che corrisponde al compito:
EsigenzaImport
Tipi di configurazione come OpenClawConfigopenclaw/plugin-sdk/config-contracts
Asserzioni su configurazione già caricata e lookup della configurazione di entry del Pluginopenclaw/plugin-sdk/plugin-config-runtime
Letture dello snapshot runtime correnteopenclaw/plugin-sdk/runtime-config-snapshot
Scritture della configurazioneopenclaw/plugin-sdk/config-mutation
Helper dell’archivio sessioniopenclaw/plugin-sdk/session-store-runtime
Configurazione tabella Markdownopenclaw/plugin-sdk/markdown-table-runtime
Helper runtime per policy di gruppoopenclaw/plugin-sdk/runtime-group-policy
Risoluzione input segretoopenclaw/plugin-sdk/secret-input-runtime
Override di modello/sessioneopenclaw/plugin-sdk/model-session-runtime
I Plugin inclusi e i loro test sono protetti dallo scanner contro il barrel ampio, così import e mock restano locali al comportamento di cui hanno bisogno. Il barrel ampio esiste ancora per la compatibilità esterna, ma il nuovo codice non dovrebbe dipendere da esso.
2

Migra le estensioni dei risultati degli strumenti Pi al middleware

I Plugin inclusi devono sostituire gli handler dei risultati degli strumenti solo Pi api.registerEmbeddedExtensionFactory(...) con middleware neutro rispetto al runtime.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["pi", "codex"],
});
Aggiorna il manifest del Plugin nello stesso momento:
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"]
  }
}
I Plugin esterni non possono registrare middleware per risultati degli strumenti perché può riscrivere l’output degli strumenti ad alta fiducia prima che il modello lo veda.
3

Migra gli handler nativi per approvazioni ai fatti di capability

I Plugin di canale capaci di approvazione ora espongono il comportamento di approvazione nativo tramite approvalCapability.nativeRuntime più il registro condiviso del contesto runtime.Modifiche chiave:
  • Sostituisci approvalCapability.handler.loadRuntime(...) con approvalCapability.nativeRuntime
  • Sposta auth/delivery specifici delle approvazioni dal cablaggio legacy plugin.auth / plugin.approvals a approvalCapability
  • ChannelPlugin.approvals è stato rimosso dal contratto pubblico dei Plugin di canale; sposta i campi delivery/native/render in approvalCapability
  • plugin.auth resta solo per i flussi di login/logout dei canali; gli hook di auth per approvazioni lì non vengono più letti dal core
  • Registra oggetti runtime posseduti dal canale, come client, token o app Bolt, tramite openclaw/plugin-sdk/channel-runtime-context
  • Non inviare avvisi di reroute posseduti dal Plugin dagli handler di approvazione nativi; il core ora possiede gli avvisi di inoltro altrove dai risultati di delivery effettivi
  • Quando passi channelRuntime in createChannelManager(...), fornisci una superficie reale createPluginRuntime().channel. Gli stub parziali vengono rifiutati.
Vedi /plugins/sdk-channel-plugins per il layout corrente della capability di approvazione.
4

Verifica il comportamento di fallback dei wrapper Windows

Se il tuo Plugin usa openclaw/plugin-sdk/windows-spawn, i wrapper Windows .cmd/.bat non risolti ora falliscono chiusi, a meno che tu non passi esplicitamente allowShellFallback: true.
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });

// After
const program = applyWindowsSpawnProgramPolicy({
  candidate,
  // Only set this for trusted compatibility callers that intentionally
  // accept shell-mediated fallback.
  allowShellFallback: true,
});
Se il tuo chiamante non dipende intenzionalmente dal fallback shell, non impostare allowShellFallback e gestisci invece l’errore lanciato.
5

Trova gli import deprecati

Cerca nel tuo Plugin gli import da una delle superfici deprecate:
grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
6

Sostituisci con import mirati

Ogni export dalla vecchia superficie mappa a uno specifico percorso di import moderno:
// Before (deprecated backwards-compatibility layer)
import {
  createChannelReplyPipeline,
  createPluginRuntimeStore,
  resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";

// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
Per gli helper lato host, usa il runtime Plugin iniettato invece di importare direttamente:
// Before (deprecated extension-api bridge)
import { runEmbeddedPiAgent } from "openclaw/extension-api";
const result = await runEmbeddedPiAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
Lo stesso pattern si applica agli altri helper bridge legacy:
Vecchio importEquivalente moderno
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
helper dell’archivio sessioniapi.runtime.agent.session.*
7

Sostituisci gli import infra-runtime ampi

openclaw/plugin-sdk/infra-runtime esiste ancora per la compatibilità esterna, ma il nuovo codice dovrebbe importare la superficie di helper mirata di cui ha effettivamente bisogno:
EsigenzaImport
Helper della coda eventi di sistemaopenclaw/plugin-sdk/system-event-runtime
Helper di risveglio, evento e visibilità Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Svuotamento della coda di delivery in sospesoopenclaw/plugin-sdk/delivery-queue-runtime
Telemetria dell’attività di canaleopenclaw/plugin-sdk/channel-activity-runtime
Cache di deduplicazione in memoriaopenclaw/plugin-sdk/dedupe-runtime
Helper sicuri per percorsi file/media localiopenclaw/plugin-sdk/file-access-runtime
Fetch consapevole del dispatcheropenclaw/plugin-sdk/runtime-fetch
Helper proxy e fetch protettoopenclaw/plugin-sdk/fetch-runtime
Tipi di policy del dispatcher SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Tipi di richiesta/risoluzione approvazioneopenclaw/plugin-sdk/approval-runtime
Payload di risposta approvazione e helper di comandoopenclaw/plugin-sdk/approval-reply-runtime
Helper di formattazione degli erroriopenclaw/plugin-sdk/error-runtime
Attese della prontezza del trasportoopenclaw/plugin-sdk/transport-ready-runtime
Helper per token sicuriopenclaw/plugin-sdk/secure-random-runtime
Concorrenza limitata per task asincroniopenclaw/plugin-sdk/concurrency-runtime
Coercizione numericaopenclaw/plugin-sdk/number-runtime
Lock asincrono locale al processoopenclaw/plugin-sdk/async-lock-runtime
Lock su fileopenclaw/plugin-sdk/file-lock
I Plugin inclusi sono protetti dallo scanner contro infra-runtime, quindi il codice del repo non può regredire al barrel ampio.
8

Migra gli helper di route canale

Il nuovo codice di route canale dovrebbe usare openclaw/plugin-sdk/channel-route. I nomi precedenti di route-key e comparable-target restano alias di compatibilità durante la finestra di migrazione, ma i nuovi Plugin dovrebbero usare i nomi di route che descrivono direttamente il comportamento:
Helper precedenteHelper moderno
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Gli helper di route moderni normalizzano { channel, to, accountId, threadId } in modo coerente tra approvazioni native, soppressione delle risposte, deduplicazione in ingresso, consegna Cron e routing delle sessioni. Se il tuo Plugin possiede una grammatica di destinazione personalizzata, usa resolveChannelRouteTargetWithParser(...) per adattare quel parser allo stesso contratto di destinazione della route.
9

Build and test

pnpm build
pnpm test -- my-plugin/

Riferimento dei percorsi di importazione

Percorso di importazioneScopoEsportazioni chiave
plugin-sdk/plugin-entryHelper canonico per l’entry del plugindefinePluginEntry
plugin-sdk/coreRiesportazione ombrello legacy per definizioni/builder di entry di canaledefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaEsportazione dello schema di configurazione radiceOpenClawSchema
plugin-sdk/provider-entryHelper di entry per provider singolodefineSingleProviderPluginEntry
plugin-sdk/channel-coreDefinizioni e builder focalizzati per entry di canaledefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupHelper condivisi per la procedura guidata di configurazionePrompt allowlist, builder dello stato di configurazione
plugin-sdk/setup-runtimeHelper runtime per il tempo di configurazioneAdattatori di patch setup import-safe, helper per note di lookup, promptResolvedAllowFrom, splitSetupEntries, proxy di setup delegati
plugin-sdk/setup-adapter-runtimeAlias deprecato dell’adattatore di setupUsa plugin-sdk/setup-runtime
plugin-sdk/setup-toolsHelper per strumenti di setupformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreHelper multi-accountHelper per lista account/configurazione/action-gate
plugin-sdk/account-idHelper per account-idDEFAULT_ACCOUNT_ID, normalizzazione account-id
plugin-sdk/account-resolutionHelper di lookup accountHelper di lookup account + fallback predefinito
plugin-sdk/account-helpersHelper account miratiHelper lista account/azione account
plugin-sdk/channel-setupAdattatori della procedura guidata di setupcreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, più DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitive di associazione DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineCablaggio di prefisso risposta, digitazione e consegna sorgentecreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFactory di adattatori di configurazione e helper di accesso DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaBuilder di schema di configurazionePrimitive condivise dello schema di configurazione canale e solo il builder generico
plugin-sdk/bundled-channel-config-schemaSchemi di configurazione bundledSolo Plugin bundled mantenuti da OpenClaw; i nuovi Plugin devono definire schemi locali al Plugin
plugin-sdk/channel-config-schema-legacySchemi di configurazione bundled deprecatiSolo alias di compatibilità; usa plugin-sdk/bundled-channel-config-schema per Plugin bundled mantenuti
plugin-sdk/telegram-command-configHelper di configurazione comandi TelegramNormalizzazione del nome comando, trimming della descrizione, validazione duplicati/conflitti
plugin-sdk/channel-policyRisoluzione policy gruppo/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleHelper per stato account e lifecycle dello stream bozzecreateAccountStatusSink, helper di finalizzazione anteprima bozza
plugin-sdk/inbound-envelopeHelper per envelope inboundHelper condivisi per route + builder envelope
plugin-sdk/inbound-reply-dispatchHelper per risposte inboundHelper condivisi di registrazione e dispatch
plugin-sdk/messaging-targetsParsing target di messaggisticaHelper di parsing/matching target
plugin-sdk/outbound-mediaHelper media outboundCaricamento media outbound condiviso
plugin-sdk/outbound-send-depsHelper per dipendenze di invio outboundLookup leggero resolveOutboundSendDep senza importare l’intero runtime outbound
plugin-sdk/outbound-runtimeHelper runtime outboundHelper per consegna outbound, delegato identity/send, sessione, formattazione e pianificazione payload
plugin-sdk/thread-bindings-runtimeHelper di thread-bindingHelper di lifecycle e adattatori di thread-binding
plugin-sdk/agent-media-payloadHelper payload media legacyBuilder payload media agente per layout di campi legacy
plugin-sdk/channel-runtimeShim di compatibilità deprecatoSolo utility runtime canale legacy
plugin-sdk/channel-send-resultTipi di risultato invioTipi di risultato risposta
plugin-sdk/runtime-storeArchiviazione persistente PlugincreatePluginRuntimeStore
plugin-sdk/runtimeHelper runtime ampiHelper runtime/logging/backup/installazione Plugin
plugin-sdk/runtime-envHelper runtime env miratiLogger/runtime env, timeout, retry e helper di backoff
plugin-sdk/plugin-runtimeHelper runtime Plugin condivisiHelper per comandi/hook/http/interattivi del Plugin
plugin-sdk/hook-runtimeHelper della pipeline hookHelper condivisi della pipeline hook Webhook/interna
plugin-sdk/lazy-runtimeHelper lazy runtimecreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeHelper processiHelper exec condivisi
plugin-sdk/cli-runtimeHelper runtime CLIFormattazione comandi, attese, helper di versione
plugin-sdk/gateway-runtimeHelper GatewayClient Gateway, helper di avvio pronto per event loop e helper patch stato canale
plugin-sdk/config-runtimeShim deprecato di compatibilità configurazionePreferisci config-contracts, plugin-config-runtime, runtime-config-snapshot e config-mutation
plugin-sdk/telegram-command-configHelper comandi TelegramHelper di validazione comandi Telegram con fallback stabile quando la superficie del contratto Telegram bundled non è disponibile
plugin-sdk/approval-runtimeHelper prompt di approvazionePayload approvazione exec/Plugin, helper capability/profilo approvazione, helper routing/runtime approvazione nativa e formattazione percorso display approvazione strutturata
plugin-sdk/approval-auth-runtimeHelper auth approvazioneRisoluzione approvatore, auth azione nella stessa chat
plugin-sdk/approval-client-runtimeHelper client approvazioneHelper profilo/filtro approvazione exec nativa
plugin-sdk/approval-delivery-runtimeHelper consegna approvazioneAdattatori capability/consegna approvazione nativa
plugin-sdk/approval-gateway-runtimeHelper Gateway approvazioneHelper condiviso di risoluzione Gateway approvazione
plugin-sdk/approval-handler-adapter-runtimeHelper adattatore approvazioneHelper leggeri di caricamento adattatore approvazione nativa per entrypoint canale hot
plugin-sdk/approval-handler-runtimeHelper handler approvazioneHelper runtime più ampi per handler approvazione; preferisci le interfacce adattatore/Gateway più mirate quando sono sufficienti
plugin-sdk/approval-native-runtimeHelper target approvazioneHelper nativi per binding target/account di approvazione
plugin-sdk/approval-reply-runtimeHelper risposta approvazioneHelper payload risposta approvazione exec/Plugin
plugin-sdk/channel-runtime-contextHelper runtime-context canaleHelper generici register/get/watch runtime-context canale
plugin-sdk/security-runtimeHelper sicurezzaHelper condivisi per trust, gating DM, file/percorsi root-bounded, contenuto esterno e raccolta segreti
plugin-sdk/ssrf-policyHelper policy SSRFHelper allowlist host e policy private-network
plugin-sdk/ssrf-runtimeHelper runtime SSRFDispatcher pinned, fetch protetto, helper policy SSRF
plugin-sdk/system-event-runtimeHelper eventi di sistemaenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeHelper HeartbeatHelper wake, evento e visibilità Heartbeat
plugin-sdk/delivery-queue-runtimeHelper coda di consegnadrainPendingDeliveries
plugin-sdk/channel-activity-runtimeHelper attività canalerecordChannelActivity
plugin-sdk/dedupe-runtimeHelper dedupeCache dedupe in memoria
plugin-sdk/file-access-runtimeHelper accesso fileHelper sicuri per percorso file/media locale
plugin-sdk/transport-ready-runtimeHelper prontezza trasportowaitForTransportReady
plugin-sdk/collection-runtimeHelper cache limitatapruneMapToMaxSize
plugin-sdk/diagnostic-runtimeHelper gating diagnosticoisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeHelper formattazione erroriformatUncaughtError, isApprovalNotFoundError, helper grafo errori
plugin-sdk/fetch-runtimeHelper fetch/proxy wrappatiresolveFetch, helper proxy, helper opzioni EnvHttpProxyAgent
plugin-sdk/host-runtimeHelper normalizzazione hostnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeHelper retryRetryConfig, retryAsync, runner policy
plugin-sdk/allow-fromFormattazione allowlistformatAllowFromLowercase
plugin-sdk/allowlist-resolutionMapping input allowlistmapAllowlistResolutionInputs
plugin-sdk/command-authGating comandi e helper superficie comandiresolveControlCommandGate, helper autorizzazione mittente, helper registro comandi inclusa formattazione menu argomenti dinamici
plugin-sdk/command-statusRenderer stato/aiuto comandibuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputParsing input segretoHelper input segreto
plugin-sdk/webhook-ingressHelper richieste WebhookUtility target Webhook
plugin-sdk/webhook-request-guardsHelper guard corpo WebhookHelper lettura/limite corpo richiesta
plugin-sdk/reply-runtimeRuntime risposta condivisoDispatch inbound, Heartbeat, planner risposta, chunking
plugin-sdk/reply-dispatch-runtimeHelper dispatch risposta miratiFinalizzazione, dispatch provider e helper etichetta conversazione
plugin-sdk/reply-historyHelper cronologia rispostebuildHistoryContext, buildPendingHistoryContextFromMap, recordPendingHistoryEntry, clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePianificazione riferimento rispostacreateReplyReferencePlanner
plugin-sdk/reply-chunkingHelper chunk rispostaHelper chunking testo/markdown
plugin-sdk/session-store-runtimeHelper session storeHelper percorso store + updated-at
plugin-sdk/state-pathsHelper percorsi statoHelper directory stato e OAuth
plugin-sdk/routingHelper routing/session-keyresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, helper normalizzazione session-key
plugin-sdk/status-helpersHelper stato canaleBuilder riepilogo stato canale/account, predefiniti runtime-state, helper metadata issue
plugin-sdk/target-resolver-runtimeHelper resolver targetHelper resolver target condivisi
plugin-sdk/string-normalization-runtimeHelper normalizzazione stringheHelper normalizzazione slug/stringhe
plugin-sdk/request-urlHelper URL richiestaEstrae URL stringa da input simili a richiesta
plugin-sdk/run-commandHelper comandi temporizzatiRunner comandi temporizzati con stdout/stderr normalizzati
plugin-sdk/param-readersReader parametriReader parametri comuni per tool/CLI
plugin-sdk/tool-payloadEstrazione dei payload degli strumentiEstrae payload normalizzati dagli oggetti risultato degli strumenti
plugin-sdk/tool-sendEstrazione dell’invio dello strumentoEstrae i campi di destinazione canonici per l’invio dagli argomenti dello strumento
plugin-sdk/temp-pathHelper per percorsi temporaneiHelper condivisi per percorsi di download temporanei
plugin-sdk/logging-coreHelper di loggingHelper per logger di sottosistema e redazione
plugin-sdk/markdown-table-runtimeHelper per tabelle MarkdownHelper per la modalità tabella Markdown
plugin-sdk/reply-payloadTipi di risposta ai messaggiTipi di payload di risposta
plugin-sdk/provider-setupHelper curati per la configurazione di provider locali/self-hostedHelper di rilevamento/configurazione per provider self-hosted
plugin-sdk/self-hosted-provider-setupHelper mirati per la configurazione di provider self-hosted compatibili con OpenAIGli stessi helper di rilevamento/configurazione per provider self-hosted
plugin-sdk/provider-auth-runtimeHelper di autenticazione runtime dei providerHelper per la risoluzione runtime delle chiavi API
plugin-sdk/provider-auth-api-keyHelper per la configurazione delle chiavi API dei providerHelper per onboarding/scrittura del profilo delle chiavi API
plugin-sdk/provider-auth-resultHelper per i risultati di autenticazione dei providerBuilder standard per risultati di autenticazione OAuth
plugin-sdk/provider-selection-runtimeHelper per la selezione dei providerSelezione del provider configurato o automatica e unione della configurazione grezza del provider
plugin-sdk/provider-env-varsHelper per variabili d’ambiente dei providerHelper per la ricerca delle variabili d’ambiente di autenticazione dei provider
plugin-sdk/provider-model-sharedHelper condivisi per modelli/replay dei providerProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, builder condivisi di policy di replay, helper per endpoint dei provider e helper per la normalizzazione degli ID modello
plugin-sdk/provider-catalog-sharedHelper condivisi per il catalogo dei providerfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardPatch di onboarding dei providerHelper per la configurazione di onboarding
plugin-sdk/provider-httpHelper HTTP dei providerHelper generici per funzionalità HTTP/endpoint dei provider, inclusi helper per moduli multipart di trascrizione audio
plugin-sdk/provider-web-fetchHelper web-fetch dei providerHelper per registrazione/cache dei provider web-fetch
plugin-sdk/provider-web-search-config-contractHelper di configurazione web-search dei providerHelper mirati per configurazione/credenziali web-search per provider che non necessitano del cablaggio di abilitazione dei plugin
plugin-sdk/provider-web-search-contractHelper per il contratto web-search dei providerHelper mirati per il contratto di configurazione/credenziali web-search, come createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig e setter/getter di credenziali con ambito
plugin-sdk/provider-web-searchHelper web-search dei providerHelper runtime per registrazione/cache dei provider web-search
plugin-sdk/provider-toolsHelper di compatibilità strumenti/schema dei providerProviderToolCompatFamily, buildProviderToolCompatFamilyHooks e pulizia schema + diagnostica Gemini
plugin-sdk/provider-usageHelper di utilizzo dei providerfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage e altri helper di utilizzo dei provider
plugin-sdk/provider-streamHelper wrapper per stream dei providerProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, tipi di wrapper di stream e helper wrapper condivisi Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimeHelper di trasporto dei providerHelper di trasporto nativi dei provider, come fetch protetto, trasformazioni dei messaggi di trasporto e stream di eventi di trasporto scrivibili
plugin-sdk/keyed-async-queueCoda asincrona ordinataKeyedAsyncQueue
plugin-sdk/media-runtimeHelper multimediali condivisiHelper per fetch/trasformazione/archiviazione dei media, rilevamento delle dimensioni video basato su ffprobe e builder di payload multimediali
plugin-sdk/media-generation-runtimeHelper condivisi per generazione multimedialeHelper condivisi di failover, selezione dei candidati e messaggistica per modelli mancanti per la generazione di immagini/video/musica
plugin-sdk/media-understandingHelper di comprensione multimedialeTipi di provider per comprensione multimediale più export di helper immagine/audio rivolti ai provider
plugin-sdk/text-runtimeExport di compatibilità testo ampio deprecatoUsa string-coerce-runtime, text-chunking, text-utility-runtime e logging-core
plugin-sdk/text-chunkingHelper per segmentazione del testoHelper per la segmentazione del testo in uscita
plugin-sdk/speechHelper speechTipi di provider speech più helper rivolti ai provider per direttive, registro e validazione, e builder TTS compatibile con OpenAI
plugin-sdk/speech-coreCore speech condivisoTipi di provider speech, registro, direttive, normalizzazione
plugin-sdk/realtime-transcriptionHelper per trascrizione in tempo realeTipi di provider, helper di registro e helper condiviso per sessioni WebSocket
plugin-sdk/realtime-voiceHelper per voce in tempo realeTipi di provider, helper di registro/risoluzione, helper per sessioni bridge, code condivise di risposta vocale dell’agente, integrità trascrizione/eventi, soppressione dell’eco e helper rapidi per consultazione del contesto
plugin-sdk/image-generationHelper per generazione di immaginiTipi di provider per generazione di immagini più helper per asset immagine/data URL e builder di provider di immagini compatibile con OpenAI
plugin-sdk/image-generation-coreCore condiviso per generazione di immaginiTipi di generazione di immagini, failover, autenticazione e helper di registro
plugin-sdk/music-generationHelper per generazione musicaleTipi di provider/richiesta/risultato per generazione musicale
plugin-sdk/music-generation-coreCore condiviso per generazione musicaleTipi di generazione musicale, helper di failover, ricerca provider e parsing dei riferimenti modello
plugin-sdk/video-generationHelper per generazione videoTipi di provider/richiesta/risultato per generazione video
plugin-sdk/video-generation-coreCore condiviso per generazione videoTipi di generazione video, helper di failover, ricerca provider e parsing dei riferimenti modello
plugin-sdk/interactive-runtimeHelper per risposte interattiveNormalizzazione/riduzione del payload di risposta interattiva
plugin-sdk/channel-config-primitivesPrimitive di configurazione dei canaliPrimitive mirate per schema di configurazione dei canali
plugin-sdk/channel-config-writesHelper di scrittura della configurazione dei canaliHelper di autorizzazione alla scrittura della configurazione dei canali
plugin-sdk/channel-plugin-commonPrelude condiviso dei canaliExport condivisi del prelude dei plugin di canale
plugin-sdk/channel-statusHelper di stato dei canaliHelper condivisi per snapshot/riepilogo dello stato dei canali
plugin-sdk/allowlist-config-editHelper di configurazione allowlistHelper di modifica/lettura della configurazione allowlist
plugin-sdk/group-accessHelper di accesso ai gruppiHelper condivisi per decisioni di accesso ai gruppi
plugin-sdk/direct-dmHelper per DM direttiHelper condivisi di autenticazione/guardia per DM diretti
plugin-sdk/extension-sharedHelper condivisi delle estensioniPrimitive di helper per canale passivo/stato e proxy ambientale
plugin-sdk/webhook-targetsHelper per target WebhookRegistro dei target Webhook e helper per installazione delle route
plugin-sdk/webhook-pathAlias deprecato per percorso webhookUsa plugin-sdk/webhook-ingress
plugin-sdk/web-mediaHelper condivisi per media webHelper per il caricamento di media remoti/locali
plugin-sdk/zodRiesportazione deprecata di compatibilità ZodImporta zod direttamente da zod
plugin-sdk/memory-coreHelper memory-core inclusiSuperficie helper per gestore/configurazione/file/CLI della memoria
plugin-sdk/memory-core-engine-runtimeFacciata runtime del motore di memoriaFacciata runtime per indice/ricerca della memoria
plugin-sdk/memory-core-host-engine-foundationMotore foundation dell’host di memoriaExport del motore foundation dell’host di memoria
plugin-sdk/memory-core-host-engine-embeddingsMotore embedding dell’host di memoriaContratti di embedding della memoria, accesso al registro, provider locale e helper generici batch/remoti; i provider remoti concreti risiedono nei rispettivi plugin proprietari
plugin-sdk/memory-core-host-engine-qmdMotore QMD dell’host di memoriaExport del motore QMD dell’host di memoria
plugin-sdk/memory-core-host-engine-storageMotore di archiviazione dell’host di memoriaExport del motore di archiviazione dell’host di memoria
plugin-sdk/memory-core-host-multimodalHelper multimodali dell’host di memoriaHelper multimodali dell’host di memoria
plugin-sdk/memory-core-host-queryHelper di query dell’host di memoriaHelper di query dell’host di memoria
plugin-sdk/memory-core-host-secretHelper per segreti dell’host di memoriaHelper per segreti dell’host di memoria
plugin-sdk/memory-core-host-eventsAlias deprecato per eventi di memoriaUsa plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusHelper di stato dell’host di memoriaHelper di stato dell’host di memoria
plugin-sdk/memory-core-host-runtime-cliRuntime CLI dell’host di memoriaHelper runtime CLI dell’host di memoria
plugin-sdk/memory-core-host-runtime-coreRuntime core dell’host di memoriaHelper runtime core dell’host di memoria
plugin-sdk/memory-core-host-runtime-filesHelper file/runtime dell’host di memoriaHelper file/runtime dell’host di memoria
plugin-sdk/memory-host-coreAlias runtime core dell’host di memoriaAlias indipendente dal vendor per helper runtime core dell’host di memoria
plugin-sdk/memory-host-eventsAlias journal eventi dell’host di memoriaAlias indipendente dal vendor per helper journal eventi dell’host di memoria
plugin-sdk/memory-host-filesAlias deprecato per file/runtime della memoriaUsa plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownHelper markdown gestitoHelper markdown gestito condivisi per plugin adiacenti alla memoria
plugin-sdk/memory-host-searchFacciata di ricerca Active MemoryFacciata runtime lazy del gestore di ricerca Active Memory
plugin-sdk/memory-host-statusAlias deprecato per stato dell’host di memoriaUsa plugin-sdk/memory-core-host-status
plugin-sdk/testingUtilità di testBarrel di compatibilità deprecato locale al repo; usa sotto-percorsi di test mirati locali al repo come plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env e plugin-sdk/test-fixtures
Questa tabella è intenzionalmente il sottoinsieme comune per la migrazione, non l’intera superficie dell’SDK. L’inventario degli entrypoint del compilatore si trova in scripts/lib/plugin-sdk-entrypoints.json; gli export dei pacchetti sono generati dal sottoinsieme pubblico. I seam helper riservati dei plugin in bundle sono stati rimossi dalla mappa degli export dell’SDK pubblico, tranne per le facade di compatibilità esplicitamente documentate come lo shim deprecato plugin-sdk/discord mantenuto per il pacchetto pubblicato @openclaw/discord@2026.3.13. Gli helper specifici del proprietario vivono all’interno del pacchetto del plugin proprietario; il comportamento host condiviso dovrebbe passare attraverso contratti SDK generici come plugin-sdk/gateway-runtime, plugin-sdk/security-runtime e plugin-sdk/plugin-config-runtime. Usa l’import più ristretto che corrisponde al compito. Se non riesci a trovare un export, controlla il sorgente in src/plugin-sdk/ oppure chiedi ai maintainer quale contratto generico dovrebbe possederlo.

Deprecazioni attive

Deprecazioni più ristrette che si applicano all’SDK dei plugin, al contratto provider, alla superficie runtime e al manifesto. Ognuna funziona ancora oggi, ma sarà rimossa in una futura release major. La voce sotto ogni elemento mappa la vecchia API alla sua sostituzione canonica.
Vecchio (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Nuovo (openclaw/plugin-sdk/command-status): stesse firme, stessi export - solo importati dal subpath più ristretto. command-auth li riesporta come stub di compatibilità.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Vecchio: resolveInboundMentionRequirement({ facts, policy }) e shouldDropInboundForMention(...) da openclaw/plugin-sdk/channel-inbound o openclaw/plugin-sdk/channel-mention-gating.Nuovo: resolveInboundMentionDecision({ facts, policy }) - restituisce un singolo oggetto decisione invece di due chiamate separate.I plugin di canale downstream (Slack, Discord, Matrix, MS Teams) sono già passati a questo modello.
openclaw/plugin-sdk/channel-runtime è uno shim di compatibilità per plugin di canale più vecchi. Non importarlo dal nuovo codice; usa openclaw/plugin-sdk/channel-runtime-context per registrare oggetti runtime.Gli helper channelActions* in openclaw/plugin-sdk/channel-actions sono deprecati insieme agli export di canale “actions” grezzi. Esponi invece le capability tramite la superficie semantica presentation - i plugin di canale dichiarano cosa renderizzano (card, pulsanti, select) invece di quali nomi di azione grezzi accettano.
Vecchio: factory tool() da openclaw/plugin-sdk/provider-web-search.Nuovo: implementa createTool(...) direttamente sul plugin provider. OpenClaw non ha più bisogno dell’helper SDK per registrare il wrapper dello strumento.
Vecchio: formatInboundEnvelope(...) (e ChannelMessageForAgent.channelEnvelope) per creare un envelope prompt in testo semplice e piatto dai messaggi di canale in ingresso.Nuovo: BodyForAgent più blocchi strutturati di contesto utente. I plugin di canale allegano metadati di routing (thread, topic, reply-to, reactions) come campi tipizzati invece di concatenarli in una stringa prompt. L’helper formatAgentEnvelope(...) è ancora supportato per envelope sintetizzati rivolti all’assistente, ma gli envelope in ingresso in testo semplice sono in fase di eliminazione.Aree interessate: inbound_claim, message_received e qualsiasi plugin di canale personalizzato che post-elaborava il testo channelEnvelope.
Quattro alias di tipo discovery sono ora wrapper sottili sui tipi dell’era catalogo:
Vecchio aliasNuovo tipo
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
In più la vecchia raccolta statica ProviderCapabilities - i plugin provider dovrebbero usare hook provider espliciti come buildReplayPolicy, normalizeToolSchemas e wrapStreamFn invece di un oggetto statico.
Vecchio (tre hook separati su ProviderThinkingPolicy): isBinaryThinking(ctx), supportsXHighThinking(ctx) e resolveDefaultThinkingLevel(ctx).Nuovo: un singolo resolveThinkingProfile(ctx) che restituisce un ProviderThinkingProfile con id canonico, label opzionale e lista ordinata dei livelli. OpenClaw effettua automaticamente il downgrade dei valori memorizzati obsoleti in base al rango del profilo.Implementa un hook invece di tre. Gli hook legacy continuano a funzionare durante la finestra di deprecazione, ma non sono composti con il risultato del profilo.
Vecchio: implementare resolveExternalOAuthProfiles(...) senza dichiarare il provider nel manifesto del plugin.Nuovo: dichiara contracts.externalAuthProviders nel manifesto del plugin e implementa resolveExternalAuthProfiles(...). Il vecchio percorso di “auth fallback” emette un avviso a runtime e sarà rimosso.
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Vecchio campo del manifesto: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Nuovo: replica lo stesso lookup delle variabili d’ambiente in setup.providers[].envVars nel manifesto. Questo consolida i metadati env di setup/status in un unico posto ed evita di avviare il runtime del plugin solo per rispondere ai lookup delle variabili d’ambiente.providerAuthEnvVars resta supportato tramite un adattatore di compatibilità finché la finestra di deprecazione non si chiude.
Vecchio: tre chiamate separate - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Nuovo: una chiamata sull’API memory-state - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Stessi slot, singola chiamata di registrazione. Gli helper di memoria additivi (registerMemoryPromptSupplement, registerMemoryCorpusSupplement, registerMemoryEmbeddingProvider) non sono interessati.
Due alias di tipo legacy ancora esportati da src/plugins/runtime/types.ts:
VecchioNuovo
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
Il metodo runtime readSession è deprecato a favore di getSessionMessages. Stessa firma; il vecchio metodo richiama quello nuovo.
Vecchio: runtime.tasks.flow (singolare) restituiva un accessor live per task-flow.Nuovo: runtime.tasks.managedFlows mantiene il runtime di mutazione TaskFlow gestito per i plugin che creano, aggiornano, annullano o eseguono task figli da un flow. Usa runtime.tasks.flows quando al plugin servono solo letture basate su DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Trattato sopra in “Come migrare → Migrare le estensioni dei risultati strumenti Pi al middleware”. Incluso qui per completezza: il percorso solo Pi rimosso api.registerEmbeddedExtensionFactory(...) è sostituito da api.registerAgentToolResultMiddleware(...) con un elenco runtime esplicito in contracts.agentToolResultMiddleware.
OpenClawSchemaType riesportato da openclaw/plugin-sdk è ora un alias di una sola riga per OpenClawConfig. Preferisci il nome canonico.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Le deprecazioni a livello di estensione (all’interno dei plugin di canale/provider in bundle sotto extensions/) sono tracciate nei rispettivi barrel api.ts e runtime-api.ts. Non influiscono sui contratti dei plugin di terze parti e non sono elencate qui. Se consumi direttamente il barrel locale di un plugin in bundle, leggi i commenti di deprecazione in quel barrel prima di aggiornare.

Tempistica di rimozione

QuandoCosa succede
OraLe superfici deprecate emettono avvisi a runtime
Prossima release majorLe superfici deprecate saranno rimosse; i plugin che le usano ancora falliranno
Tutti i plugin core sono già stati migrati. I plugin esterni dovrebbero migrare prima della prossima release major.

Soppressione temporanea degli avvisi

Imposta queste variabili d’ambiente mentre lavori alla migrazione:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Questa è una via d’uscita temporanea, non una soluzione permanente.

Correlati