Passer au contenu principal
OpenClaw est passé d’une large couche de rétrocompatibilité à une architecture de Plugin moderne avec des imports ciblés et documentés. Si votre Plugin a été créé avant la nouvelle architecture, ce guide vous aide à le migrer.

Ce qui change

L’ancien système de Plugin fournissait deux surfaces très ouvertes qui permettaient aux Plugins d’importer tout ce dont ils avaient besoin depuis un point d’entrée unique :
  • openclaw/plugin-sdk/compat - un import unique qui réexportait des dizaines d’assistants. Il a été introduit pour maintenir le fonctionnement des anciens Plugins basés sur des hooks pendant la construction de la nouvelle architecture de Plugin.
  • openclaw/plugin-sdk/infra-runtime - un large barrel d’assistants d’exécution qui mélangeait événements système, état Heartbeat, files de livraison, assistants fetch/proxy, assistants de fichiers, types d’approbation et utilitaires sans rapport.
  • openclaw/plugin-sdk/config-runtime - un large barrel de compatibilité de configuration qui conserve encore des assistants directs de chargement/écriture dépréciés pendant la fenêtre de migration.
  • openclaw/extension-api - un pont qui donnait aux Plugins un accès direct aux assistants côté hôte, comme l’exécuteur d’agent intégré.
  • api.registerEmbeddedExtensionFactory(...) - un hook d’extension groupée réservé à l’exécuteur intégré, désormais supprimé, qui pouvait observer les événements de l’exécuteur intégré tels que tool_result.
Les larges surfaces d’import sont maintenant dépréciées. Elles fonctionnent encore à l’exécution, mais les nouveaux Plugins ne doivent pas les utiliser, et les Plugins existants devraient migrer avant que la prochaine version majeure ne les supprime. L’API d’enregistrement de fabrique d’extension réservée à l’exécuteur intégré a été supprimée ; utilisez plutôt un middleware de résultat d’outil. OpenClaw ne supprime ni ne réinterprète un comportement de Plugin documenté dans le même changement qui introduit un remplacement. Les changements de contrat incompatibles doivent d’abord passer par un adaptateur de compatibilité, des diagnostics, de la documentation et une fenêtre de dépréciation. Cela s’applique aux imports SDK, champs de manifeste, API de configuration, hooks et comportements d’enregistrement à l’exécution.
La couche de rétrocompatibilité sera supprimée dans une future version majeure. Les Plugins qui importent encore depuis ces surfaces cesseront de fonctionner à ce moment-là. Les anciens enregistrements de fabrique d’extension intégrée ne se chargent déjà plus.

Pourquoi cela a changé

L’ancienne approche posait des problèmes :
  • Démarrage lent - importer un assistant chargeait des dizaines de modules sans rapport
  • Dépendances circulaires - les réexports larges facilitaient la création de cycles d’import
  • Surface d’API peu claire - aucun moyen de distinguer les exports stables des exports internes
Le SDK de Plugin moderne corrige cela : chaque chemin d’import (openclaw/plugin-sdk/\<subpath\>) est un petit module autonome, doté d’un objectif clair et d’un contrat documenté. Les coutures de commodité des anciens fournisseurs pour les canaux groupés ont également disparu. Les coutures d’assistants de marque de canal étaient des raccourcis privés du monorepo, pas des contrats de Plugin stables. Utilisez plutôt des sous-chemins SDK génériques et étroits. Dans l’espace de travail du Plugin groupé, gardez les assistants appartenant au fournisseur dans le propre api.ts ou runtime-api.ts de ce Plugin. Exemples actuels de fournisseurs groupés :
  • Anthropic garde les assistants de flux propres à Claude dans sa propre couture api.ts / contract-api.ts
  • OpenAI garde les constructeurs de fournisseur, les assistants de modèle par défaut et les constructeurs de fournisseur temps réel dans son propre api.ts
  • OpenRouter garde le constructeur de fournisseur et les assistants d’onboarding/configuration dans son propre api.ts

Plan de migration de Talk et de la voix en temps réel

Le code Talk pour la voix en temps réel, la téléphonie, les réunions et le navigateur passe d’une comptabilité des tours locale à chaque surface à un contrôleur de session Talk partagé exporté par openclaw/plugin-sdk/realtime-voice. Le nouveau contrôleur possède l’enveloppe commune des événements Talk, l’état de tour actif, l’état de capture, l’état de sortie audio, l’historique récent des événements et le rejet des tours obsolètes. Les Plugins fournisseurs doivent continuer à posséder les sessions temps réel propres au fournisseur ; les Plugins de surface doivent continuer à posséder la capture, la lecture, la téléphonie et les particularités de réunion. Cette migration Talk est volontairement nette et incompatible :
  1. Garder les primitives partagées de contrôleur/exécution dans plugin-sdk/realtime-voice.
  2. Migrer les surfaces groupées vers le contrôleur partagé : relais navigateur, transfert de salle gérée, temps réel d’appel vocal, STT en streaming d’appel vocal, temps réel Google Meet et push-to-talk natif.
  3. Remplacer les anciennes familles RPC Talk par l’API finale talk.session.* et talk.client.*.
  4. Annoncer un seul canal d’événements Talk actif dans hello-ok.features.events du Gateway : talk.event.
  5. Supprimer l’ancien endpoint HTTP temps réel et tout chemin de remplacement des instructions au moment de la requête.
