package.json das Laden zur Laufzeit auf gebautes
JavaScript verweisen, wenn verfügbar:
extensions und setupEntry bleiben gültige Quelleinstiege für die Entwicklung
in Workspaces und Git-Checkouts. runtimeExtensions und runtimeSetupEntry
werden bevorzugt, wenn OpenClaw ein installiertes Paket lädt, und ermöglichen
npm-Paketen, TypeScript-Kompilierung zur Laufzeit zu vermeiden. Explizite
Laufzeiteinstiege sind erforderlich: runtimeSetupEntry erfordert setupEntry,
und fehlende runtimeExtensions- oder runtimeSetupEntry-Artefakte lassen
Installation/Erkennung fehlschlagen, statt stillschweigend auf Quellen
zurückzufallen. Wenn ein installiertes Paket nur einen TypeScript-Quelleinstieg
deklariert, verwendet OpenClaw ein passendes gebautes dist/*.js-Gegenstück,
wenn eines vorhanden ist, und fällt danach auf die TypeScript-Quelle zurück.
Alle Einstiegspfade müssen innerhalb des Plugin-Paketverzeichnisses bleiben.
Laufzeiteinstiege und abgeleitete gebaute JavaScript-Gegenstücke machen keinen
ausbrechenden extensions- oder setupEntry-Quellpfad gültig.
defineToolPlugin
Import: openclaw/plugin-sdk/tool-plugin
Für einfache Plugins, die nur Agent-Tools hinzufügen. defineToolPlugin hält die
Autor-Quelle klein, leitet Konfigurations- und Tool-Parametertypen aus TypeBox-
Schemas ab, verpackt einfache Rückgabewerte im OpenClaw-Tool-Ergebnisformat und
stellt statische Metadaten bereit, die openclaw plugins build in das
Plugin-Manifest schreibt.
configSchemaist optional. Wenn es weggelassen wird, verwendet OpenClaw ein striktes leeres Objektschema, und das generierte Manifest enthält weiterhinconfigSchema.executegibt eine einfache Zeichenfolge oder einen JSON-serialisierbaren Wert zurück. Die Hilfsfunktion verpackt ihn als Text-Tool-Ergebnis mitdetails.- Tool-Namen sind statisch.
openclaw plugins buildleitetcontracts.toolsaus den deklarierten Tools ab, sodass Autoren Namen nicht manuell duplizieren. - Das Laden zur Laufzeit bleibt strikt. Installierte Plugins benötigen weiterhin
openclaw.plugin.jsonundpackage.jsonopenclaw.extensions; OpenClaw führt keinen Plugin-Code aus, um fehlende Manifestdaten abzuleiten.
definePluginEntry
Import: openclaw/plugin-sdk/plugin-entry
Für Provider-Plugins, erweiterte Tool-Plugins, Hook-Plugins und alles, was
kein Nachrichtenkanal ist.
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
id | string | Ja | - |
name | string | Ja | - |
description | string | Ja | - |
kind | string | Nein | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nein | Leeres Objektschema |
register | (api: OpenClawPluginApi) => void | Ja | - |
idmuss mit Ihremopenclaw.plugin.json-Manifest übereinstimmen.kindist für exklusive Slots:"memory"oder"context-engine".configSchemakann eine Funktion für verzögerte Auswertung sein.- OpenClaw löst dieses Schema beim ersten Zugriff auf und merkt es sich, sodass teure Schema-Builder nur einmal ausgeführt werden.
defineChannelPluginEntry
Import: openclaw/plugin-sdk/channel-core
Umschließt definePluginEntry mit channelspezifischer Verkabelung. Ruft
automatisch api.registerChannel({ plugin }) auf, stellt eine optionale
Metadaten-Schnittstelle für Root-Hilfe der CLI bereit und beschränkt
registerFull auf den Registrierungsmodus.
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
id | string | Ja | - |
name | string | Ja | - |
description | string | Ja | - |
plugin | ChannelPlugin | Ja | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nein | Leeres Objektschema |
setRuntime | (runtime: PluginRuntime) => void | Nein | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | Nein | - |
registerFull | (api: OpenClawPluginApi) => void | Nein | - |
setRuntimewird während der Registrierung aufgerufen, damit Sie die Laufzeitreferenz speichern können (typischerweise übercreatePluginRuntimeStore). Während der Erfassung von CLI-Metadaten wird es übersprungen.registerCliMetadataläuft währendapi.registrationMode === "cli-metadata",api.registrationMode === "discovery"undapi.registrationMode === "full". Verwenden Sie es als kanonischen Ort für channeleigene CLI-Deskriptoren, damit Root-Hilfe nicht aktivierend bleibt, Erkennungs-Snapshots statische Befehlsmetadaten enthalten und die normale CLI-Befehlsregistrierung mit vollständigen Plugin-Ladevorgängen kompatibel bleibt.- Die Erkennungsregistrierung ist nicht aktivierend, aber nicht importfrei.
OpenClaw kann den vertrauenswürdigen Plugin-Einstieg und das Channel-Plugin-
Modul auswerten, um den Snapshot zu erstellen. Halten Sie daher Top-Level-
Imports frei von Seiteneffekten und platzieren Sie Sockets, Clients, Worker und
Dienste hinter Pfaden, die nur für
"full"gelten. registerFullläuft nur, wennapi.registrationMode === "full"ist. Beim Laden nur für die Einrichtung wird es übersprungen.- Wie bei
definePluginEntrykannconfigSchemaeine verzögerte Factory sein, und OpenClaw merkt sich das aufgelöste Schema beim ersten Zugriff. - Für plugin-eigene Root-CLI-Befehle bevorzugen Sie
api.registerCli(..., { descriptors: [...] }), wenn der Befehl verzögert geladen bleiben soll, ohne aus dem Parse-Baum der Root-CLI zu verschwinden. Für Funktionsbefehle gekoppelter Knoten bevorzugen Sieapi.registerNodeCliFeature(...), damit der Befehl unteropenclaw nodeslandet. Für andere verschachtelte Plugin-Befehle fügen SieparentPathhinzu und registrieren Befehle amprogram-Objekt, das an den Registrar übergeben wird; OpenClaw löst es auf den übergeordneten Befehl auf, bevor das Plugin aufgerufen wird. Für Channel-Plugins bevorzugen Sie, diese Deskriptoren ausregisterCliMetadata(...)zu registrieren, und halten SieregisterFull(...)auf reine Laufzeitarbeit fokussiert. - Wenn
registerFull(...)auch Gateway-RPC-Methoden registriert, halten Sie sie unter einem Plugin-spezifischen Präfix. Reservierte Core-Admin-Namespaces (config.*,exec.approvals.*,wizard.*,update.*) werden immer zuoperator.adminerzwungen.
defineSetupPluginEntry
Import: openclaw/plugin-sdk/channel-core
Für die schlanke Datei setup-entry.ts. Gibt nur { plugin } ohne Laufzeit-
oder CLI-Verkabelung zurück.
defineSetupPluginEntry(...) mit den schmalen
Setup-Hilfsfamilien:
openclaw/plugin-sdk/setup-runtimefür laufzeitsichere Setup-Hilfsfunktionen wiecreateSetupTranslator, importsichere Setup-Patch-Adapter, Lookup-Note-Ausgabe,promptResolvedAllowFrom,splitSetupEntriesund delegierte Setup-Proxysopenclaw/plugin-sdk/channel-setupfür Setup-Oberflächen optionaler Installationenopenclaw/plugin-sdk/setup-toolsfür Setup-/Installations-CLI-/Archiv-/Docs- Hilfsfunktionen
defineBundledChannelSetupEntry(...) aus
openclaw/plugin-sdk/channel-entry-contract verwenden. Dieser Vertrag ermöglicht
dem Setup-Einstieg, setup-sichere Plugin-/Secrets-Exporte beizubehalten und
gleichzeitig einen Laufzeit-Setter bereitzustellen:
registerSetupRuntime
läuft nur für "setup-runtime"-Ladevorgänge; beschränken Sie es auf reine
Konfigurationsrouten oder Methoden, die vor der verzögerten vollständigen
Aktivierung existieren müssen.
Registrierungsmodus
api.registrationMode teilt Ihrem Plugin mit, wie es geladen wurde:
| Modus | Wann | Was zu registrieren ist |
|---|---|---|
"full" | Normaler Gateway-Start | Alles |
"discovery" | Schreibgeschützte Capability-Erkennung | Channel-Registrierung plus statische CLI-Deskriptoren; Einstiegscode darf geladen werden, aber Sockets, Worker, Clients und Dienste überspringen |
"setup-only" | Deaktivierter/nicht konfigurierter Channel | Nur Channel-Registrierung |
"setup-runtime" | Setup-Ablauf mit verfügbarer Runtime | Channel-Registrierung plus nur die leichtgewichtige Runtime, die benötigt wird, bevor der vollständige Einstieg lädt |
"cli-metadata" | Root-Hilfe / CLI-Metadatenerfassung | Nur CLI-Deskriptoren |
defineChannelPluginEntry verarbeitet diese Aufteilung automatisch. Wenn Sie
definePluginEntry direkt für einen Channel verwenden, prüfen Sie den Modus selbst:
"setup-runtime" als das Zeitfenster, in dem setup-only-Startoberflächen
vorhanden sein müssen, ohne erneut in die vollständige gebündelte Channel-Runtime
einzutreten. Gut geeignet sind Channel-Registrierung, setup-sichere HTTP-Routen,
setup-sichere Gateway-Methoden und delegierte Setup-Helfer. Schwere Hintergrunddienste,
CLI-Registrare und Provider-/Client-SDK-Bootstraps gehören weiterhin in "full".
Speziell für CLI-Registrare gilt:
- verwenden Sie
descriptors, wenn der Registrar einen oder mehrere Root-Befehle besitzt und Sie möchten, dass OpenClaw das echte CLI-Modul beim ersten Aufruf lazy lädt - stellen Sie sicher, dass diese Deskriptoren jeden vom Registrar offengelegten Befehlsstamm der obersten Ebene abdecken
- beschränken Sie Deskriptor-Befehlsnamen auf Buchstaben, Zahlen, Bindestrich und Unterstrich, beginnend mit einem Buchstaben oder einer Zahl; OpenClaw weist Deskriptornamen außerhalb dieser Form zurück und entfernt terminale Steuersequenzen aus Beschreibungen, bevor Hilfe gerendert wird
- verwenden Sie
commandsallein nur für eager geladene Kompatibilitätspfade
Plugin-Formen
OpenClaw klassifiziert geladene Plugins nach ihrem Registrierungsverhalten:| Form | Beschreibung |
|---|---|
| plain-capability | Ein Capability-Typ (z. B. nur Provider) |
| hybrid-capability | Mehrere Capability-Typen (z. B. Provider + Sprache) |
| hook-only | Nur Hooks, keine Capabilities |
| non-capability | Tools/Befehle/Dienste, aber keine Capabilities |
openclaw plugins inspect <id>, um die Form eines Plugins zu sehen.
Verwandt
- SDK-Überblick - Registrierungs-API und Subpath-Referenz
- Runtime-Helfer -
api.runtimeundcreatePluginRuntimeStore - Setup und Konfiguration - Manifest, Setup-Einstieg, verzögertes Laden
- Channel-Plugins - Erstellen des
ChannelPlugin-Objekts - Provider-Plugins - Provider-Registrierung und Hooks