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.

Ogni plugin esporta un oggetto voce predefinito. L’SDK fornisce tre helper per crearli. Per i plugin installati, package.json dovrebbe indirizzare il caricamento runtime al JavaScript compilato quando disponibile:
{
  "openclaw": {
    "extensions": ["./src/index.ts"],
    "runtimeExtensions": ["./dist/index.js"],
    "setupEntry": "./src/setup-entry.ts",
    "runtimeSetupEntry": "./dist/setup-entry.js"
  }
}
extensions e setupEntry rimangono voci sorgente valide per lo sviluppo da workspace e checkout git. runtimeExtensions e runtimeSetupEntry sono preferite quando OpenClaw carica un pacchetto installato e consentono ai pacchetti npm di evitare la compilazione TypeScript a runtime. Le voci runtime esplicite sono obbligatorie: runtimeSetupEntry richiede setupEntry, e gli artifact mancanti di runtimeExtensions o runtimeSetupEntry fanno fallire installazione/discovery invece di ripiegare silenziosamente sul sorgente. Se un pacchetto installato dichiara solo una voce sorgente TypeScript, OpenClaw userà un peer compilato dist/*.js corrispondente quando esiste, quindi ripiegherà sul sorgente TypeScript. Tutti i percorsi delle voci devono restare all’interno della directory del pacchetto del plugin. Le voci runtime e i peer JavaScript compilati inferiti non rendono valido un percorso sorgente extensions o setupEntry che esce dalla directory.
Cerchi una guida passo passo? Consulta Plugin di canale o Plugin provider per guide passo passo.

definePluginEntry

Importazione: openclaw/plugin-sdk/plugin-entry Per plugin provider, plugin di strumenti, plugin di hook e tutto ciò che non è un canale di messaggistica.
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";

export default definePluginEntry({
  id: "my-plugin",
  name: "My Plugin",
  description: "Short summary",
  register(api) {
    api.registerProvider({
      /* ... */
    });
    api.registerTool({
      /* ... */
    });
  },
});
CampoTipoObbligatorioPredefinito
idstring-
namestring-
descriptionstring-
kindstringNo-
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaNoSchema oggetto vuoto
register(api: OpenClawPluginApi) => void-
  • id deve corrispondere al tuo manifest openclaw.plugin.json.
  • kind serve per slot esclusivi: "memory" o "context-engine".
  • configSchema può essere una funzione per la valutazione lazy.
  • OpenClaw risolve e memorizza quello schema al primo accesso, quindi i builder di schema costosi vengono eseguiti una sola volta.

defineChannelPluginEntry

Importazione: openclaw/plugin-sdk/channel-core Avvolge definePluginEntry con cablaggio specifico per i canali. Chiama automaticamente api.registerChannel({ plugin }), espone un seam opzionale di metadati CLI per l’help root e limita registerFull in base alla modalità di registrazione.
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineChannelPluginEntry({
  id: "my-channel",
  name: "My Channel",
  description: "Short summary",
  plugin: myChannelPlugin,
  setRuntime: setMyRuntime,
  registerCliMetadata(api) {
    api.registerCli(/* ... */);
  },
  registerFull(api) {
    api.registerGatewayMethod(/* ... */);
  },
});
CampoTipoObbligatorioPredefinito
idstring-
namestring-
descriptionstring-
pluginChannelPlugin-
configSchemaOpenClawPluginConfigSchema | () => OpenClawPluginConfigSchemaNoSchema oggetto vuoto
setRuntime(runtime: PluginRuntime) => voidNo-
registerCliMetadata(api: OpenClawPluginApi) => voidNo-
registerFull(api: OpenClawPluginApi) => voidNo-
  • setRuntime viene chiamato durante la registrazione così puoi memorizzare il riferimento runtime (tipicamente tramite createPluginRuntimeStore). Viene saltato durante la cattura dei metadati CLI.
  • registerCliMetadata viene eseguito durante api.registrationMode === "cli-metadata", api.registrationMode === "discovery" e api.registrationMode === "full". Usalo come punto canonico per i descrittori CLI posseduti dal canale, così l’help root resta non attivante, gli snapshot di discovery includono metadati statici dei comandi e la normale registrazione dei comandi CLI rimane compatibile con i caricamenti completi dei plugin.
  • La registrazione di discovery è non attivante, non priva di importazioni. OpenClaw può valutare la voce del plugin attendibile e il modulo del plugin di canale per costruire lo snapshot, quindi mantieni gli import di primo livello privi di effetti collaterali e metti socket, client, worker e servizi dietro percorsi solo "full".
  • registerFull viene eseguito solo quando api.registrationMode === "full". Viene saltato durante il caricamento solo setup.
  • Come definePluginEntry, configSchema può essere una factory lazy e OpenClaw memorizza lo schema risolto al primo accesso.
  • Per i comandi CLI root posseduti dal plugin, preferisci api.registerCli(..., { descriptors: [...] }) quando vuoi che il comando resti caricato in modo lazy senza scomparire dall’albero di parsing della CLI root. Per i comandi di funzionalità dei nodi accoppiati, preferisci api.registerNodeCliFeature(...) così il comando finisce sotto openclaw nodes. Per altri comandi di plugin annidati, aggiungi parentPath e registra i comandi sull’oggetto program passato al registrar; OpenClaw lo risolve al comando padre prima di chiamare il plugin. Per i plugin di canale, preferisci registrare quei descrittori da registerCliMetadata(...) e mantieni registerFull(...) concentrato sul lavoro solo runtime.
  • Se registerFull(...) registra anche metodi RPC del Gateway, tienili su un prefisso specifico del plugin. Gli spazi dei nomi admin core riservati (config.*, exec.approvals.*, wizard.*, update.*) sono sempre forzati a operator.admin.