Le nouveau code ne devrait pas appeler createTalkEventSequencer(...) directement, sauf s’il implémente un adaptateur bas niveau ou un fixture de test. Préférez le contrôleur partagé afin que les événements limités à un tour ne puissent pas être émis sans identifiant de tour, que les appels turnEnd / turnCancel obsolètes ne puissent pas effacer un tour actif plus récent, et que les événements de cycle de vie de sortie audio restent cohérents entre la téléphonie, les réunions, le relais navigateur, le transfert de salle gérée et les clients Talk natifs. La forme cible de l’API publique est :
// 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 });
await gateway.request("talk.client.steer", { sessionKey, text, mode: "steer" });
Les sessions WebRTC/provider-websocket appartenant au navigateur utilisent talk.client.create, car le navigateur possède la négociation fournisseur et le transport média tandis que le Gateway possède les identifiants, les instructions et la politique d’outils. talk.session.* est la surface commune gérée par le Gateway pour le temps réel gateway-relay, la transcription gateway-relay et les sessions STT/TTS natives managed-room. Les anciennes configurations qui plaçaient les sélecteurs temps réel à côté de talk.provider / talk.providers doivent être réparées avec openclaw doctor --fix ; l’exécution Talk ne réinterprète pas la configuration de fournisseur speech/TTS comme configuration de fournisseur temps réel. Les combinaisons prises en charge par talk.session.create sont volontairement limitées :
ModeTransportCerveauPropriétaireNotes
realtimegateway-relayagent-consultGatewayAudio fournisseur full-duplex relayé par le Gateway ; les appels d’outils sont routés via l’outil agent-consult.
transcriptiongateway-relaynoneGatewaySTT en streaming uniquement ; les appelants envoient l’audio d’entrée et reçoivent des événements de transcription.
stt-ttsmanaged-roomagent-consultSalle native/clientSalles de style push-to-talk et talkie-walkie où le client possède la capture/lecture et le Gateway possède l’état de tour.
stt-ttsmanaged-roomdirect-toolsSalle native/clientMode de salle réservé aux administrateurs pour les surfaces internes fiables qui exécutent directement les actions d’outil du Gateway.
Carte des méthodes supprimées :
AncienNouveau
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput ou 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
Le vocabulaire de contrôle unifié est également volontairement étroit :
MéthodeS’applique àContrat
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayAjoute un fragment audio PCM en base64 à la session fournisseur détenue par la même connexion Gateway.
talk.session.startTurnstt-tts/managed-roomDémarre un tour utilisateur de salle gérée.
talk.session.endTurnstt-tts/managed-roomTermine le tour actif après validation des tours obsolètes.
talk.session.cancelTurntoutes les sessions détenues par le GatewayAnnule le travail de capture/fournisseur/agent/TTS actif pour un tour.
talk.session.cancelOutputrealtime/gateway-relayArrête la sortie audio de l’assistant sans nécessairement terminer le tour utilisateur.
talk.session.submitToolResultrealtime/gateway-relayTermine un appel d’outil fournisseur émis par le relais ; passez options.willContinue pour une sortie intermédiaire ou options.suppressResponse pour satisfaire l’appel sans autre réponse de l’assistant.
talk.session.steersessions Talk adossées à un agentEnvoie une commande vocale status, steer, cancel ou followup à l’exécution intégrée active résolue depuis la session Talk.
talk.session.closetoutes les sessions unifiéesArrête les sessions de relais ou révoque l’état de salle gérée, puis oublie l’identifiant de session unifiée.
N’introduisez pas de cas particuliers de fournisseur ou de plateforme dans le cœur pour que cela fonctionne. Le cœur possède la sémantique des sessions Talk. Les Plugins fournisseurs possèdent la configuration des sessions fournisseur. Les appels vocaux et Google Meet possèdent les adaptateurs de téléphonie/réunion. Les navigateurs et les applications natives possèdent l’expérience utilisateur de capture/lecture des appareils.

Politique de compatibilité

Pour les Plugins externes, le travail de compatibilité suit cet ordre :
  1. ajouter le nouveau contrat
  2. conserver l’ancien comportement câblé via un adaptateur de compatibilité
  3. émettre un diagnostic ou un avertissement qui nomme l’ancien chemin et son remplacement
  4. couvrir les deux chemins dans les tests
  5. documenter l’obsolescence et le chemin de migration
  6. supprimer uniquement après la fenêtre de migration annoncée, généralement dans une version majeure
Les mainteneurs peuvent auditer la file de migration actuelle avec pnpm plugins:boundary-report. Utilisez pnpm plugins:boundary-report:summary pour des nombres compacts, --owner <id> pour un Plugin ou propriétaire de compatibilité, et pnpm plugins:boundary-report:ci lorsqu’une barrière CI doit échouer sur des enregistrements de compatibilité arrivés à échéance, des imports SDK réservés entre propriétaires ou des sous-chemins SDK réservés inutilisés. Le rapport groupe les enregistrements de compatibilité obsolètes par date de suppression, compte les références locales de code/docs, met en évidence les imports SDK réservés entre propriétaires et résume le pont SDK privé de l’hôte mémoire afin que le nettoyage de compatibilité reste explicite au lieu de s’appuyer sur des recherches ponctuelles. Les sous-chemins SDK réservés doivent avoir une utilisation propriétaire suivie ; les exports d’aides réservées inutilisés doivent être retirés du SDK public. Si un champ de manifeste est toujours accepté, les auteurs de Plugins peuvent continuer à l’utiliser jusqu’à ce que les docs et diagnostics indiquent le contraire. Le nouveau code doit préférer le remplacement documenté, mais les Plugins existants ne doivent pas casser pendant les versions mineures ordinaires.

Comment migrer

1

Migrate runtime config load/write helpers

Les Plugins groupés doivent cesser d’appeler api.runtime.config.loadConfig() et api.runtime.config.writeConfigFile(...) directement. Préférez la configuration qui a déjà été transmise au chemin d’appel actif. Les gestionnaires à longue durée de vie qui ont besoin de l’instantané du processus actuel peuvent utiliser api.runtime.config.current(). Les outils d’agent à longue durée de vie doivent utiliser ctx.getRuntimeConfig() du contexte d’outil dans execute afin qu’un outil créé avant une écriture de configuration voie tout de même la configuration d’exécution actualisée.Les écritures de configuration doivent passer par les aides transactionnelles et choisir une politique après écriture :
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
Utilisez afterWrite: { mode: "restart", reason: "..." } lorsque l’appelant sait que le changement nécessite un redémarrage propre du Gateway, et afterWrite: { mode: "none", reason: "..." } uniquement lorsque l’appelant possède le suivi et veut délibérément supprimer le planificateur de rechargement. Les résultats de mutation incluent un résumé typé followUp pour les tests et la journalisation ; le Gateway reste responsable de l’application ou de la planification du redémarrage. loadConfig et writeConfigFile restent des aides de compatibilité obsolètes pour les Plugins externes pendant la fenêtre de migration et avertissent une fois avec le code de compatibilité runtime-config-load-write. Les Plugins groupés et le code d’exécution du dépôt sont protégés par des garde-fous de scanner dans pnpm check:deprecated-api-usage et pnpm check:no-runtime-action-load-config : toute nouvelle utilisation de Plugin de production échoue immédiatement, les écritures directes de configuration échouent, les méthodes du serveur Gateway doivent utiliser l’instantané d’exécution de la requête, les aides d’envoi/action/client de canal d’exécution doivent recevoir la configuration depuis leur frontière, et les modules d’exécution à longue durée de vie ont zéro appel ambiant loadConfig() autorisé.Le nouveau code de Plugin doit aussi éviter d’importer le large barrel de compatibilité openclaw/plugin-sdk/config-runtime. Utilisez le sous-chemin SDK étroit qui correspond au travail :
BesoinImport
Types de configuration tels que OpenClawConfigopenclaw/plugin-sdk/config-contracts
Assertions de configuration déjà chargée et recherche de configuration d’entrée de Pluginopenclaw/plugin-sdk/plugin-config-runtime
Lectures de l’instantané d’exécution actuelopenclaw/plugin-sdk/runtime-config-snapshot
Écritures de configurationopenclaw/plugin-sdk/config-mutation
Aides de stockage de sessionopenclaw/plugin-sdk/session-store-runtime
Configuration de tableau Markdownopenclaw/plugin-sdk/markdown-table-runtime
Aides d’exécution de stratégie de groupeopenclaw/plugin-sdk/runtime-group-policy
Résolution d’entrée secrèteopenclaw/plugin-sdk/secret-input-runtime
Remplacements de modèle/sessionopenclaw/plugin-sdk/model-session-runtime
Les Plugins groupés et leurs tests sont protégés par scanner contre le large barrel afin que les imports et mocks restent locaux au comportement dont ils ont besoin. Le large barrel existe toujours pour la compatibilité externe, mais le nouveau code ne doit pas en dépendre.
2

