Aller au contenu

Vue d'ensemble du SDK de plugin

Le SDK de plug-in est le contrat typé entre les plug-ins et le cœur. Cette page est la référence pour ce qu’il faut importer et ce que vous pouvez enregistrer.

Importez toujours depuis un sous-chemin spécifique :

import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/core";

Chaque sous-chemin est un petit module autonome. Cela permet de garder le démarrage rapide et évite les problèmes de dépendances circulaires.

Les sous-chemins les plus couramment utilisés, regroupés par objectif. La liste complète des 100+ sous-chemins se trouve dans scripts/lib/plugin-sdk-entrypoints.json.

Sous-cheminExportations clés
plugin-sdk/plugin-entrydefinePluginEntry
plugin-sdk/coredefineChannelPluginEntry, createChatChannelPlugin, createChannelPluginBase, defineSetupPluginEntry, buildChannelConfigSchema
Sous-chemins de canal
Sous-cheminExportations clés
plugin-sdk/channel-setupcreateOptionalChannelSetupSurface
plugin-sdk/channel-pairingcreateChannelPairingController
plugin-sdk/channel-reply-pipelinecreateChannelReplyPipeline
plugin-sdk/channel-config-helperscreateHybridChannelConfigAdapter
plugin-sdk/channel-config-schemaTypes de schéma de configuration de canal
plugin-sdk/channel-policyresolveChannelGroupRequireMention
plugin-sdk/channel-lifecyclecreateAccountStatusSink
plugin-sdk/channel-inboundDébounce, correspondance de mentions, assistants d’enveloppe
plugin-sdk/channel-send-resultTypes de résultats de réponse
plugin-sdk/channel-actionscreateMessageToolButtonsSchema, createMessageToolCardSchema
plugin-sdk/channel-targetsAssistants d’analyse/correspondance de cible
plugin-sdk/channel-contractTypes de contrat de canal
plugin-sdk/channel-feedbackCâblage de réactions/commentaires
Sous-chemins du fournisseur

| Sous-chemin | Exportations clés | | --- | --- | | plugin-sdk/cli-backend | Valeurs par défaut du backend CLI + constantes de surveillance | | plugin-sdk/provider-auth | createProviderApiKeyAuthMethod, ensureApiKeyFromOptionEnvOrPrompt, upsertAuthProfile | | plugin-sdk/provider-model-shared | normalizeModelCompat | | plugin-sdk/provider-catalog-shared | findCatalogTemplate, buildSingleProviderApiKeyCatalog | | plugin-sdk/provider-usage | fetchClaudeUsage et similaires | | plugin-sdk/provider-stream | Types de wrappers de flux | | plugin-sdk/provider-onboard | Assistants de correctifs de configuration Onboarding | | plugin-sdk/global-singleton | Assistants de singleton/map/cache local au processus |

Sous-chemins d'authentification et de sécurité

| Sous-chemin | Exportations clés | | --- | --- | | plugin-sdk/command-auth | resolveControlCommandGate | | plugin-sdk/allow-from | formatAllowFromLowercase | | plugin-sdk/secret-input | Assistants d’analyse d’entrée de secrets | | plugin-sdk/webhook-ingress | Assistants de requête/cible de webhook | | plugin-sdk/webhook-request-guards | Assistants de taille/délai d’expiration du corps de la requête |

Sous-chemins d'exécution et de stockage

| Sous-chemin | Exportations clés | | --- | --- | | plugin-sdk/runtime-store | createPluginRuntimeStore | | plugin-sdk/config-runtime | Assistants de chargement/écriture de configuration | | plugin-sdk/approval-runtime | Assistants d’exécution et d’approbation de plugins | | plugin-sdk/infra-runtime | Assistants d’événements système et de pulsation | | plugin-sdk/collection-runtime | Assistants de petit cache borné | | plugin-sdk/diagnostic-runtime | Assistants de drapeaux de diagnostic et d’événements | | plugin-sdk/error-runtime | Assistants de graphe d’erreurs et de formatage | | plugin-sdk/fetch-runtime | Assistants de récupération encapsulée, de proxy et de recherche épinglée | | plugin-sdk/host-runtime | Assistants de normalisation de nom d’hôte et d’hôte SCP | | plugin-sdk/retry-runtime | Assistants de configuration de nouvelle tentative et d’exécuteur de nouvelle tentative | | plugin-sdk/agent-runtime | Assistants de répertoire/identité/espace de travail de l’agent | | plugin-sdk/directory-runtime | Requête/dédoublonnage de répertoire basé sur la configuration | | plugin-sdk/keyed-async-queue | KeyedAsyncQueue |

Sous-chemins de capacité et de test
Sous-cheminExportations clés
plugin-sdk/image-generationTypes de provider de génération d’images
plugin-sdk/media-understandingTypes de provider de compréhension multimédia
plugin-sdk/speechTypes de provider de reconnaissance vocale
plugin-sdk/testinginstallCommonResolveTargetErrorCases, shouldAckReaction

Le rappel register(api) reçoit un objet OpenClawPluginApi avec ces méthodes :

