defineToolPlugin, definePluginEntry,
defineChannelPluginEntry, defineSetupPluginEntry.
Entradas de paquete
Los plugins instalados apuntan los camposopenclaw de package.json tanto a las entradas de código fuente como a
las entradas compiladas:
extensionsysetupEntryson entradas de código fuente, usadas para el desarrollo en espacios de trabajo y checkouts de git.runtimeExtensionsyruntimeSetupEntryson preferidas para paquetes instalados: permiten que los paquetes de npm omitan la compilación de TypeScript en tiempo de ejecución.runtimeExtensions, cuando está presente, debe coincidir conextensionsen la longitud del arreglo (las entradas se emparejan por posición).runtimeSetupEntryrequieresetupEntry.- Si se declara un artefacto
runtimeExtensions/runtimeSetupEntrypero falta, la instalación/detección falla con un error de empaquetado; OpenClaw no recurre silenciosamente al código fuente. La alternativa de código fuente (abajo) solo se aplica cuando no se declara ninguna entrada de tiempo de ejecución. - Si un paquete instalado declara solo una entrada de código fuente TypeScript, OpenClaw
busca un par
dist/*.js(o.mjs/.cjs) compilado que coincida y lo usa; de lo contrario, recurre al código fuente TypeScript. - Todas las rutas de entrada deben permanecer dentro del directorio del paquete del Plugin. Las entradas de tiempo de ejecución
y los pares JS compilados inferidos no hacen válida una ruta de código fuente
extensionsosetupEntryque se escape.
defineToolPlugin
Importación: openclaw/plugin-sdk/tool-plugin
Para plugins que solo agregan herramientas de agente. Mantiene el código fuente pequeño, infiere los tipos de configuración
y parámetros de herramientas a partir de esquemas TypeBox, envuelve los valores de retorno simples en
el formato de resultado de herramienta de OpenClaw y expone metadatos estáticos que
openclaw plugins build escribe en el manifiesto del Plugin (contracts.tools,
configSchema).
configSchemaes opcional; omitirlo usa un esquema estricto de objeto vacío (el manifiesto generado sigue incluyendoconfigSchema).executedevuelve una cadena simple o un valor serializable como JSON; el helper lo envuelve como un resultado de herramienta de texto condetailsestablecido en el valor de retorno original (sin convertir a cadena).- Para resultados de herramienta personalizados,
openclaw/plugin-sdk/tool-resultsexportatextResultyjsonResult. - Los nombres de herramientas son estáticos, por lo que
openclaw plugins buildderivacontracts.toolsde las herramientas declaradas sin nombres duplicados a mano. - La carga en tiempo de ejecución sigue siendo estricta: los plugins instalados aún necesitan
openclaw.plugin.jsonyopenclaw.extensionsdepackage.json. OpenClaw nunca ejecuta código del Plugin para inferir datos de manifiesto faltantes.
definePluginEntry
Importación: openclaw/plugin-sdk/plugin-entry
Para plugins de proveedor, plugins de herramientas avanzados, plugins de hooks y cualquier cosa que
no sea un canal de mensajería.
| Campo | Tipo | Obligatorio | Predeterminado |
|---|---|---|---|
id | string | Sí | - |
name | string | Sí | - |
description | string | Sí | - |
kind | string (obsoleto, consulta abajo) | No | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | No | Esquema de objeto vacío |
reload | OpenClawPluginReloadRegistration | No | - |
nodeHostCommands | OpenClawPluginNodeHostCommand[] | No | - |
securityAuditCollectors | OpenClawPluginSecurityAuditCollector[] | No | - |
register | (api: OpenClawPluginApi) => void | Sí | - |
iddebe coincidir con tu manifiestoopenclaw.plugin.json.kindestá obsoleto: declara un slot exclusivo ("memory"o"context-engine") en el campokinddel manifiestoopenclaw.plugin.jsonen su lugar. Elkindde la entrada de tiempo de ejecución permanece solo como alternativa de compatibilidad para plugins antiguos.configSchemapuede ser una función para evaluación diferida. OpenClaw resuelve y memoiza el esquema en el primer acceso, por lo que los constructores de esquemas costosos solo se ejecutan una vez.
defineChannelPluginEntry
Importación: openclaw/plugin-sdk/channel-core
Envuelve definePluginEntry con cableado específico del canal: llama automáticamente a
api.registerChannel({ plugin }), expone una costura opcional de metadatos de CLI de ayuda raíz
y limita registerFull según el modo de registro.
| Campo | Tipo | Obligatorio | Predeterminado |
|---|---|---|---|
id | string | Sí | - |
name | string | Sí | - |
description | string | Sí | - |
plugin | ChannelPlugin | Sí | - |
configSchema | OpenClawPluginConfigSchema | () => OpenClawPluginConfigSchema | No | Esquema de objeto vacío |
setRuntime | (runtime: PluginRuntime) => void | No | - |
registerCliMetadata | (api: OpenClawPluginApi) => void | No | - |
registerFull | (api: OpenClawPluginApi) => void | No | - |
setRuntimese ejecuta en todos los modos excepto"cli-metadata"y"tool-discovery". Almacena aquí la referencia del runtime, normalmente mediantecreatePluginRuntimeStore.registerCliMetadatase ejecuta para"cli-metadata","discovery"y"full". Úsalo como el lugar canónico para descriptores de CLI propiedad del canal de modo que la ayuda raíz siga sin activarse, las instantáneas de detección incluyan metadatos estáticos de comandos y el registro normal de CLI siga siendo compatible con cargas completas del Plugin.registerFullse ejecuta solo para"full"y"tool-discovery". Para"tool-discovery"se ejecuta en lugar de el registro del canal: OpenClaw omiteregisterChannel/setRuntimepor completo y llama solo aregisterFull, por lo que cualquier registro de proveedor/herramienta que tu canal necesite para la detección o ejecución independiente de herramientas debe estar allí, no detrás de la configuración normal del canal.- El registro de detección no activa, pero no evita importaciones: OpenClaw puede
evaluar la entrada del Plugin de confianza y el módulo del Plugin de canal para crear la
instantánea. Mantén las importaciones de nivel superior libres de efectos secundarios y coloca sockets,
clientes, workers y servicios detrás de rutas solo para
"full". - Al igual que
definePluginEntry,configSchemapuede ser una fábrica diferida; OpenClaw memoiza el esquema resuelto en el primer acceso.
- Usa
api.registerCli(..., { descriptors: [...] })para comandos CLI raíz propiedad del Plugin que quieres cargar de forma diferida sin que desaparezcan del árbol de análisis de la CLI raíz. Los nombres de descriptor deben coincidir con letras, números, guion y guion bajo, empezando por una letra o número; OpenClaw rechaza otras formas y elimina secuencias de control de terminal de las descripciones antes de renderizar la ayuda. Cubre cada raíz de comando de nivel superior que expone el registrador.commandspor sí solo permanece en la ruta de compatibilidad eager. - Usa
api.registerNodeCliFeature(...)para comandos de función de nodo emparejado de modo que terminen bajoopenclaw nodes(equivalente aregisterCli(registrar, { parentPath: ["nodes"], ... })). - Para otros comandos anidados de Plugin, agrega
parentPathy registra comandos en el objetoprogrampasado al registrador; OpenClaw lo resuelve en el comando padre antes de llamar al Plugin. - Para plugins de canal, registra descriptores de CLI desde
registerCliMetadatay manténregisterFullenfocado en trabajo solo de runtime. - Si
registerFulltambién registra métodos RPC de Gateway, mantenlos en un prefijo específico del Plugin. Los espacios de nombres reservados de administración del núcleo (config.*,exec.approvals.*,wizard.*,update.*) siempre se fuerzan aoperator.admin.
defineSetupPluginEntry
Importación: openclaw/plugin-sdk/channel-core
Para el archivo ligero setup-entry.ts. Devuelve solo { plugin } sin
cableado de runtime ni CLI.
defineSetupPluginEntry(...) con las familias estrechas de helpers de setup:
| Importación | Usar para |
|---|---|
openclaw/plugin-sdk/setup-runtime | Ayudantes de configuración seguros para runtime: createSetupTranslator, adaptadores de parches de configuración seguros para importar, salida de notas de búsqueda, promptResolvedAllowFrom, splitSetupEntries, proxies de configuración delegados |
openclaw/plugin-sdk/channel-setup | Superficies de configuración de instalación opcional |
openclaw/plugin-sdk/setup-tools | Ayudantes de CLI de configuración/instalación, archivo y documentación |
defineBundledChannelSetupEntry(...) desde
openclaw/plugin-sdk/channel-entry-contract en su lugar. Permite que la entrada de configuración
conserve exportaciones de plugin/secretos seguras para la configuración y siga exponiendo un setter de runtime:
registerSetupRuntime se ejecuta solo para cargas "setup-runtime"; mantenlo
limitado a rutas solo de configuración o métodos que deban existir antes de la
activación completa diferida.
Modo de registro
api.registrationMode le indica a tu plugin cómo se cargó:
| Modo | Cuándo | Qué registrar |
|---|---|---|
"full" | Inicio normal del Gateway | Todo |
"discovery" | Descubrimiento de capacidades de solo lectura | Registro del canal más descriptores CLI estáticos; el código de entrada puede cargarse, pero omite sockets, workers, clientes y servicios |
"tool-discovery" | Carga acotada para listar o ejecutar herramientas de plugins específicos | Solo registro de capacidades/herramientas; sin activación de canal |
"setup-only" | Canal deshabilitado/no configurado | Solo registro del canal |
"setup-runtime" | Flujo de configuración con runtime disponible | Registro del canal más solo el runtime ligero necesario antes de que se cargue la entrada completa |
"cli-metadata" | Ayuda raíz / captura de metadatos de CLI | Solo descriptores de CLI |
defineChannelPluginEntry gestiona esta división automáticamente. Si usas
definePluginEntry directamente para un canal, comprueba el modo tú mismo y recuerda que
"tool-discovery" omite el registro del canal:
"setup-runtime" como la ventana en la que las superficies de inicio solo de configuración deben
existir sin volver a entrar en el runtime completo del canal incluido. Buenos encajes son
el registro de canal, rutas HTTP seguras para la configuración, métodos Gateway seguros para la configuración
y ayudantes de configuración delegados. Los servicios pesados en segundo plano, registradores de CLI y
arranques de SDK de proveedor/cliente siguen perteneciendo a "full".
Formas de plugin
OpenClaw clasifica los plugins cargados por su comportamiento de registro:| Forma | Descripción |
|---|---|
| plain-capability | Un tipo de capacidad (p. ej., solo proveedor) |
| hybrid-capability | Varios tipos de capacidad (p. ej., proveedor + voz) |
| hook-only | Solo hooks, sin capacidades |
| non-capability | Herramientas/comandos/servicios, pero sin capacidades |
openclaw plugins inspect <id> para ver la forma de un plugin.
Relacionado
- Resumen del SDK - API de registro y referencia de subrutas
- Ayudantes de Runtime -
api.runtimeycreatePluginRuntimeStore - Configuración y Configuración - manifiesto, entrada de configuración, carga diferida
- Plugins de Canal - creación del objeto
ChannelPlugin - Plugins de Proveedor - registro de proveedores y hooks