Migrate embedded tool-result extensions to middleware

Les Plugins groupés doivent remplacer les gestionnaires de résultats d’outil api.registerEmbeddedExtensionFactory(...) propres au runner intégré par un middleware neutre vis-à-vis de l’exécution.
// OpenClaw and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["openclaw", "codex"],
});
Mettez à jour le manifeste du Plugin en même temps :
{
  "contracts": {
    "agentToolResultMiddleware": ["openclaw", "codex"]
  }
}
Les Plugins installés peuvent aussi enregistrer un middleware de résultat d’outil lorsqu’ils sont explicitement activés et déclarent chaque exécution ciblée dans contracts.agentToolResultMiddleware. Les enregistrements de middleware installé non déclarés sont rejetés.
3

Migrate approval-native handlers to capability facts

Les Plugins de canal prenant en charge les approbations exposent désormais le comportement d’approbation natif via approvalCapability.nativeRuntime plus le registre partagé de contexte d’exécution.Changements clés :
  • Remplacez approvalCapability.handler.loadRuntime(...) par approvalCapability.nativeRuntime
  • Déplacez l’authentification/la livraison propres aux approbations hors du câblage hérité plugin.auth / plugin.approvals vers approvalCapability
  • ChannelPlugin.approvals a été retiré du contrat public des Plugins de canal ; déplacez les champs de livraison/natif/rendu vers approvalCapability
  • plugin.auth reste réservé aux flux de connexion/déconnexion de canal ; les hooks d’authentification d’approbation à cet endroit ne sont plus lus par le cœur
  • Enregistrez les objets d’exécution possédés par le canal, tels que les clients, jetons ou applications Bolt, via openclaw/plugin-sdk/channel-runtime-context
  • N’envoyez pas d’avis de reroutage possédés par le Plugin depuis les gestionnaires d’approbation natifs ; le cœur possède désormais les avis routés ailleurs à partir des résultats de livraison réels
  • Lors du passage de channelRuntime dans createChannelManager(...), fournissez une surface réelle createPluginRuntime().channel. Les stubs partiels sont rejetés.
Voir /plugins/sdk-channel-plugins pour la disposition actuelle de la capacité d’approbation.
4

Audit Windows wrapper fallback behavior

Si votre Plugin utilise openclaw/plugin-sdk/windows-spawn, les wrappers Windows .cmd/.bat non résolus échouent désormais de manière fermée sauf si vous passez explicitement 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,
});
Si votre appelant ne s’appuie pas intentionnellement sur le repli shell, ne définissez pas allowShellFallback et gérez plutôt l’erreur levée.
5

Find deprecated imports

Recherchez dans votre Plugin les imports provenant de l’une ou l’autre surface obsolète :
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

Replace with focused imports

Chaque export de l’ancienne surface correspond à un chemin d’import moderne spécifique :
// 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";
Pour les aides côté hôte, utilisez l’exécution de Plugin injectée au lieu d’importer directement :
// Before (deprecated extension-api bridge)
import { runEmbeddedAgent } from "openclaw/extension-api";
const result = await runEmbeddedAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedAgent({ sessionId, prompt });
Le même modèle s’applique aux autres assistants de pont hérités :
Ancienne importationÉquivalent moderne
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
assistants du magasin de sessionsapi.runtime.agent.session.*
7

Remplacer les importations infra-runtime larges

openclaw/plugin-sdk/infra-runtime existe toujours pour la compatibilité externe, mais le nouveau code doit importer la surface d’assistance ciblée dont il a réellement besoin :
BesoinImportation
Assistants de file d’événements systèmeopenclaw/plugin-sdk/system-event-runtime
Assistants de réveil, d’événement et de visibilité Heartbeatopenclaw/plugin-sdk/heartbeat-runtime
Vidage de la file des livraisons en attenteopenclaw/plugin-sdk/delivery-queue-runtime
Télémétrie d’activité de canalopenclaw/plugin-sdk/channel-activity-runtime
Caches de déduplication en mémoire et persistantsopenclaw/plugin-sdk/dedupe-runtime
Assistants sûrs de chemins de fichiers locaux/médiasopenclaw/plugin-sdk/file-access-runtime
fetch compatible avec le répartiteuropenclaw/plugin-sdk/runtime-fetch
Assistants de proxy et de fetch protégéopenclaw/plugin-sdk/fetch-runtime
Types de politique de répartiteur SSRFopenclaw/plugin-sdk/ssrf-dispatcher
Types de demande/résolution d’approbationopenclaw/plugin-sdk/approval-runtime
Charge utile de réponse d’approbation et assistants de commandeopenclaw/plugin-sdk/approval-reply-runtime
Assistants de formatage des erreursopenclaw/plugin-sdk/error-runtime
Attentes de disponibilité du transportopenclaw/plugin-sdk/transport-ready-runtime
Assistants de jetons sécurisésopenclaw/plugin-sdk/secure-random-runtime
Concurrence bornée des tâches asynchronesopenclaw/plugin-sdk/concurrency-runtime
Coercition numériqueopenclaw/plugin-sdk/number-runtime
Verrou asynchrone local au processusopenclaw/plugin-sdk/async-lock-runtime
Verrous de fichiersopenclaw/plugin-sdk/file-lock
Les plugins intégrés sont protégés par scanner contre infra-runtime, donc le code du dépôt ne peut pas régresser vers le barrel large.
8

Migrer les assistants de route de canal

Le nouveau code de route de canal doit utiliser openclaw/plugin-sdk/channel-route. Les anciens noms de clé de route et de cible comparable restent comme alias de compatibilité pendant la fenêtre de migration, mais les nouveaux plugins doivent utiliser les noms de route qui décrivent directement le comportement :
Ancien assistantAssistant moderne
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
Les assistants de route modernes normalisent { channel, to, accountId, threadId } de façon cohérente pour les approbations natives, la suppression de réponse, la déduplication entrante, la livraison Cron et le routage de session.N’ajoutez pas de nouvelles utilisations de ChannelMessagingAdapter.parseExplicitTarget ni des assistants de route chargée adossés à l’analyseur (parseExplicitTargetForLoadedChannel ou resolveRouteTargetForLoadedChannel) ni de resolveChannelRouteTargetWithParser(...) depuis plugin-sdk/channel-route. Ces points d’accroche sont obsolètes et ne restent présents que pour les anciens plugins pendant la fenêtre de migration. Les nouveaux plugins de canal doivent utiliser messaging.targetResolver.resolveTarget(...) pour la normalisation des identifiants de cible et le repli en cas d’absence dans le répertoire, messaging.inferTargetChatType(...) lorsque le cœur a besoin d’un type de pair précoce, et messaging.resolveOutboundSessionRoute(...) pour la session native au fournisseur et l’identité de fil.
9

Construire et tester

pnpm build
pnpm test -- my-plugin/

Référence des chemins d’importation