defineSetupPluginEntry

Importazione: openclaw/plugin-sdk/channel-core Per il file leggero setup-entry.ts. Restituisce solo { plugin }, senza cablaggio runtime o CLI.
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";

export default defineSetupPluginEntry(myChannelPlugin);
OpenClaw carica questo invece della voce completa quando un canale è disabilitato, non configurato o quando il caricamento differito è abilitato. Consulta Setup e configurazione per capire quando è rilevante. In pratica, abbina defineSetupPluginEntry(...) alle famiglie ristrette di helper di setup:
  • openclaw/plugin-sdk/setup-runtime per helper di setup sicuri per il runtime come adapter di patch di setup sicuri da importare, output di note di lookup, promptResolvedAllowFrom, splitSetupEntries e proxy di setup delegati
  • openclaw/plugin-sdk/channel-setup per superfici di setup a installazione opzionale
  • openclaw/plugin-sdk/setup-tools per helper CLI/archive/docs di setup/installazione
Mantieni SDK pesanti, registrazione CLI e servizi runtime di lunga durata nella voce completa. I canali workspace in bundle che separano superfici di setup e runtime possono usare invece defineBundledChannelSetupEntry(...) da openclaw/plugin-sdk/channel-entry-contract. Quel contratto consente alla voce di setup di mantenere export plugin/secret sicuri per il setup pur esponendo ancora un setter runtime:
import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";

export default defineBundledChannelSetupEntry({
  importMetaUrl: import.meta.url,
  plugin: {
    specifier: "./channel-plugin-api.js",
    exportName: "myChannelPlugin",
  },
  runtime: {
    specifier: "./runtime-api.js",
    exportName: "setMyChannelRuntime",
  },
});
Usa quel contratto in bundle solo quando i flussi di setup hanno davvero bisogno di un setter runtime leggero prima che la voce completa del canale venga caricata.

Modalità di registrazione

api.registrationMode indica al tuo plugin come è stato caricato:
ModalitàQuandoCosa registrare
"full"Avvio normale del GatewayTutto
"discovery"Discovery delle capacità sola letturaRegistrazione del canale più descrittori CLI statici; il codice della voce può caricarsi, ma salta socket, worker, client e servizi
"setup-only"Canale disabilitato/non configuratoSolo registrazione del canale
"setup-runtime"Flusso di setup con runtime disponibileRegistrazione del canale più solo il runtime leggero necessario prima che la voce completa venga caricata
"cli-metadata"Cattura help root / metadati CLISolo descrittori CLI
defineChannelPluginEntry gestisce automaticamente questa separazione. Se usi definePluginEntry direttamente per un canale, controlla tu stesso la modalità:
register(api) {
  if (
    api.registrationMode === "cli-metadata" ||
    api.registrationMode === "discovery" ||
    api.registrationMode === "full"
  ) {
    api.registerCli(/* ... */);
    if (api.registrationMode === "cli-metadata") return;
  }

  api.registerChannel({ plugin: myPlugin });
  if (api.registrationMode !== "full") return;

  // Heavy runtime-only registrations
  api.registerService(/* ... */);
}
La modalità discovery costruisce uno snapshot del registro non attivante. Può comunque valutare la voce del plugin e l’oggetto del plugin di canale affinché OpenClaw possa registrare capacità del canale e descrittori CLI statici. Tratta la valutazione dei moduli in discovery come attendibile ma leggera: niente client di rete, sottoprocessi, listener, connessioni a database, worker in background, letture di credenziali o altri effetti collaterali runtime live al primo livello. Tratta "setup-runtime" come la finestra in cui le superfici di avvio solo setup devono esistere senza rientrare nel runtime completo del canale in bundle. Buoni casi d’uso sono registrazione del canale, route HTTP sicure per il setup, metodi Gateway sicuri per il setup e helper di setup delegati. Servizi pesanti in background, registrar CLI e bootstrap di SDK provider/client appartengono ancora a "full". Per i registrar CLI in particolare:
  • usa descriptors quando il registratore possiede uno o più comandi radice e vuoi che OpenClaw carichi in modo lazy il modulo CLI reale alla prima invocazione
  • assicurati che quei descrittori coprano ogni radice di comando di primo livello esposta dal registratore
  • limita i nomi dei comandi dei descrittori a lettere, numeri, trattino e underscore, iniziando con una lettera o un numero; OpenClaw rifiuta i nomi dei descrittori fuori da questa forma e rimuove le sequenze di controllo del terminale dalle descrizioni prima di visualizzare l’aiuto
  • usa solo commands soltanto per percorsi di compatibilità con caricamento immediato

Forme dei Plugin

OpenClaw classifica i plugin caricati in base al loro comportamento di registrazione:
FormaDescrizione
plain-capabilityUn solo tipo di capacità (ad es. solo provider)
hybrid-capabilityPiù tipi di capacità (ad es. provider + voce)
hook-onlySolo hook, nessuna capacità
non-capabilityStrumenti/comandi/servizi ma nessuna capacità
Usa openclaw plugins inspect <id> per vedere la forma di un plugin.

Correlati