Points d’entrée de plugin
Chaque plugin exporte un objet d’entrée par défaut. Le SDK fournit trois helpers pour les créer.definePluginEntry
Import : openclaw/plugin-sdk/plugin-entry
Pour les plugins de fournisseur, les plugins d’outils, les plugins de hooks, et tout ce qui n’est pas
un canal de messagerie.
| Champ | Type | Obligatoire | Par défaut |
|---|---|---|---|
id | string | Oui | — |
name | string | Oui | — |
description | string | Oui | — |
kind | string | Non | — |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Non | Schéma d’objet vide |
register | (api: OpenClawPluginApi) => void | Oui | — |
iddoit correspondre à votre manifesteopenclaw.plugin.json.kindsert pour les emplacements exclusifs :"memory"ou"context-engine".configSchemapeut être une fonction pour une évaluation paresseuse.- OpenClaw résout et met ce schéma en cache lors du premier accès, de sorte que les constructeurs de schéma coûteux ne s’exécutent qu’une seule fois.
defineChannelPluginEntry
Import : openclaw/plugin-sdk/channel-core
Encapsule definePluginEntry avec le câblage spécifique aux canaux. Appelle automatiquement
api.registerChannel({ plugin }), expose une couture facultative de métadonnées CLI d’aide racine, et conditionne registerFull au mode d’enregistrement.
| Champ | Type | Obligatoire | Par défaut |
|---|---|---|---|
id | string | Oui | — |
name | string | Oui | — |
description | string | Oui | — |
plugin | ChannelPlugin | Oui | — |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Non | Schéma d’objet vide |
setRuntime | (runtime: PluginRuntime) => void | Non | — |
registerCliMetadata | (api: OpenClawPluginApi) => void | Non | — |
registerFull | (api: OpenClawPluginApi) => void | Non | — |
setRuntimeest appelé pendant l’enregistrement afin que vous puissiez stocker la référence de runtime (généralement viacreatePluginRuntimeStore). Il est ignoré pendant la capture de métadonnées CLI.registerCliMetadatas’exécute à la fois lorsqueapi.registrationMode === "cli-metadata"et lorsqueapi.registrationMode === "full". Utilisez-le comme emplacement canonique pour les descripteurs CLI détenus par le canal afin que l’aide racine reste non activante tout en gardant l’enregistrement normal des commandes CLI compatible avec les chargements complets de plugins.registerFullne s’exécute que lorsqueapi.registrationMode === "full". Il est ignoré lors du chargement setup-only.- Comme pour
definePluginEntry,configSchemapeut être une fabrique paresseuse et OpenClaw met en cache le schéma résolu lors du premier accès. - Pour les commandes CLI racine détenues par le plugin, préférez
api.registerCli(..., { descriptors: [...] })lorsque vous voulez que la commande reste chargée paresseusement sans disparaître de l’arbre d’analyse de la CLI racine. Pour les plugins de canal, préférez enregistrer ces descripteurs depuisregisterCliMetadata(...)et gardezregisterFull(...)concentré sur le travail réservé au runtime. - Si
registerFull(...)enregistre aussi des méthodes Gateway RPC, gardez-les sur un préfixe spécifique au plugin. Les espaces de noms d’administration réservés au cœur (config.*,exec.approvals.*,wizard.*,update.*) sont toujours forcés àoperator.admin.
defineSetupPluginEntry
Import : openclaw/plugin-sdk/channel-core
Pour le fichier léger setup-entry.ts. Renvoie simplement { plugin } sans
câblage runtime ni CLI.
defineSetupPluginEntry(...) aux familles étroites de helpers setup :
openclaw/plugin-sdk/setup-runtimepour des helpers setup sûrs côté runtime tels que les adaptateurs de patch setup import-safe, la sortie lookup-note,promptResolvedAllowFrom,splitSetupEntries, et les proxys setup déléguésopenclaw/plugin-sdk/channel-setuppour les surfaces setup à installation facultativeopenclaw/plugin-sdk/setup-toolspour les helpers setup/install CLI/archive/docs
Mode d’enregistrement
api.registrationMode indique à votre plugin comment il a été chargé :
| Mode | Quand | Ce qu’il faut enregistrer |
|---|---|---|
"full" | Démarrage normal de Gateway | Tout |
"setup-only" | Canal désactivé/non configuré | Enregistrement du canal uniquement |
"setup-runtime" | Flux setup avec runtime disponible | Enregistrement du canal plus uniquement le runtime léger nécessaire avant le chargement de l’entrée complète |
"cli-metadata" | Aide racine / capture de métadonnées CLI | Descripteurs CLI uniquement |
defineChannelPluginEntry gère automatiquement cette séparation. Si vous utilisez
definePluginEntry directement pour un canal, vérifiez vous-même le mode :
"setup-runtime" comme la fenêtre où les surfaces de démarrage setup-only doivent
exister sans réentrer dans le runtime complet du canal intégré. Les bonnes utilisations sont
l’enregistrement du canal, les routes HTTP setup-safe, les méthodes gateway setup-safe, et
les helpers setup délégués. Les services d’arrière-plan lourds, les enregistreurs CLI et
les bootstrap SDK fournisseur/client appartiennent toujours à "full".
Pour les enregistreurs CLI en particulier :
- utilisez
descriptorslorsque l’enregistreur possède une ou plusieurs commandes racine et que vous voulez qu’OpenClaw charge paresseusement le vrai module CLI à la première invocation - assurez-vous que ces descripteurs couvrent chaque racine de commande de premier niveau exposée par l’enregistreur
- utilisez
commandsseul uniquement pour des chemins de compatibilité eager
Formes de plugin
OpenClaw classe les plugins chargés selon leur comportement d’enregistrement :| Forme | Description |
|---|---|
| plain-capability | Un seul type de capacité (par ex. fournisseur seul) |
| hybrid-capability | Plusieurs types de capacité (par ex. fournisseur + speech) |
| hook-only | Seulement des hooks, aucune capacité |
| non-capability | Outils/commandes/services mais aucune capacité |
openclaw plugins inspect <id> pour voir la forme d’un plugin.
Liens associés
- Vue d’ensemble du SDK — API d’enregistrement et référence des sous-chemins
- Helpers runtime —
api.runtimeetcreatePluginRuntimeStore - Setup et configuration — manifeste, entrée setup, chargement différé
- Plugins de canal — construction de l’objet
ChannelPlugin - Plugins de fournisseur — enregistrement du fournisseur et hooks