Chemin d’importationObjectifExports principaux
plugin-sdk/plugin-entryUtilitaire d’entrée canonique de PlugindefinePluginEntry
plugin-sdk/coreRéexport global hérité pour les définitions/générateurs d’entrées de canaldefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaExport du schéma de configuration racineOpenClawSchema
plugin-sdk/provider-entryUtilitaire d’entrée pour fournisseur uniquedefineSingleProviderPluginEntry
plugin-sdk/channel-coreDéfinitions et générateurs ciblés d’entrées de canaldefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupUtilitaires partagés de l’assistant de configurationTraducteur de configuration, invites de liste d’autorisation, générateurs d’état de configuration
plugin-sdk/setup-runtimeUtilitaires runtime au moment de la configurationcreateSetupTranslator, adaptateurs de correctifs de configuration sûrs à importer, utilitaires de notes de recherche, promptResolvedAllowFrom, splitSetupEntries, proxys de configuration déléguée
plugin-sdk/setup-adapter-runtimeAlias obsolète d’adaptateur de configurationUtilisez plugin-sdk/setup-runtime
plugin-sdk/setup-toolsUtilitaires d’outillage de configurationformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreUtilitaires multicomptesUtilitaires de liste de comptes/configuration/verrouillage d’action
plugin-sdk/account-idUtilitaires d’identifiants de compteDEFAULT_ACCOUNT_ID, normalisation d’identifiant de compte
plugin-sdk/account-resolutionUtilitaires de recherche de compteUtilitaires de recherche de compte + repli par défaut
plugin-sdk/account-helpersUtilitaires de compte ciblésUtilitaires de liste de comptes/action de compte
plugin-sdk/channel-setupAdaptateurs d’assistant de configurationcreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard, plus DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingPrimitives d’association DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineCâblage du préfixe de réponse, de la saisie et de la livraison depuis la sourcecreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersFabriques d’adaptateurs de configuration et utilitaires d’accès DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaGénérateurs de schémas de configurationPrimitives partagées de schéma de configuration de canal et générateur générique uniquement
plugin-sdk/bundled-channel-config-schemaSchémas de configuration groupésPlugins groupés maintenus par OpenClaw uniquement ; les nouveaux plugins doivent définir des schémas locaux au Plugin
plugin-sdk/channel-config-schema-legacySchémas de configuration groupés obsolètesAlias de compatibilité uniquement ; utilisez plugin-sdk/bundled-channel-config-schema pour les plugins groupés maintenus
plugin-sdk/telegram-command-configUtilitaires de configuration des commandes TelegramNormalisation des noms de commande, troncature des descriptions, validation des doublons/conflits
plugin-sdk/channel-policyRésolution de politique groupe/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleFaçade de compatibilité obsolèteUtilisez plugin-sdk/channel-outbound
plugin-sdk/inbound-envelopeUtilitaires d’enveloppe entranteUtilitaires partagés de route + générateurs d’enveloppe
plugin-sdk/channel-inboundUtilitaires de réception entranteConstruction de contexte, formatage, racines, lanceurs, envoi préparé des réponses et prédicats d’envoi
plugin-sdk/messaging-targetsChemin d’importation obsolète pour l’analyse des ciblesUtilisez plugin-sdk/channel-targets pour les utilitaires génériques d’analyse de cible, plugin-sdk/channel-route pour la comparaison de routes, et messaging.targetResolver / messaging.resolveOutboundSessionRoute appartenant au Plugin pour la résolution de cible propre au fournisseur
plugin-sdk/outbound-mediaUtilitaires de média sortantChargement partagé des médias sortants
plugin-sdk/outbound-send-depsFaçade de compatibilité obsolèteUtilisez plugin-sdk/channel-outbound
plugin-sdk/channel-outboundUtilitaires de cycle de vie des messages sortantsAdaptateurs de messages, accusés de réception, utilitaires d’envoi durable, utilitaires d’aperçu en direct/streaming, options de réponse, utilitaires de cycle de vie, identité sortante et planification de charge utile
plugin-sdk/channel-streamingFaçade de compatibilité obsolèteUtilisez plugin-sdk/channel-outbound
plugin-sdk/outbound-runtimeFaçade de compatibilité obsolèteUtilisez plugin-sdk/channel-outbound
plugin-sdk/thread-bindings-runtimeUtilitaires de liaison de filsUtilitaires de cycle de vie et d’adaptateur pour la liaison de fils
plugin-sdk/agent-media-payloadUtilitaires hérités de charges utiles médiaGénérateur de charge utile média d’agent pour les dispositions de champs héritées
plugin-sdk/channel-runtimeShim de compatibilité obsolèteUtilitaires runtime de canal hérité uniquement
plugin-sdk/channel-send-resultTypes de résultat d’envoiTypes de résultat de réponse
plugin-sdk/runtime-storeStockage persistant de PlugincreatePluginRuntimeStore
plugin-sdk/runtimeUtilitaires runtime largesUtilitaires runtime/journalisation/sauvegarde/installation de Plugin
plugin-sdk/runtime-envUtilitaires ciblés d’environnement runtimeUtilitaires de journalisation/environnement runtime, délai d’expiration, nouvelle tentative et temporisation exponentielle
plugin-sdk/plugin-runtimeUtilitaires partagés de runtime de PluginUtilitaires de commandes/hooks/http/interactifs de Plugin
plugin-sdk/hook-runtimeUtilitaires de pipeline de hooksUtilitaires partagés de pipeline Webhook/hook interne
plugin-sdk/lazy-runtimeUtilitaires runtime paresseuxcreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeUtilitaires de processusUtilitaires exec partagés
plugin-sdk/cli-runtimeUtilitaires runtime de CLIFormatage des commandes, attentes, utilitaires de version
plugin-sdk/gateway-runtimeUtilitaires GatewayClient Gateway, utilitaire de démarrage prêt pour la boucle d’événements, résolution de l’hôte LAN annoncé et utilitaires de correctif d’état de canal
plugin-sdk/config-runtimeShim de compatibilité de configuration obsolètePréférez config-contracts, plugin-config-runtime, runtime-config-snapshot et config-mutation
plugin-sdk/telegram-command-configUtilitaires de commandes TelegramUtilitaires de validation de commandes Telegram stables avec repli lorsque la surface de contrat Telegram groupée est indisponible
plugin-sdk/approval-runtimeUtilitaires d’invite d’approbationCharge utile d’approbation exec/Plugin, utilitaires de capacité/profil d’approbation, utilitaires natifs de routage/runtime d’approbation et formatage structuré du chemin d’affichage de l’approbation
plugin-sdk/approval-auth-runtimeUtilitaires d’authentification d’approbationRésolution d’approbateur, authentification d’action dans la même discussion
plugin-sdk/approval-client-runtimeUtilitaires client d’approbationUtilitaires natifs de profil/filtre d’approbation exec
plugin-sdk/approval-delivery-runtimeUtilitaires de livraison d’approbationAdaptateurs natifs de capacité/livraison d’approbation
plugin-sdk/approval-gateway-runtimeUtilitaires Gateway d’approbationUtilitaire partagé de résolution Gateway d’approbation
plugin-sdk/approval-handler-adapter-runtimeUtilitaires d’adaptateur d’approbationUtilitaires légers de chargement d’adaptateur d’approbation natif pour les points d’entrée de canal critiques
plugin-sdk/approval-handler-runtimeUtilitaires de gestionnaire d’approbationUtilitaires runtime plus larges de gestionnaire d’approbation ; préférez les coutures d’adaptateur/Gateway plus ciblées lorsqu’elles suffisent
plugin-sdk/approval-native-runtimeUtilitaires de cible d’approbationUtilitaires natifs de liaison cible/compte d’approbation
plugin-sdk/approval-reply-runtimeUtilitaires de réponse d’approbationUtilitaires de charge utile de réponse d’approbation exec/Plugin
plugin-sdk/channel-runtime-contextUtilitaires de contexte runtime de canalUtilitaires génériques d’enregistrement/récupération/surveillance du contexte runtime de canal
plugin-sdk/security-runtimeUtilitaires de sécuritéUtilitaires partagés de confiance, verrouillage DM, fichiers/chemins bornés à la racine, contenu externe et collecte de secrets
plugin-sdk/ssrf-policyUtilitaires de politique SSRFUtilitaires de liste d’autorisation d’hôtes et de politique de réseau privé
plugin-sdk/ssrf-runtimeUtilitaires runtime SSRFRépartiteur épinglé, fetch protégé, utilitaires de politique SSRF
plugin-sdk/system-event-runtimeUtilitaires d’événements systèmeenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeUtilitaires HeartbeatUtilitaires de réveil, d’événement et de visibilité Heartbeat
plugin-sdk/delivery-queue-runtimeUtilitaires de file de livraisondrainPendingDeliveries
plugin-sdk/channel-activity-runtimeUtilitaires d’activité de canalrecordChannelActivity
plugin-sdk/dedupe-runtimeUtilitaires de déduplicationCaches de déduplication en mémoire et adossés à un stockage persistant
plugin-sdk/file-access-runtimeUtilitaires d’accès aux fichiersUtilitaires sûrs de chemins de fichiers/médias locaux
plugin-sdk/transport-ready-runtimeUtilitaires de préparation du transportwaitForTransportReady
plugin-sdk/exec-approvals-runtimeUtilitaires de politique d’approbation execloadExecApprovals, resolveExecApprovalsFromFile, ExecApprovalsFile
plugin-sdk/collection-runtimeUtilitaires de cache bornépruneMapToMaxSize
plugin-sdk/diagnostic-runtimeUtilitaires de verrouillage diagnostiqueisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeUtilitaires de formatage d’erreursformatUncaughtError, isApprovalNotFoundError, utilitaires de graphe d’erreurs
plugin-sdk/fetch-runtimeUtilitaires de fetch/proxy encapsuléresolveFetch, utilitaires de proxy, utilitaires d’options EnvHttpProxyAgent
plugin-sdk/host-runtimeUtilitaires de normalisation d’hôtenormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeUtilitaires de nouvelle tentativeRetryConfig, retryAsync, lanceurs de politiques
plugin-sdk/allow-fromFormatage de liste d’autorisation et mappage d’entréeformatAllowFromLowercase, mapAllowlistResolutionInputs
plugin-sdk/command-authUtilitaires de verrouillage de commande et de surface de commanderesolveControlCommandGate, utilitaires d’autorisation d’expéditeur, utilitaires de registre de commandes incluant le formatage dynamique du menu d’arguments
plugin-sdk/command-statusMoteurs de rendu d’état/aide des commandesbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputAnalyse de saisie de secretUtilitaires de saisie de secret
plugin-sdk/webhook-ingressUtilitaires de requête WebhookUtilitaires de cible Webhook
plugin-sdk/webhook-request-guardsUtilitaires de garde du corps WebhookUtilitaires de lecture/limite du corps de requête
plugin-sdk/reply-runtimeRuntime de réponse partagéEnvoi entrant, Heartbeat, planificateur de réponses, découpage
plugin-sdk/reply-dispatch-runtimeUtilitaires ciblés d’envoi de réponseFinalisation, envoi par fournisseur et utilitaires d’étiquette de conversation
plugin-sdk/reply-historyUtilitaires d’historique de réponsescreateChannelHistoryWindow ; exports de compatibilité obsolètes pour utilitaires de map tels que buildPendingHistoryContextFromMap, recordPendingHistoryEntry et clearHistoryEntriesIfEnabled
plugin-sdk/reply-referencePlanification des références de réponsecreateReplyReferencePlanner
plugin-sdk/reply-chunkingUtilitaires de découpage de réponsesUtilitaires de découpage texte/Markdown
plugin-sdk/session-store-runtimeUtilitaires de magasin de sessionsUtilitaires de chemin de magasin + date de mise à jour
plugin-sdk/state-pathsUtilitaires de chemins d’étatUtilitaires de répertoires d’état et OAuth
plugin-sdk/routingUtilitaires de routage/clé de sessionresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, utilitaires de normalisation des clés de session
plugin-sdk/status-helpersUtilitaires d’état de canalConstructeurs de résumés d’état de canal/compte, valeurs par défaut d’état d’exécution, utilitaires de métadonnées de problème
plugin-sdk/target-resolver-runtimeUtilitaires de résolution de cibleUtilitaires partagés de résolution de cible
plugin-sdk/string-normalization-runtimeUtilitaires de normalisation de chaîneUtilitaires de normalisation de slug/chaîne
plugin-sdk/request-urlUtilitaires d’URL de requêteExtraire les URL de chaîne depuis des entrées de type requête
plugin-sdk/run-commandUtilitaires de commande temporiséeExécuteur de commande temporisée avec stdout/stderr normalisés
plugin-sdk/param-readersLecteurs de paramètresLecteurs communs de paramètres d’outil/CLI
plugin-sdk/tool-payloadExtraction de charge utile d’outilExtraire des charges utiles normalisées depuis des objets de résultat d’outil
plugin-sdk/tool-sendExtraction d’envoi d’outilExtraire les champs canoniques de cible d’envoi depuis les arguments d’outil
plugin-sdk/temp-pathUtilitaires de chemin temporaireUtilitaires partagés de chemin de téléchargement temporaire
plugin-sdk/logging-coreUtilitaires de journalisationJournaliseur de sous-système et utilitaires de caviardage
plugin-sdk/markdown-table-runtimeUtilitaires de tableau MarkdownUtilitaires de mode de tableau Markdown
plugin-sdk/reply-payloadTypes de réponse de messageTypes de charge utile de réponse
plugin-sdk/provider-setupUtilitaires organisés de configuration de fournisseur local/auto-hébergéUtilitaires de découverte/configuration de fournisseurs auto-hébergés
plugin-sdk/self-hosted-provider-setupUtilitaires ciblés de configuration de fournisseur auto-hébergé compatible OpenAIMêmes utilitaires de découverte/configuration de fournisseurs auto-hébergés
plugin-sdk/provider-auth-runtimeUtilitaires d’authentification d’exécution du fournisseurUtilitaires de résolution de clé API à l’exécution
plugin-sdk/provider-auth-api-keyUtilitaires de configuration de clé API de fournisseurUtilitaires d’intégration/d’écriture de profil pour clé API
plugin-sdk/provider-auth-resultUtilitaires de résultat d’authentification de fournisseurConstructeur standard de résultat d’authentification OAuth
plugin-sdk/provider-selection-runtimeUtilitaires de sélection de fournisseurSélection de fournisseur configuré ou automatique et fusion de configuration brute de fournisseur
plugin-sdk/provider-env-varsUtilitaires de variables d’environnement de fournisseurUtilitaires de recherche de variable d’environnement d’authentification de fournisseur
plugin-sdk/provider-model-sharedUtilitaires partagés de modèle/relecture de fournisseurProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, constructeurs partagés de politique de relecture, utilitaires de point de terminaison de fournisseur et utilitaires de normalisation d’ID de modèle
plugin-sdk/provider-catalog-sharedUtilitaires partagés de catalogue de fournisseurfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardCorrectifs d’intégration de fournisseurUtilitaires de configuration d’intégration
plugin-sdk/provider-httpUtilitaires HTTP de fournisseurUtilitaires génériques de capacité HTTP/point de terminaison de fournisseur, y compris les utilitaires de formulaire multipart de transcription audio
plugin-sdk/provider-web-fetchUtilitaires web-fetch de fournisseurUtilitaires d’enregistrement/cache de fournisseur web-fetch
plugin-sdk/provider-web-search-config-contractUtilitaires de configuration web-search de fournisseurUtilitaires ciblés de configuration/identifiants web-search pour les fournisseurs qui n’ont pas besoin du câblage d’activation de plugin
plugin-sdk/provider-web-search-contractUtilitaires de contrat web-search de fournisseurUtilitaires ciblés de contrat de configuration/identifiants web-search tels que createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig et les setters/getters d’identifiants limités à un périmètre
plugin-sdk/provider-web-searchUtilitaires web-search de fournisseurUtilitaires d’enregistrement/cache/exécution de fournisseur web-search
plugin-sdk/provider-toolsUtilitaires de compatibilité d’outils/schémas de fournisseurProviderToolCompatFamily, buildProviderToolCompatFamilyHooks et nettoyage + diagnostics des schémas DeepSeek/Gemini/OpenAI
plugin-sdk/provider-usageUtilitaires d’utilisation de fournisseurfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage et autres utilitaires d’utilisation de fournisseur
plugin-sdk/provider-streamUtilitaires d’enveloppe de flux de fournisseurProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, types d’enveloppe de flux et utilitaires partagés d’enveloppe Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot
plugin-sdk/provider-transport-runtimeUtilitaires de transport de fournisseurUtilitaires de transport natif de fournisseur tels que fetch protégé, extraction de texte de résultat d’outil, transformations de messages de transport et flux d’événements de transport inscriptibles
plugin-sdk/keyed-async-queueFile d’attente asynchrone ordonnéeKeyedAsyncQueue
plugin-sdk/media-runtimeUtilitaires multimédias partagésUtilitaires de récupération/transformation/stockage de médias, sondage des dimensions vidéo basé sur ffprobe et constructeurs de charges utiles multimédias
plugin-sdk/media-generation-runtimeUtilitaires partagés de génération multimédiaUtilitaires partagés de bascule, sélection de candidats et messages de modèle manquant pour la génération d’images/vidéos/musique
plugin-sdk/media-understandingUtilitaires de compréhension multimédiaTypes de fournisseurs de compréhension multimédia et exports d’utilitaires image/audio côté fournisseur
plugin-sdk/text-runtimeExport de compatibilité textuelle large dépréciéUtiliser string-coerce-runtime, text-chunking, text-utility-runtime et logging-core
plugin-sdk/text-chunkingUtilitaires de découpage de texteUtilitaire de découpage de texte sortant
plugin-sdk/speechUtilitaires vocauxTypes de fournisseurs vocaux et utilitaires côté fournisseur pour directives, registre, validation, ainsi que constructeur TTS compatible OpenAI
plugin-sdk/speech-coreNoyau vocal partagéTypes de fournisseurs vocaux, registre, directives, normalisation
plugin-sdk/realtime-transcriptionUtilitaires de transcription en temps réelTypes de fournisseurs, utilitaires de registre et utilitaire partagé de session WebSocket
plugin-sdk/realtime-voiceUtilitaires vocaux en temps réelTypes de fournisseurs, utilitaires de registre/résolution, utilitaires de session de pont, files partagées de réponse vocale d’agent, contrôle vocal d’exécution active, santé de transcription/événement, suppression d’écho, correspondance des questions de consultation, coordination de consultation forcée, suivi du contexte de tour, suivi d’activité de sortie et utilitaires de consultation rapide de contexte
plugin-sdk/image-generationUtilitaires de génération d’imagesTypes de fournisseurs de génération d’images, utilitaires d’URL de données/ressources image et constructeur de fournisseur d’images compatible OpenAI
plugin-sdk/image-generation-coreNoyau partagé de génération d’imagesTypes de génération d’images, bascule, authentification et utilitaires de registre
plugin-sdk/music-generationUtilitaires de génération musicaleTypes de fournisseur/requête/résultat de génération musicale
plugin-sdk/music-generation-coreNoyau partagé de génération musicaleTypes de génération musicale, utilitaires de bascule, recherche de fournisseur et analyse de référence de modèle
plugin-sdk/video-generationUtilitaires de génération vidéoTypes de fournisseur/requête/résultat de génération vidéo
plugin-sdk/video-generation-coreNoyau partagé de génération vidéoTypes de génération vidéo, utilitaires de bascule, recherche de fournisseur et analyse de référence de modèle
plugin-sdk/interactive-runtimeUtilitaires de réponse interactiveNormalisation/réduction de charge utile de réponse interactive
plugin-sdk/channel-config-primitivesPrimitives de configuration de canalPrimitives ciblées de schéma de configuration de canal
plugin-sdk/channel-config-writesUtilitaires d’écriture de configuration de canalUtilitaires d’autorisation d’écriture de configuration de canal
plugin-sdk/channel-plugin-commonPréambule de canal partagéExports partagés de préambule de plugin de canal
plugin-sdk/channel-statusUtilitaires d’état de canalUtilitaires partagés d’instantané/résumé d’état de canal
plugin-sdk/allowlist-config-editUtilitaires de configuration de liste d’autorisationUtilitaires de modification/lecture de configuration de liste d’autorisation
plugin-sdk/group-accessUtilitaires d’accès de groupeUtilitaires partagés de décision d’accès de groupe
plugin-sdk/direct-dm, plugin-sdk/direct-dm-accessFaçades de compatibilité dépréciéesUtiliser plugin-sdk/channel-inbound
plugin-sdk/direct-dm-guard-policyUtilitaires de garde de DM directUtilitaires ciblés de politique de garde pré-crypto
plugin-sdk/extension-sharedUtilitaires d’extension partagésPrimitives de canal passif/d’état et d’assistant de proxy ambiant
plugin-sdk/webhook-targetsUtilitaires de cibles WebhookRegistre de cibles Webhook et utilitaires d’installation de route
plugin-sdk/webhook-pathAlias déprécié de chemin WebhookUtiliser plugin-sdk/webhook-ingress
plugin-sdk/web-mediaUtilitaires multimédias web partagésUtilitaires de chargement de médias distants/locaux
plugin-sdk/zodRéexport de compatibilité Zod dépréciéImporter zod depuis zod directement
plugin-sdk/memory-coreUtilitaires memory-core intégrésSurface d’utilitaires de gestionnaire/configuration/fichier/CLI de mémoire
plugin-sdk/memory-core-engine-runtimeFaçade d’exécution du moteur de mémoireFaçade d’exécution d’index/recherche de mémoire
plugin-sdk/memory-core-host-embedding-registryRegistre d’embeddings de mémoireUtilitaires légers de registre de fournisseurs d’embeddings de mémoire
plugin-sdk/memory-core-host-engine-foundationMoteur de fondation de l’hôte de mémoireExports du moteur de fondation de l’hôte de mémoire
plugin-sdk/memory-core-host-engine-embeddingsMoteur d’embeddings de l’hôte de mémoireContrats d’embeddings de mémoire, accès au registre, fournisseur local et utilitaires génériques de traitement par lot/distants ; les fournisseurs distants concrets vivent dans leurs plugins propriétaires
plugin-sdk/memory-core-host-engine-qmdMoteur QMD de l’hôte de mémoireExports du moteur QMD de l’hôte de mémoire
plugin-sdk/memory-core-host-engine-storageMoteur de stockage de l’hôte de mémoireExports du moteur de stockage de l’hôte de mémoire
plugin-sdk/memory-core-host-multimodalUtilitaires multimodaux de l’hôte de mémoireUtilitaires multimodaux de l’hôte de mémoire
plugin-sdk/memory-core-host-queryUtilitaires de requête de l’hôte de mémoireUtilitaires de requête de l’hôte de mémoire
plugin-sdk/memory-core-host-secretUtilitaires de secret de l’hôte de mémoireUtilitaires de secret de l’hôte de mémoire
plugin-sdk/memory-core-host-eventsAlias déprécié d’événement de mémoireUtiliser plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusUtilitaires d’état de l’hôte de mémoireUtilitaires d’état de l’hôte de mémoire
plugin-sdk/memory-core-host-runtime-cliExécution CLI de l’hôte de mémoireUtilitaires d’exécution CLI de l’hôte de mémoire
plugin-sdk/memory-core-host-runtime-coreExécution du noyau de l’hôte de mémoireUtilitaires d’exécution du noyau de l’hôte de mémoire
plugin-sdk/memory-core-host-runtime-filesUtilitaires de fichier/exécution de l’hôte de mémoireUtilitaires de fichier/exécution de l’hôte de mémoire
plugin-sdk/memory-host-coreAlias d’exécution du noyau de l’hôte de mémoireAlias indépendant du fournisseur pour les utilitaires d’exécution du noyau de l’hôte de mémoire
plugin-sdk/memory-host-eventsAlias de journal d’événements de l’hôte de mémoireAlias indépendant du fournisseur pour les utilitaires de journal d’événements de l’hôte de mémoire
plugin-sdk/memory-host-filesAlias déprécié de fichier/exécution de mémoireUtiliser plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownUtilitaires Markdown gérésUtilitaires partagés de Markdown géré pour les plugins adjacents à la mémoire
plugin-sdk/memory-host-searchFaçade de recherche Active MemoryFaçade d’exécution différée du gestionnaire de recherche active-memory
plugin-sdk/memory-host-statusAlias déprécié d’état de l’hôte de mémoireUtiliser plugin-sdk/memory-core-host-status
plugin-sdk/testingUtilitaires de testBarrel de compatibilité déprécié local au dépôt ; utiliser des sous-chemins de test ciblés locaux au dépôt tels que plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env et plugin-sdk/test-fixtures
Ce tableau est volontairement le sous-ensemble commun de migration, et non la surface complète du SDK. L’inventaire des points d’entrée du compilateur se trouve dans scripts/lib/plugin-sdk-entrypoints.json ; les exports de paquet sont générés à partir du sous-ensemble public. Les points de jonction d’assistance réservés aux plugins groupés ont été retirés de la carte d’export public du SDK, sauf pour les façades de compatibilité explicitement documentées, comme le shim déprécié plugin-sdk/discord conservé pour le paquet publié @openclaw/discord@2026.3.13. Les assistants propres à un propriétaire résident dans le paquet du plugin propriétaire ; le comportement partagé de l’hôte doit passer par des contrats SDK génériques comme plugin-sdk/gateway-runtime, plugin-sdk/security-runtime et plugin-sdk/plugin-config-runtime. Utilisez l’import le plus étroit qui correspond à la tâche. Si vous ne trouvez pas d’export, vérifiez la source dans src/plugin-sdk/ ou demandez aux mainteneurs quel contrat générique doit en être propriétaire.

