package.json runtime-laden naar gebouwde
JavaScript laten verwijzen wanneer dat beschikbaar is:
extensions en setupEntry blijven geldige bron-entries voor workspace- en git
checkout-ontwikkeling. runtimeExtensions en runtimeSetupEntry hebben de voorkeur
wanneer OpenClaw een geinstalleerd pakket laadt en zorgen ervoor dat npm-pakketten
runtime TypeScript-compilatie kunnen vermijden. Expliciete runtime-entries zijn vereist: runtimeSetupEntry
vereist setupEntry, en ontbrekende runtimeExtensions- of runtimeSetupEntry-
artefacten laten installatie/discovery falen in plaats van stilzwijgend terug te vallen op de bron. Als
een geinstalleerd pakket alleen een TypeScript-bronentry declareert, gebruikt OpenClaw een
overeenkomende gebouwde dist/*.js-peer wanneer die bestaat, en valt daarna terug op de TypeScript-
bron.
Alle entry-paden moeten binnen de pluginpakketdirectory blijven. Runtime-entries
en afgeleide gebouwde JavaScript-peers maken een ontsnappend extensions- of
setupEntry-bronpad niet geldig.
definePluginEntry
Import: openclaw/plugin-sdk/plugin-entry
Voor providerplugins, toolplugins, hookplugins en alles wat geen
messagingkanaal is.
| Veld | Type | Vereist | Standaard |
|---|---|---|---|
id | string | Ja | - |
name | string | Ja | - |
description | string | Ja | - |
kind | string | Nee | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nee | Leeg objectschema |
register | (api: OpenClawPluginApi) => void | Ja | - |
idmoet overeenkomen met jeopenclaw.plugin.json-manifest.kindis voor exclusieve slots:"memory"of"context-engine".configSchemakan een functie zijn voor luie evaluatie.- OpenClaw lost dat schema op en memoiseert het bij de eerste toegang, zodat dure schema- builders maar een keer worden uitgevoerd.
defineChannelPluginEntry
Import: openclaw/plugin-sdk/channel-core
Omhult definePluginEntry met kanaalspecifieke bedrading. Roept automatisch
api.registerChannel({ plugin }) aan, exposeert een optionele root-help CLI-metadata
seam, en gated registerFull op registratiemodus.
| Veld | Type | Vereist | Standaard |
|---|---|---|---|
id | string | Ja | - |
name | string | Ja | - |
description | string | Ja | - |
plugin | ChannelPlugin | Ja | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | Nee | Leeg objectschema |
setRuntime | (runtime: PluginRuntime) => void | Nee | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | Nee | - |
registerFull | (api: OpenClawPluginApi) => void | Nee | - |
setRuntimewordt aangeroepen tijdens registratie zodat je de runtimeverwijzing kunt opslaan (meestal viacreatePluginRuntimeStore). Dit wordt overgeslagen tijdens het vastleggen van CLI-metadata.registerCliMetadatawordt uitgevoerd tijdensapi.registrationMode === "cli-metadata",api.registrationMode === "discovery"enapi.registrationMode === "full". Gebruik dit als de canonieke plek voor kanaaleigen CLI-descriptors, zodat root-help niet-activerend blijft, discovery-snapshots statische commandmetadata bevatten en normale CLI-commandregistratie compatibel blijft met volledige pluginladingen.- Discovery-registratie is niet-activerend, niet importvrij. OpenClaw kan
de vertrouwde plugin-entry en kanaalpluginmodule evalueren om de
snapshot te bouwen, dus houd imports op topniveau vrij van side-effects en plaats sockets,
clients, workers en services achter paden die alleen voor
"full"zijn. registerFullwordt alleen uitgevoerd wanneerapi.registrationMode === "full". Dit wordt overgeslagen tijdens setup-only laden.- Net als
definePluginEntrykanconfigSchemaeen luie factory zijn en memoiseert OpenClaw het opgeloste schema bij de eerste toegang. - Voor plugineigen root-CLI-commands geef je de voorkeur aan
api.registerCli(..., { descriptors: [...] })wanneer je wilt dat het command lazy-loaded blijft zonder uit de root-CLI-parse tree te verdwijnen. Voor featurecommands met gekoppelde nodes geef je de voorkeur aanapi.registerNodeCliFeature(...)zodat het command onderopenclaw nodesterechtkomt. Voor andere geneste plugincommands voeg jeparentPathtoe en registreer je commands op hetprogram-object dat aan de registrar wordt doorgegeven; OpenClaw lost dit op naar het parent-command voordat de plugin wordt aangeroepen. Voor kanaalplugins geef je de voorkeur aan het registreren van die descriptors vanuitregisterCliMetadata(...)en houd jeregisterFull(...)gericht op werk dat alleen runtime is. - Als
registerFull(...)ook Gateway-RPC-methoden registreert, houd die dan op een pluginspecifiek prefix. Gereserveerde core-admin-namespaces (config.*,exec.approvals.*,wizard.*,update.*) worden altijd afgedwongen naaroperator.admin.
defineSetupPluginEntry
Import: openclaw/plugin-sdk/channel-core
Voor het lichte setup-entry.ts-bestand. Retourneert alleen { plugin } zonder
runtime- of CLI-bedrading.
defineSetupPluginEntry(...) aan de smalle setuphelper-
families:
openclaw/plugin-sdk/setup-runtimevoor runtime-veilige setuphelpers zoals importveilige setup-patchadapters, lookup-note-output,promptResolvedAllowFrom,splitSetupEntriesen gedelegeerde setup-proxy’sopenclaw/plugin-sdk/channel-setupvoor optional-install setupoppervlakkenopenclaw/plugin-sdk/setup-toolsvoor setup/install CLI/archive/docs-helpers
defineBundledChannelSetupEntry(...) uit
openclaw/plugin-sdk/channel-entry-contract gebruiken. Dat contract laat de
setup-entry setup-veilige plugin/secrets-exports behouden terwijl er nog steeds een
runtime-setter wordt geexposeerd:
Registratiemodus
api.registrationMode vertelt je plugin hoe deze is geladen:
| Modus | Wanneer | Wat te registreren |
|---|---|---|
"full" | Normale Gateway-startup | Alles |
"discovery" | Alleen-lezen capability discovery | Kanaalregistratie plus statische CLI-descriptors; entrycode kan laden, maar sla sockets, workers, clients en services over |
"setup-only" | Uitgeschakeld/niet-geconfigureerd kanaal | Alleen kanaalregistratie |
"setup-runtime" | Setupflow met beschikbare runtime | Kanaalregistratie plus alleen de lichte runtime die nodig is voordat de volledige entry laadt |
"cli-metadata" | Root-help / CLI-metadata vastleggen | Alleen CLI-descriptors |
defineChannelPluginEntry handelt deze splitsing automatisch af. Als je
definePluginEntry rechtstreeks voor een kanaal gebruikt, controleer dan zelf de modus:
"setup-runtime" als het venster waarin setup-only startup-oppervlakken moeten
bestaan zonder opnieuw de volledige gebundelde kanaalruntime binnen te gaan. Goede toepassingen zijn
kanaalregistratie, setup-veilige HTTP-routes, setup-veilige Gateway-methoden en
gedelegeerde setuphelpers. Zware achtergrondservices, CLI-registrars en
provider/client-SDK-bootstraps horen nog steeds thuis in "full".
Specifiek voor CLI-registrars:
- gebruik
descriptorswanneer de registrar eigenaar is van een of meer rootopdrachten en je wilt dat OpenClaw de echte CLI-module lazy-loadt bij de eerste aanroep - zorg ervoor dat die descriptors elke root van een top-level opdracht dekken die door de registrar wordt blootgesteld
- beperk descriptornamen voor opdrachten tot letters, cijfers, koppeltekens en underscores, beginnend met een letter of cijfer; OpenClaw weigert descriptornamen buiten die vorm en verwijdert terminalbesturingsreeksen uit beschrijvingen voordat hulp wordt weergegeven
- gebruik
commandsalleen voor eager compatibiliteitspaden
Plugin-vormen
OpenClaw classificeert geladen plugins op basis van hun registratiegedrag:| Vorm | Beschrijving |
|---|---|
| plain-capability | Eén capabilitytype (bijv. alleen provider) |
| hybrid-capability | Meerdere capabilitytypen (bijv. provider + spraak) |
| hook-only | Alleen hooks, geen capabilities |
| non-capability | Tools/opdrachten/services, maar geen capabilities |
openclaw plugins inspect <id> om de vorm van een plugin te bekijken.
Gerelateerd
- SDK-overzicht - registratie-API en subpadreferentie
- Runtime-helpers -
api.runtimeencreatePluginRuntimeStore - Installatie en configuratie - manifest, setup-entry, uitgesteld laden
- Kanaal-Plugins - het
ChannelPlugin-object bouwen - Provider-Plugins - providerregistratie en hooks