MéthodeCe qu’elle enregistre
api.registerProvider(...)Inférence de texte (LLM)
api.registerCliBackend(...)Backend d’inférence CLI local
api.registerChannel(...)Channel de messagerie
api.registerSpeechProvider(...)Synthèse Texte-vers-parole / STT
api.registerMediaUnderstandingProvider(...)Analyse d’image/audio/vidéo
api.registerImageGenerationProvider(...)Génération d’images
api.registerWebSearchProvider(...)Recherche Web
MéthodeCe qu’il enregistre
api.registerTool(tool, opts?)Outil d’agent (requis ou { optional: true })
api.registerCommand(def)Commande personnalisée (contourne le LLM)
MéthodeCe qu’il enregistre
api.registerHook(events, handler, opts?)Hook d’événement
api.registerHttpRoute(params)Point de terminaison HTTP Gateway
api.registerGatewayMethod(name, handler)Méthode Gateway RPC
api.registerCli(registrar, opts?)Sous-commande CLI
api.registerService(service)Service d’arrière-plan
api.registerInteractiveHandler(registration)Gestionnaire interactif

api.registerCli(registrar, opts?) accepte deux types de métadonnées de premier niveau :

  • commands : racines de commande explicites détenues par le registre
  • descriptors : descripteurs de commande au moment de l’analyse utilisés pour l’aide de la CLI racine, le routage et l’enregistrement différé des CLI du plugin

Si vous souhaitez qu’une commande de plugin reste chargée à la demande dans le chemin normal de la CLI racine, fournissez des descriptors qui couvrent chaque racine de commande de premier niveau exposée par ce registre.

api.registerCli(
async ({ program }) => {
const { registerMatrixCli } = await import("./src/cli.js");
registerMatrixCli({ program });
},
{
descriptors: [
{
name: "matrix",
description: "Manage Matrix accounts, verification, devices, and profile state",
hasSubcommands: true,
},
],
},
);

Utilisez commands seul uniquement lorsque vous n’avez pas besoin de l’enregistrement différé de la CLI racine. Ce chemin de compatibilité urgent reste pris en charge, mais il n’installe pas de placeholders basés sur des descripteurs pour le chargement différé au moment de l’analyse.

api.registerCliBackend(...) permet à un plugin de posséder la configuration par défaut d’un backend CLI local tel que claude-cli ou codex-cli.

  • Le id du backend devient le préfixe du fournisseur dans les références de modèle comme claude-cli/opus.
  • Le config du backend utilise la même structure que agents.defaults.cliBackends.<id>.
  • La configuration de l’utilisateur prime toujours. OpenClaw fusionne agents.defaults.cliBackends.<id> par-dessus la defaut du plugin avant d’exécuter la CLI.
  • Utilisez normalizeConfig lorsqu’un backend a besoin de réécritures de compatibilité après la fusion (par exemple pour normaliser les anciennes formes d’indicateurs).
MéthodeCe qu’il enregistre
api.registerContextEngine(id, factory)Moteur de contexte (un actif à la fois)
api.registerMemoryPromptSection(builder)Générateur de section de prompt mémoire
api.registerMemoryFlushPlan(resolver)Résolveur de plan de vidange mémoire
api.registerMemoryRuntime(runtime)Adaptateur d’exécution mémoire
MéthodeCe qu’il enregistre
api.registerMemoryEmbeddingProvider(adapter)Adaptateur d’intégration mémoire pour le plugin actif
  • registerMemoryPromptSection, registerMemoryFlushPlan et registerMemoryRuntime sont exclusifs aux plugins de mémoire.
  • registerMemoryEmbeddingProvider permet au plugin de mémoire actif d’enregistrer un ou plusieurs identifiants d’adaptateur d’incorporation (par exemple openai, gemini, ou un identifiant défini par un plugin personnalisé).
  • La configuration utilisateur telle que agents.defaults.memorySearch.provider et agents.defaults.memorySearch.fallback est résolue par rapport à ces identifiants d’adaptateur enregistrés.
MéthodeCe qu’il fait
api.on(hookName, handler, opts?)Hook de cycle de vie typé
api.onConversationBindingResolved(handler)Callback de liaison de conversation
  • before_tool_call : renvoyer { block: true } est terminal. Une fois qu’un gestionnaire l’a défini, les gestionnaires de moindre priorité sont ignorés.
  • before_tool_call : renvoyer { block: false } est traité comme une absence de décision (identique à l’omission de block), et non comme une substitution.
  • before_install : renvoyer { block: true } est terminal. Une fois qu’un gestionnaire l’a défini, les gestionnaires de moindre priorité sont ignorés.
  • before_install : renvoyer { block: false } est traité comme une absence de décision (identique à l’omission de block), et non comme une substitution.
  • message_sending : renvoyer { cancel: true } est terminal. Une fois qu’un gestionnaire l’a défini, les gestionnaires de moindre priorité sont ignorés.
  • message_sending : renvoyer { cancel: false } est traité comme une absence de décision (identique à l’omission de cancel), et non comme une substitution.
ChampTypeDescription
api.idstringIdentifiant du plugin
api.namestringNom d’affichage
api.versionstring?Version du plugin (facultatif)
api.descriptionstring?Description du plugin (facultatif)
api.sourcestringChemin source du plugin
api.rootDirstring?Répertoire racine du plugin (facultatif)
api.configOpenClawConfigInstantané de la configuration actuelle
api.pluginConfigRecord<string, unknown>Configuration spécifique au plugin depuis plugins.entries.<id>.config
api.runtimePluginRuntimeAssistants d’exécution
api.loggerPluginLoggerJournaliste délimité (debug, info, warn, error)
api.registrationModePluginRegistrationMode"full", "setup-only", "setup-runtime", ou "cli-metadata"
api.resolvePath(input)(string) => stringRésoudre le chemin relatif à la racine du plugin

Au sein de votre plugin, utilisez des fichiers “barrel” locaux pour les importations internes :

my-plugin/
api.ts # Public exports for external consumers
runtime-api.ts # Internal-only runtime exports
index.ts # Plugin entry point
setup-entry.ts # Lightweight setup-only entry (optional)