Dépréciations actives

Dépréciations plus ciblées qui s’appliquent au SDK de plugin, au contrat de fournisseur, à la surface d’exécution et au manifeste. Chacune fonctionne encore aujourd’hui, mais sera supprimée dans une future version majeure. L’entrée sous chaque élément associe l’ancienne API à son remplacement canonique.
Ancien (openclaw/plugin-sdk/command-auth) : buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.Nouveau (openclaw/plugin-sdk/command-status) : mêmes signatures, mêmes exports - simplement importés depuis le sous-chemin plus étroit. command-auth les réexporte comme stubs de compatibilité.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
Ancien : resolveInboundMentionRequirement({ facts, policy }) et shouldDropInboundForMention(...) depuis openclaw/plugin-sdk/channel-inbound ou openclaw/plugin-sdk/channel-mention-gating.Nouveau : resolveInboundMentionDecision({ facts, policy }) - renvoie un seul objet de décision au lieu de deux appels séparés.Les plugins de canal en aval (Slack, Discord, Matrix, MS Teams) ont déjà basculé.
openclaw/plugin-sdk/channel-runtime est un shim de compatibilité pour les anciens plugins de canal. Ne l’importez pas depuis du nouveau code ; utilisez openclaw/plugin-sdk/channel-runtime-context pour enregistrer les objets d’exécution.Les assistants channelActions* dans openclaw/plugin-sdk/channel-actions sont dépréciés avec les exports de canal “actions” bruts. Exposez plutôt les capacités via la surface sémantique presentation - les plugins de canal déclarent ce qu’ils affichent (cartes, boutons, sélecteurs) plutôt que les noms d’action bruts qu’ils acceptent.
Ancien : fabrique tool() depuis openclaw/plugin-sdk/provider-web-search.Nouveau : implémentez createTool(...) directement sur le plugin fournisseur. OpenClaw n’a plus besoin de l’assistant SDK pour enregistrer l’enveloppe de l’outil.
Ancien : formatInboundEnvelope(...) (et ChannelMessageForAgent.channelEnvelope) pour construire une enveloppe d’invite en texte brut plat à partir des messages de canal entrants.Nouveau : BodyForAgent avec des blocs structurés de contexte utilisateur. Les plugins de canal attachent les métadonnées de routage (fil, sujet, réponse à, réactions) comme champs typés au lieu de les concaténer dans une chaîne d’invite. L’assistant formatAgentEnvelope(...) reste pris en charge pour les enveloppes synthétisées destinées à l’assistant, mais les enveloppes entrantes en texte brut sont en cours de retrait.Zones concernées : inbound_claim, message_received et tout plugin de canal personnalisé qui post-traitait le texte channelEnvelope.
Ancien : api.on("deactivate", handler).Nouveau : api.on("gateway_stop", handler). L’événement et le contexte constituent le même contrat de nettoyage à l’arrêt ; seul le nom du hook change.
// Before
api.on("deactivate", async (event, ctx) => {
  await stopPluginService(ctx);
});

// After
api.on("gateway_stop", async (event, ctx) => {
  await stopPluginService(ctx);
});
deactivate reste câblé comme alias de compatibilité déprécié jusqu’après le 2026-08-16.
Ancien : api.on("subagent_spawning", handler) renvoyant threadBindingReady ou deliveryOrigin.Nouveau : laissez le cœur préparer les liaisons de sous-agent thread: true via l’adaptateur de liaison de session du canal. Utilisez api.on("subagent_spawned", handler) uniquement pour l’observation après lancement.
// Before
api.on("subagent_spawning", async () => ({
  status: "ok",
  threadBindingReady: true,
  deliveryOrigin: { channel: "discord", to: "channel:123", threadId: "456" },
}));

// After
api.on("subagent_spawned", async (event) => {
  await observeSubagentLaunch(event);
});
subagent_spawning, PluginHookSubagentSpawningEvent, PluginHookSubagentSpawningResult et SubagentLifecycleHookRunner.runSubagentSpawning(...) ne restent que comme surfaces de compatibilité dépréciées pendant la migration des plugins externes.
Quatre alias de type de découverte sont maintenant de fines enveloppes autour des types de l’ère catalogue :
Ancien aliasNouveau type
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
Plus l’ancien sac statique ProviderCapabilities - les plugins fournisseurs doivent utiliser des hooks de fournisseur explicites comme buildReplayPolicy, normalizeToolSchemas et wrapStreamFn plutôt qu’un objet statique.
Ancien (trois hooks séparés sur ProviderThinkingPolicy) : isBinaryThinking(ctx), supportsXHighThinking(ctx) et resolveDefaultThinkingLevel(ctx).Nouveau : un seul resolveThinkingProfile(ctx) qui renvoie un ProviderThinkingProfile avec l’id canonique, un label facultatif et la liste de niveaux classés. OpenClaw rétrograde automatiquement les valeurs stockées obsolètes selon le rang du profil.Le contexte inclut provider, modelId, reasoning fusionné facultatif et les faits compat de modèle fusionnés facultatifs. Les plugins fournisseurs peuvent utiliser ces faits de catalogue pour exposer un profil propre au modèle uniquement lorsque le contrat de requête configuré le prend en charge.Implémentez un hook au lieu de trois. Les anciens hooks continuent de fonctionner pendant la fenêtre de dépréciation, mais ne sont pas composés avec le résultat du profil.
Ancien : implémenter des hooks d’authentification externe sans déclarer le fournisseur dans le manifeste du plugin.Nouveau : déclarez contracts.externalAuthProviders dans le manifeste du plugin et implémentez resolveExternalAuthProfiles(...).
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
Ancien champ de manifeste : providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.Nouveau : reflétez la même recherche de variable d’environnement dans setup.providers[].envVars sur le manifeste. Cela consolide les métadonnées d’environnement de configuration/statut en un seul endroit et évite de démarrer l’environnement d’exécution du plugin uniquement pour répondre aux recherches de variables d’environnement.providerAuthEnvVars reste pris en charge via un adaptateur de compatibilité jusqu’à la fermeture de la fenêtre de dépréciation.
Ancien : trois appels séparés - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).Nouveau : un appel sur l’API d’état mémoire - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Mêmes emplacements, un seul appel d’enregistrement. Les assistants additifs de prompt et de corpus (registerMemoryPromptSupplement, registerMemoryCorpusSupplement) ne sont pas affectés.
Ancien : api.registerMemoryEmbeddingProvider(...) avec contracts.memoryEmbeddingProviders.Nouveau : api.registerEmbeddingProvider(...) avec contracts.embeddingProviders.Le contrat générique de fournisseur d’embeddings est réutilisable en dehors de la mémoire et constitue le chemin pris en charge pour les nouveaux fournisseurs. L’API d’enregistrement propre à la mémoire reste câblée comme compatibilité dépréciée pendant la migration des fournisseurs existants. L’inspection des plugins signale l’usage non groupé comme dette de compatibilité.
Deux alias de type hérités sont encore exportés depuis src/plugins/runtime/types.ts :
AncienNouveau
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
La méthode d’exécution readSession est dépréciée au profit de getSessionMessages. Même signature ; l’ancienne méthode délègue à la nouvelle.
Ancien : runtime.tasks.flow (singulier) renvoyait un accesseur de flux de tâches actif.Nouveau : runtime.tasks.managedFlows conserve l’environnement d’exécution de mutation TaskFlow gérée pour les plugins qui créent, mettent à jour, annulent ou exécutent des tâches enfant depuis un flux. Utilisez runtime.tasks.flows lorsque le plugin n’a besoin que de lectures basées sur des DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
Couvert dans “Comment migrer → Migrer les extensions de résultats d’outils intégrées vers le middleware” ci-dessus. Inclus ici par souci d’exhaustivité : le chemin supprimé réservé à l’exécuteur intégré api.registerEmbeddedExtensionFactory(...) est remplacé par api.registerAgentToolResultMiddleware(...) avec une liste explicite d’environnements d’exécution dans contracts.agentToolResultMiddleware.
OpenClawSchemaType réexporté depuis openclaw/plugin-sdk est maintenant un alias d’une ligne pour OpenClawConfig. Préférez le nom canonique.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
Les dépréciations au niveau des extensions (dans les plugins groupés de canal ou de fournisseur sous extensions/) sont suivies dans leurs propres barrels api.ts et runtime-api.ts. Elles n’affectent pas les contrats de plugins tiers et ne sont pas listées ici. Si vous consommez directement le barrel local d’un plugin groupé, lisez les commentaires de dépréciation dans ce barrel avant la mise à niveau.

Calendrier de suppression

QuandCe qui se passe
MaintenantLes surfaces dépréciées émettent des avertissements d’exécution
Prochaine version majeureLes surfaces dépréciées seront supprimées ; les plugins qui les utilisent encore échoueront
Tous les plugins principaux ont déjà été migrés. Les plugins externes doivent migrer avant la prochaine version majeure.

Suppression temporaire des avertissements

Définissez ces variables d’environnement pendant que vous travaillez sur la migration :
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
Il s’agit d’une solution de contournement temporaire, pas d’une solution permanente.

Associé