chore(i18n): refresh es translations
This commit is contained in:
parent
9da996e409
commit
b522d331b5
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Configurar Zalo Personal para OpenClaw
|
||||
- Configuración de Zalo Personal para OpenClaw
|
||||
- Depuración del inicio de sesión o del flujo de mensajes de Zalo Personal
|
||||
summary: Soporte para cuentas personales de Zalo mediante zca-js nativo (inicio de sesión con QR), capacidades y configuración
|
||||
summary: Compatibilidad con cuentas personales de Zalo mediante zca-js nativo (inicio de sesión con QR), capacidades y configuración
|
||||
title: Zalo personal
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T22:17:12Z"
|
||||
generated_at: "2026-05-04T18:23:40Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 0096775e0017e504130f2e19e05ab8114eadb873a9e11f79ea8f0dd91297567f
|
||||
source_hash: 0f6d27f0ca502e6426abe21d609efd0a168a0b6b0fafe8d52d59f1a717da1ed5
|
||||
source_path: channels/zalouser.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -16,31 +16,31 @@ x-i18n:
|
||||
Estado: experimental. Esta integración automatiza una **cuenta personal de Zalo** mediante `zca-js` nativo dentro de OpenClaw.
|
||||
|
||||
<Warning>
|
||||
Esta es una integración no oficial y puede provocar la suspensión o prohibición de la cuenta. Úsala bajo tu propio riesgo.
|
||||
Esta es una integración no oficial y puede provocar la suspensión o el bloqueo de la cuenta. Úsela bajo su propia responsabilidad.
|
||||
</Warning>
|
||||
|
||||
## Plugin incluido
|
||||
|
||||
Zalo Personal se distribuye como un Plugin incluido en las versiones actuales de OpenClaw, por lo que las compilaciones empaquetadas normales no necesitan una instalación separada.
|
||||
|
||||
Si usas una compilación anterior o una instalación personalizada que excluye Zalo Personal, instala directamente el paquete de npm:
|
||||
Si usa una compilación anterior o una instalación personalizada que excluye Zalo Personal, instale el paquete npm directamente:
|
||||
|
||||
- Instalar mediante CLI: `openclaw plugins install @openclaw/zalouser`
|
||||
- Instalar mediante la CLI: `openclaw plugins install @openclaw/zalouser`
|
||||
- Versión fijada: `openclaw plugins install @openclaw/zalouser@2026.5.2`
|
||||
- O desde un checkout de código fuente: `openclaw plugins install ./path/to/local/zalouser-plugin`
|
||||
- O desde una copia local del código fuente: `openclaw plugins install ./path/to/local/zalouser-plugin`
|
||||
- Detalles: [Plugins](/es/tools/plugin)
|
||||
|
||||
No se requiere ningún binario externo de CLI `zca`/`openzca`.
|
||||
No se requiere ningún binario externo de la CLI `zca`/`openzca`.
|
||||
|
||||
## Configuración rápida (principiante)
|
||||
|
||||
1. Asegúrate de que el Plugin Zalo Personal esté disponible.
|
||||
1. Asegúrese de que el Plugin Zalo Personal esté disponible.
|
||||
- Las versiones empaquetadas actuales de OpenClaw ya lo incluyen.
|
||||
- Las instalaciones anteriores/personalizadas pueden añadirlo manualmente con los comandos anteriores.
|
||||
2. Inicia sesión (QR, en la máquina del Gateway):
|
||||
2. Inicie sesión (QR, en la máquina del Gateway):
|
||||
- `openclaw channels login --channel zalouser`
|
||||
- Escanea el código QR con la aplicación móvil de Zalo.
|
||||
3. Habilita el canal:
|
||||
- Escanee el código QR con la aplicación móvil de Zalo.
|
||||
3. Habilite el canal:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -53,23 +53,23 @@ No se requiere ningún binario externo de CLI `zca`/`openzca`.
|
||||
}
|
||||
```
|
||||
|
||||
4. Reinicia el Gateway (o finaliza la configuración).
|
||||
5. El acceso por DM usa pairing de forma predeterminada; aprueba el código de pairing en el primer contacto.
|
||||
4. Reinicie el Gateway (o finalice la configuración).
|
||||
5. El acceso por MD usa emparejamiento de forma predeterminada; apruebe el código de emparejamiento en el primer contacto.
|
||||
|
||||
## Qué es
|
||||
|
||||
- Se ejecuta completamente en proceso mediante `zca-js`.
|
||||
- Usa listeners de eventos nativos para recibir mensajes entrantes.
|
||||
- Envía respuestas directamente a través de la API de JS (texto/medios/enlace).
|
||||
- Está diseñado para casos de uso de “cuenta personal” donde la API de Zalo Bot no está disponible.
|
||||
- Se ejecuta completamente dentro del proceso mediante `zca-js`.
|
||||
- Usa escuchadores de eventos nativos para recibir mensajes entrantes.
|
||||
- Envía respuestas directamente mediante la API de JS (texto/medios/enlace).
|
||||
- Diseñado para casos de uso de “cuenta personal” en los que la API de Zalo Bot no está disponible.
|
||||
|
||||
## Nomenclatura
|
||||
|
||||
El id de canal es `zalouser` para dejar explícito que esto automatiza una **cuenta personal de usuario de Zalo** (no oficial). Mantenemos `zalo` reservado para una posible integración futura oficial con la API de Zalo.
|
||||
El id de canal es `zalouser` para dejar explícito que esto automatiza una **cuenta personal de usuario de Zalo** (no oficial). Mantenemos `zalo` reservado para una posible integración futura con la API oficial de Zalo.
|
||||
|
||||
## Buscar IDs (directorio)
|
||||
|
||||
Usa la CLI de directorio para descubrir pares/grupos y sus IDs:
|
||||
Use la CLI de directorio para descubrir pares/grupos y sus IDs:
|
||||
|
||||
```bash
|
||||
openclaw directory self --channel zalouser
|
||||
@ -82,31 +82,33 @@ openclaw directory groups list --channel zalouser --query "work"
|
||||
- El texto saliente se divide en fragmentos de ~2000 caracteres (límites del cliente de Zalo).
|
||||
- El streaming está bloqueado de forma predeterminada.
|
||||
|
||||
## Control de acceso (DMs)
|
||||
## Control de acceso (MD)
|
||||
|
||||
`channels.zalouser.dmPolicy` admite: `pairing | allowlist | open | disabled` (predeterminado: `pairing`).
|
||||
|
||||
`channels.zalouser.allowFrom` acepta IDs o nombres de usuario. Durante la configuración, los nombres se resuelven a IDs usando la búsqueda de contactos en proceso del Plugin.
|
||||
`channels.zalouser.allowFrom` debe usar IDs de usuario de Zalo estables. Durante la configuración interactiva, los nombres introducidos pueden resolverse a IDs mediante la búsqueda de contactos en proceso del Plugin.
|
||||
|
||||
Aprobar mediante:
|
||||
Si un nombre sin procesar permanece en la configuración, el arranque solo lo resuelve cuando `channels.zalouser.dangerouslyAllowNameMatching: true` está habilitado. Sin esa aceptación explícita, las comprobaciones de remitente en tiempo de ejecución solo usan IDs y los nombres sin procesar se ignoran para la autorización.
|
||||
|
||||
Apruebe mediante:
|
||||
|
||||
- `openclaw pairing list zalouser`
|
||||
- `openclaw pairing approve zalouser <code>`
|
||||
|
||||
## Acceso a grupos (opcional)
|
||||
|
||||
- Predeterminado: `channels.zalouser.groupPolicy = "open"` (grupos permitidos). Usa `channels.defaults.groupPolicy` para sobrescribir el valor predeterminado cuando no esté definido.
|
||||
- Restringe a una allowlist con:
|
||||
- Predeterminado: `channels.zalouser.groupPolicy = "open"` (grupos permitidos). Use `channels.defaults.groupPolicy` para sobrescribir el valor predeterminado cuando no esté definido.
|
||||
- Restrinja a una lista de permitidos con:
|
||||
- `channels.zalouser.groupPolicy = "allowlist"`
|
||||
- `channels.zalouser.groups` (las claves deben ser IDs de grupo estables; los nombres se resuelven a IDs al iniciar cuando es posible)
|
||||
- `channels.zalouser.groups` (las claves deben ser IDs de grupo estables; los nombres se resuelven a IDs al arrancar solo cuando `channels.zalouser.dangerouslyAllowNameMatching: true` está habilitado)
|
||||
- `channels.zalouser.groupAllowFrom` (controla qué remitentes en grupos permitidos pueden activar el bot)
|
||||
- Bloquea todos los grupos: `channels.zalouser.groupPolicy = "disabled"`.
|
||||
- El asistente de configuración puede solicitar allowlists de grupos.
|
||||
- Al iniciar, OpenClaw resuelve los nombres de grupos/usuarios en allowlists a IDs y registra el mapeo.
|
||||
- La coincidencia de allowlist de grupos se basa solo en ID de forma predeterminada. Los nombres no resueltos se ignoran para la autenticación salvo que `channels.zalouser.dangerouslyAllowNameMatching: true` esté habilitado.
|
||||
- `channels.zalouser.dangerouslyAllowNameMatching: true` es un modo de compatibilidad de emergencia que vuelve a habilitar la coincidencia mutable por nombre de grupo.
|
||||
- Si `groupAllowFrom` no está definido, el runtime recurre a `allowFrom` para las comprobaciones de remitentes de grupo.
|
||||
- Las comprobaciones de remitente se aplican tanto a mensajes normales de grupo como a comandos de control (por ejemplo, `/new`, `/reset`).
|
||||
- Bloquear todos los grupos: `channels.zalouser.groupPolicy = "disabled"`.
|
||||
- El asistente de configuración puede solicitar listas de permitidos para grupos.
|
||||
- Al arrancar, OpenClaw resuelve los nombres de grupos/usuarios en listas de permitidos a IDs y registra la asignación solo cuando `channels.zalouser.dangerouslyAllowNameMatching: true` está habilitado.
|
||||
- La coincidencia de listas de permitidos de grupos usa solo IDs de forma predeterminada. Los nombres no resueltos se ignoran para la autenticación, salvo que `channels.zalouser.dangerouslyAllowNameMatching: true` esté habilitado.
|
||||
- `channels.zalouser.dangerouslyAllowNameMatching: true` es un modo de compatibilidad de emergencia que vuelve a habilitar la resolución de nombres mutable al arranque y la coincidencia de nombres de grupo en tiempo de ejecución.
|
||||
- Si `groupAllowFrom` no está definido, el tiempo de ejecución recurre a `allowFrom` para las comprobaciones de remitente de grupo.
|
||||
- Las comprobaciones de remitente se aplican tanto a mensajes de grupo normales como a comandos de control (por ejemplo `/new`, `/reset`).
|
||||
|
||||
Ejemplo:
|
||||
|
||||
@ -125,15 +127,15 @@ Ejemplo:
|
||||
}
|
||||
```
|
||||
|
||||
### Control de menciones en grupos
|
||||
### Control por mención en grupos
|
||||
|
||||
- `channels.zalouser.groups.<group>.requireMention` controla si las respuestas de grupo requieren una mención.
|
||||
- Orden de resolución: id/nombre exacto del grupo -> slug de grupo normalizado -> `*` -> predeterminado (`true`).
|
||||
- Esto se aplica tanto a grupos en allowlist como al modo de grupo abierto.
|
||||
- Citar un mensaje del bot cuenta como una mención implícita para activar el grupo.
|
||||
- Los comandos de control autorizados (por ejemplo, `/new`) pueden omitir el control de menciones.
|
||||
- Cuando se omite un mensaje de grupo porque se requiere una mención, OpenClaw lo almacena como historial de grupo pendiente y lo incluye en el siguiente mensaje de grupo procesado.
|
||||
- El límite de historial de grupo usa `messages.groupChat.historyLimit` de forma predeterminada (fallback `50`). Puedes sobrescribirlo por cuenta con `channels.zalouser.historyLimit`.
|
||||
- Orden de resolución: id/nombre de grupo exacto -> slug de grupo normalizado -> `*` -> predeterminado (`true`).
|
||||
- Esto se aplica tanto a grupos en la lista de permitidos como al modo de grupo abierto.
|
||||
- Citar un mensaje del bot cuenta como una mención implícita para la activación en grupo.
|
||||
- Los comandos de control autorizados (por ejemplo `/new`) pueden omitir el control por mención.
|
||||
- Cuando se omite un mensaje de grupo porque se requiere mención, OpenClaw lo almacena como historial de grupo pendiente y lo incluye en el siguiente mensaje de grupo procesado.
|
||||
- El límite de historial de grupo usa `messages.groupChat.historyLimit` de forma predeterminada (respaldo `50`). Puede sobrescribirlo por cuenta con `channels.zalouser.historyLimit`.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
@ -153,7 +155,7 @@ Ejemplo:
|
||||
|
||||
## Varias cuentas
|
||||
|
||||
Las cuentas se mapean a perfiles `zalouser` en el estado de OpenClaw. Ejemplo:
|
||||
Las cuentas se asignan a perfiles `zalouser` en el estado de OpenClaw. Ejemplo:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -169,34 +171,34 @@ Las cuentas se mapean a perfiles `zalouser` en el estado de OpenClaw. Ejemplo:
|
||||
}
|
||||
```
|
||||
|
||||
## Escritura, reacciones y acuses de entrega
|
||||
## Escritura, reacciones y confirmaciones de entrega
|
||||
|
||||
- OpenClaw envía un evento de escritura antes de despachar una respuesta (mejor esfuerzo).
|
||||
- La acción de reacción a mensajes `react` es compatible con `zalouser` en las acciones de canal.
|
||||
- Usa `remove: true` para quitar un emoji de reacción específico de un mensaje.
|
||||
- La acción de reacción a mensaje `react` es compatible con `zalouser` en acciones de canal.
|
||||
- Use `remove: true` para eliminar un emoji de reacción específico de un mensaje.
|
||||
- Semántica de reacciones: [Reacciones](/es/tools/reactions)
|
||||
- Para mensajes entrantes que incluyen metadatos de evento, OpenClaw envía acuses de entregado + visto (mejor esfuerzo).
|
||||
- Para los mensajes entrantes que incluyen metadatos de evento, OpenClaw envía confirmaciones de entregado + visto (mejor esfuerzo).
|
||||
|
||||
## Solución de problemas
|
||||
|
||||
**El inicio de sesión no persiste:**
|
||||
**El inicio de sesión no se conserva:**
|
||||
|
||||
- `openclaw channels status --probe`
|
||||
- Volver a iniciar sesión: `openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser`
|
||||
- Vuelva a iniciar sesión: `openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser`
|
||||
|
||||
**El nombre de allowlist/grupo no se resolvió:**
|
||||
**La lista de permitidos/el nombre de grupo no se resolvió:**
|
||||
|
||||
- Usa IDs numéricos en `allowFrom`/`groupAllowFrom`/`groups`, o nombres exactos de amigos/grupos.
|
||||
- Use IDs numéricos en `allowFrom`/`groupAllowFrom` e IDs de grupo estables en `groups`. Si necesita intencionadamente nombres exactos de amigos/grupos, habilite `channels.zalouser.dangerouslyAllowNameMatching: true`.
|
||||
|
||||
**Actualizaste desde una configuración antigua basada en CLI:**
|
||||
**Actualizado desde una configuración antigua basada en CLI:**
|
||||
|
||||
- Elimina cualquier suposición antigua sobre un proceso externo `zca`.
|
||||
- El canal ahora se ejecuta completamente en OpenClaw sin binarios externos de CLI.
|
||||
- Elimine cualquier suposición antigua sobre procesos externos `zca`.
|
||||
- El canal ahora se ejecuta completamente en OpenClaw sin binarios externos de la CLI.
|
||||
|
||||
## Relacionado
|
||||
|
||||
- [Resumen de canales](/es/channels) — todos los canales compatibles
|
||||
- [Pairing](/es/channels/pairing) — autenticación por DM y flujo de pairing
|
||||
- [Grupos](/es/channels/groups) — comportamiento de chats de grupo y control de menciones
|
||||
- [Descripción general de canales](/es/channels) — todos los canales compatibles
|
||||
- [Emparejamiento](/es/channels/pairing) — autenticación por MD y flujo de emparejamiento
|
||||
- [Grupos](/es/channels/groups) — comportamiento de chat grupal y control por mención
|
||||
- [Enrutamiento de canales](/es/channels/channel-routing) — enrutamiento de sesiones para mensajes
|
||||
- [Seguridad](/es/gateway/security) — modelo de acceso y endurecimiento
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
---
|
||||
read_when:
|
||||
- Aún usas `openclaw daemon ...` en scripts
|
||||
- Necesitas comandos de ciclo de vida del servicio (install/start/stop/restart/status)
|
||||
summary: Referencia de CLI para `openclaw daemon` (alias heredado para la gestión del servicio Gateway)
|
||||
- Aún usas `openclaw daemon ...` en los scripts
|
||||
- Necesitas comandos del ciclo de vida del servicio (install/start/stop/restart/status)
|
||||
summary: Referencia de CLI para `openclaw daemon` (alias heredado para la administración del servicio Gateway)
|
||||
title: Demonio
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T22:17:22Z"
|
||||
generated_at: "2026-05-04T18:23:50Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 3f11b75bf2781e69f6f59b23364f06cf359f9f24407f25f19b9d2186f7158512
|
||||
source_hash: f84e11fc50bdf38da518a8fcf415ae461a2688c2299f996eee384357c0d04a05
|
||||
source_path: cli/daemon.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw daemon`
|
||||
|
||||
Alias heredado para los comandos de administración del servicio Gateway.
|
||||
Alias heredado para los comandos de gestión del servicio Gateway.
|
||||
|
||||
`openclaw daemon ...` se asigna a la misma superficie de control de servicio que los comandos de servicio `openclaw gateway ...`.
|
||||
|
||||
@ -32,7 +32,7 @@ openclaw daemon uninstall
|
||||
|
||||
## Subcomandos
|
||||
|
||||
- `status`: muestra el estado de instalación del servicio y sondea el estado de Gateway
|
||||
- `status`: muestra el estado de instalación del servicio y comprueba el estado de Gateway
|
||||
- `install`: instala el servicio (`launchd`/`systemd`/`schtasks`)
|
||||
- `uninstall`: elimina el servicio
|
||||
- `start`: inicia el servicio
|
||||
@ -43,23 +43,24 @@ openclaw daemon uninstall
|
||||
|
||||
- `status`: `--url`, `--token`, `--password`, `--timeout`, `--no-probe`, `--require-rpc`, `--deep`, `--json`
|
||||
- `install`: `--port`, `--runtime <node|bun>`, `--token`, `--force`, `--json`
|
||||
- `restart`: `--force`, `--wait <duration>`, `--json`
|
||||
- `restart`: `--safe`, `--force`, `--wait <duration>`, `--json`
|
||||
- ciclo de vida (`uninstall|start|stop`): `--json`
|
||||
|
||||
Notas:
|
||||
|
||||
- `status` resuelve los SecretRefs de autenticación configurados para la autenticación del sondeo cuando es posible.
|
||||
- `status` resuelve los SecretRefs de autenticación configurados para la autenticación de sondeo cuando es posible.
|
||||
- Si un SecretRef de autenticación requerido no se resuelve en esta ruta de comando, `daemon status --json` informa `rpc.authWarning` cuando falla la conectividad/autenticación del sondeo; pasa `--token`/`--password` explícitamente o resuelve primero el origen del secreto.
|
||||
- Si el sondeo se realiza correctamente, las advertencias de referencias de autenticación sin resolver se suprimen para evitar falsos positivos.
|
||||
- `status --deep` agrega un escaneo del servicio a nivel de sistema de mejor esfuerzo. Cuando encuentra otros servicios similares a Gateway, la salida legible para humanos imprime consejos de limpieza y advierte que un Gateway por máquina sigue siendo la recomendación normal.
|
||||
- En instalaciones de Linux systemd, las comprobaciones de deriva de token de `status` incluyen fuentes de unidad tanto `Environment=` como `EnvironmentFile=`.
|
||||
- Si el sondeo se realiza correctamente, las advertencias de referencia de autenticación no resuelta se suprimen para evitar falsos positivos.
|
||||
- `status --deep` añade un análisis de servicio a nivel de sistema de mejor esfuerzo. Cuando encuentra otros servicios similares a Gateway, la salida para humanos imprime sugerencias de limpieza y advierte que la recomendación normal sigue siendo un Gateway por máquina.
|
||||
- En instalaciones systemd de Linux, las comprobaciones de deriva de token de `status` incluyen tanto fuentes de unidad `Environment=` como `EnvironmentFile=`.
|
||||
- Las comprobaciones de deriva resuelven los SecretRefs de `gateway.auth.token` usando el entorno de ejecución combinado (primero el entorno del comando de servicio y luego el entorno del proceso como alternativa).
|
||||
- Si la autenticación por token no está activa de forma efectiva (`gateway.auth.mode` explícito de `password`/`none`/`trusted-proxy`, o modo sin definir cuando la contraseña puede prevalecer y ningún candidato de token puede prevalecer), las comprobaciones de deriva de token omiten la resolución del token de configuración.
|
||||
- Cuando la autenticación por token requiere un token y `gateway.auth.token` está administrado por SecretRef, `install` valida que el SecretRef se pueda resolver, pero no conserva el token resuelto en los metadatos del entorno del servicio.
|
||||
- Si la autenticación por token requiere un token y el SecretRef de token configurado no se resuelve, la instalación falla de forma cerrada.
|
||||
- Si `gateway.auth.token` y `gateway.auth.password` están configurados y `gateway.auth.mode` no está definido, la instalación se bloquea hasta que el modo se establezca explícitamente.
|
||||
- En macOS, `install` mantiene los plists de LaunchAgent solo para el propietario y carga los valores del entorno del servicio administrado mediante un archivo y envoltorio solo para el propietario, en lugar de serializar claves de API o referencias de entorno de perfiles de autenticación en `EnvironmentVariables`.
|
||||
- Si ejecutas intencionalmente varios gateways en un mismo host, aísla los puertos, la configuración/estado y los espacios de trabajo; consulta [/gateway#multiple-gateways-same-host](/es/gateway#multiple-gateways-same-host).
|
||||
- Si la autenticación con token no está activa de forma efectiva (`gateway.auth.mode` explícito de `password`/`none`/`trusted-proxy`, o modo no definido donde la contraseña puede ganar y ningún candidato de token puede ganar), las comprobaciones de deriva de token omiten la resolución del token de configuración.
|
||||
- Cuando la autenticación con token requiere un token y `gateway.auth.token` está gestionado por SecretRef, `install` valida que el SecretRef se pueda resolver, pero no persiste el token resuelto en los metadatos del entorno del servicio.
|
||||
- Si la autenticación con token requiere un token y el SecretRef del token configurado no está resuelto, la instalación falla de forma cerrada.
|
||||
- Si tanto `gateway.auth.token` como `gateway.auth.password` están configurados y `gateway.auth.mode` no está definido, la instalación se bloquea hasta que el modo se defina explícitamente.
|
||||
- En macOS, `install` mantiene los plists de LaunchAgent solo para el propietario y carga los valores del entorno del servicio gestionado mediante un archivo y un contenedor solo para el propietario, en lugar de serializar claves de API o referencias de entorno de perfiles de autenticación en `EnvironmentVariables`.
|
||||
- Si ejecutas intencionadamente varios Gateways en un host, aísla puertos, configuración/estado y espacios de trabajo; consulta [/gateway#multiple-gateways-same-host](/es/gateway#multiple-gateways-same-host).
|
||||
- `restart --safe` pide al Gateway en ejecución que haga una comprobación previa del trabajo activo y programe un único reinicio combinado después de que el trabajo activo se vacíe. `restart` simple mantiene el comportamiento existente del gestor de servicios; `--force` sigue siendo la ruta de anulación inmediata.
|
||||
|
||||
## Preferir
|
||||
|
||||
@ -68,4 +69,4 @@ Usa [`openclaw gateway`](/es/cli/gateway) para la documentación y los ejemplos
|
||||
## Relacionado
|
||||
|
||||
- [Referencia de CLI](/es/cli)
|
||||
- [Guía operativa de Gateway](/es/gateway)
|
||||
- [Manual de operaciones de Gateway](/es/gateway)
|
||||
|
||||
@ -2,15 +2,15 @@
|
||||
read_when:
|
||||
- Ejecución del Gateway desde la CLI (desarrollo o servidores)
|
||||
- Depuración de la autenticación del Gateway, los modos de enlace y la conectividad
|
||||
- Descubrimiento de Gateway mediante Bonjour (DNS-SD local y de área amplia)
|
||||
- Descubrir Gateways mediante Bonjour (DNS-SD local y de área amplia)
|
||||
sidebarTitle: Gateway
|
||||
summary: OpenClaw Gateway CLI (`openclaw gateway`) — ejecuta, consulta y descubre instancias de Gateway
|
||||
summary: OpenClaw Gateway CLI (`openclaw gateway`) — ejecutar, consultar y descubrir instancias de Gateway
|
||||
title: Gateway
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T22:17:38Z"
|
||||
generated_at: "2026-05-04T18:24:04Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f7f948a8f0ee6e065afa02f354e690ad5cc4f71bdb8b8674f1b0396c439ab242
|
||||
source_hash: 310867c59148577f2e8ce6f708da6bce936e09243ce7fbe5daeb453c6b3b370d
|
||||
source_path: cli/gateway.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -19,9 +19,9 @@ El Gateway es el servidor WebSocket de OpenClaw (canales, nodos, sesiones, hooks
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Descubrimiento Bonjour" href="/es/gateway/bonjour">
|
||||
Configuración de mDNS local + DNS-SD de área amplia.
|
||||
Configuración local de mDNS + DNS-SD de área amplia.
|
||||
</Card>
|
||||
<Card title="Resumen del descubrimiento" href="/es/gateway/discovery">
|
||||
<Card title="Descripción general del descubrimiento" href="/es/gateway/discovery">
|
||||
Cómo OpenClaw anuncia y encuentra gateways.
|
||||
</Card>
|
||||
<Card title="Configuración" href="/es/gateway/configuration">
|
||||
@ -31,7 +31,7 @@ El Gateway es el servidor WebSocket de OpenClaw (canales, nodos, sesiones, hooks
|
||||
|
||||
## Ejecutar el Gateway
|
||||
|
||||
Ejecuta un proceso Gateway local:
|
||||
Ejecuta un proceso de Gateway local:
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
@ -45,12 +45,12 @@ openclaw gateway run
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Comportamiento de inicio">
|
||||
- De forma predeterminada, el Gateway se niega a iniciarse a menos que `gateway.mode=local` esté definido en `~/.openclaw/openclaw.json`. Usa `--allow-unconfigured` para ejecuciones ad hoc/de desarrollo.
|
||||
- De forma predeterminada, el Gateway se niega a iniciar a menos que `gateway.mode=local` esté definido en `~/.openclaw/openclaw.json`. Usa `--allow-unconfigured` para ejecuciones ad hoc/de desarrollo.
|
||||
- Se espera que `openclaw onboard --mode local` y `openclaw setup` escriban `gateway.mode=local`. Si el archivo existe pero falta `gateway.mode`, trátalo como una configuración rota o sobrescrita y repárala en lugar de asumir implícitamente el modo local.
|
||||
- Si el archivo existe y falta `gateway.mode`, el Gateway lo trata como un daño de configuración sospechoso y se niega a "adivinar local" por ti.
|
||||
- Si el archivo existe y falta `gateway.mode`, el Gateway lo trata como daño sospechoso en la configuración y se niega a "adivinar local" por ti.
|
||||
- Se bloquea el enlace más allá de loopback sin autenticación (barrera de seguridad).
|
||||
- `SIGUSR1` activa un reinicio dentro del proceso cuando está autorizado (`commands.restart` está habilitado de forma predeterminada; define `commands.restart: false` para bloquear el reinicio manual, mientras que la aplicación/actualización de herramientas/configuración del gateway sigue permitida).
|
||||
- Los manejadores de `SIGINT`/`SIGTERM` detienen el proceso del gateway, pero no restauran ningún estado personalizado de la terminal. Si envuelves la CLI con una TUI o entrada en modo raw, restaura la terminal antes de salir.
|
||||
- `SIGUSR1` activa un reinicio dentro del proceso cuando está autorizado (`commands.restart` está habilitado de forma predeterminada; establece `commands.restart: false` para bloquear el reinicio manual, mientras que la aplicación/actualización de herramientas/configuración del gateway sigue permitida).
|
||||
- Los manejadores de `SIGINT`/`SIGTERM` detienen el proceso del gateway, pero no restauran ningún estado personalizado del terminal. Si envuelves la CLI con una TUI o entrada en modo sin procesar, restaura el terminal antes de salir.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -67,7 +67,7 @@ openclaw gateway run
|
||||
Anulación del modo de autenticación.
|
||||
</ParamField>
|
||||
<ParamField path="--token <token>" type="string">
|
||||
Anulación del token (también define `OPENCLAW_GATEWAY_TOKEN` para el proceso).
|
||||
Anulación del token (también establece `OPENCLAW_GATEWAY_TOKEN` para el proceso).
|
||||
</ParamField>
|
||||
<ParamField path="--password <password>" type="string">
|
||||
Anulación de la contraseña.
|
||||
@ -76,13 +76,13 @@ openclaw gateway run
|
||||
Lee la contraseña del gateway desde un archivo.
|
||||
</ParamField>
|
||||
<ParamField path="--tailscale <off|serve|funnel>" type="string">
|
||||
Expón el Gateway mediante Tailscale.
|
||||
Expone el Gateway mediante Tailscale.
|
||||
</ParamField>
|
||||
<ParamField path="--tailscale-reset-on-exit" type="boolean">
|
||||
Restablece la configuración serve/funnel de Tailscale al apagar.
|
||||
Restablece la configuración de serve/funnel de Tailscale al apagar.
|
||||
</ParamField>
|
||||
<ParamField path="--allow-unconfigured" type="boolean">
|
||||
Permite iniciar el gateway sin `gateway.mode=local` en la configuración. Omite la protección de inicio solo para arranques ad hoc/de desarrollo; no escribe ni repara el archivo de configuración.
|
||||
Permite iniciar el gateway sin `gateway.mode=local` en la configuración. Omite la protección de inicio solo para arranque ad hoc/de desarrollo; no escribe ni repara el archivo de configuración.
|
||||
</ParamField>
|
||||
<ParamField path="--dev" type="boolean">
|
||||
Crea una configuración de desarrollo + workspace si faltan (omite BOOTSTRAP.md).
|
||||
@ -91,7 +91,7 @@ openclaw gateway run
|
||||
Restablece la configuración de desarrollo + credenciales + sesiones + workspace (requiere `--dev`).
|
||||
</ParamField>
|
||||
<ParamField path="--force" type="boolean">
|
||||
Termina cualquier listener existente en el puerto seleccionado antes de iniciar.
|
||||
Mata cualquier listener existente en el puerto seleccionado antes de iniciar.
|
||||
</ParamField>
|
||||
<ParamField path="--verbose" type="boolean">
|
||||
Registros detallados.
|
||||
@ -100,27 +100,37 @@ openclaw gateway run
|
||||
Muestra solo los registros del backend de la CLI en la consola (y habilita stdout/stderr).
|
||||
</ParamField>
|
||||
<ParamField path="--ws-log <auto|full|compact>" type="string" default="auto">
|
||||
Estilo de registro de WebSocket.
|
||||
Estilo de registro de Websocket.
|
||||
</ParamField>
|
||||
<ParamField path="--compact" type="boolean">
|
||||
Alias de `--ws-log compact`.
|
||||
</ParamField>
|
||||
<ParamField path="--raw-stream" type="boolean">
|
||||
Registra eventos raw del stream del modelo en jsonl.
|
||||
Registra eventos sin procesar del flujo del modelo en jsonl.
|
||||
</ParamField>
|
||||
<ParamField path="--raw-stream-path <path>" type="string">
|
||||
Ruta jsonl del stream raw.
|
||||
Ruta de jsonl del flujo sin procesar.
|
||||
</ParamField>
|
||||
|
||||
## Reiniciar el Gateway
|
||||
|
||||
```bash
|
||||
openclaw gateway restart
|
||||
openclaw gateway restart --safe
|
||||
openclaw gateway restart --force
|
||||
```
|
||||
|
||||
`openclaw gateway restart --safe` pide al Gateway en ejecución que haga una comprobación previa del trabajo activo de OpenClaw antes de reiniciar. Si hay operaciones en cola, entrega de respuestas, ejecuciones incrustadas o ejecuciones de tareas activas, el Gateway informa de los bloqueos, fusiona solicitudes duplicadas de reinicio seguro y reinicia una vez que se drena el trabajo activo. `restart` sin opciones mantiene el comportamiento existente del gestor de servicios por compatibilidad. Usa `--force` solo cuando quieras explícitamente la ruta de anulación inmediata.
|
||||
|
||||
<Warning>
|
||||
`--password` en línea puede quedar expuesto en los listados de procesos locales. Prefiere `--password-file`, env o un `gateway.auth.password` respaldado por SecretRef.
|
||||
`--password` en línea puede exponerse en los listados de procesos locales. Prefiere `--password-file`, env o un `gateway.auth.password` respaldado por SecretRef.
|
||||
</Warning>
|
||||
|
||||
### Perfilado de inicio
|
||||
|
||||
- Define `OPENCLAW_GATEWAY_STARTUP_TRACE=1` para registrar los tiempos de las fases durante el inicio del Gateway, incluido el retraso `eventLoopMax` por fase y los tiempos de las tablas de búsqueda de plugins para el índice instalado, el registro de manifiestos, la planificación de inicio y el trabajo del mapa de propietarios.
|
||||
- Define `OPENCLAW_DIAGNOSTICS=timeline` con `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>` para escribir una línea de tiempo de diagnósticos de inicio JSONL de mejor esfuerzo para arneses de QA externos. También puedes habilitar la marca con `diagnostics.flags: ["timeline"]` en la configuración; la ruta sigue proporcionándose mediante env. Añade `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` para incluir muestras del bucle de eventos.
|
||||
- Ejecuta `pnpm test:startup:gateway -- --runs 5 --warmup 1` para medir el inicio del Gateway. La medición registra la primera salida del proceso, `/healthz`, `/readyz`, los tiempos de trazas de inicio, el retraso del bucle de eventos y los detalles de tiempos de la tabla de búsqueda de plugins.
|
||||
- Establece `OPENCLAW_GATEWAY_STARTUP_TRACE=1` para registrar los tiempos de las fases durante el inicio del Gateway, incluido el retraso `eventLoopMax` por fase y los tiempos de las tablas de búsqueda de plugins para el índice instalado, el registro de manifiestos, la planificación de inicio y el trabajo del mapa de propietarios.
|
||||
- Establece `OPENCLAW_DIAGNOSTICS=timeline` con `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>` para escribir una línea temporal de diagnósticos de inicio JSONL de mejor esfuerzo para arneses externos de QA. También puedes habilitar la marca con `diagnostics.flags: ["timeline"]` en la configuración; la ruta sigue proporcionándose mediante env. Añade `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` para incluir muestras del event loop.
|
||||
- Ejecuta `pnpm test:startup:gateway -- --runs 5 --warmup 1` para medir el inicio del Gateway. El benchmark registra la primera salida del proceso, `/healthz`, `/readyz`, tiempos de traza de inicio, retraso del event loop y detalles de tiempos de la tabla de búsqueda de plugins.
|
||||
|
||||
## Consultar un Gateway en ejecución
|
||||
|
||||
@ -128,23 +138,23 @@ Todos los comandos de consulta usan RPC por WebSocket.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Modos de salida">
|
||||
- Predeterminado: legible para humanos (con color en TTY).
|
||||
- Predeterminado: legible por humanos (con color en TTY).
|
||||
- `--json`: JSON legible por máquina (sin estilos/spinner).
|
||||
- `--no-color` (o `NO_COLOR=1`): deshabilita ANSI manteniendo el diseño humano.
|
||||
- `--no-color` (o `NO_COLOR=1`): deshabilita ANSI y conserva el diseño para humanos.
|
||||
|
||||
</Tab>
|
||||
<Tab title="Opciones compartidas">
|
||||
- `--url <url>`: URL WebSocket del Gateway.
|
||||
- `--token <token>`: token del Gateway.
|
||||
- `--password <password>`: contraseña del Gateway.
|
||||
- `--timeout <ms>`: timeout/presupuesto (varía por comando).
|
||||
- `--expect-final`: espera una respuesta "final" (llamadas de agente).
|
||||
- `--timeout <ms>`: tiempo de espera/presupuesto (varía según el comando).
|
||||
- `--expect-final`: espera una respuesta "final" (llamadas de agentes).
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Note>
|
||||
Cuando defines `--url`, la CLI no recurre a credenciales de configuración o entorno. Pasa `--token` o `--password` explícitamente. La falta de credenciales explícitas es un error.
|
||||
Cuando estableces `--url`, la CLI no recurre a credenciales de configuración ni de entorno. Pasa `--token` o `--password` explícitamente. La falta de credenciales explícitas es un error.
|
||||
</Note>
|
||||
|
||||
### `gateway health`
|
||||
@ -153,11 +163,11 @@ Cuando defines `--url`, la CLI no recurre a credenciales de configuración o ent
|
||||
openclaw gateway health --url ws://127.0.0.1:18789
|
||||
```
|
||||
|
||||
El endpoint HTTP `/healthz` es una sonda de vivacidad: responde cuando el servidor puede contestar HTTP. El endpoint HTTP `/readyz` es más estricto y permanece en rojo mientras los sidecars de plugins de inicio, los canales o los hooks configurados todavía se están estabilizando. Las respuestas detalladas de preparación locales o autenticadas incluyen un bloque de diagnóstico `eventLoop` con retraso del bucle de eventos, utilización del bucle de eventos, proporción de núcleos de CPU y una marca `degraded`.
|
||||
El endpoint HTTP `/healthz` es una sonda de actividad: devuelve respuesta cuando el servidor puede responder HTTP. El endpoint HTTP `/readyz` es más estricto y permanece en rojo mientras los sidecars de plugins de inicio, los canales o los hooks configurados aún se están estabilizando. Las respuestas detalladas de preparación locales o autenticadas incluyen un bloque de diagnóstico `eventLoop` con retraso del event loop, utilización del event loop, proporción de núcleos de CPU y una marca `degraded`.
|
||||
|
||||
### `gateway usage-cost`
|
||||
|
||||
Obtén resúmenes de coste de uso desde los registros de sesión.
|
||||
Obtén resúmenes de costo de uso desde los registros de sesión.
|
||||
|
||||
```bash
|
||||
openclaw gateway usage-cost
|
||||
@ -191,26 +201,26 @@ openclaw gateway stability --json
|
||||
Incluye solo eventos posteriores a un número de secuencia de diagnóstico.
|
||||
</ParamField>
|
||||
<ParamField path="--bundle [path]" type="string">
|
||||
Lee un paquete de estabilidad persistido en lugar de llamar al Gateway en ejecución. Usa `--bundle latest` (o solo `--bundle`) para el paquete más reciente bajo el directorio de estado, o pasa directamente una ruta JSON del paquete.
|
||||
Lee un paquete de estabilidad persistido en lugar de llamar al Gateway en ejecución. Usa `--bundle latest` (o simplemente `--bundle`) para el paquete más nuevo bajo el directorio de estado, o pasa directamente una ruta JSON de paquete.
|
||||
</ParamField>
|
||||
<ParamField path="--export" type="boolean">
|
||||
Escribe un zip de diagnósticos de soporte compartible en lugar de imprimir los detalles de estabilidad.
|
||||
Escribe un zip de diagnósticos de soporte compartible en lugar de imprimir detalles de estabilidad.
|
||||
</ParamField>
|
||||
<ParamField path="--output <path>" type="string">
|
||||
Ruta de salida para `--export`.
|
||||
</ParamField>
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Privacidad y comportamiento del paquete">
|
||||
- Los registros conservan metadatos operativos: nombres de eventos, conteos, tamaños en bytes, lecturas de memoria, estado de colas/sesiones, nombres de canales/plugins y resúmenes de sesión redactados. No conservan texto de chat, cuerpos de webhook, salidas de herramientas, cuerpos raw de solicitudes o respuestas, tokens, cookies, valores secretos, nombres de host ni ids raw de sesión. Define `diagnostics.enabled: false` para deshabilitar por completo el registrador.
|
||||
- En salidas fatales del Gateway, timeouts de apagado y fallos de inicio tras reinicio, OpenClaw escribe la misma instantánea de diagnóstico en `~/.openclaw/logs/stability/openclaw-stability-*.json` cuando el registrador tiene eventos. Inspecciona el paquete más reciente con `openclaw gateway stability --bundle latest`; `--limit`, `--type` y `--since-seq` también se aplican a la salida del paquete.
|
||||
<Accordion title="Privacidad y comportamiento de los paquetes">
|
||||
- Los registros conservan metadatos operativos: nombres de eventos, recuentos, tamaños en bytes, lecturas de memoria, estado de colas/sesiones, nombres de canales/plugins y resúmenes de sesiones redactados. No conservan texto de chat, cuerpos de webhook, salidas de herramientas, cuerpos sin procesar de solicitudes o respuestas, tokens, cookies, valores secretos, nombres de host ni ids de sesión sin procesar. Establece `diagnostics.enabled: false` para deshabilitar el registrador por completo.
|
||||
- En salidas fatales del Gateway, tiempos de espera de apagado y fallos de inicio tras reinicio, OpenClaw escribe la misma instantánea de diagnóstico en `~/.openclaw/logs/stability/openclaw-stability-*.json` cuando el registrador tiene eventos. Inspecciona el paquete más nuevo con `openclaw gateway stability --bundle latest`; `--limit`, `--type` y `--since-seq` también se aplican a la salida del paquete.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### `gateway diagnostics export`
|
||||
|
||||
Escribe un zip local de diagnósticos diseñado para adjuntarse a informes de errores. Para el modelo de privacidad y el contenido del paquete, consulta [Exportación de diagnósticos](/es/gateway/diagnostics).
|
||||
Escribe un zip de diagnósticos local diseñado para adjuntarse a informes de errores. Para el modelo de privacidad y el contenido del paquete, consulta [Exportación de diagnósticos](/es/gateway/diagnostics).
|
||||
|
||||
```bash
|
||||
openclaw gateway diagnostics export
|
||||
@ -219,13 +229,13 @@ openclaw gateway diagnostics export --json
|
||||
```
|
||||
|
||||
<ParamField path="--output <path>" type="string">
|
||||
Ruta del zip de salida. El valor predeterminado es una exportación de soporte bajo el directorio de estado.
|
||||
Ruta del zip de salida. De forma predeterminada, es una exportación de soporte bajo el directorio de estado.
|
||||
</ParamField>
|
||||
<ParamField path="--log-lines <count>" type="number" default="5000">
|
||||
Máximo de líneas de registro saneadas que se incluirán.
|
||||
Número máximo de líneas de registro saneadas que se incluirán.
|
||||
</ParamField>
|
||||
<ParamField path="--log-bytes <bytes>" type="number" default="1000000">
|
||||
Máximo de bytes de registro que se inspeccionarán.
|
||||
Número máximo de bytes de registro que se inspeccionarán.
|
||||
</ParamField>
|
||||
<ParamField path="--url <url>" type="string">
|
||||
URL WebSocket del Gateway para la instantánea de salud.
|
||||
@ -237,22 +247,22 @@ openclaw gateway diagnostics export --json
|
||||
Contraseña del Gateway para la instantánea de salud.
|
||||
</ParamField>
|
||||
<ParamField path="--timeout <ms>" type="number" default="3000">
|
||||
Timeout de la instantánea de estado/salud.
|
||||
Tiempo de espera de la instantánea de estado/salud.
|
||||
</ParamField>
|
||||
<ParamField path="--no-stability-bundle" type="boolean">
|
||||
Omite la búsqueda del paquete de estabilidad persistido.
|
||||
Omite la búsqueda de paquetes de estabilidad persistidos.
|
||||
</ParamField>
|
||||
<ParamField path="--json" type="boolean">
|
||||
Imprime la ruta escrita, el tamaño y el manifiesto como JSON.
|
||||
</ParamField>
|
||||
|
||||
La exportación contiene un manifiesto, un resumen en Markdown, la forma de la configuración, detalles de configuración saneados, resúmenes de registros saneados, instantáneas saneadas de estado/salud del Gateway y el paquete de estabilidad más reciente cuando existe.
|
||||
La exportación contiene un manifiesto, un resumen en Markdown, la forma de la configuración, detalles de configuración saneados, resúmenes de registros saneados, instantáneas saneadas de estado/salud del Gateway y el paquete de estabilidad más nuevo cuando existe uno.
|
||||
|
||||
Está pensada para compartirse. Conserva detalles operativos que ayudan a depurar, como campos seguros de registros de OpenClaw, nombres de subsistemas, códigos de estado, duraciones, modos configurados, puertos, ids de plugins, ids de proveedores, ajustes de funciones no secretos y mensajes de registro operativos redactados. Omite o redacta texto de chat, cuerpos de webhook, salidas de herramientas, credenciales, cookies, identificadores de cuenta/mensaje, texto de prompts/instrucciones, nombres de host y valores secretos. Cuando un mensaje de estilo LogTape parece texto de payload de usuario/chat/herramienta, la exportación conserva solo que se omitió un mensaje y su conteo de bytes.
|
||||
Está pensada para compartirse. Conserva detalles operativos que ayudan a depurar, como campos seguros de registros de OpenClaw, nombres de subsistemas, códigos de estado, duraciones, modos configurados, puertos, ids de plugins, ids de proveedores, ajustes de funciones no secretos y mensajes de registro operativos redactados. Omite o redacta texto de chat, cuerpos de webhook, salidas de herramientas, credenciales, cookies, identificadores de cuentas/mensajes, texto de prompts/instrucciones, nombres de host y valores secretos. Cuando un mensaje de estilo LogTape parece texto de carga útil de usuario/chat/herramienta, la exportación conserva solo que se omitió un mensaje más su recuento de bytes.
|
||||
|
||||
### `gateway status`
|
||||
|
||||
`gateway status` muestra el servicio Gateway (launchd/systemd/schtasks) más una sonda opcional de conectividad/capacidad de autenticación.
|
||||
`gateway status` muestra el servicio Gateway (launchd/systemd/schtasks) más una sonda opcional de capacidad de conectividad/autenticación.
|
||||
|
||||
```bash
|
||||
openclaw gateway status
|
||||
@ -261,63 +271,63 @@ openclaw gateway status --require-rpc
|
||||
```
|
||||
|
||||
<ParamField path="--url <url>" type="string">
|
||||
Añade un destino de sonda explícito. El remoto configurado + localhost siguen sondeándose.
|
||||
Añade un objetivo de sondeo explícito. El remoto configurado + localhost se siguen sondeando.
|
||||
</ParamField>
|
||||
<ParamField path="--token <token>" type="string">
|
||||
Autenticación por token para la sonda.
|
||||
Autenticación por token para el sondeo.
|
||||
</ParamField>
|
||||
<ParamField path="--password <password>" type="string">
|
||||
Autenticación por contraseña para la sonda.
|
||||
Autenticación por contraseña para el sondeo.
|
||||
</ParamField>
|
||||
<ParamField path="--timeout <ms>" type="number" default="10000">
|
||||
Timeout de la sonda.
|
||||
Tiempo de espera del sondeo.
|
||||
</ParamField>
|
||||
<ParamField path="--no-probe" type="boolean">
|
||||
Omite la sonda de conectividad (vista solo del servicio).
|
||||
Omite el sondeo de conectividad (vista solo de servicio).
|
||||
</ParamField>
|
||||
<ParamField path="--deep" type="boolean">
|
||||
Escanea también servicios de nivel de sistema.
|
||||
</ParamField>
|
||||
<ParamField path="--require-rpc" type="boolean">
|
||||
Actualiza la sonda de conectividad predeterminada a una sonda de lectura y sale con código distinto de cero cuando esa sonda de lectura falla. No se puede combinar con `--no-probe`.
|
||||
Actualiza el sondeo de conectividad predeterminado a un sondeo de lectura y sale con un valor distinto de cero cuando ese sondeo de lectura falla. No se puede combinar con `--no-probe`.
|
||||
</ParamField>
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Status semantics">
|
||||
- `gateway status` permanece disponible para diagnósticos incluso cuando falta la configuración local de la CLI o no es válida.
|
||||
- El `gateway status` predeterminado comprueba el estado del servicio, la conexión WebSocket y la capacidad de autenticación visible en el momento del handshake. No comprueba operaciones de lectura/escritura/administración.
|
||||
- Las sondas de diagnóstico no mutan la autenticación de dispositivos por primera vez: reutilizan un token de dispositivo almacenado en caché existente cuando existe, pero no crean una nueva identidad de dispositivo de la CLI ni un registro de emparejamiento de dispositivo de solo lectura solo para comprobar el estado.
|
||||
- `gateway status` resuelve los SecretRefs de autenticación configurados para la autenticación de la sonda cuando es posible.
|
||||
- Si un SecretRef de autenticación requerido no se resuelve en esta ruta de comando, `gateway status --json` informa `rpc.authWarning` cuando la conectividad/autenticación de la sonda falla; pasa `--token`/`--password` explícitamente o resuelve primero el origen del secreto.
|
||||
- Si la sonda se completa correctamente, las advertencias de referencias de autenticación sin resolver se suprimen para evitar falsos positivos.
|
||||
- Usa `--require-rpc` en scripts y automatización cuando un servicio en escucha no sea suficiente y también necesites que las llamadas RPC con alcance de lectura estén saludables.
|
||||
- `--deep` añade un escaneo de mejor esfuerzo en busca de instalaciones launchd/systemd/schtasks adicionales. Cuando se detectan varios servicios similares a gateway, la salida para humanos imprime sugerencias de limpieza y advierte que la mayoría de las configuraciones deberían ejecutar un gateway por máquina.
|
||||
- La salida para humanos incluye la ruta resuelta del registro de archivo más una instantánea de las rutas/validez de configuración entre la CLI y el servicio para ayudar a diagnosticar desviaciones de perfil o directorio de estado.
|
||||
<Accordion title="Semántica de estado">
|
||||
- `gateway status` sigue estando disponible para diagnósticos incluso cuando la configuración local de la CLI falta o no es válida.
|
||||
- `gateway status` predeterminado demuestra el estado del servicio, la conexión WebSocket y la capacidad de autenticación visible en el momento del handshake. No demuestra operaciones de lectura/escritura/administración.
|
||||
- Los sondeos de diagnóstico no realizan mutaciones para la autenticación de dispositivos por primera vez: reutilizan un token de dispositivo almacenado en caché existente cuando existe uno, pero no crean una nueva identidad de dispositivo de la CLI ni un registro de emparejamiento de dispositivo de solo lectura solo para comprobar el estado.
|
||||
- `gateway status` resuelve SecretRefs de autenticación configurados para la autenticación del sondeo cuando es posible.
|
||||
- Si un SecretRef de autenticación requerido no se resuelve en esta ruta de comando, `gateway status --json` informa `rpc.authWarning` cuando la conectividad/autenticación del sondeo falla; pasa `--token`/`--password` explícitamente o resuelve primero el origen del secreto.
|
||||
- Si el sondeo se completa correctamente, se suprimen las advertencias de referencias de autenticación no resueltas para evitar falsos positivos.
|
||||
- Usa `--require-rpc` en scripts y automatización cuando un servicio en escucha no sea suficiente y necesites que las llamadas RPC con alcance de lectura también estén en buen estado.
|
||||
- `--deep` añade un escaneo de mejor esfuerzo para instalaciones launchd/systemd/schtasks adicionales. Cuando se detectan varios servicios similares a Gateway, la salida legible imprime sugerencias de limpieza y advierte que la mayoría de las configuraciones deberían ejecutar un Gateway por máquina.
|
||||
- La salida legible incluye la ruta resuelta del archivo de registro más una instantánea de rutas/validez de configuración CLI frente a servicio para ayudar a diagnosticar desviaciones de perfil o de directorio de estado.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Linux systemd auth-drift checks">
|
||||
- En instalaciones Linux systemd, las comprobaciones de desviación de autenticación del servicio leen los valores `Environment=` y `EnvironmentFile=` de la unidad (incluidos `%h`, rutas entre comillas, varios archivos y archivos opcionales con `-`).
|
||||
- Las comprobaciones de desviación resuelven los SecretRefs de `gateway.auth.token` usando el entorno de runtime combinado (primero el entorno del comando del servicio y luego el entorno del proceso como alternativa).
|
||||
- Si la autenticación por token no está activa de forma efectiva (`gateway.auth.mode` explícito de `password`/`none`/`trusted-proxy`, o modo no definido donde la contraseña puede ganar y ningún candidato de token puede ganar), las comprobaciones de desviación de token omiten la resolución del token de configuración.
|
||||
<Accordion title="Comprobaciones de desviación de autenticación de Linux systemd">
|
||||
- En instalaciones Linux systemd, las comprobaciones de desviación de autenticación del servicio leen tanto valores `Environment=` como `EnvironmentFile=` de la unidad (incluidos `%h`, rutas entrecomilladas, múltiples archivos y archivos opcionales `-`).
|
||||
- Las comprobaciones de desviación resuelven SecretRefs de `gateway.auth.token` usando el entorno de runtime fusionado (primero el entorno del comando de servicio, luego el entorno del proceso como alternativa).
|
||||
- Si la autenticación por token no está efectivamente activa (`gateway.auth.mode` explícito de `password`/`none`/`trusted-proxy`, o modo sin definir donde la contraseña puede ganar y ningún candidato de token puede ganar), las comprobaciones de desviación de token omiten la resolución del token de configuración.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### `gateway probe`
|
||||
|
||||
`gateway probe` es el comando para "depurarlo todo". Siempre sondea:
|
||||
`gateway probe` es el comando para "depurar todo". Siempre sondea:
|
||||
|
||||
- tu gateway remoto configurado (si está definido), y
|
||||
- localhost (loopback) **incluso si el remoto está configurado**.
|
||||
- tu Gateway remoto configurado (si está definido), y
|
||||
- localhost (loopback) **aunque el remoto esté configurado**.
|
||||
|
||||
Si pasas `--url`, ese destino explícito se añade antes de ambos. La salida para humanos etiqueta los destinos como:
|
||||
Si pasas `--url`, ese objetivo explícito se añade antes de ambos. La salida legible etiqueta los objetivos como:
|
||||
|
||||
- `URL (explicit)`
|
||||
- `Remote (configured)` o `Remote (configured, inactive)`
|
||||
- `Local loopback`
|
||||
|
||||
<Note>
|
||||
Si se puede acceder a varios gateways, los imprime todos. Se admiten varios gateways cuando usas perfiles/puertos aislados (por ejemplo, un bot de rescate), pero la mayoría de las instalaciones siguen ejecutando un único gateway.
|
||||
Si varios Gateways son accesibles, los imprime todos. Se admiten varios Gateways cuando usas perfiles/puertos aislados (por ejemplo, un bot de rescate), pero la mayoría de las instalaciones siguen ejecutando un único Gateway.
|
||||
</Note>
|
||||
|
||||
```bash
|
||||
@ -326,52 +336,52 @@ openclaw gateway probe --json
|
||||
```
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Interpretation">
|
||||
- `Reachable: yes` significa que al menos un destino aceptó una conexión WebSocket.
|
||||
- `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` informa lo que la sonda pudo comprobar sobre la autenticación. Es independiente de la accesibilidad.
|
||||
<Accordion title="Interpretación">
|
||||
- `Reachable: yes` significa que al menos un objetivo aceptó una conexión WebSocket.
|
||||
- `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` informa lo que el sondeo pudo demostrar sobre la autenticación. Es independiente de la accesibilidad.
|
||||
- `Read probe: ok` significa que las llamadas RPC de detalle con alcance de lectura (`health`/`status`/`system-presence`/`config.get`) también se completaron correctamente.
|
||||
- `Read probe: limited - missing scope: operator.read` significa que la conexión se completó correctamente, pero el RPC con alcance de lectura está limitado. Esto se informa como accesibilidad **degradada**, no como fallo completo.
|
||||
- `Read probe: failed` después de `Connect: ok` significa que el Gateway aceptó la conexión WebSocket, pero los diagnósticos de lectura posteriores agotaron el tiempo o fallaron. Esto también es accesibilidad **degradada**, no un Gateway inaccesible.
|
||||
- Como `gateway status`, la sonda reutiliza la autenticación de dispositivo almacenada en caché existente, pero no crea una identidad de dispositivo por primera vez ni estado de emparejamiento.
|
||||
- El código de salida solo es distinto de cero cuando no se puede acceder a ningún destino sondeado.
|
||||
- `Read probe: limited - missing scope: operator.read` significa que la conexión se completó correctamente pero el RPC con alcance de lectura está limitado. Esto se informa como accesibilidad **degradada**, no como fallo completo.
|
||||
- `Read probe: failed` después de `Connect: ok` significa que el Gateway aceptó la conexión WebSocket, pero los diagnósticos de lectura posteriores agotaron el tiempo de espera o fallaron. Esto también es accesibilidad **degradada**, no un Gateway inaccesible.
|
||||
- Igual que `gateway status`, el sondeo reutiliza la autenticación de dispositivo en caché existente, pero no crea identidad de dispositivo por primera vez ni estado de emparejamiento.
|
||||
- El código de salida es distinto de cero solo cuando ningún objetivo sondeado es accesible.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="JSON output">
|
||||
<Accordion title="Salida JSON">
|
||||
Nivel superior:
|
||||
|
||||
- `ok`: se puede acceder a al menos un destino.
|
||||
- `degraded`: al menos un destino aceptó una conexión pero no completó todos los diagnósticos RPC de detalle.
|
||||
- `capability`: mejor capacidad observada entre los destinos accesibles (`read_only`, `write_capable`, `admin_capable`, `pairing_pending`, `connected_no_operator_scope` o `unknown`).
|
||||
- `primaryTargetId`: mejor destino para tratar como ganador activo en este orden: URL explícita, túnel SSH, remoto configurado y luego local loopback.
|
||||
- `warnings[]`: registros de advertencia de mejor esfuerzo con `code`, `message` y `targetIds` opcional.
|
||||
- `ok`: al menos un objetivo es accesible.
|
||||
- `degraded`: al menos un objetivo aceptó una conexión pero no completó todos los diagnósticos RPC de detalle.
|
||||
- `capability`: mejor capacidad vista entre objetivos accesibles (`read_only`, `write_capable`, `admin_capable`, `pairing_pending`, `connected_no_operator_scope` o `unknown`).
|
||||
- `primaryTargetId`: mejor objetivo para tratar como ganador activo en este orden: URL explícita, túnel SSH, remoto configurado y luego local loopback.
|
||||
- `warnings[]`: registros de advertencia de mejor esfuerzo con `code`, `message` y `targetIds` opcionales.
|
||||
- `network`: sugerencias de URL de local loopback/tailnet derivadas de la configuración actual y la red del host.
|
||||
- `discovery.timeoutMs` y `discovery.count`: el presupuesto de descubrimiento real/recuento de resultados usado para esta pasada de sondeo.
|
||||
|
||||
Por destino (`targets[].connect`):
|
||||
Por objetivo (`targets[].connect`):
|
||||
|
||||
- `ok`: accesibilidad después de la conexión + clasificación degradada.
|
||||
- `ok`: accesibilidad después de conexión + clasificación degradada.
|
||||
- `rpcOk`: éxito completo de RPC de detalle.
|
||||
- `scopeLimited`: el RPC de detalle falló por falta de alcance de operador.
|
||||
- `scopeLimited`: RPC de detalle fallido por falta de alcance de operador.
|
||||
|
||||
Por destino (`targets[].auth`):
|
||||
Por objetivo (`targets[].auth`):
|
||||
|
||||
- `role`: rol de autenticación informado en `hello-ok` cuando está disponible.
|
||||
- `scopes`: alcances concedidos informados en `hello-ok` cuando están disponibles.
|
||||
- `capability`: la clasificación de capacidad de autenticación expuesta para ese destino.
|
||||
- `capability`: la clasificación de capacidad de autenticación expuesta para ese objetivo.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Common warning codes">
|
||||
- `ssh_tunnel_failed`: falló la configuración del túnel SSH; el comando recurrió a sondas directas.
|
||||
- `multiple_gateways`: se pudo acceder a más de un destino; esto es inusual salvo que ejecutes intencionalmente perfiles aislados, como un bot de rescate.
|
||||
- `auth_secretref_unresolved`: no se pudo resolver un SecretRef de autenticación configurado para un destino fallido.
|
||||
- `probe_scope_limited`: la conexión WebSocket se completó correctamente, pero la sonda de lectura quedó limitada por la falta de `operator.read`.
|
||||
<Accordion title="Códigos de advertencia comunes">
|
||||
- `ssh_tunnel_failed`: falló la configuración del túnel SSH; el comando volvió a sondeos directos.
|
||||
- `multiple_gateways`: más de un objetivo fue accesible; esto es inusual salvo que ejecutes intencionalmente perfiles aislados, como un bot de rescate.
|
||||
- `auth_secretref_unresolved`: no se pudo resolver un SecretRef de autenticación configurado para un objetivo fallido.
|
||||
- `probe_scope_limited`: la conexión WebSocket se completó correctamente, pero el sondeo de lectura quedó limitado por la falta de `operator.read`.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
#### Remoto por SSH (paridad con la app de Mac)
|
||||
#### Remoto por SSH (paridad de la app de Mac)
|
||||
|
||||
El modo "Remote over SSH" de la app de macOS usa un reenvío de puerto local para que el gateway remoto (que puede estar enlazado solo a loopback) sea accesible en `ws://127.0.0.1:<port>`.
|
||||
El modo "Remote over SSH" de la app macOS usa un reenvío de puerto local para que el Gateway remoto (que puede estar vinculado solo a loopback) sea accesible en `ws://127.0.0.1:<port>`.
|
||||
|
||||
Equivalente de la CLI:
|
||||
|
||||
@ -386,7 +396,7 @@ openclaw gateway probe --ssh user@gateway-host
|
||||
Archivo de identidad.
|
||||
</ParamField>
|
||||
<ParamField path="--ssh-auto" type="boolean">
|
||||
Elige el primer host de gateway descubierto como destino SSH desde el endpoint de descubrimiento resuelto (`local.` más el dominio de área amplia configurado, si existe). Las sugerencias solo TXT se ignoran.
|
||||
Elige el primer host de Gateway descubierto como objetivo SSH desde el endpoint de descubrimiento resuelto (`local.` más el dominio de área amplia configurado, si existe). Se ignoran las sugerencias solo TXT.
|
||||
</ParamField>
|
||||
|
||||
Configuración (opcional, usada como valores predeterminados):
|
||||
@ -419,17 +429,17 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
|
||||
Presupuesto de tiempo de espera.
|
||||
</ParamField>
|
||||
<ParamField path="--expect-final" type="boolean">
|
||||
Principalmente para RPCs de estilo agente que transmiten eventos intermedios antes de una carga útil final.
|
||||
Principalmente para RPCs de estilo agente que emiten eventos intermedios antes de una carga útil final.
|
||||
</ParamField>
|
||||
<ParamField path="--json" type="boolean">
|
||||
Salida JSON legible por máquinas.
|
||||
Salida JSON legible por máquina.
|
||||
</ParamField>
|
||||
|
||||
<Note>
|
||||
`--params` debe ser JSON válido.
|
||||
</Note>
|
||||
|
||||
## Gestionar el servicio Gateway
|
||||
## Administrar el servicio Gateway
|
||||
|
||||
```bash
|
||||
openclaw gateway install
|
||||
@ -439,11 +449,11 @@ openclaw gateway restart
|
||||
openclaw gateway uninstall
|
||||
```
|
||||
|
||||
### Instalar con un wrapper
|
||||
### Instalar con un contenedor
|
||||
|
||||
Usa `--wrapper` cuando el servicio gestionado deba iniciarse mediante otro ejecutable, por ejemplo una
|
||||
capa de gestor de secretos o un ayudante de ejecución como otro usuario. El wrapper recibe los argumentos normales del Gateway y es
|
||||
responsable de ejecutar finalmente `openclaw` o Node con esos argumentos.
|
||||
Usa `--wrapper` cuando el servicio administrado deba iniciarse a través de otro ejecutable, por ejemplo una
|
||||
capa de administrador de secretos o un ayudante para ejecutar como otro usuario. El contenedor recibe los argumentos normales del Gateway y es
|
||||
responsable de finalmente ejecutar `openclaw` o Node con esos argumentos.
|
||||
|
||||
```bash
|
||||
cat > ~/.local/bin/openclaw-doppler <<'EOF'
|
||||
@ -457,17 +467,16 @@ openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
También puedes definir el wrapper mediante el entorno. `gateway install` valida que la ruta sea
|
||||
un archivo ejecutable, escribe el wrapper en `ProgramArguments` del servicio y conserva
|
||||
`OPENCLAW_WRAPPER` en el entorno del servicio para reinstalaciones forzadas, actualizaciones y reparaciones de doctor
|
||||
posteriores.
|
||||
También puedes definir el contenedor mediante el entorno. `gateway install` valida que la ruta sea
|
||||
un archivo ejecutable, escribe el contenedor en `ProgramArguments` del servicio y conserva
|
||||
`OPENCLAW_WRAPPER` en el entorno del servicio para reinstalaciones forzadas, actualizaciones y reparaciones de doctor posteriores.
|
||||
|
||||
```bash
|
||||
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
Para eliminar un wrapper persistido, borra `OPENCLAW_WRAPPER` al reinstalar:
|
||||
Para eliminar un contenedor persistido, borra `OPENCLAW_WRAPPER` al reinstalar:
|
||||
|
||||
```bash
|
||||
OPENCLAW_WRAPPER= openclaw gateway install --force
|
||||
@ -475,45 +484,45 @@ openclaw gateway restart
|
||||
```
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Command options">
|
||||
<Accordion title="Opciones de comando">
|
||||
- `gateway status`: `--url`, `--token`, `--password`, `--timeout`, `--no-probe`, `--require-rpc`, `--deep`, `--json`
|
||||
- `gateway install`: `--port`, `--runtime <node|bun>`, `--token`, `--wrapper <path>`, `--force`, `--json`
|
||||
- `gateway restart`: `--force`, `--wait <duration>`, `--json`
|
||||
- `gateway uninstall|start|stop`: `--json`
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Lifecycle behavior">
|
||||
- Usa `gateway restart` para reiniciar un servicio gestionado. No encadenes `gateway stop` y `gateway start` como sustituto de reinicio; en macOS, `gateway stop` deshabilita intencionalmente el LaunchAgent antes de detenerlo.
|
||||
- `gateway restart --wait 30s` reemplaza el presupuesto de drenaje de reinicio configurado para ese reinicio. Los números sin unidad son milisegundos; se aceptan unidades como `s`, `m` y `h`. `--wait 0` espera indefinidamente.
|
||||
- `gateway restart --force` omite el drenaje de trabajo activo y reinicia inmediatamente. Úsalo cuando un operador ya haya inspeccionado los bloqueadores de tareas enumerados y quiera recuperar el gateway ahora.
|
||||
<Accordion title="Comportamiento del ciclo de vida">
|
||||
- Usa `gateway restart` para reiniciar un servicio administrado. No encadenes `gateway stop` y `gateway start` como sustituto de reinicio; en macOS, `gateway stop` deshabilita intencionalmente el LaunchAgent antes de detenerlo.
|
||||
- `gateway restart --wait 30s` anula el presupuesto configurado de drenaje de reinicio para ese reinicio. Los números sin unidad son milisegundos; se aceptan unidades como `s`, `m` y `h`. `--wait 0` espera indefinidamente.
|
||||
- `gateway restart --force` omite el drenaje de trabajo activo y reinicia de inmediato. Úsalo cuando un operador ya haya inspeccionado los bloqueadores de tareas enumerados y quiera recuperar el Gateway ahora.
|
||||
- Los comandos de ciclo de vida aceptan `--json` para scripting.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Auth and SecretRefs at install time">
|
||||
- Cuando la autenticación por token requiere un token y `gateway.auth.token` está gestionado por SecretRef, `gateway install` valida que el SecretRef se pueda resolver, pero no conserva el token resuelto en los metadatos del entorno del servicio.
|
||||
- Si la autenticación por token requiere un token y el SecretRef de token configurado no se resuelve, la instalación falla de forma cerrada en lugar de conservar texto plano alternativo.
|
||||
- Para autenticación por contraseña en `gateway run`, prefiere `OPENCLAW_GATEWAY_PASSWORD`, `--password-file` o un `gateway.auth.password` respaldado por SecretRef en lugar de `--password` inline.
|
||||
- En modo de autenticación inferido, `OPENCLAW_GATEWAY_PASSWORD` solo en shell no relaja los requisitos de token de instalación; usa configuración duradera (`gateway.auth.password` o `env` de configuración) al instalar un servicio gestionado.
|
||||
- Si `gateway.auth.token` y `gateway.auth.password` están configurados y `gateway.auth.mode` no está definido, la instalación queda bloqueada hasta que el modo se defina explícitamente.
|
||||
<Accordion title="Autenticación y SecretRefs en el momento de instalación">
|
||||
- Cuando la autenticación por token requiere un token y `gateway.auth.token` está administrado por SecretRef, `gateway install` valida que el SecretRef se pueda resolver, pero no conserva el token resuelto en los metadatos del entorno del servicio.
|
||||
- Si la autenticación por token requiere un token y el SecretRef de token configurado no se resuelve, la instalación falla de forma cerrada en lugar de persistir texto plano alternativo.
|
||||
- Para autenticación por contraseña en `gateway run`, prefiere `OPENCLAW_GATEWAY_PASSWORD`, `--password-file` o un `gateway.auth.password` respaldado por SecretRef en lugar de `--password` en línea.
|
||||
- En modo de autenticación inferida, `OPENCLAW_GATEWAY_PASSWORD` solo de shell no relaja los requisitos de token de instalación; usa configuración duradera (`gateway.auth.password` o `env` de configuración) al instalar un servicio administrado.
|
||||
- Si tanto `gateway.auth.token` como `gateway.auth.password` están configurados y `gateway.auth.mode` no está definido, la instalación se bloquea hasta que el modo se establezca explícitamente.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Descubrir gateways (Bonjour)
|
||||
## Descubrir Gateways (Bonjour)
|
||||
|
||||
`gateway discover` escanea beacons del Gateway (`_openclaw-gw._tcp`).
|
||||
`gateway discover` escanea balizas de Gateway (`_openclaw-gw._tcp`).
|
||||
|
||||
- DNS-SD multicast: `local.`
|
||||
- DNS-SD unicast (Bonjour de área amplia): elige un dominio (ejemplo: `openclaw.internal.`) y configura DNS dividido + un servidor DNS; consulta [Bonjour](/es/gateway/bonjour).
|
||||
|
||||
Solo los gateways con descubrimiento Bonjour habilitado (predeterminado) anuncian el beacon.
|
||||
Solo los Gateway con descubrimiento Bonjour habilitado (predeterminado) anuncian la baliza.
|
||||
|
||||
Los registros de descubrimiento de área amplia incluyen (TXT):
|
||||
|
||||
- `role` (sugerencia de rol de gateway)
|
||||
- `transport` (sugerencia de transporte, por ejemplo `gateway`)
|
||||
- `role` (sugerencia de rol del Gateway)
|
||||
- `transport` (sugerencia de transporte, p. ej., `gateway`)
|
||||
- `gatewayPort` (puerto WebSocket, normalmente `18789`)
|
||||
- `sshPort` (opcional; los clientes usan por defecto destinos SSH en `22` cuando está ausente)
|
||||
- `sshPort` (opcional; los clientes usan `22` como destino SSH predeterminado cuando está ausente)
|
||||
- `tailnetDns` (nombre de host MagicDNS, cuando está disponible)
|
||||
- `gatewayTls` / `gatewayTlsSha256` (TLS habilitado + huella digital del certificado)
|
||||
- `cliPath` (sugerencia de instalación remota escrita en la zona de área amplia)
|
||||
@ -525,10 +534,10 @@ openclaw gateway discover
|
||||
```
|
||||
|
||||
<ParamField path="--timeout <ms>" type="number" default="2000">
|
||||
Tiempo de espera por comando (exploración/resolución).
|
||||
Tiempo de espera por comando (explorar/resolver).
|
||||
</ParamField>
|
||||
<ParamField path="--json" type="boolean">
|
||||
Salida legible por máquina (también desactiva el estilo/spinner).
|
||||
Salida legible por máquina (también deshabilita el estilo y el indicador de actividad).
|
||||
</ParamField>
|
||||
|
||||
Ejemplos:
|
||||
@ -539,13 +548,13 @@ openclaw gateway discover --json | jq '.beacons[].wsUrl'
|
||||
```
|
||||
|
||||
<Note>
|
||||
- La CLI analiza `local.` además del dominio de área amplia configurado cuando hay uno habilitado.
|
||||
- `wsUrl` en la salida JSON se deriva del extremo de servicio resuelto, no de indicaciones solo de TXT como `lanHost` o `tailnetDns`.
|
||||
- En mDNS `local.`, `sshPort` y `cliPath` solo se anuncian cuando `discovery.mdns.mode` es `full`. DNS-SD de área amplia sigue escribiendo `cliPath`; `sshPort` también sigue siendo opcional allí.
|
||||
- La CLI escanea `local.` más el dominio de área amplia configurado cuando hay uno habilitado.
|
||||
- `wsUrl` en la salida JSON se deriva del endpoint de servicio resuelto, no de sugerencias solo TXT como `lanHost` o `tailnetDns`.
|
||||
- En mDNS `local.`, `sshPort` y `cliPath` solo se transmiten cuando `discovery.mdns.mode` es `full`. DNS-SD de área amplia sigue escribiendo `cliPath`; `sshPort` también permanece opcional allí.
|
||||
|
||||
</Note>
|
||||
|
||||
## Relacionado
|
||||
|
||||
- [Referencia de la CLI](/es/cli)
|
||||
- [Manual operativo de Gateway](/es/gateway)
|
||||
- [Runbook del Gateway](/es/gateway)
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
---
|
||||
read_when:
|
||||
- Desea cambiar los modelos predeterminados o ver el estado de autenticación del proveedor
|
||||
- Quieres examinar los modelos/proveedores disponibles y depurar perfiles de autenticación
|
||||
summary: Referencia de CLI para `openclaw models` (status/list/set/scan, alias, alternativas, autenticación)
|
||||
- Quieres examinar los modelos/proveedores disponibles y depurar los perfiles de autenticación
|
||||
summary: Referencia de CLI para `openclaw models` (status/list/set/scan, alias, alternativas de reserva, auth)
|
||||
title: Modelos
|
||||
x-i18n:
|
||||
generated_at: "2026-05-01T05:30:12Z"
|
||||
generated_at: "2026-05-04T18:23:53Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 538d3e4808329737fdc044dc6e14e5c7c78052e75d8a8b3b257b1ebd821c84d1
|
||||
source_hash: dc7842f02e29aa0ac2ae88f3d42bba71f1890a58ab22d818dbee0585bc562fea
|
||||
source_path: cli/models.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw models`
|
||||
|
||||
Descubrimiento, escaneo y configuración de modelos (modelo predeterminado, alternativas, perfiles de autenticación).
|
||||
Detección, escaneo y configuración de modelos (modelo predeterminado, alternativas y perfiles de autenticación).
|
||||
|
||||
Relacionado:
|
||||
|
||||
@ -32,21 +32,21 @@ openclaw models set <model-or-alias>
|
||||
openclaw models scan
|
||||
```
|
||||
|
||||
`openclaw models status` muestra el valor predeterminado/las alternativas resueltas junto con un resumen de autenticación.
|
||||
`openclaw models status` muestra el valor predeterminado/las alternativas resueltos, además de un resumen de autenticación.
|
||||
Cuando hay instantáneas de uso de proveedores disponibles, la sección de estado de OAuth/clave de API incluye
|
||||
ventanas de uso del proveedor e instantáneas de cuota.
|
||||
Proveedores actuales de ventanas de uso: Anthropic, GitHub Copilot, Gemini CLI, OpenAI
|
||||
Proveedores actuales con ventanas de uso: Anthropic, GitHub Copilot, Gemini CLI, OpenAI
|
||||
Codex, MiniMax, Xiaomi y z.ai. La autenticación de uso proviene de hooks específicos del proveedor
|
||||
cuando están disponibles; de lo contrario, OpenClaw recurre a credenciales OAuth/clave de API coincidentes
|
||||
de perfiles de autenticación, el entorno o la configuración.
|
||||
En la salida `--json`, `auth.providers` es el resumen de proveedores consciente de entorno/configuración/almacén,
|
||||
mientras que `auth.oauth` es solo la salud de los perfiles del almacén de autenticación.
|
||||
Agrega `--probe` para ejecutar sondeos de autenticación en vivo contra cada perfil de proveedor configurado.
|
||||
Los sondeos son solicitudes reales (pueden consumir tokens y activar límites de tasa).
|
||||
cuando están disponibles; de lo contrario, OpenClaw recurre a credenciales
|
||||
OAuth/clave de API coincidentes desde perfiles de autenticación, env o configuración.
|
||||
En la salida `--json`, `auth.providers` es el resumen de proveedores que tiene en cuenta
|
||||
env/config/almacén, mientras que `auth.oauth` es solo el estado de salud del perfil del almacén de autenticación.
|
||||
Agrega `--probe` para ejecutar pruebas de autenticación en vivo contra cada perfil de proveedor configurado.
|
||||
Las pruebas son solicitudes reales (pueden consumir tokens y activar límites de frecuencia).
|
||||
Usa `--agent <id>` para inspeccionar el estado de modelo/autenticación de un agente configurado. Cuando se omite,
|
||||
el comando usa `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR` si están definidos; de lo contrario, usa el
|
||||
agente predeterminado configurado.
|
||||
Las filas de sondeo pueden provenir de perfiles de autenticación, credenciales de entorno o `models.json`.
|
||||
Las filas de prueba pueden provenir de perfiles de autenticación, credenciales de env o `models.json`.
|
||||
|
||||
Notas:
|
||||
|
||||
@ -54,51 +54,51 @@ Notas:
|
||||
- `models list` es de solo lectura: lee la configuración, los perfiles de autenticación, el estado existente del catálogo
|
||||
y las filas de catálogo propiedad del proveedor, pero no reescribe
|
||||
`models.json`.
|
||||
- La columna `Auth` es de nivel de proveedor y de solo lectura. Se calcula a partir de metadatos locales
|
||||
de perfiles de autenticación, marcadores de entorno, claves de proveedor configuradas, marcadores de proveedor local,
|
||||
marcadores de entorno/perfil de AWS Bedrock y metadatos de autenticación sintética de plugins;
|
||||
no carga el runtime del proveedor, no lee secretos del llavero, no llama a APIs del proveedor
|
||||
ni prueba la preparación exacta de ejecución por modelo.
|
||||
- `models list --all --provider <id>` puede incluir filas estáticas de catálogo propiedad del proveedor
|
||||
desde manifiestos de Plugin o metadatos de catálogo de proveedores incluidos, incluso cuando todavía
|
||||
no te has autenticado con ese proveedor. Esas filas siguen mostrándose como
|
||||
no disponibles hasta que se configure la autenticación coincidente.
|
||||
- `models list` mantiene el plano de control responsivo mientras el descubrimiento de catálogos del proveedor
|
||||
es lento. Las vistas predeterminada y configurada recurren a filas de modelo configuradas o
|
||||
sintéticas después de una espera breve y dejan que el descubrimiento termine en segundo plano.
|
||||
Usa `--all` cuando necesites el catálogo descubierto completo y exacto y
|
||||
estés dispuesto a esperar al descubrimiento del proveedor.
|
||||
- Un `models list --all` amplio fusiona filas de catálogo del manifiesto sobre filas del registro
|
||||
- La columna `Auth` está a nivel de proveedor y es de solo lectura. Se calcula a partir de metadatos
|
||||
de perfiles de autenticación locales, marcadores de env, claves de proveedor configuradas, marcadores
|
||||
de proveedores locales, marcadores de env/perfil de AWS Bedrock y metadatos de autenticación sintética de Plugin;
|
||||
no carga el runtime del proveedor, no lee secretos del llavero, no llama a las API del proveedor
|
||||
ni demuestra la preparación exacta de ejecución por modelo.
|
||||
- `models list --all --provider <id>` puede incluir filas de catálogo estático propiedad del proveedor
|
||||
desde manifiestos de Plugin o metadatos de catálogo de proveedores incluidos, incluso cuando
|
||||
aún no te has autenticado con ese proveedor. Esas filas siguen apareciendo como
|
||||
no disponibles hasta que se configura la autenticación correspondiente.
|
||||
- `models list` mantiene el plano de control con capacidad de respuesta mientras la detección del catálogo del proveedor
|
||||
es lenta. Las vistas predeterminada y configurada recurren a filas de modelos configuradas o
|
||||
sintéticas tras una breve espera y dejan que la detección termine en
|
||||
segundo plano. Usa `--all` cuando necesites el catálogo descubierto completo y exacto
|
||||
y estés dispuesto a esperar la detección del proveedor.
|
||||
- El `models list --all` amplio fusiona filas de catálogo de manifiesto sobre filas de registro
|
||||
sin cargar hooks suplementarios del runtime del proveedor. Las rutas rápidas de manifiesto filtradas por proveedor
|
||||
usan solo proveedores marcados como `static`; los proveedores marcados como `refreshable`
|
||||
se mantienen respaldados por registro/caché y agregan filas de manifiesto como suplementos, mientras
|
||||
que los proveedores marcados como `runtime` se mantienen en descubrimiento de registro/runtime.
|
||||
- `models list` mantiene distintos los metadatos nativos del modelo y los límites del runtime. En la salida de tabla,
|
||||
permanecen respaldados por registro/caché y agregan filas de manifiesto como suplementos, mientras que
|
||||
los proveedores marcados como `runtime` permanecen en detección de registro/runtime.
|
||||
- `models list` mantiene separados los metadatos nativos del modelo y los límites del runtime. En la salida de tabla,
|
||||
`Ctx` muestra `contextTokens/contextWindow` cuando un límite efectivo del runtime
|
||||
difiere de la ventana de contexto nativa; las filas JSON incluyen `contextTokens`
|
||||
cuando un proveedor expone ese límite.
|
||||
- `models list --provider <id>` filtra por id de proveedor, como `moonshot` u
|
||||
`openai-codex`. No acepta etiquetas de visualización de selectores interactivos de proveedor,
|
||||
`openai-codex`. No acepta etiquetas visibles de selectores interactivos de proveedores,
|
||||
como `Moonshot AI`.
|
||||
- Las referencias de modelo se analizan dividiendo por el **primer** `/`. Si el ID del modelo incluye `/` (estilo OpenRouter), incluye el prefijo del proveedor (ejemplo: `openrouter/moonshotai/kimi-k2`).
|
||||
- Si omites el proveedor, OpenClaw resuelve la entrada primero como un alias, luego
|
||||
como una coincidencia única de proveedor configurado para ese id de modelo exacto, y solo entonces
|
||||
recurre al proveedor predeterminado configurado con una advertencia de obsolescencia.
|
||||
Si ese proveedor ya no expone el modelo predeterminado configurado, OpenClaw
|
||||
recurre al primer proveedor/modelo configurado en lugar de mostrar un valor predeterminado
|
||||
obsoleto de un proveedor eliminado.
|
||||
recurre al primer proveedor/modelo configurado en lugar de mostrar un
|
||||
valor predeterminado obsoleto de un proveedor eliminado.
|
||||
- `models status` puede mostrar `marker(<value>)` en la salida de autenticación para marcadores de posición no secretos (por ejemplo `OPENAI_API_KEY`, `secretref-managed`, `minimax-oauth`, `oauth:chutes`, `ollama-local`) en lugar de enmascararlos como secretos.
|
||||
|
||||
### Escaneo de modelos
|
||||
|
||||
`models scan` lee el catálogo público `:free` de OpenRouter y clasifica candidatos para
|
||||
uso como alternativas. El catálogo en sí es público, así que los escaneos solo de metadatos no necesitan
|
||||
uso como alternativa. El catálogo en sí es público, por lo que los escaneos solo de metadatos no necesitan
|
||||
una clave de OpenRouter.
|
||||
|
||||
De forma predeterminada, OpenClaw intenta sondear el soporte de herramientas e imágenes con llamadas a modelos en vivo.
|
||||
De forma predeterminada, OpenClaw intenta probar la compatibilidad con herramientas e imágenes mediante llamadas a modelos en vivo.
|
||||
Si no hay una clave de OpenRouter configurada, el comando recurre a una salida solo de metadatos
|
||||
y explica que los modelos `:free` aún requieren `OPENROUTER_API_KEY` para
|
||||
sondeos e inferencia.
|
||||
pruebas e inferencia.
|
||||
|
||||
Opciones:
|
||||
|
||||
@ -107,7 +107,7 @@ Opciones:
|
||||
- `--max-age-days <days>`
|
||||
- `--provider <name>`
|
||||
- `--max-candidates <n>`
|
||||
- `--timeout <ms>` (tiempo de espera de solicitud de catálogo y por sondeo)
|
||||
- `--timeout <ms>` (solicitud de catálogo y timeout por prueba)
|
||||
- `--concurrency <n>`
|
||||
- `--yes`
|
||||
- `--no-input`
|
||||
@ -115,7 +115,7 @@ Opciones:
|
||||
- `--set-image`
|
||||
- `--json`
|
||||
|
||||
`--set-default` y `--set-image` requieren sondeos en vivo; los resultados de escaneo
|
||||
`--set-default` y `--set-image` requieren pruebas en vivo; los resultados de escaneo
|
||||
solo de metadatos son informativos y no se aplican a la configuración.
|
||||
|
||||
### Estado de modelos
|
||||
@ -125,8 +125,8 @@ Opciones:
|
||||
- `--json`
|
||||
- `--plain`
|
||||
- `--check` (salida 1=expirado/faltante, 2=por expirar)
|
||||
- `--probe` (sondeo en vivo de perfiles de autenticación configurados)
|
||||
- `--probe-provider <name>` (sondear un proveedor)
|
||||
- `--probe` (prueba en vivo de perfiles de autenticación configurados)
|
||||
- `--probe-provider <name>` (probar un proveedor)
|
||||
- `--probe-profile <id>` (ids de perfil repetidos o separados por comas)
|
||||
- `--probe-timeout <ms>`
|
||||
- `--probe-concurrency <n>`
|
||||
@ -134,10 +134,10 @@ Opciones:
|
||||
- `--agent <id>` (id de agente configurado; anula `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`)
|
||||
|
||||
`--json` mantiene stdout reservado para la carga JSON. Los diagnósticos de perfil de autenticación, proveedor
|
||||
e inicio se enrutan a stderr para que los scripts puedan canalizar stdout directamente
|
||||
e inicio se envían a stderr para que los scripts puedan canalizar stdout directamente
|
||||
a herramientas como `jq`.
|
||||
|
||||
Grupos de estado de sondeo:
|
||||
Categorías de estado de prueba:
|
||||
|
||||
- `ok`
|
||||
- `auth`
|
||||
@ -148,15 +148,15 @@ Grupos de estado de sondeo:
|
||||
- `unknown`
|
||||
- `no_model`
|
||||
|
||||
Casos esperados de detalle/código de motivo de sondeo:
|
||||
Casos de detalle/código de motivo de prueba que puedes esperar:
|
||||
|
||||
- `excluded_by_auth_order`: existe un perfil almacenado, pero `auth.order.<provider>`
|
||||
explícito lo omitió, así que el sondeo informa la exclusión en lugar de
|
||||
- `excluded_by_auth_order`: existe un perfil almacenado, pero `auth.order.<provider>` explícito
|
||||
lo omitió, por lo que la prueba informa la exclusión en lugar de
|
||||
intentarlo.
|
||||
- `missing_credential`, `invalid_expires`, `expired`, `unresolved_ref`:
|
||||
el perfil está presente, pero no es elegible/resoluble.
|
||||
- `no_model`: existe autenticación del proveedor, pero OpenClaw no pudo resolver un candidato
|
||||
de modelo sondeable para ese proveedor.
|
||||
el perfil está presente pero no es elegible/resoluble.
|
||||
- `no_model`: existe autenticación del proveedor, pero OpenClaw no pudo resolver un
|
||||
candidato de modelo que se pueda probar para ese proveedor.
|
||||
|
||||
## Alias + alternativas
|
||||
|
||||
@ -169,42 +169,49 @@ openclaw models fallbacks list
|
||||
|
||||
```bash
|
||||
openclaw models auth add
|
||||
openclaw models auth list [--provider <id>] [--json]
|
||||
openclaw models auth login --provider <id>
|
||||
openclaw models auth setup-token --provider <id>
|
||||
openclaw models auth paste-token
|
||||
```
|
||||
|
||||
`models auth add` es el asistente interactivo de autenticación. Puede iniciar un flujo de autenticación
|
||||
del proveedor (OAuth/clave de API) o guiarte para pegar manualmente un token, según el
|
||||
del proveedor (OAuth/clave de API) o guiarte al pegado manual de tokens, según el
|
||||
proveedor que elijas.
|
||||
|
||||
`models auth list` enumera los perfiles de autenticación guardados para el agente seleccionado sin
|
||||
imprimir tokens, claves de API ni material secreto de OAuth. Usa `--provider <id>` para
|
||||
filtrar a un proveedor, como `openai-codex`, y `--json` para scripting.
|
||||
|
||||
`models auth login` ejecuta el flujo de autenticación de un Plugin de proveedor (OAuth/clave de API). Usa
|
||||
`openclaw plugins list` para ver qué proveedores están instalados.
|
||||
Usa `openclaw models auth --agent <id> <subcommand>` para escribir resultados de autenticación en un
|
||||
almacén de agente configurado específico. La marca principal `--agent` es respetada por
|
||||
`add`, `login`, `setup-token`, `paste-token` y `login-github-copilot`.
|
||||
almacén de agente configurado específico. La bandera principal `--agent` es respetada por
|
||||
`add`, `list`, `login`, `setup-token`, `paste-token` y
|
||||
`login-github-copilot`.
|
||||
|
||||
Ejemplos:
|
||||
|
||||
```bash
|
||||
openclaw models auth login --provider openai-codex --set-default
|
||||
openclaw models auth list --provider openai-codex
|
||||
```
|
||||
|
||||
Notas:
|
||||
|
||||
- `setup-token` y `paste-token` siguen siendo comandos genéricos de tokens para proveedores
|
||||
que exponen métodos de autenticación con token.
|
||||
- `setup-token` requiere una TTY interactiva y ejecuta el método de autenticación con token del proveedor
|
||||
(usando de forma predeterminada el método `setup-token` de ese proveedor cuando expone
|
||||
- `setup-token` y `paste-token` siguen siendo comandos genéricos de token para proveedores
|
||||
que exponen métodos de autenticación por token.
|
||||
- `setup-token` requiere un TTY interactivo y ejecuta el método de autenticación por token del proveedor
|
||||
(de forma predeterminada, el método `setup-token` de ese proveedor cuando expone
|
||||
uno).
|
||||
- `paste-token` acepta una cadena de token generada en otro lugar o desde automatización.
|
||||
- `paste-token` requiere `--provider`, solicita el valor del token y lo escribe
|
||||
en el id de perfil predeterminado `<provider>:manual` salvo que pases
|
||||
en el id de perfil predeterminado `<provider>:manual`, salvo que pases
|
||||
`--profile-id`.
|
||||
- `paste-token --expires-in <duration>` almacena una expiración absoluta del token a partir de una
|
||||
duración relativa como `365d` o `12h`.
|
||||
- Nota sobre Anthropic: el personal de Anthropic nos dijo que el uso de Claude CLI al estilo de OpenClaw vuelve a estar permitido, así que OpenClaw trata la reutilización de Claude CLI y el uso de `claude -p` como autorizados para esta integración salvo que Anthropic publique una nueva política.
|
||||
- Anthropic `setup-token` / `paste-token` siguen disponibles como una ruta de token compatible de OpenClaw, pero OpenClaw ahora prefiere reutilizar Claude CLI y `claude -p` cuando están disponibles.
|
||||
- Nota de Anthropic: el personal de Anthropic nos dijo que el uso de Claude CLI al estilo OpenClaw vuelve a estar permitido, por lo que OpenClaw trata la reutilización de Claude CLI y el uso de `claude -p` como sancionados para esta integración salvo que Anthropic publique una nueva política.
|
||||
- Anthropic `setup-token` / `paste-token` siguen disponibles como una ruta de token de OpenClaw compatible, pero OpenClaw ahora prefiere reutilizar Claude CLI y `claude -p` cuando estén disponibles.
|
||||
|
||||
## Relacionado
|
||||
|
||||
|
||||
@ -1,36 +1,36 @@
|
||||
---
|
||||
read_when:
|
||||
- Debe validar el enrutamiento del proxy gestionado por el operador antes del despliegue
|
||||
- Debe capturar el tráfico de transporte de OpenClaw localmente para depuración
|
||||
- Quieres inspeccionar sesiones de proxy de depuración, blobs o preajustes de consulta integrados
|
||||
summary: Referencia de CLI para `openclaw proxy`, incluida la validación del proxy administrado por el operador y el inspector de captura del proxy de depuración local
|
||||
title: Proxy
|
||||
- Debe validar el enrutamiento de proxy gestionado por el operador antes de la implementación
|
||||
- Debes capturar localmente el tráfico de transporte de OpenClaw para depuración
|
||||
- Quieres inspeccionar sesiones del proxy de depuración, blobs o preajustes de consulta integrados
|
||||
summary: Referencia de CLI para `openclaw proxy`, incluida la validación del proxy gestionado por el operador y el inspector local de capturas del proxy de depuración
|
||||
title: Servidor proxy
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T05:27:49Z"
|
||||
generated_at: "2026-05-04T18:23:57Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 9589bedafb97c31bcb6536a04307cd0c6550e1f307693bd4401785d79f34a1eb
|
||||
source_hash: 092c4e946dcab5e78e37d6fc77bb067b7a649368f8571fa127e462a85fa14ce5
|
||||
source_path: cli/proxy.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw proxy`
|
||||
|
||||
Valida el enrutamiento de proxy administrado por el operador, o ejecuta el proxy
|
||||
explícito de depuración local e inspecciona el tráfico capturado.
|
||||
Valida el enrutamiento de proxy gestionado por el operador, o ejecuta el proxy de depuración explícito local
|
||||
e inspecciona el tráfico capturado.
|
||||
|
||||
Usa `validate` para comprobar de antemano un proxy de reenvío administrado por el operador antes de habilitar
|
||||
el enrutamiento de proxy de OpenClaw. Los demás comandos son herramientas de depuración para la
|
||||
investigación a nivel de transporte: pueden iniciar un proxy local, ejecutar un comando secundario
|
||||
con la captura habilitada, listar sesiones de captura, consultar patrones de tráfico comunes, leer
|
||||
blobs capturados y purgar datos de captura locales.
|
||||
Usa `validate` para comprobar previamente un proxy de reenvío gestionado por el operador antes de habilitar
|
||||
el enrutamiento de proxy de OpenClaw. Los demás comandos son herramientas de depuración para
|
||||
la investigación a nivel de transporte: pueden iniciar un proxy local, ejecutar un comando hijo
|
||||
con captura habilitada, listar sesiones de captura, consultar patrones de tráfico comunes, leer
|
||||
blobs capturados y purgar datos locales de captura.
|
||||
|
||||
## Comandos
|
||||
|
||||
```bash
|
||||
openclaw proxy start [--host <host>] [--port <port>]
|
||||
openclaw proxy run [--host <host>] [--port <port>] -- <cmd...>
|
||||
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--timeout-ms <ms>]
|
||||
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--apns-reachable] [--apns-authority <url>] [--timeout-ms <ms>]
|
||||
openclaw proxy coverage
|
||||
openclaw proxy sessions [--limit <count>]
|
||||
openclaw proxy query --preset <name> [--session <id>]
|
||||
@ -40,14 +40,17 @@ openclaw proxy purge
|
||||
|
||||
## Validar
|
||||
|
||||
`openclaw proxy validate` comprueba la URL efectiva del proxy administrado por el operador desde
|
||||
`openclaw proxy validate` comprueba la URL efectiva del proxy gestionado por el operador desde
|
||||
`--proxy-url`, la configuración o `OPENCLAW_PROXY_URL`. Informa de un problema de configuración cuando
|
||||
no hay ningún proxy habilitado y configurado; usa `--proxy-url` para una comprobación puntual
|
||||
antes de cambiar la configuración. De forma predeterminada, verifica que un destino público funcione
|
||||
a través del proxy y que el proxy no pueda llegar a un canario temporal de loopback.
|
||||
Los destinos denegados personalizados fallan en modo cerrado: las respuestas HTTP y los fallos
|
||||
de transporte ambiguos fallan salvo que puedas verificar por separado una señal de denegación
|
||||
específica de la implementación.
|
||||
no hay ningún proxy habilitado y configurado; usa `--proxy-url` para una comprobación previa puntual
|
||||
antes de cambiar la configuración. De forma predeterminada, verifica que un destino público funciona
|
||||
a través del proxy y que el proxy no puede alcanzar un canary de loopback temporal.
|
||||
Los destinos denegados personalizados fallan de forma cerrada: las respuestas HTTP y los fallos
|
||||
de transporte ambiguos fallan a menos que puedas verificar por separado una señal de denegación
|
||||
específica del despliegue. Añade `--apns-reachable` para abrir también un túnel CONNECT HTTP/2 de APNs
|
||||
a través del proxy y confirmar que APNs sandbox responde; la prueba usa un token de proveedor
|
||||
intencionadamente no válido, por lo que una respuesta de APNs `403 InvalidProviderToken`
|
||||
es una señal correcta de alcanzabilidad.
|
||||
|
||||
Opciones:
|
||||
|
||||
@ -55,9 +58,11 @@ Opciones:
|
||||
- `--proxy-url <url>`: valida esta URL de proxy en lugar de la configuración o el entorno.
|
||||
- `--allowed-url <url>`: añade un destino que se espera que funcione a través del proxy. Repite para comprobar varios destinos.
|
||||
- `--denied-url <url>`: añade un destino que se espera que el proxy bloquee. Repite para comprobar varios destinos.
|
||||
- `--apns-reachable`: verifica también que APNs sandbox HTTP/2 sea alcanzable a través del proxy.
|
||||
- `--apns-authority <url>`: autoridad de APNs que se probará con `--apns-reachable` (`https://api.sandbox.push.apple.com` de forma predeterminada; producción es `https://api.push.apple.com`).
|
||||
- `--timeout-ms <ms>`: tiempo de espera por solicitud en milisegundos.
|
||||
|
||||
Consulta [Proxy de red](/es/security/network-proxy) para obtener orientación sobre la implementación y la semántica
|
||||
Consulta [Proxy de red](/es/security/network-proxy) para obtener orientación de despliegue y semántica
|
||||
de denegación.
|
||||
|
||||
## Preajustes de consulta
|
||||
@ -73,11 +78,11 @@ de denegación.
|
||||
|
||||
## Notas
|
||||
|
||||
- `start` usa `127.0.0.1` de forma predeterminada salvo que se establezca `--host`.
|
||||
- `start` usa `127.0.0.1` de forma predeterminada, salvo que se defina `--host`.
|
||||
- `run` inicia un proxy de depuración local y luego ejecuta el comando después de `--`.
|
||||
- El reenvío directo al origen del proxy de depuración abre sockets ascendentes para diagnósticos. Cuando el modo de proxy administrado de OpenClaw está activo, el reenvío directo para solicitudes de proxy y túneles CONNECT está deshabilitado de forma predeterminada; establece `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` solo para diagnósticos locales aprobados.
|
||||
- El reenvío upstream directo del proxy de depuración abre sockets upstream para diagnóstico. Cuando el modo de proxy gestionado de OpenClaw está activo, el reenvío directo para solicitudes de proxy y túneles CONNECT está deshabilitado de forma predeterminada; define `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` solo para diagnósticos locales aprobados.
|
||||
- `validate` sale con código 1 cuando fallan la configuración del proxy o las comprobaciones de destino.
|
||||
- Las capturas son datos locales de depuración; usa `openclaw proxy purge` cuando termines.
|
||||
- Las capturas son datos de depuración locales; usa `openclaw proxy purge` cuando termines.
|
||||
|
||||
## Relacionado
|
||||
|
||||
|
||||
@ -1,33 +1,33 @@
|
||||
---
|
||||
read_when:
|
||||
- Quieres una alternativa confiable cuando fallan los proveedores de API
|
||||
- Estás ejecutando Codex CLI u otras CLI de IA locales y quieres reutilizarlas
|
||||
- Quieres entender el puente de loopback MCP para el acceso a herramientas del backend de la CLI
|
||||
summary: 'Backends de CLI: alternativa local de CLI de IA con puente opcional de herramientas MCP'
|
||||
title: Backends de CLI
|
||||
- Quieres una alternativa fiable cuando fallen los proveedores de API
|
||||
- Estás ejecutando Codex CLI u otras CLI locales de IA y quieres reutilizarlas
|
||||
- Quieres entender el puente de loopback de MCP para el acceso a herramientas del backend de la CLI
|
||||
summary: 'Motores de CLI: alternativa de CLI de IA local con puente opcional de herramientas MCP'
|
||||
title: Motores de la CLI
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T20:46:50Z"
|
||||
generated_at: "2026-05-04T18:24:03Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f343469d6a42dc6146196355dc2ba3feed045515c3d8446941b90971aadc9a16
|
||||
source_hash: 55534c48c5e226857b9320fd369416583e5c2efc80eabd4746f939afdd027dc1
|
||||
source_path: gateway/cli-backends.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw puede ejecutar **CLI de IA locales** como **respaldo solo de texto** cuando los proveedores de API están caídos,
|
||||
limitados por tasa o se comportan mal temporalmente. Esto es intencionalmente conservador:
|
||||
OpenClaw puede ejecutar **CLI locales de IA** como **fallback solo de texto** cuando los proveedores de API están caídos,
|
||||
limitados por cuota o se comportan mal temporalmente. Esto es deliberadamente conservador:
|
||||
|
||||
- **Las herramientas de OpenClaw no se inyectan directamente**, pero los backends con `bundleMcp: true`
|
||||
pueden recibir herramientas del Gateway mediante un puente MCP de loopback.
|
||||
- **Streaming JSONL** para CLI que lo admiten.
|
||||
- **Las sesiones son compatibles** (por lo que los turnos de seguimiento se mantienen coherentes).
|
||||
- **Las imágenes pueden pasarse directamente** si la CLI acepta rutas de imagen.
|
||||
- **Las sesiones son compatibles** (para que los turnos de seguimiento mantengan coherencia).
|
||||
- **Las imágenes se pueden pasar** si la CLI acepta rutas de imagen.
|
||||
|
||||
Esto está diseñado como una **red de seguridad** en lugar de una ruta principal. Úsalo cuando
|
||||
quieras respuestas de texto que “siempre funcionen” sin depender de API externas.
|
||||
Esto está diseñado como una **red de seguridad** más que como una ruta principal. Úsalo cuando quieras
|
||||
respuestas de texto que “siempre funcionan” sin depender de API externas.
|
||||
|
||||
Si quieres un runtime de arnés completo con controles de sesión ACP, tareas en segundo plano,
|
||||
vinculación de hilos/conversaciones y sesiones persistentes externas de programación, usa
|
||||
vinculación de hilo/conversación y sesiones persistentes externas de programación, usa
|
||||
[Agentes ACP](/es/tools/acp-agents) en su lugar. Los backends de CLI no son ACP.
|
||||
|
||||
## Inicio rápido para principiantes
|
||||
@ -39,7 +39,7 @@ registra un backend predeterminado):
|
||||
openclaw agent --message "hi" --model codex-cli/gpt-5.5
|
||||
```
|
||||
|
||||
Si tu gateway se ejecuta bajo launchd/systemd y PATH es mínimo, añade solo la
|
||||
Si tu Gateway se ejecuta bajo launchd/systemd y PATH es mínimo, agrega solo la
|
||||
ruta del comando:
|
||||
|
||||
```json5
|
||||
@ -59,13 +59,13 @@ ruta del comando:
|
||||
Eso es todo. No se necesitan claves ni configuración de autenticación adicional más allá de la propia CLI.
|
||||
|
||||
Si usas un backend de CLI incluido como **proveedor principal de mensajes** en un
|
||||
host de gateway, OpenClaw ahora carga automáticamente el Plugin incluido propietario cuando tu configuración
|
||||
host de Gateway, OpenClaw ahora carga automáticamente el Plugin incluido propietario cuando tu configuración
|
||||
hace referencia explícita a ese backend en una referencia de modelo o bajo
|
||||
`agents.defaults.cliBackends`.
|
||||
|
||||
## Usarlo como respaldo
|
||||
## Uso como fallback
|
||||
|
||||
Añade un backend de CLI a tu lista de respaldos para que solo se ejecute cuando fallen los modelos principales:
|
||||
Agrega un backend de CLI a tu lista de fallbacks para que solo se ejecute cuando fallen los modelos principales:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -86,9 +86,9 @@ Añade un backend de CLI a tu lista de respaldos para que solo se ejecute cuando
|
||||
|
||||
Notas:
|
||||
|
||||
- Si usas `agents.defaults.models` (lista de permitidos), también debes incluir ahí tus modelos de backend de CLI.
|
||||
- Si el proveedor principal falla (autenticación, límites de tasa, tiempos de espera), OpenClaw
|
||||
probará después el backend de CLI.
|
||||
- Si usas `agents.defaults.models` (lista permitida), también debes incluir ahí tus modelos de backend de CLI.
|
||||
- Si el proveedor principal falla (autenticación, límites de cuota, tiempos de espera), OpenClaw intentará
|
||||
después el backend de CLI.
|
||||
|
||||
## Resumen de configuración
|
||||
|
||||
@ -98,7 +98,7 @@ Todos los backends de CLI viven bajo:
|
||||
agents.defaults.cliBackends
|
||||
```
|
||||
|
||||
Cada entrada está indexada por un **id de proveedor** (por ejemplo, `codex-cli`, `my-cli`).
|
||||
Cada entrada se identifica por un **id de proveedor** (por ejemplo, `codex-cli`, `my-cli`).
|
||||
El id de proveedor se convierte en el lado izquierdo de tu referencia de modelo:
|
||||
|
||||
```
|
||||
@ -148,42 +148,48 @@ El id de proveedor se convierte en el lado izquierdo de tu referencia de modelo:
|
||||
## Cómo funciona
|
||||
|
||||
1. **Selecciona un backend** según el prefijo del proveedor (`codex-cli/...`).
|
||||
2. **Construye un prompt de sistema** usando el mismo prompt de OpenClaw y el contexto del espacio de trabajo.
|
||||
3. **Ejecuta la CLI** con un id de sesión (si es compatible) para que el historial se mantenga coherente.
|
||||
2. **Construye un prompt de sistema** usando el mismo prompt de OpenClaw + contexto del espacio de trabajo.
|
||||
3. **Ejecuta la CLI** con un id de sesión (si es compatible) para que el historial se mantenga consistente.
|
||||
El backend `claude-cli` incluido mantiene vivo un proceso stdio de Claude por
|
||||
sesión de OpenClaw y envía turnos de seguimiento mediante stdin stream-json.
|
||||
4. **Analiza la salida** (JSON o texto sin formato) y devuelve el texto final.
|
||||
5. **Persiste ids de sesión** por backend, de modo que los seguimientos reutilicen la misma sesión de CLI.
|
||||
sesión de OpenClaw y envía los turnos de seguimiento por stdin stream-json.
|
||||
4. **Analiza la salida** (JSON o texto plano) y devuelve el texto final.
|
||||
5. **Persiste ids de sesión** por backend, para que los seguimientos reutilicen la misma sesión de CLI.
|
||||
|
||||
<Note>
|
||||
El backend `claude-cli` de Anthropic incluido vuelve a ser compatible. El personal de Anthropic
|
||||
nos dijo que el uso de Claude CLI al estilo de OpenClaw está permitido de nuevo, por lo que OpenClaw trata
|
||||
el uso de `claude -p` como sancionado para esta integración salvo que Anthropic publique
|
||||
una política nueva.
|
||||
El backend Anthropic `claude-cli` incluido vuelve a estar admitido. Personal de Anthropic
|
||||
nos dijo que el uso de Claude CLI al estilo OpenClaw vuelve a estar permitido, así que OpenClaw trata
|
||||
el uso de `claude -p` como autorizado para esta integración salvo que Anthropic publique
|
||||
una nueva política.
|
||||
</Note>
|
||||
|
||||
El backend `codex-cli` de OpenAI incluido pasa el prompt de sistema de OpenClaw mediante
|
||||
la anulación de configuración `model_instructions_file` de Codex (`-c
|
||||
model_instructions_file="..."`). Codex no expone una marca
|
||||
`--append-system-prompt` al estilo de Claude, por lo que OpenClaw escribe el prompt ensamblado en un
|
||||
El backend OpenAI `codex-cli` incluido pasa el prompt de sistema de OpenClaw mediante
|
||||
la sobrescritura de configuración `model_instructions_file` de Codex (`-c
|
||||
model_instructions_file="..."`). Codex no expone una bandera al estilo Claude
|
||||
`--append-system-prompt`, así que OpenClaw escribe el prompt ensamblado en un
|
||||
archivo temporal para cada sesión nueva de Codex CLI.
|
||||
|
||||
El backend `claude-cli` de Anthropic incluido recibe la instantánea de Skills de OpenClaw
|
||||
de dos maneras: el catálogo compacto de Skills de OpenClaw en el prompt de sistema anexado, y
|
||||
El backend Anthropic `claude-cli` incluido recibe la instantánea de Skills de OpenClaw
|
||||
de dos maneras: el catálogo compacto de Skills de OpenClaw en el prompt de sistema agregado, y
|
||||
un Plugin temporal de Claude Code pasado con `--plugin-dir`. El Plugin contiene
|
||||
solo las Skills elegibles para ese agente/sesión, por lo que el resolvedor nativo de Skills
|
||||
de Claude Code ve el mismo conjunto filtrado que OpenClaw anunciaría de otro modo en
|
||||
el prompt. OpenClaw sigue aplicando las anulaciones de entorno/clave de API de Skills al
|
||||
solo las Skills elegibles para ese agente/sesión, así que el resolvedor nativo de Skills de Claude Code
|
||||
ve el mismo conjunto filtrado que OpenClaw anunciaría de otro modo en
|
||||
el prompt. Las sobrescrituras de entorno/API key de Skills siguen siendo aplicadas por OpenClaw al
|
||||
entorno del proceso hijo para la ejecución.
|
||||
|
||||
Claude CLI también tiene su propio modo de permisos no interactivo. OpenClaw lo asigna
|
||||
a la política de exec existente en lugar de añadir configuración específica de Claude: cuando la
|
||||
Claude CLI también tiene su propio modo de permisos no interactivo. OpenClaw asigna eso
|
||||
a la política de exec existente en lugar de agregar configuración específica de Claude: cuando la
|
||||
política efectiva de exec solicitada es YOLO (`tools.exec.security: "full"` y
|
||||
`tools.exec.ask: "off"`), OpenClaw añade `--permission-mode bypassPermissions`.
|
||||
La configuración por agente `agents.list[].tools.exec` anula `tools.exec` global para
|
||||
ese agente. Para forzar un modo de Claude distinto, configura argumentos backend sin procesar explícitos
|
||||
`tools.exec.ask: "off"`), OpenClaw agrega `--permission-mode bypassPermissions`.
|
||||
La configuración por agente `agents.list[].tools.exec` sobrescribe `tools.exec` global para
|
||||
ese agente. Para forzar un modo de Claude distinto, define argumentos raw explícitos del backend
|
||||
como `--permission-mode default` o `--permission-mode acceptEdits` bajo
|
||||
`agents.defaults.cliBackends.claude-cli.args` y los `resumeArgs` correspondientes.
|
||||
`agents.defaults.cliBackends.claude-cli.args` y `resumeArgs` coincidente.
|
||||
|
||||
El backend Anthropic `claude-cli` incluido también asigna los niveles `/think` de OpenClaw
|
||||
a la bandera nativa `--effort` de Claude Code para niveles que no estén desactivados. `minimal` y
|
||||
`low` se asignan a `low`, `adaptive` y `medium` se asignan a `medium`, y `high`,
|
||||
`xhigh` y `max` se asignan directamente. Otros backends de CLI necesitan que su Plugin propietario
|
||||
declare un mapeador argv equivalente antes de que `/think` pueda afectar la CLI generada.
|
||||
|
||||
Antes de que OpenClaw pueda usar el backend `claude-cli` incluido, Claude Code
|
||||
ya debe haber iniciado sesión en el mismo host:
|
||||
@ -195,96 +201,96 @@ openclaw models auth login --provider anthropic --method cli --set-default
|
||||
```
|
||||
|
||||
Usa `agents.defaults.cliBackends.claude-cli.command` solo cuando el binario `claude`
|
||||
no esté ya en `PATH`.
|
||||
aún no esté en `PATH`.
|
||||
|
||||
## Sesiones
|
||||
|
||||
- Si la CLI admite sesiones, configura `sessionArg` (por ejemplo, `--session-id`) o
|
||||
`sessionArgs` (marcador `{sessionId}`) cuando el ID deba insertarse
|
||||
en varias marcas.
|
||||
- Si la CLI usa un **subcomando de reanudación** con marcas distintas, configura
|
||||
`resumeArgs` (reemplaza `args` al reanudar) y, opcionalmente, `resumeOutput`
|
||||
(para reanudaciones que no sean JSON).
|
||||
- Si la CLI admite sesiones, define `sessionArg` (por ejemplo, `--session-id`) o
|
||||
`sessionArgs` (placeholder `{sessionId}`) cuando el ID deba insertarse
|
||||
en varias banderas.
|
||||
- Si la CLI usa un **subcomando de reanudación** con banderas diferentes, define
|
||||
`resumeArgs` (reemplaza `args` al reanudar) y opcionalmente `resumeOutput`
|
||||
(para reanudaciones que no son JSON).
|
||||
- `sessionMode`:
|
||||
- `always`: siempre envía un id de sesión (UUID nuevo si no hay ninguno almacenado).
|
||||
- `existing`: solo envía un id de sesión si ya había uno almacenado.
|
||||
- `none`: nunca envía un id de sesión.
|
||||
- `claude-cli` tiene como valores predeterminados `liveSession: "claude-stdio"`, `output: "jsonl"`,
|
||||
- `always`: enviar siempre un id de sesión (UUID nuevo si no hay ninguno almacenado).
|
||||
- `existing`: enviar un id de sesión solo si ya se almacenó uno antes.
|
||||
- `none`: no enviar nunca un id de sesión.
|
||||
- `claude-cli` usa de forma predeterminada `liveSession: "claude-stdio"`, `output: "jsonl"`,
|
||||
e `input: "stdin"` para que los turnos de seguimiento reutilicen el proceso vivo de Claude mientras
|
||||
esté activo. Stdio caliente es ahora el valor predeterminado, incluso para configuraciones personalizadas
|
||||
esté activo. Stdio en caliente es ahora el valor predeterminado, incluso para configuraciones personalizadas
|
||||
que omiten campos de transporte. Si el Gateway se reinicia o el proceso inactivo
|
||||
sale, OpenClaw reanuda desde el id de sesión almacenado de Claude. Los ids de sesión
|
||||
sale, OpenClaw reanuda desde el id de sesión de Claude almacenado. Los ids de sesión
|
||||
almacenados se verifican contra una transcripción de proyecto existente y legible antes de
|
||||
reanudar, por lo que las vinculaciones fantasma se limpian con `reason=transcript-missing`
|
||||
reanudar, así que las vinculaciones fantasma se limpian con `reason=transcript-missing`
|
||||
en lugar de iniciar silenciosamente una sesión nueva de Claude CLI bajo `--resume`.
|
||||
- Las sesiones vivas de Claude mantienen protecciones acotadas de salida JSONL. Los valores predeterminados permiten hasta
|
||||
8 MiB y 20.000 líneas JSONL sin procesar por turno. Los turnos de Claude con muchas herramientas pueden elevar
|
||||
esos límites por backend con
|
||||
8 MiB y 20.000 líneas JSONL raw por turno. Los turnos de Claude con muchas herramientas pueden aumentarlos
|
||||
por backend con
|
||||
`agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawChars`
|
||||
y `maxTurnLines`; OpenClaw limita esos ajustes a 64 MiB y 100.000
|
||||
líneas.
|
||||
- Las sesiones de CLI almacenadas son continuidad propiedad del proveedor. El reinicio diario
|
||||
implícito de sesión no las corta; `/reset` y las políticas explícitas `session.reset` todavía
|
||||
- Las sesiones de CLI almacenadas son continuidad propiedad del proveedor. El reinicio diario implícito de sesión
|
||||
no las corta; `/reset` y las políticas explícitas `session.reset` todavía
|
||||
lo hacen.
|
||||
|
||||
Notas de serialización:
|
||||
|
||||
- `serialize: true` mantiene ordenadas las ejecuciones del mismo carril.
|
||||
- La mayoría de las CLI serializan en un carril de proveedor.
|
||||
- OpenClaw deja de reutilizar la sesión de CLI almacenada cuando cambia la identidad de autenticación seleccionada,
|
||||
incluido un cambio de id de perfil de autenticación, clave de API estática, token estático o identidad
|
||||
de cuenta OAuth cuando la CLI expone una. La rotación de tokens de acceso y actualización
|
||||
OAuth no corta la sesión de CLI almacenada. Si una CLI no expone un
|
||||
id estable de cuenta OAuth, OpenClaw deja que esa CLI aplique los permisos de reanudación.
|
||||
- OpenClaw descarta la reutilización de sesiones de CLI almacenadas cuando cambia la identidad de autenticación seleccionada,
|
||||
incluido un id de perfil de autenticación cambiado, API key estática, token estático o identidad de
|
||||
cuenta OAuth cuando la CLI expone una. La rotación de tokens OAuth de acceso y actualización
|
||||
no corta la sesión de CLI almacenada. Si una CLI no expone un id estable de cuenta
|
||||
OAuth, OpenClaw deja que esa CLI haga cumplir los permisos de reanudación.
|
||||
|
||||
## Preludio de respaldo desde sesiones claude-cli
|
||||
## Preludio de fallback desde sesiones claude-cli
|
||||
|
||||
Cuando un intento de `claude-cli` falla y pasa a un candidato que no es CLI en
|
||||
Cuando un intento de `claude-cli` conmuta por error a un candidato que no es CLI en
|
||||
[`agents.defaults.model.fallbacks`](/es/concepts/model-failover), OpenClaw siembra
|
||||
el siguiente intento con un preludio de contexto cosechado de la transcripción JSONL local
|
||||
de Claude Code en `~/.claude/projects/`. Sin esta semilla, el proveedor de respaldo
|
||||
empezaría en frío porque la propia transcripción de sesión de OpenClaw está vacía
|
||||
para las ejecuciones de `claude-cli`.
|
||||
el siguiente intento con un preludio de contexto obtenido de la transcripción JSONL local de Claude Code
|
||||
en `~/.claude/projects/`. Sin esta semilla, el proveedor de fallback
|
||||
comenzaría en frío porque la propia transcripción de sesión de OpenClaw está vacía
|
||||
para ejecuciones de `claude-cli`.
|
||||
|
||||
- El preludio prefiere el resumen `/compact` más reciente o el marcador `compact_boundary`,
|
||||
y luego anexa los turnos posteriores al límite más recientes hasta un presupuesto de caracteres.
|
||||
- El preludio prefiere el último resumen `/compact` o marcador `compact_boundary`,
|
||||
luego agrega los turnos posteriores al límite más recientes hasta un presupuesto de caracteres.
|
||||
Los turnos previos al límite se descartan porque el resumen ya los representa.
|
||||
- Los bloques de herramientas se fusionan en pistas compactas `(tool call: name)` y
|
||||
- Los bloques de herramientas se combinan en pistas compactas `(tool call: name)` y
|
||||
`(tool result: …)` para mantener honesto el presupuesto del prompt. El resumen se
|
||||
etiqueta como `(truncated)` si se desborda.
|
||||
- Los respaldos de `claude-cli` a `claude-cli` del mismo proveedor se basan en el propio
|
||||
- Los fallbacks de mismo proveedor de `claude-cli` a `claude-cli` dependen del propio
|
||||
`--resume` de Claude y omiten el preludio.
|
||||
- La semilla reutiliza la validación existente de rutas de archivos de sesión de Claude, por lo que
|
||||
- La semilla reutiliza la validación existente de la ruta del archivo de sesión de Claude, así que
|
||||
no se pueden leer rutas arbitrarias.
|
||||
|
||||
## Imágenes (paso directo)
|
||||
|
||||
Si tu CLI acepta rutas de imagen, configura `imageArg`:
|
||||
Si tu CLI acepta rutas de imagen, define `imageArg`:
|
||||
|
||||
```json5
|
||||
imageArg: "--image",
|
||||
imageMode: "repeat"
|
||||
```
|
||||
|
||||
OpenClaw escribirá imágenes base64 en archivos temporales. Si `imageArg` está configurado, esas
|
||||
rutas se pasan como argumentos de CLI. Si falta `imageArg`, OpenClaw anexa las
|
||||
rutas de archivo al prompt (inyección de ruta), lo que basta para CLI que cargan automáticamente
|
||||
archivos locales desde rutas en texto sin formato.
|
||||
OpenClaw escribirá imágenes base64 en archivos temporales. Si `imageArg` está definido, esas
|
||||
rutas se pasan como argumentos de CLI. Si falta `imageArg`, OpenClaw agrega las
|
||||
rutas de archivo al prompt (inyección de ruta), lo cual basta para CLI que cargan automáticamente
|
||||
archivos locales desde rutas en texto plano.
|
||||
|
||||
## Entradas / salidas
|
||||
|
||||
- `output: "json"` (predeterminado) intenta analizar JSON y extraer texto + id de sesión.
|
||||
- Para la salida JSON de Gemini CLI, OpenClaw lee el texto de respuesta desde `response` y
|
||||
- Para salida JSON de Gemini CLI, OpenClaw lee el texto de respuesta desde `response` y
|
||||
el uso desde `stats` cuando `usage` falta o está vacío.
|
||||
- `output: "jsonl"` analiza streams JSONL (por ejemplo, Codex CLI `--json`) y extrae el mensaje final del agente más identificadores
|
||||
de sesión cuando están presentes.
|
||||
- `output: "jsonl"` analiza streams JSONL (por ejemplo, Codex CLI `--json`) y extrae el mensaje final del agente más identificadores de sesión
|
||||
cuando están presentes.
|
||||
- `output: "text"` trata stdout como la respuesta final.
|
||||
|
||||
Modos de entrada:
|
||||
|
||||
- `input: "arg"` (predeterminado) pasa el prompt como el último argumento de CLI.
|
||||
- `input: "stdin"` envía el prompt mediante stdin.
|
||||
- Si el prompt es muy largo y `maxPromptArgChars` está configurado, se usa stdin.
|
||||
- `input: "stdin"` envía el prompt por stdin.
|
||||
- Si el prompt es muy largo y `maxPromptArgChars` está definido, se usa stdin.
|
||||
|
||||
## Valores predeterminados (propiedad del Plugin)
|
||||
|
||||
@ -314,27 +320,27 @@ Requisito previo: la Gemini CLI local debe estar instalada y disponible como
|
||||
`gemini` en `PATH` (`brew install gemini-cli` o
|
||||
`npm install -g @google/gemini-cli`).
|
||||
|
||||
Notas de JSON de Gemini CLI:
|
||||
Notas JSON de Gemini CLI:
|
||||
|
||||
- El texto de respuesta se lee desde el campo JSON `response`.
|
||||
- El uso recurre a `stats` cuando `usage` no existe o está vacío.
|
||||
- El texto de respuesta se lee del campo JSON `response`.
|
||||
- El uso recurre a `stats` cuando `usage` está ausente o vacío.
|
||||
- `stats.cached` se normaliza como `cacheRead` de OpenClaw.
|
||||
- Si falta `stats.input`, OpenClaw deriva los tokens de entrada de
|
||||
`stats.input_tokens - stats.cached`.
|
||||
|
||||
Anula solo si es necesario (común: ruta absoluta de `command`).
|
||||
Sobrescribe solo si es necesario (común: ruta absoluta de `command`).
|
||||
|
||||
## Valores predeterminados propiedad del Plugin
|
||||
|
||||
Los valores predeterminados de backend de CLI ahora forman parte de la superficie del Plugin:
|
||||
Los valores predeterminados del backend de CLI ahora forman parte de la superficie del Plugin:
|
||||
|
||||
- Los plugins los registran con `api.registerCliBackend(...)`.
|
||||
- Los Plugins los registran con `api.registerCliBackend(...)`.
|
||||
- El `id` del backend se convierte en el prefijo del proveedor en las referencias de modelo.
|
||||
- La configuración de usuario en `agents.defaults.cliBackends.<id>` sigue sobrescribiendo el valor predeterminado del plugin.
|
||||
- La limpieza de configuración específica del backend sigue siendo propiedad del plugin mediante el hook opcional
|
||||
- La configuración de usuario en `agents.defaults.cliBackends.<id>` todavía sobrescribe el valor predeterminado del Plugin.
|
||||
- La limpieza de configuración específica del backend sigue siendo propiedad del Plugin mediante el hook opcional
|
||||
`normalizeConfig`.
|
||||
|
||||
Los plugins que necesiten pequeños shims de compatibilidad de prompts/mensajes pueden declarar
|
||||
Los Plugins que necesiten pequeños adaptadores de compatibilidad de prompts/mensajes pueden declarar
|
||||
transformaciones de texto bidireccionales sin reemplazar un proveedor ni un backend de CLI:
|
||||
|
||||
```typescript
|
||||
@ -352,11 +358,11 @@ api.registerTextTransforms({
|
||||
});
|
||||
```
|
||||
|
||||
`input` reescribe el prompt del sistema y el prompt del usuario pasados a la CLI. `output`
|
||||
reescribe los deltas del asistente transmitidos y el texto final analizado antes de que OpenClaw gestione
|
||||
sus propios marcadores de control y la entrega al canal.
|
||||
`input` reescribe el prompt del sistema y el prompt del usuario que se pasan a la CLI. `output`
|
||||
reescribe los deltas transmitidos del asistente y el texto final analizado antes de que OpenClaw gestione
|
||||
sus propios marcadores de control y la entrega del canal.
|
||||
|
||||
Para las CLI que emiten JSONL compatible con Claude Code stream-json, establece
|
||||
Para las CLI que emiten JSONL compatible con Claude Code stream-json, configura
|
||||
`jsonlDialect: "claude-stream-json"` en la configuración de ese backend.
|
||||
|
||||
## Superposiciones MCP empaquetadas
|
||||
@ -368,47 +374,47 @@ Comportamiento empaquetado actual:
|
||||
|
||||
- `claude-cli`: archivo de configuración MCP estricto generado
|
||||
- `codex-cli`: sobrescrituras de configuración en línea para `mcp_servers`; el servidor
|
||||
local loopback generado de OpenClaw se marca con el modo de aprobación de herramientas por servidor de Codex
|
||||
para que las llamadas MCP no se queden bloqueadas en prompts de aprobación locales
|
||||
- `google-gemini-cli`: archivo de configuración del sistema de Gemini generado
|
||||
loopback generado de OpenClaw se marca con el modo de aprobación de herramientas por servidor de Codex
|
||||
para que las llamadas MCP no puedan bloquearse en prompts de aprobación locales
|
||||
- `google-gemini-cli`: archivo de configuración del sistema Gemini generado
|
||||
|
||||
Cuando el MCP empaquetado está habilitado, OpenClaw:
|
||||
Cuando MCP empaquetado está habilitado, OpenClaw:
|
||||
|
||||
- inicia un servidor HTTP MCP de loopback que expone herramientas de gateway al proceso de CLI
|
||||
- inicia un servidor HTTP MCP de loopback que expone herramientas de Gateway al proceso de la CLI
|
||||
- autentica el puente con un token por sesión (`OPENCLAW_MCP_TOKEN`)
|
||||
- limita el acceso a herramientas al contexto de la sesión, cuenta y canal actuales
|
||||
- carga los servidores bundle-MCP habilitados para el workspace actual
|
||||
- los combina con cualquier forma existente de configuración/ajustes MCP del backend
|
||||
- reescribe la configuración de lanzamiento usando el modo de integración propiedad del backend desde la extensión propietaria
|
||||
- limita el acceso a herramientas al contexto de la sesión, la cuenta y el canal actuales
|
||||
- carga los servidores bundle-MCP habilitados para el espacio de trabajo actual
|
||||
- los fusiona con cualquier forma de configuración/ajustes MCP existente del backend
|
||||
- reescribe la configuración de inicio usando el modo de integración propiedad del backend desde la extensión propietaria
|
||||
|
||||
Si no hay servidores MCP habilitados, OpenClaw igualmente inyecta una configuración estricta cuando un
|
||||
backend opta por el MCP empaquetado para que las ejecuciones en segundo plano permanezcan aisladas.
|
||||
backend opta por MCP empaquetado para que las ejecuciones en segundo plano permanezcan aisladas.
|
||||
|
||||
Los runtimes MCP empaquetados con alcance de sesión se almacenan en caché para reutilizarlos dentro de una sesión y luego
|
||||
se eliminan tras `mcp.sessionIdleTtlMs` milisegundos de inactividad (10
|
||||
minutos de forma predeterminada; establece `0` para deshabilitarlo). Las ejecuciones integradas de un solo uso, como sondeos de autenticación,
|
||||
generación de slugs y solicitudes de recuperación de Active Memory, limpian al final de la ejecución para que los procesos secundarios
|
||||
stdio y los streams HTTP/SSE transmisibles no sobrevivan a la ejecución.
|
||||
se eliminan después de `mcp.sessionIdleTtlMs` milisegundos de inactividad (predeterminado: 10
|
||||
minutos; configura `0` para deshabilitarlo). Las ejecuciones incrustadas de una sola vez, como comprobaciones de autenticación,
|
||||
generación de slugs y recuperación de Active Memory, solicitan limpieza al final de la ejecución para que los hijos stdio
|
||||
y los flujos Streamable HTTP/SSE no sobrevivan a la ejecución.
|
||||
|
||||
## Limitaciones
|
||||
|
||||
- **Sin llamadas directas a herramientas de OpenClaw.** OpenClaw no inyecta llamadas a herramientas en
|
||||
el protocolo del backend de CLI. Los backends solo ven herramientas de gateway cuando optan por
|
||||
el protocolo del backend de CLI. Los backends solo ven herramientas de Gateway cuando optan por
|
||||
`bundleMcp: true`.
|
||||
- **El streaming es específico del backend.** Algunos backends transmiten JSONL; otros almacenan en búfer
|
||||
hasta salir.
|
||||
- **Las salidas estructuradas** dependen del formato JSON de la CLI.
|
||||
- **Las sesiones de Codex CLI** se reanudan mediante salida de texto (sin JSONL), lo que es menos
|
||||
estructurado que la ejecución inicial con `--json`. Las sesiones de OpenClaw siguen funcionando
|
||||
con normalidad.
|
||||
normalmente.
|
||||
|
||||
## Solución de problemas
|
||||
|
||||
- **CLI no encontrada**: establece `command` en una ruta completa.
|
||||
- **No se encuentra la CLI**: configura `command` con una ruta completa.
|
||||
- **Nombre de modelo incorrecto**: usa `modelAliases` para asignar `provider/model` → modelo de CLI.
|
||||
- **Sin continuidad de sesión**: asegúrate de que `sessionArg` esté establecido y que `sessionMode` no sea
|
||||
`none` (Codex CLI actualmente no puede reanudar con salida JSON).
|
||||
- **Imágenes ignoradas**: establece `imageArg` (y verifica que la CLI admita rutas de archivo).
|
||||
- **Sin continuidad de sesión**: asegúrate de que `sessionArg` esté configurado y de que `sessionMode` no sea
|
||||
`none` (Codex CLI actualmente no puede reanudarse con salida JSON).
|
||||
- **Imágenes ignoradas**: configura `imageArg` (y verifica que la CLI admita rutas de archivo).
|
||||
|
||||
## Relacionado
|
||||
|
||||
|
||||
@ -1,29 +1,29 @@
|
||||
---
|
||||
read_when:
|
||||
- Ejecución de pruebas de humo de la matriz de modelos en vivo / backend de CLI / ACP / media-provider
|
||||
- Ejecución de pruebas de humo de la matriz de modelos en vivo / servidor de CLI / ACP / media-provider
|
||||
- Depuración de la resolución de credenciales de pruebas en vivo
|
||||
- Agregar una nueva prueba en vivo específica del proveedor
|
||||
sidebarTitle: Live tests
|
||||
summary: 'Pruebas en vivo (que interactúan con la red): matriz de modelos, backends de la CLI, ACP, proveedores de medios, credenciales'
|
||||
title: 'Pruebas: conjuntos de pruebas en vivo'
|
||||
summary: 'Pruebas en vivo (que acceden a la red): matriz de modelos, backends de CLI, ACP, proveedores de medios, credenciales'
|
||||
title: 'Pruebas: suites en vivo'
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T05:28:36Z"
|
||||
generated_at: "2026-05-04T18:24:00Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 4057d8875fa3404108e89e4381c1dd14e96abbc2af13c4934fc6c0dbf878fc00
|
||||
source_hash: 03b8ca6348137a55c8d5f67c9c166a130a75a744f6a433cb00496756b29d7016
|
||||
source_path: help/testing-live.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Para el inicio rápido, los ejecutores de QA, las suites unitarias/de integración y los flujos de Docker, consulta
|
||||
[Pruebas](/es/help/testing). Esta página cubre las suites de prueba **live** (que tocan la red):
|
||||
matriz de modelos, backends de CLI, ACP y pruebas live de proveedores de medios, además del
|
||||
Para inicio rápido, ejecutores de QA, suites unitarias/de integración y flujos de Docker, consulta
|
||||
[Pruebas](/es/help/testing). Esta página cubre las suites de pruebas **en vivo** (con acceso a red):
|
||||
matriz de modelos, backends de CLI, ACP y pruebas en vivo de proveedores de medios, además del
|
||||
manejo de credenciales.
|
||||
|
||||
## Live: comandos smoke de perfil local
|
||||
## En vivo: comandos smoke de perfil local
|
||||
|
||||
Carga `~/.profile` antes de las comprobaciones live ad hoc para que las claves de proveedor y las rutas de herramientas
|
||||
locales coincidan con tu shell:
|
||||
Carga `~/.profile` antes de las comprobaciones en vivo ad hoc para que las claves de proveedor y las rutas
|
||||
de herramientas locales coincidan con tu shell:
|
||||
|
||||
```bash
|
||||
source ~/.profile
|
||||
@ -37,102 +37,102 @@ pnpm openclaw infer tts convert --local --json \
|
||||
--output /tmp/openclaw-live-smoke.mp3
|
||||
```
|
||||
|
||||
Smoke seguro de preparación de llamada de voz:
|
||||
Smoke seguro de preparación para llamadas de voz:
|
||||
|
||||
```bash
|
||||
pnpm openclaw voicecall setup --json
|
||||
pnpm openclaw voicecall smoke --to "+15555550123"
|
||||
```
|
||||
|
||||
`voicecall smoke` es un ensayo en seco salvo que `--yes` también esté presente. Usa `--yes` solo
|
||||
cuando quieras intencionadamente realizar una llamada de notificación real. Para Twilio, Telnyx y
|
||||
Plivo, una comprobación de preparación correcta requiere una URL pública de webhook; las alternativas
|
||||
locales de solo loopback/privadas se rechazan por diseño.
|
||||
`voicecall smoke` es una ejecución de prueba salvo que también esté presente `--yes`. Usa `--yes` solo
|
||||
cuando quieras realizar intencionadamente una llamada de notificación real. Para Twilio, Telnyx y
|
||||
Plivo, una comprobación de preparación correcta requiere una URL de webhook pública; las alternativas de
|
||||
respaldo de solo local loopback/privadas se rechazan por diseño.
|
||||
|
||||
## Live: barrido de capacidades de nodo Android
|
||||
## En vivo: barrido de capacidades de Node Android
|
||||
|
||||
- Prueba: `src/gateway/android-node.capabilities.live.test.ts`
|
||||
- Script: `pnpm android:test:integration`
|
||||
- Objetivo: invocar **cada comando anunciado actualmente** por un nodo Android conectado y verificar el comportamiento del contrato de comandos.
|
||||
- Objetivo: invocar **cada comando anunciado actualmente** por un Node Android conectado y comprobar el comportamiento del contrato de comandos.
|
||||
- Alcance:
|
||||
- Configuración previa/manual (la suite no instala/ejecuta/empareja la aplicación).
|
||||
- Validación comando por comando de `node.invoke` del gateway para el nodo Android seleccionado.
|
||||
- Preconfiguración requerida:
|
||||
- Aplicación Android ya conectada y emparejada con el gateway.
|
||||
- Aplicación mantenida en primer plano.
|
||||
- Configuración previa/manual requerida (la suite no instala/ejecuta/empareja la app).
|
||||
- Validación comando por comando de `node.invoke` del Gateway para el Node Android seleccionado.
|
||||
- Configuración previa requerida:
|
||||
- App Android ya conectada y emparejada con el Gateway.
|
||||
- App mantenida en primer plano.
|
||||
- Permisos/consentimiento de captura concedidos para las capacidades que esperas que pasen.
|
||||
- Sobrescrituras de destino opcionales:
|
||||
- Sobrescrituras opcionales de destino:
|
||||
- `OPENCLAW_ANDROID_NODE_ID` u `OPENCLAW_ANDROID_NODE_NAME`.
|
||||
- `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`.
|
||||
- Detalles completos de configuración de Android: [Aplicación Android](/es/platforms/android)
|
||||
- Detalles completos de configuración de Android: [App Android](/es/platforms/android)
|
||||
|
||||
## Live: smoke de modelos (claves de perfil)
|
||||
## En vivo: smoke de modelos (claves de perfil)
|
||||
|
||||
Las pruebas live se dividen en dos capas para poder aislar fallos:
|
||||
Las pruebas en vivo se dividen en dos capas para poder aislar fallos:
|
||||
|
||||
- “Modelo directo” indica si el proveedor/modelo puede responder con la clave dada.
|
||||
- “Smoke de Gateway” indica si toda la canalización gateway+agente funciona para ese modelo (sesiones, historial, herramientas, política de sandbox, etc.).
|
||||
- “Modelo directo” nos indica que el proveedor/modelo puede responder con la clave dada.
|
||||
- “Smoke de Gateway” nos indica que toda la canalización gateway+agente funciona para ese modelo (sesiones, historial, herramientas, política de sandbox, etc.).
|
||||
|
||||
### Capa 1: finalización directa de modelo (sin gateway)
|
||||
### Capa 1: finalización directa de modelo (sin Gateway)
|
||||
|
||||
- Prueba: `src/agents/models.profiles.live.test.ts`
|
||||
- Objetivo:
|
||||
- Enumerar los modelos descubiertos
|
||||
- Enumerar modelos descubiertos
|
||||
- Usar `getApiKeyForModel` para seleccionar modelos para los que tienes credenciales
|
||||
- Ejecutar una finalización pequeña por modelo (y regresiones dirigidas cuando sea necesario)
|
||||
- Cómo habilitar:
|
||||
- `pnpm test:live` (o `OPENCLAW_LIVE_TEST=1` si invocas Vitest directamente)
|
||||
- Define `OPENCLAW_LIVE_MODELS=modern` (o `all`, alias de modern) para ejecutar realmente esta suite; de lo contrario se omite para mantener `pnpm test:live` enfocado en el smoke de gateway
|
||||
- Define `OPENCLAW_LIVE_MODELS=modern` (o `all`, alias de modern) para ejecutar realmente esta suite; de lo contrario se omite para mantener `pnpm test:live` centrado en el smoke de Gateway
|
||||
- Cómo seleccionar modelos:
|
||||
- `OPENCLAW_LIVE_MODELS=modern` para ejecutar la lista permitida moderna (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
|
||||
- `OPENCLAW_LIVE_MODELS=all` es un alias de la lista permitida moderna
|
||||
- o `OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."` (lista permitida separada por comas)
|
||||
- Los barridos modern/all usan por defecto un límite seleccionado de alta señal; define `OPENCLAW_LIVE_MAX_MODELS=0` para un barrido moderno exhaustivo o un número positivo para un límite menor.
|
||||
- Los barridos exhaustivos usan `OPENCLAW_LIVE_TEST_TIMEOUT_MS` para el tiempo de espera completo de la prueba de modelo directo. Predeterminado: 60 minutos.
|
||||
- Los barridos modern/all usan de forma predeterminada un límite curado de alta señal; define `OPENCLAW_LIVE_MAX_MODELS=0` para un barrido moderno exhaustivo o un número positivo para un límite menor.
|
||||
- Los barridos exhaustivos usan `OPENCLAW_LIVE_TEST_TIMEOUT_MS` para el tiempo de espera de toda la prueba de modelo directo. Predeterminado: 60 minutos.
|
||||
- Las sondas de modelo directo se ejecutan con paralelismo de 20 vías de forma predeterminada; define `OPENCLAW_LIVE_MODEL_CONCURRENCY` para sobrescribirlo.
|
||||
- Cómo seleccionar proveedores:
|
||||
- `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (lista permitida separada por comas)
|
||||
- De dónde vienen las claves:
|
||||
- De forma predeterminada: almacén de perfiles y alternativas de entorno
|
||||
- Define `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` para exigir solo **almacén de perfiles**
|
||||
- De forma predeterminada: almacén de perfiles y alternativas de respaldo de entorno
|
||||
- Define `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` para exigir solo el **almacén de perfiles**
|
||||
- Por qué existe:
|
||||
- Separa “la API del proveedor está rota / la clave no es válida” de “la canalización de agente de gateway está rota”
|
||||
- Contiene regresiones pequeñas y aisladas (ejemplo: reproducción de razonamiento de OpenAI Responses/Codex Responses + flujos de llamadas de herramientas)
|
||||
- Separa “la API del proveedor está rota / la clave no es válida” de “la canalización del agente Gateway está rota”
|
||||
- Contiene regresiones pequeñas y aisladas (ejemplo: reproducción de razonamiento de OpenAI Responses/Codex Responses + flujos de llamadas a herramientas)
|
||||
|
||||
### Capa 2: smoke de Gateway + agente de desarrollo (lo que "@openclaw" hace realmente)
|
||||
### Capa 2: smoke de Gateway + agente dev (lo que realmente hace "@openclaw")
|
||||
|
||||
- Prueba: `src/gateway/gateway-models.profiles.live.test.ts`
|
||||
- Objetivo:
|
||||
- Iniciar un gateway en proceso
|
||||
- Iniciar un Gateway en proceso
|
||||
- Crear/parchear una sesión `agent:dev:*` (sobrescritura de modelo por ejecución)
|
||||
- Iterar modelos con claves y verificar:
|
||||
- Iterar por modelos con claves y comprobar:
|
||||
- respuesta “significativa” (sin herramientas)
|
||||
- funciona una invocación de herramienta real (sonda de lectura)
|
||||
- sondas de herramienta adicionales opcionales (sonda exec+read)
|
||||
- las rutas de regresión de OpenAI (solo llamada de herramienta → seguimiento) siguen funcionando
|
||||
- Detalles de sondas (para poder explicar fallos rápidamente):
|
||||
- sonda `read`: la prueba escribe un archivo con nonce en el espacio de trabajo y pide al agente que lo lea con `read` y devuelva el nonce.
|
||||
- sonda `exec+read`: la prueba pide al agente que escriba con `exec` un nonce en un archivo temporal y luego lo lea con `read`.
|
||||
- sonda de imagen: la prueba adjunta un PNG generado (gato + código aleatorio) y espera que el modelo devuelva `cat <CODE>`.
|
||||
- una invocación real de herramienta funciona (sonda de lectura)
|
||||
- sondas de herramientas extra opcionales (sonda exec+read)
|
||||
- las rutas de regresión de OpenAI (solo llamada a herramienta → seguimiento) siguen funcionando
|
||||
- Detalles de sondas (para que puedas explicar fallos rápidamente):
|
||||
- Sonda `read`: la prueba escribe un archivo con nonce en el workspace y pide al agente que lo lea con `read` y devuelva el nonce.
|
||||
- Sonda `exec+read`: la prueba pide al agente que escriba con `exec` un nonce en un archivo temporal y luego lo lea con `read`.
|
||||
- Sonda de imagen: la prueba adjunta un PNG generado (gato + código aleatorio) y espera que el modelo devuelva `cat <CODE>`.
|
||||
- Referencia de implementación: `src/gateway/gateway-models.profiles.live.test.ts` y `src/gateway/live-image-probe.ts`.
|
||||
- Cómo habilitar:
|
||||
- `pnpm test:live` (o `OPENCLAW_LIVE_TEST=1` si invocas Vitest directamente)
|
||||
- Cómo seleccionar modelos:
|
||||
- Predeterminado: lista permitida moderna (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` es un alias de la lista permitida moderna
|
||||
- O define `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (o lista separada por comas) para acotar
|
||||
- Los barridos de gateway modern/all usan por defecto un límite seleccionado de alta señal; define `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` para un barrido moderno exhaustivo o un número positivo para un límite menor.
|
||||
- Cómo seleccionar proveedores (evitar “todo OpenRouter”):
|
||||
- O define `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (o una lista separada por comas) para acotar
|
||||
- Los barridos de Gateway modern/all usan de forma predeterminada un límite curado de alta señal; define `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` para un barrido moderno exhaustivo o un número positivo para un límite menor.
|
||||
- Cómo seleccionar proveedores (evita “todo OpenRouter”):
|
||||
- `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (lista permitida separada por comas)
|
||||
- Las sondas de herramientas + imagen siempre están activadas en esta prueba live:
|
||||
- sonda `read` + sonda `exec+read` (estrés de herramientas)
|
||||
- la sonda de imagen se ejecuta cuando el modelo anuncia soporte para entrada de imágenes
|
||||
- Las sondas de herramientas + imagen siempre están activadas en esta prueba en vivo:
|
||||
- Sonda `read` + sonda `exec+read` (estrés de herramientas)
|
||||
- La sonda de imagen se ejecuta cuando el modelo anuncia compatibilidad con entrada de imagen
|
||||
- Flujo (alto nivel):
|
||||
- La prueba genera un PNG pequeño con “CAT” + código aleatorio (`src/gateway/live-image-probe.ts`)
|
||||
- Lo envía mediante `agent` `attachments: [{ mimeType: "image/png", content: "<base64>" }]`
|
||||
- Gateway analiza adjuntos en `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
|
||||
- El agente integrado reenvía al modelo un mensaje de usuario multimodal
|
||||
- Verificación: la respuesta contiene `cat` + el código (tolerancia OCR: se permiten errores menores)
|
||||
- Gateway analiza los adjuntos en `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
|
||||
- El agente incrustado reenvía un mensaje de usuario multimodal al modelo
|
||||
- Comprobación: la respuesta contiene `cat` + el código (tolerancia OCR: se permiten errores menores)
|
||||
|
||||
<Tip>
|
||||
Para ver qué puedes probar en tu máquina (y los ids exactos `provider/model`), ejecuta:
|
||||
@ -144,27 +144,27 @@ openclaw models list --json
|
||||
|
||||
</Tip>
|
||||
|
||||
## Live: smoke de backend CLI (Claude, Codex, Gemini u otras CLI locales)
|
||||
## En vivo: smoke de backend CLI (Claude, Codex, Gemini u otras CLI locales)
|
||||
|
||||
- Prueba: `src/gateway/gateway-cli-backend.live.test.ts`
|
||||
- Objetivo: validar la canalización Gateway + agente usando un backend CLI local, sin tocar tu configuración predeterminada.
|
||||
- Los valores predeterminados de smoke específicos del backend viven con la definición `cli-backend.ts` del plugin propietario.
|
||||
- Objetivo: validar la canalización Gateway + agente usando un backend de CLI local, sin tocar tu configuración predeterminada.
|
||||
- Los valores predeterminados de smoke específicos de backend viven con la definición `cli-backend.ts` del plugin propietario.
|
||||
- Habilitar:
|
||||
- `pnpm test:live` (o `OPENCLAW_LIVE_TEST=1` si invocas Vitest directamente)
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND=1`
|
||||
- Valores predeterminados:
|
||||
- Proveedor/modelo predeterminado: `claude-cli/claude-sonnet-4-6`
|
||||
- El comportamiento de comando/args/imagen proviene de los metadatos del plugin de backend CLI propietario.
|
||||
- El comportamiento de comando/args/imagen viene de los metadatos del plugin de backend CLI propietario.
|
||||
- Sobrescrituras (opcionales):
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` para enviar un adjunto de imagen real (las rutas se inyectan en el prompt). Las recetas de Docker lo desactivan de forma predeterminada salvo que se solicite explícitamente.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` para pasar rutas de archivo de imagen como args de CLI en lugar de inyectarlas en el prompt.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` para pasar rutas de archivo de imagen como args de CLI en lugar de inyección en el prompt.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (o `"list"`) para controlar cómo se pasan los args de imagen cuando `IMAGE_ARG` está definido.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1` para enviar un segundo turno y validar el flujo de reanudación.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1` para optar por la sonda de continuidad en la misma sesión Claude Sonnet -> Opus cuando el modelo seleccionado admite un destino de cambio. Las recetas de Docker lo desactivan de forma predeterminada para la fiabilidad agregada.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` para optar por la sonda de MCP/herramienta de loopback. Las recetas de Docker lo desactivan de forma predeterminada salvo que se solicite explícitamente.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` para optar por la sonda de loopback MCP/herramienta. Las recetas de Docker lo desactivan de forma predeterminada salvo que se solicite explícitamente.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
@ -174,16 +174,16 @@ OPENCLAW_LIVE_CLI_BACKEND=1 \
|
||||
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
|
||||
```
|
||||
|
||||
Smoke económico de configuración MCP de Gemini:
|
||||
Smoke barato de configuración MCP de Gemini:
|
||||
|
||||
```bash
|
||||
OPENCLAW_LIVE_TEST=1 \
|
||||
pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts
|
||||
```
|
||||
|
||||
Esto no pide a Gemini que genere una respuesta. Escribe la misma configuración de sistema
|
||||
que OpenClaw le da a Gemini, luego ejecuta `gemini --debug mcp list` para demostrar que un
|
||||
servidor `transport: "streamable-http"` guardado se normaliza a la forma HTTP MCP de Gemini
|
||||
Esto no pide a Gemini que genere una respuesta. Escribe la misma configuración del sistema
|
||||
que OpenClaw da a Gemini y luego ejecuta `gemini --debug mcp list` para demostrar que un
|
||||
servidor `transport: "streamable-http"` guardado se normaliza a la forma MCP HTTP de Gemini
|
||||
y puede conectarse a un servidor MCP streamable-HTTP local.
|
||||
|
||||
Receta de Docker:
|
||||
@ -192,7 +192,7 @@ Receta de Docker:
|
||||
pnpm test:docker:live-cli-backend
|
||||
```
|
||||
|
||||
Recetas de Docker de proveedor único:
|
||||
Recetas de Docker de un solo proveedor:
|
||||
|
||||
```bash
|
||||
pnpm test:docker:live-cli-backend:claude
|
||||
@ -204,18 +204,27 @@ pnpm test:docker:live-cli-backend:gemini
|
||||
Notas:
|
||||
|
||||
- El ejecutor de Docker vive en `scripts/test-live-cli-backend-docker.sh`.
|
||||
- Ejecuta el smoke live de backend CLI dentro de la imagen Docker del repo como el usuario no root `node`.
|
||||
- Resuelve metadatos de smoke de CLI desde el plugin propietario y luego instala el paquete CLI de Linux correspondiente (`@anthropic-ai/claude-code`, `@openai/codex` o `@google/gemini-cli`) en un prefijo escribible en caché en `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (predeterminado: `~/.cache/openclaw/docker-cli-tools`).
|
||||
- `pnpm test:docker:live-cli-backend:claude-subscription` requiere OAuth portátil de suscripción de Claude Code mediante `~/.claude/.credentials.json` con `claudeAiOauth.subscriptionType` o `CLAUDE_CODE_OAUTH_TOKEN` de `claude setup-token`. Primero demuestra `claude -p` directo en Docker y luego ejecuta dos turnos de backend CLI de Gateway sin preservar variables de entorno de clave de API de Anthropic. Este carril de suscripción desactiva por defecto las sondas de MCP/herramienta e imagen de Claude porque Claude actualmente enruta el uso de aplicaciones de terceros mediante facturación por uso adicional en lugar de los límites normales del plan de suscripción.
|
||||
- El smoke live de backend CLI ahora ejercita el mismo flujo de extremo a extremo para Claude, Codex y Gemini: turno de texto, turno de clasificación de imagen y luego llamada de herramienta MCP `cron` verificada mediante la CLI de gateway.
|
||||
- El smoke predeterminado de Claude también parchea la sesión de Sonnet a Opus y verifica que la sesión reanudada todavía recuerda una nota anterior.
|
||||
- Ejecuta el smoke en vivo de backend CLI dentro de la imagen Docker del repo como el usuario no root `node`.
|
||||
- Resuelve los metadatos de smoke de CLI desde el plugin propietario y luego instala el paquete CLI de Linux correspondiente (`@anthropic-ai/claude-code`, `@openai/codex` o `@google/gemini-cli`) en un prefijo escribible en caché en `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (predeterminado: `~/.cache/openclaw/docker-cli-tools`).
|
||||
- `pnpm test:docker:live-cli-backend:claude-subscription` requiere OAuth portable de suscripción de Claude Code mediante `~/.claude/.credentials.json` con `claudeAiOauth.subscriptionType` o `CLAUDE_CODE_OAUTH_TOKEN` de `claude setup-token`. Primero demuestra `claude -p` directo en Docker y luego ejecuta dos turnos de backend CLI de Gateway sin conservar variables de entorno de clave API de Anthropic. Esta vía de suscripción desactiva por defecto las sondas MCP/herramienta e imagen de Claude porque Claude actualmente enruta el uso de apps de terceros mediante facturación de uso extra en lugar de los límites normales del plan de suscripción.
|
||||
- El smoke en vivo de backend CLI ahora ejercita el mismo flujo de extremo a extremo para Claude, Codex y Gemini: turno de texto, turno de clasificación de imagen y luego llamada a herramienta MCP `cron` verificada a través de la CLI de Gateway.
|
||||
- El smoke predeterminado de Claude también parchea la sesión de Sonnet a Opus y verifica que la sesión reanudada aún recuerde una nota anterior.
|
||||
|
||||
## Live: smoke de enlace ACP (`/acp spawn ... --bind here`)
|
||||
## En vivo: alcanzabilidad del proxy HTTP/2 de APNs
|
||||
|
||||
- Prueba: `src/infra/push-apns-http2.live.test.ts`
|
||||
- Objetivo: tunelizar a través de un proxy HTTP CONNECT local hacia el endpoint APNs sandbox de Apple, enviar la solicitud de validación HTTP/2 de APNs y comprobar que la respuesta real `403 InvalidProviderToken` de Apple vuelve por la ruta del proxy.
|
||||
- Habilitar:
|
||||
- `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts`
|
||||
- Tiempo de espera opcional:
|
||||
- `OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000`
|
||||
|
||||
## En vivo: smoke de bind ACP (`/acp spawn ... --bind here`)
|
||||
|
||||
- Prueba: `src/gateway/gateway-acp-bind.live.test.ts`
|
||||
- Objetivo: validar el flujo real de vinculación de conversación ACP con un agente ACP en vivo:
|
||||
- enviar `/acp spawn <agent> --bind here`
|
||||
- vincular en el lugar una conversación sintética de canal de mensajes
|
||||
- vincular en su lugar una conversación sintética de canal de mensajes
|
||||
- enviar un seguimiento normal en esa misma conversación
|
||||
- verificar que el seguimiento llegue a la transcripción de la sesión ACP vinculada
|
||||
- Habilitar:
|
||||
@ -224,9 +233,9 @@ Notas:
|
||||
- Valores predeterminados:
|
||||
- Agentes ACP en Docker: `claude,codex,gemini`
|
||||
- Agente ACP para `pnpm test:live ...` directo: `claude`
|
||||
- Canal sintético: contexto de conversación estilo Slack DM
|
||||
- Canal sintético: contexto de conversación estilo DM de Slack
|
||||
- Backend ACP: `acpx`
|
||||
- Sobrescrituras:
|
||||
- Sustituciones:
|
||||
- `OPENCLAW_LIVE_ACP_BIND_AGENT=claude`
|
||||
- `OPENCLAW_LIVE_ACP_BIND_AGENT=codex`
|
||||
- `OPENCLAW_LIVE_ACP_BIND_AGENT=droid`
|
||||
@ -240,9 +249,9 @@ Notas:
|
||||
- `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`
|
||||
- `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5`
|
||||
- Notas:
|
||||
- Este carril usa la superficie `chat.send` del gateway con campos de ruta de origen sintética solo para administración, para que las pruebas puedan adjuntar contexto de canal de mensajes sin fingir una entrega externa.
|
||||
- Cuando `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` no está definido, la prueba usa el registro de agentes integrado del Plugin `acpx` embebido para el agente de arnés ACP seleccionado.
|
||||
- La creación de MCP de Cron de sesión vinculada es de mejor esfuerzo de forma predeterminada porque los arneses ACP externos pueden cancelar llamadas MCP después de que la prueba de vinculación/imagen haya pasado; establece `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1` para hacer estricta esa sonda de Cron posterior a la vinculación.
|
||||
- Esta vía usa la superficie `chat.send` del Gateway con campos de ruta de origen sintética solo para administradores, de modo que las pruebas puedan adjuntar contexto de canal de mensajes sin fingir una entrega externa.
|
||||
- Cuando `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` no está definido, la prueba usa el registro de agentes integrado del Plugin `acpx` incorporado para el agente de arnés ACP seleccionado.
|
||||
- La creación de MCP Cron de sesión vinculada es de mejor esfuerzo de forma predeterminada porque los arneses ACP externos pueden cancelar llamadas MCP después de que la prueba de vinculación/imagen haya pasado; define `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1` para hacer estricta esa comprobación Cron posterior a la vinculación.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
@ -258,7 +267,7 @@ Receta de Docker:
|
||||
pnpm test:docker:live-acp-bind
|
||||
```
|
||||
|
||||
Recetas Docker de un solo agente:
|
||||
Recetas de Docker para un solo agente:
|
||||
|
||||
```bash
|
||||
pnpm test:docker:live-acp-bind:claude
|
||||
@ -270,38 +279,32 @@ pnpm test:docker:live-acp-bind:opencode
|
||||
|
||||
Notas de Docker:
|
||||
|
||||
- El ejecutor Docker está en `scripts/test-live-acp-bind-docker.sh`.
|
||||
- El ejecutor de Docker está en `scripts/test-live-acp-bind-docker.sh`.
|
||||
- De forma predeterminada, ejecuta el smoke de vinculación ACP contra los agentes CLI en vivo agregados en secuencia: `claude`, `codex` y luego `gemini`.
|
||||
- Usa `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=droid`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` u `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode` para acotar la matriz.
|
||||
- Carga `~/.profile`, prepara el material de autenticación CLI correspondiente dentro del contenedor y luego instala la CLI en vivo solicitada (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid mediante `https://app.factory.ai/cli`, `@google/gemini-cli` u `opencode-ai`) si falta. El backend ACP en sí es el paquete `acpx/runtime` embebido del Plugin oficial `acpx`.
|
||||
- La variante Docker de Droid prepara `~/.factory` para la configuración, reenvía `FACTORY_API_KEY` y requiere esa clave API porque la autenticación local de Factory OAuth/keyring no es portable al contenedor. Usa la entrada de registro integrada de ACPX `droid exec --output-format acp`.
|
||||
- La variante Docker de OpenCode es un carril de regresión estricto de un solo agente. Escribe un modelo predeterminado temporal `OPENCODE_CONFIG_CONTENT` desde `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (predeterminado `opencode/kimi-k2.6`) después de cargar `~/.profile`, y `pnpm test:docker:live-acp-bind:opencode` requiere una transcripción de asistente vinculada en lugar de aceptar la omisión genérica posterior a la vinculación.
|
||||
- Las llamadas directas a la CLI `acpx` son solo una ruta manual/de solución alternativa para comparar comportamiento fuera del Gateway. El smoke Docker de vinculación ACP ejercita el backend de runtime `acpx` embebido de OpenClaw.
|
||||
- Carga `~/.profile`, prepara el material de autenticación CLI correspondiente en el contenedor y luego instala la CLI en vivo solicitada (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid mediante `https://app.factory.ai/cli`, `@google/gemini-cli` u `opencode-ai`) si falta. El backend ACP en sí es el paquete `acpx/runtime` incorporado desde el Plugin oficial `acpx`.
|
||||
- La variante de Docker Droid prepara `~/.factory` para la configuración, reenvía `FACTORY_API_KEY` y requiere esa clave de API porque la autenticación local de Factory OAuth/keyring no es portable al contenedor. Usa la entrada de registro integrada de ACPX `droid exec --output-format acp`.
|
||||
- La variante de Docker OpenCode es una vía de regresión estricta de un solo agente. Escribe un modelo predeterminado temporal `OPENCODE_CONFIG_CONTENT` desde `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (predeterminado `opencode/kimi-k2.6`) después de cargar `~/.profile`, y `pnpm test:docker:live-acp-bind:opencode` requiere una transcripción de asistente vinculada en lugar de aceptar el salto genérico posterior a la vinculación.
|
||||
- Las llamadas directas a la CLI `acpx` son solo una ruta manual/de solución alternativa para comparar el comportamiento fuera del Gateway. El smoke de vinculación ACP de Docker ejercita el backend de runtime `acpx` incorporado de OpenClaw.
|
||||
|
||||
## En vivo: smoke del arnés de servidor de aplicación de Codex
|
||||
## En vivo: smoke del arnés de servidor de aplicaciones Codex
|
||||
|
||||
- Objetivo: validar el arnés Codex propiedad del Plugin a través del método normal
|
||||
`agent` del gateway:
|
||||
- cargar el Plugin incluido `codex`
|
||||
- Objetivo: validar el arnés Codex propiedad del Plugin mediante el método normal
|
||||
`agent` del Gateway:
|
||||
- cargar el Plugin `codex` incluido
|
||||
- seleccionar `OPENCLAW_AGENT_RUNTIME=codex`
|
||||
- enviar un primer turno de agente del gateway a `openai/gpt-5.5` con el arnés Codex forzado
|
||||
- enviar un segundo turno a la misma sesión de OpenClaw y verificar que el hilo del servidor de aplicación
|
||||
pueda reanudarse
|
||||
- ejecutar `/codex status` y `/codex models` a través de la misma ruta de comandos del gateway
|
||||
- opcionalmente ejecutar dos sondas de shell escaladas revisadas por Guardian: un comando benigno
|
||||
que debería aprobarse y una carga de secreto falso que debería denegarse para que el agente
|
||||
responda con una pregunta
|
||||
- enviar un primer turno de agente de Gateway a `openai/gpt-5.5` con el arnés Codex forzado
|
||||
- enviar un segundo turno a la misma sesión de OpenClaw y verificar que el hilo de servidor de aplicaciones pueda reanudarse
|
||||
- ejecutar `/codex status` y `/codex models` mediante la misma ruta de comandos del Gateway
|
||||
- opcionalmente ejecutar dos comprobaciones de shell escaladas revisadas por Guardian: un comando benigno que debería aprobarse y una carga de secreto falso que debería denegarse para que el agente vuelva a preguntar
|
||||
- Prueba: `src/gateway/gateway-codex-harness.live.test.ts`
|
||||
- Habilitar: `OPENCLAW_LIVE_CODEX_HARNESS=1`
|
||||
- Modelo predeterminado: `openai/gpt-5.5`
|
||||
- Sonda de imagen opcional: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
|
||||
- Sonda MCP/herramienta opcional: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
|
||||
- Sonda Guardian opcional: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
|
||||
- El smoke usa `agentRuntime.id: "codex"` para que un arnés Codex roto no pueda
|
||||
pasar al recurrir silenciosamente a PI.
|
||||
- Autenticación: autenticación de servidor de aplicación de Codex desde el inicio de sesión local de suscripción a Codex. Los
|
||||
smokes de Docker también pueden proporcionar `OPENAI_API_KEY` para sondas no Codex cuando corresponda,
|
||||
además de `~/.codex/auth.json` y `~/.codex/config.toml` copiados opcionalmente.
|
||||
- Comprobación opcional de imagen: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
|
||||
- Comprobación opcional de MCP/herramienta: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
|
||||
- Comprobación opcional de Guardian: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
|
||||
- El smoke usa `agentRuntime.id: "codex"` para que un arnés Codex roto no pueda pasar al volver silenciosamente a PI.
|
||||
- Autenticación: autenticación de servidor de aplicaciones Codex desde el inicio de sesión de suscripción local de Codex. Los smokes de Docker también pueden proporcionar `OPENAI_API_KEY` para comprobaciones que no sean Codex cuando corresponda, además de `~/.codex/auth.json` y `~/.codex/config.toml` copiados opcionales.
|
||||
|
||||
Receta local:
|
||||
|
||||
@ -324,58 +327,52 @@ pnpm test:docker:live-codex-harness
|
||||
|
||||
Notas de Docker:
|
||||
|
||||
- El ejecutor Docker está en `scripts/test-live-codex-harness-docker.sh`.
|
||||
- Carga el `~/.profile` montado, pasa `OPENAI_API_KEY`, copia los archivos de autenticación de la CLI de Codex
|
||||
cuando están presentes, instala `@openai/codex` en un prefijo npm montado escribible,
|
||||
prepara el árbol de código fuente y luego ejecuta solo la prueba en vivo del arnés Codex.
|
||||
- Docker habilita las sondas de imagen, MCP/herramienta y Guardian de forma predeterminada. Establece
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` o
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` o
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0` cuando necesites una ejecución de depuración más acotada.
|
||||
- Docker usa la misma configuración explícita de runtime de Codex, por lo que los alias heredados o el
|
||||
fallback de PI no pueden ocultar una regresión del arnés Codex.
|
||||
- El ejecutor de Docker está en `scripts/test-live-codex-harness-docker.sh`.
|
||||
- Carga el `~/.profile` montado, pasa `OPENAI_API_KEY`, copia los archivos de autenticación de la CLI Codex cuando están presentes, instala `@openai/codex` en un prefijo npm montado con permisos de escritura, prepara el árbol de código fuente y luego ejecuta solo la prueba en vivo del arnés Codex.
|
||||
- Docker habilita las comprobaciones de imagen, MCP/herramienta y Guardian de forma predeterminada. Define `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0`, `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` u `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0` cuando necesites una ejecución de depuración más acotada.
|
||||
- Docker usa la misma configuración explícita de runtime Codex, por lo que los alias heredados o la reserva a PI no pueden ocultar una regresión del arnés Codex.
|
||||
|
||||
### Recetas en vivo recomendadas
|
||||
|
||||
Las listas de permitidos acotadas y explícitas son las más rápidas y menos inestables:
|
||||
|
||||
- Un solo modelo, directo (sin gateway):
|
||||
- Un solo modelo, directo (sin Gateway):
|
||||
- `OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts`
|
||||
|
||||
- Un solo modelo, smoke de gateway:
|
||||
- Un solo modelo, smoke de Gateway:
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
- Llamadas a herramientas entre varios proveedores:
|
||||
- Llamadas a herramientas en varios proveedores:
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
- Enfoque en Google (clave API de Gemini + Antigravity):
|
||||
- Gemini (clave API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
- Enfoque en Google (clave de API de Gemini + Antigravity):
|
||||
- Gemini (clave de API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
- Antigravity (OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
- Smoke de razonamiento adaptativo de Google:
|
||||
- Si las claves locales están en el perfil del shell: `source ~/.profile`
|
||||
- Smoke de pensamiento adaptativo de Google:
|
||||
- Si las claves locales están en el perfil de shell: `source ~/.profile`
|
||||
- Valor predeterminado dinámico de Gemini 3: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000`
|
||||
- Presupuesto dinámico de Gemini 2.5: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000`
|
||||
|
||||
Notas:
|
||||
|
||||
- `google/...` usa la API de Gemini (clave API).
|
||||
- `google/...` usa la API de Gemini (clave de API).
|
||||
- `google-antigravity/...` usa el puente OAuth de Antigravity (endpoint de agente estilo Cloud Code Assist).
|
||||
- `google-gemini-cli/...` usa la CLI local de Gemini en tu máquina (autenticación separada + particularidades de herramientas).
|
||||
- API de Gemini frente a CLI de Gemini:
|
||||
- API: OpenClaw llama a la API alojada de Gemini de Google por HTTP (clave API / autenticación de perfil); esto es lo que la mayoría de usuarios quiere decir con “Gemini”.
|
||||
- CLI: OpenClaw invoca un binario local `gemini`; tiene su propia autenticación y puede comportarse de forma diferente (streaming/soporte de herramientas/desfase de versiones).
|
||||
- API: OpenClaw llama a la API Gemini alojada de Google por HTTP (clave de API / autenticación de perfil); esto es lo que la mayoría de los usuarios quiere decir con “Gemini”.
|
||||
- CLI: OpenClaw invoca un binario local `gemini` mediante shell; tiene su propia autenticación y puede comportarse de forma distinta (streaming/soporte de herramientas/desfase de versiones).
|
||||
|
||||
## En vivo: matriz de modelos (lo que cubrimos)
|
||||
|
||||
No hay una “lista de modelos de CI” fija (en vivo es opt-in), pero estos son los modelos **recomendados** para cubrir regularmente en una máquina de desarrollo con claves.
|
||||
No hay una “lista de modelos de CI” fija (en vivo es opcional), pero estos son los modelos **recomendados** para cubrir regularmente en una máquina de desarrollo con claves.
|
||||
|
||||
### Conjunto de smoke moderno (llamadas a herramientas + imagen)
|
||||
|
||||
Esta es la ejecución de “modelos comunes” que esperamos mantener funcionando:
|
||||
|
||||
- OpenAI (no Codex): `openai/gpt-5.5`
|
||||
- OAuth de OpenAI Codex: `openai-codex/gpt-5.5`
|
||||
- OpenAI Codex OAuth: `openai-codex/gpt-5.5`
|
||||
- Anthropic: `anthropic/claude-opus-4-6` (o `anthropic/claude-sonnet-4-6`)
|
||||
- Google (API de Gemini): `google/gemini-3.1-pro-preview` y `google/gemini-3-flash-preview` (evita modelos Gemini 2.x más antiguos)
|
||||
- Google (Antigravity): `google-antigravity/claude-opus-4-6-thinking` y `google-antigravity/gemini-3-flash`
|
||||
@ -383,7 +380,7 @@ Esta es la ejecución de “modelos comunes” que esperamos mantener funcionand
|
||||
- Z.AI (GLM): `zai/glm-5.1`
|
||||
- MiniMax: `minimax/MiniMax-M2.7`
|
||||
|
||||
Ejecuta el smoke de gateway con herramientas + imagen:
|
||||
Ejecuta el smoke de Gateway con herramientas + imagen:
|
||||
`OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
### Línea base: llamadas a herramientas (Read + Exec opcional)
|
||||
@ -397,16 +394,16 @@ Elige al menos uno por familia de proveedores:
|
||||
- Z.AI (GLM): `zai/glm-5.1`
|
||||
- MiniMax: `minimax/MiniMax-M2.7`
|
||||
|
||||
Cobertura adicional opcional (deseable):
|
||||
Cobertura adicional opcional (útil tenerla):
|
||||
|
||||
- xAI: `xai/grok-4.3` (o el más reciente disponible)
|
||||
- Mistral: `mistral/`… (elige un modelo capaz de usar “tools” que tengas habilitado)
|
||||
- xAI: `xai/grok-4.3` (o el último disponible)
|
||||
- Mistral: `mistral/`… (elige un modelo con capacidad de “herramientas” que tengas habilitado)
|
||||
- Cerebras: `cerebras/`… (si tienes acceso)
|
||||
- LM Studio: `lmstudio/`… (local; las llamadas a herramientas dependen del modo API)
|
||||
- LM Studio: `lmstudio/`… (local; las llamadas a herramientas dependen del modo de API)
|
||||
|
||||
### Visión: envío de imagen (adjunto → mensaje multimodal)
|
||||
|
||||
Incluye al menos un modelo con capacidad de imagen en `OPENCLAW_LIVE_GATEWAY_MODELS` (variantes de Claude/Gemini/OpenAI con capacidad de visión, etc.) para ejercitar la sonda de imagen.
|
||||
Incluye al menos un modelo con capacidad de imagen en `OPENCLAW_LIVE_GATEWAY_MODELS` (variantes con visión de Claude/Gemini/OpenAI, etc.) para ejercitar la comprobación de imagen.
|
||||
|
||||
### Agregadores / gateways alternativos
|
||||
|
||||
@ -421,52 +418,52 @@ Más proveedores que puedes incluir en la matriz en vivo (si tienes credenciales
|
||||
- Mediante `models.providers` (endpoints personalizados): `minimax` (nube/API), además de cualquier proxy compatible con OpenAI/Anthropic (LM Studio, vLLM, LiteLLM, etc.)
|
||||
|
||||
<Tip>
|
||||
No codifiques "all models" de forma fija en la documentación. La lista autoritativa es lo que devuelva `discoverModels(...)` en tu máquina más las claves que estén disponibles.
|
||||
No codifiques de forma rígida "todos los modelos" en la documentación. La lista autoritativa es lo que `discoverModels(...)` devuelva en tu máquina más las claves que estén disponibles.
|
||||
</Tip>
|
||||
|
||||
## Credenciales (nunca confirmar en git)
|
||||
## Credenciales (nunca confirmar)
|
||||
|
||||
Las pruebas en vivo descubren credenciales de la misma forma que lo hace la CLI. Implicaciones prácticas:
|
||||
|
||||
- Si la CLI funciona, las pruebas live deberían encontrar las mismas claves.
|
||||
- Si una prueba live dice “sin credenciales”, depura del mismo modo que depurarías `openclaw models list` / la selección de modelo.
|
||||
- Si la CLI funciona, las pruebas en vivo deberían encontrar las mismas claves.
|
||||
- Si una prueba en vivo dice “no creds”, depura de la misma forma que depurarías `openclaw models list` / la selección de modelo.
|
||||
|
||||
- Perfiles de autenticación por agente: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (esto es lo que significa “claves de perfil” en las pruebas live)
|
||||
- Perfiles de autenticación por agente: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (esto es lo que significa “profile keys” en las pruebas en vivo)
|
||||
- Configuración: `~/.openclaw/openclaw.json` (o `OPENCLAW_CONFIG_PATH`)
|
||||
- Directorio de estado heredado: `~/.openclaw/credentials/` (se copia en el home live preparado cuando está presente, pero no es el almacén principal de claves de perfil)
|
||||
- Las ejecuciones live locales copian la configuración activa, los archivos `auth-profiles.json` por agente, `credentials/` heredado y los directorios de autenticación de CLI externas compatibles en un home de prueba temporal de forma predeterminada; los homes live preparados omiten `workspace/` y `sandboxes/`, y las sobrescrituras de ruta `agents.*.workspace` / `agentDir` se eliminan para que las sondas no toquen tu workspace real del host.
|
||||
- Directorio de estado heredado: `~/.openclaw/credentials/` (se copia al home en vivo preparado cuando está presente, pero no es el almacén principal de claves de perfil)
|
||||
- Las ejecuciones locales en vivo copian la configuración activa, los archivos `auth-profiles.json` por agente, `credentials/` heredado y los directorios de autenticación de CLI externos compatibles en un home temporal de prueba de forma predeterminada; los homes en vivo preparados omiten `workspace/` y `sandboxes/`, y las sobrescrituras de rutas `agents.*.workspace` / `agentDir` se eliminan para que las sondas no toquen tu espacio de trabajo real del host.
|
||||
|
||||
Si quieres depender de claves de entorno (por ejemplo, exportadas en tu `~/.profile`), ejecuta las pruebas locales después de `source ~/.profile`, o usa los ejecutores Docker de abajo (pueden montar `~/.profile` en el contenedor).
|
||||
Si quieres depender de claves de entorno (por ejemplo, exportadas en tu `~/.profile`), ejecuta las pruebas locales después de `source ~/.profile`, o usa los ejecutores de Docker de abajo (pueden montar `~/.profile` en el contenedor).
|
||||
|
||||
## Deepgram live (transcripción de audio)
|
||||
## Deepgram en vivo (transcripción de audio)
|
||||
|
||||
- Prueba: `extensions/deepgram/audio.live.test.ts`
|
||||
- Habilitar: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts`
|
||||
- Activar: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts`
|
||||
|
||||
## Plan de codificación BytePlus live
|
||||
## Plan de codificación en vivo de BytePlus
|
||||
|
||||
- Prueba: `extensions/byteplus/live.test.ts`
|
||||
- Habilitar: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts`
|
||||
- Sobrescritura opcional del modelo: `BYTEPLUS_CODING_MODEL=ark-code-latest`
|
||||
- Activar: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts`
|
||||
- Sobrescritura opcional de modelo: `BYTEPLUS_CODING_MODEL=ark-code-latest`
|
||||
|
||||
## Medios de flujo de trabajo ComfyUI live
|
||||
## Medios de flujo de trabajo de ComfyUI en vivo
|
||||
|
||||
- Prueba: `extensions/comfy/comfy.live.test.ts`
|
||||
- Habilitar: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts`
|
||||
- Activar: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts`
|
||||
- Alcance:
|
||||
- Ejercita las rutas incluidas de imagen, video y `music_generate` de comfy
|
||||
- Omite cada capacidad a menos que `plugins.entries.comfy.config.<capability>` esté configurado
|
||||
- Útil después de cambiar el envío de flujos de trabajo comfy, el sondeo, las descargas o el registro del Plugin
|
||||
- Omite cada capacidad salvo que `plugins.entries.comfy.config.<capability>` esté configurado
|
||||
- Útil después de cambiar el envío de flujos de trabajo de comfy, el sondeo, las descargas o el registro de Plugin
|
||||
|
||||
## Generación de imágenes live
|
||||
## Generación de imágenes en vivo
|
||||
|
||||
- Prueba: `test/image-generation.runtime.live.test.ts`
|
||||
- Comando: `pnpm test:live test/image-generation.runtime.live.test.ts`
|
||||
- Arnés: `pnpm test:live:media image`
|
||||
- Arnes: `pnpm test:live:media image`
|
||||
- Alcance:
|
||||
- Enumera todos los Plugins proveedores de generación de imágenes registrados
|
||||
- Enumera cada Plugin proveedor de generación de imágenes registrado
|
||||
- Carga las variables de entorno faltantes del proveedor desde tu shell de inicio de sesión (`~/.profile`) antes de sondear
|
||||
- Usa claves de API live/de entorno antes que los perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Usa claves de API en vivo/de entorno antes que perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Omite proveedores sin autenticación/perfil/modelo utilizable
|
||||
- Ejecuta cada proveedor configurado mediante el runtime compartido de generación de imágenes:
|
||||
- `<provider>:generate`
|
||||
@ -480,7 +477,7 @@ Si quieres depender de claves de entorno (por ejemplo, exportadas en tu `~/.prof
|
||||
- `openrouter`
|
||||
- `vydra`
|
||||
- `xai`
|
||||
- Restricción opcional:
|
||||
- Acotación opcional:
|
||||
- `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"`
|
||||
- `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="deepinfra"`
|
||||
- `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"`
|
||||
@ -488,7 +485,7 @@ Si quieres depender de claves de entorno (por ejemplo, exportadas en tu `~/.prof
|
||||
- Comportamiento de autenticación opcional:
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` para forzar la autenticación del almacén de perfiles e ignorar sobrescrituras solo de entorno
|
||||
|
||||
Para la ruta de la CLI distribuida, añade un smoke `infer` después de que pase la prueba live del proveedor/runtime:
|
||||
Para la ruta de CLI publicada, agrega una smoke de `infer` después de que pase la prueba en vivo del proveedor/runtime:
|
||||
|
||||
```bash
|
||||
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
|
||||
@ -500,75 +497,75 @@ openclaw infer image generate \
|
||||
--json
|
||||
```
|
||||
|
||||
Esto cubre el análisis de argumentos de la CLI, la resolución de configuración/agente predeterminado, la activación de Plugins incluidos, el runtime compartido de generación de imágenes y la solicitud live al proveedor. Se espera que las dependencias del Plugin estén presentes antes de cargar el runtime.
|
||||
Esto cubre el análisis de argumentos de CLI, la resolución de configuración/agente predeterminado, la activación de Plugin incluidos, el runtime compartido de generación de imágenes y la solicitud en vivo al proveedor. Se espera que las dependencias del Plugin estén presentes antes de cargar el runtime.
|
||||
|
||||
## Generación de música live
|
||||
## Generación de música en vivo
|
||||
|
||||
- Prueba: `extensions/music-generation-providers.live.test.ts`
|
||||
- Habilitar: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts`
|
||||
- Arnés: `pnpm test:live:media music`
|
||||
- Activar: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts`
|
||||
- Arnes: `pnpm test:live:media music`
|
||||
- Alcance:
|
||||
- Ejercita la ruta compartida incluida del proveedor de generación de música
|
||||
- Ejercita la ruta compartida del proveedor incluido de generación de música
|
||||
- Actualmente cubre Google y MiniMax
|
||||
- Carga las variables de entorno del proveedor desde tu shell de inicio de sesión (`~/.profile`) antes de sondear
|
||||
- Usa claves de API live/de entorno antes que los perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Usa claves de API en vivo/de entorno antes que perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Omite proveedores sin autenticación/perfil/modelo utilizable
|
||||
- Ejecuta ambos modos de runtime declarados cuando están disponibles:
|
||||
- `generate` con entrada solo de prompt
|
||||
- `edit` cuando el proveedor declara `capabilities.edit.enabled`
|
||||
- Cobertura actual de la ruta compartida:
|
||||
- Cobertura actual del carril compartido:
|
||||
- `google`: `generate`, `edit`
|
||||
- `minimax`: `generate`
|
||||
- `comfy`: archivo live de Comfy separado, no este barrido compartido
|
||||
- Restricción opcional:
|
||||
- `comfy`: archivo en vivo de Comfy separado, no este barrido compartido
|
||||
- Acotación opcional:
|
||||
- `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
|
||||
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"`
|
||||
- Comportamiento de autenticación opcional:
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` para forzar la autenticación del almacén de perfiles e ignorar sobrescrituras solo de entorno
|
||||
|
||||
## Generación de video live
|
||||
## Generación de video en vivo
|
||||
|
||||
- Prueba: `extensions/video-generation-providers.live.test.ts`
|
||||
- Habilitar: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
|
||||
- Arnés: `pnpm test:live:media video`
|
||||
- Activar: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
|
||||
- Arnes: `pnpm test:live:media video`
|
||||
- Alcance:
|
||||
- Ejercita la ruta compartida incluida del proveedor de generación de video
|
||||
- Usa de forma predeterminada la ruta smoke segura para releases: proveedores que no sean FAL, una solicitud de texto a video por proveedor, prompt de langosta de un segundo y un límite de operación por proveedor desde `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` de forma predeterminada)
|
||||
- Ejercita la ruta compartida del proveedor incluido de generación de video
|
||||
- De forma predeterminada usa la ruta smoke segura para releases: proveedores que no sean FAL, una solicitud de texto a video por proveedor, prompt de langosta de un segundo y un límite de operación por proveedor desde `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` de forma predeterminada)
|
||||
- Omite FAL de forma predeterminada porque la latencia de cola del lado del proveedor puede dominar el tiempo de release; pasa `--video-providers fal` o `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` para ejecutarlo explícitamente
|
||||
- Carga las variables de entorno del proveedor desde tu shell de inicio de sesión (`~/.profile`) antes de sondear
|
||||
- Usa claves de API live/de entorno antes que los perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Usa claves de API en vivo/de entorno antes que perfiles de autenticación almacenados de forma predeterminada, para que las claves de prueba obsoletas en `auth-profiles.json` no oculten las credenciales reales del shell
|
||||
- Omite proveedores sin autenticación/perfil/modelo utilizable
|
||||
- Ejecuta solo `generate` de forma predeterminada
|
||||
- Establece `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` para ejecutar también los modos de transformación declarados cuando estén disponibles:
|
||||
- `imageToVideo` cuando el proveedor declara `capabilities.imageToVideo.enabled` y el proveedor/modelo seleccionado acepta entrada de imagen local respaldada por búfer en el barrido compartido
|
||||
- `videoToVideo` cuando el proveedor declara `capabilities.videoToVideo.enabled` y el proveedor/modelo seleccionado acepta entrada de video local respaldada por búfer en el barrido compartido
|
||||
- Proveedores `imageToVideo` declarados pero omitidos actualmente en el barrido compartido:
|
||||
- Establece `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` para ejecutar también modos de transformación declarados cuando estén disponibles:
|
||||
- `imageToVideo` cuando el proveedor declara `capabilities.imageToVideo.enabled` y el proveedor/modelo seleccionado acepta entrada de imagen local respaldada por buffer en el barrido compartido
|
||||
- `videoToVideo` cuando el proveedor declara `capabilities.videoToVideo.enabled` y el proveedor/modelo seleccionado acepta entrada de video local respaldada por buffer en el barrido compartido
|
||||
- Proveedores `imageToVideo` actualmente declarados pero omitidos en el barrido compartido:
|
||||
- `vydra` porque el `veo3` incluido es solo texto y el `kling` incluido requiere una URL de imagen remota
|
||||
- Cobertura específica de Vydra por proveedor:
|
||||
- Cobertura específica del proveedor Vydra:
|
||||
- `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts`
|
||||
- ese archivo ejecuta `veo3` de texto a video más una ruta `kling` que usa de forma predeterminada una fixture de URL de imagen remota
|
||||
- Cobertura live actual de `videoToVideo`:
|
||||
- ese archivo ejecuta `veo3` de texto a video más un carril `kling` que usa de forma predeterminada un fixture de URL de imagen remota
|
||||
- Cobertura en vivo actual de `videoToVideo`:
|
||||
- `runway` solo cuando el modelo seleccionado es `runway/gen4_aleph`
|
||||
- Proveedores `videoToVideo` declarados pero omitidos actualmente en el barrido compartido:
|
||||
- `alibaba`, `qwen`, `xai` porque esas rutas actualmente requieren URL de referencia remotas `http(s)` / MP4
|
||||
- `google` porque la ruta compartida actual Gemini/Veo usa entrada local respaldada por búfer y esa ruta no se acepta en el barrido compartido
|
||||
- `openai` porque la ruta compartida actual carece de garantías de acceso específicas de organización a inpainting/remix de video
|
||||
- Restricción opcional:
|
||||
- Proveedores `videoToVideo` actualmente declarados pero omitidos en el barrido compartido:
|
||||
- `alibaba`, `qwen`, `xai` porque esas rutas actualmente requieren URLs de referencia remotas `http(s)` / MP4
|
||||
- `google` porque el carril Gemini/Veo compartido actual usa entrada local respaldada por buffer y esa ruta no se acepta en el barrido compartido
|
||||
- `openai` porque el carril compartido actual carece de garantías de acceso específicas de la organización a video inpaint/remix
|
||||
- Acotación opcional:
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"`
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"`
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""` para incluir todos los proveedores en el barrido predeterminado, incluido FAL
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` para reducir el límite de operación de cada proveedor para una ejecución smoke agresiva
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` para reducir el límite de cada operación de proveedor en una smoke agresiva
|
||||
- Comportamiento de autenticación opcional:
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` para forzar la autenticación del almacén de perfiles e ignorar sobrescrituras solo de entorno
|
||||
|
||||
## Arnés live de medios
|
||||
## Arnes de medios en vivo
|
||||
|
||||
- Comando: `pnpm test:live:media`
|
||||
- Propósito:
|
||||
- Ejecuta las suites live compartidas de imagen, música y video mediante un único punto de entrada nativo del repo
|
||||
- Carga automáticamente las variables de entorno faltantes del proveedor desde `~/.profile`
|
||||
- Restringe automáticamente cada suite a los proveedores que actualmente tienen autenticación utilizable de forma predeterminada
|
||||
- Reutiliza `scripts/test-live.mjs`, por lo que el comportamiento de Heartbeat y del modo silencioso se mantiene consistente
|
||||
- Ejecuta las suites en vivo compartidas de imagen, música y video mediante un único punto de entrada nativo del repositorio
|
||||
- Carga automáticamente las variables de entorno faltantes de los proveedores desde `~/.profile`
|
||||
- Acota automáticamente cada suite a proveedores que actualmente tienen autenticación utilizable de forma predeterminada
|
||||
- Reutiliza `scripts/test-live.mjs`, por lo que el comportamiento de Heartbeat y modo silencioso se mantiene coherente
|
||||
- Ejemplos:
|
||||
- `pnpm test:live:media`
|
||||
- `pnpm test:live:media image video --providers openai,google,minimax`
|
||||
|
||||
@ -1,25 +1,25 @@
|
||||
---
|
||||
read_when:
|
||||
- Estás creando un Plugin que necesita before_tool_call, before_agent_reply, ganchos de mensaje o ganchos de ciclo de vida
|
||||
- Debes bloquear, reescribir o requerir aprobación para las llamadas a herramientas de un Plugin
|
||||
- Estás decidiendo entre hooks internos y hooks de Plugin
|
||||
summary: 'Hooks de Plugin: interceptan eventos del ciclo de vida del agente, la herramienta, el mensaje, la sesión y el Gateway'
|
||||
- Está creando un Plugin que necesita before_tool_call, before_agent_reply, ganchos de mensajes o ganchos de ciclo de vida
|
||||
- Necesitas bloquear, reescribir o requerir aprobación para las llamadas a herramientas desde un Plugin
|
||||
- Estás decidiendo entre ganchos internos y ganchos de Plugin
|
||||
summary: 'Ganchos de Plugin: interceptan eventos del ciclo de vida del agente, la herramienta, el mensaje, la sesión y el Gateway'
|
||||
title: Ganchos de Plugin
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T21:36:07Z"
|
||||
generated_at: "2026-05-04T18:24:06Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 2c4ed060f1b89917e1f2f46d2da9448cd562edbcd6ce03bc9b1a83da3ed9a591
|
||||
source_hash: 37c7273036463c87e478db5678822b676c89447caee65f2f3f47a45194d1e37b
|
||||
source_path: plugins/hooks.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Los hooks de Plugin son puntos de extensión en proceso para plugins de OpenClaw. Úsalos
|
||||
cuando un plugin necesite inspeccionar o cambiar ejecuciones de agentes, llamadas a herramientas, flujo de mensajes,
|
||||
ciclo de vida de sesiones, enrutamiento de subagentes, instalaciones o arranque del Gateway.
|
||||
ciclo de vida de sesiones, enrutamiento de subagentes, instalaciones o el inicio del Gateway.
|
||||
|
||||
Usa [hooks internos](/es/automation/hooks) en su lugar cuando quieras un pequeño
|
||||
script `HOOK.md` instalado por el operador para eventos de comandos y Gateway como
|
||||
script `HOOK.md` instalado por el operador para eventos de comandos y del Gateway como
|
||||
`/new`, `/reset`, `/stop`, `agent:bootstrap` o `gateway:startup`.
|
||||
|
||||
## Inicio rápido
|
||||
@ -56,19 +56,19 @@ export default definePluginEntry({
|
||||
});
|
||||
```
|
||||
|
||||
Los manejadores de hooks se ejecutan secuencialmente en orden descendente de `priority`. Los hooks
|
||||
con la misma prioridad conservan el orden de registro.
|
||||
Los manejadores de hooks se ejecutan secuencialmente en orden descendente de `priority`. Los hooks con la misma prioridad
|
||||
mantienen el orden de registro.
|
||||
|
||||
`api.on(name, handler, opts?)` acepta:
|
||||
|
||||
- `priority` — orden de manejadores (los valores más altos se ejecutan primero).
|
||||
- `timeoutMs` — presupuesto opcional por hook. Cuando se define, el ejecutor de hooks aborta ese
|
||||
manejador después de que transcurre el presupuesto y continúa con el siguiente, en lugar de
|
||||
permitir que una configuración lenta o el trabajo de recuperación consuman el tiempo de espera
|
||||
de modelo configurado por el llamador. Omítelo para usar el tiempo de espera predeterminado de observación/decisión que el
|
||||
- `priority` — orden del manejador (los valores más altos se ejecutan primero).
|
||||
- `timeoutMs` — presupuesto opcional por hook. Cuando se establece, el ejecutor de hooks aborta ese
|
||||
manejador después de que el presupuesto transcurre y continúa con el siguiente, en vez de
|
||||
permitir que una configuración lenta o trabajo de recuperación consuma el tiempo de espera de modelo
|
||||
configurado por el llamador. Omítelo para usar el tiempo de espera predeterminado de observación/decisión que el
|
||||
ejecutor de hooks aplica de forma genérica.
|
||||
|
||||
Los operadores también pueden definir presupuestos de hooks sin parchear el código del plugin:
|
||||
Los operadores también pueden establecer presupuestos de hooks sin parchear el código del plugin:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -88,71 +88,71 @@ Los operadores también pueden definir presupuestos de hooks sin parchear el có
|
||||
}
|
||||
```
|
||||
|
||||
`hooks.timeouts.<hookName>` anula `hooks.timeoutMs`, que anula el valor
|
||||
`api.on(..., { timeoutMs })` escrito por el plugin. Cada valor configurado debe
|
||||
ser un entero positivo no mayor de 600000 milisegundos. Prefiere las
|
||||
anulaciones por hook para hooks lentos conocidos, de modo que un plugin no reciba un presupuesto más largo
|
||||
`hooks.timeouts.<hookName>` reemplaza a `hooks.timeoutMs`, que reemplaza el valor
|
||||
`api.on(..., { timeoutMs })` definido por el plugin. Cada valor configurado debe
|
||||
ser un entero positivo no mayor que 600000 milisegundos. Prefiere reemplazos por hook
|
||||
para hooks lentos conocidos, de modo que un plugin no obtenga un presupuesto más largo
|
||||
en todas partes.
|
||||
|
||||
Cada hook recibe `event.context.pluginConfig`, la configuración resuelta para el
|
||||
plugin que registró ese manejador. Úsala para decisiones de hooks que necesiten
|
||||
plugin que registró ese manejador. Úsala para decisiones de hook que necesiten
|
||||
opciones actuales del plugin; OpenClaw la inyecta por manejador sin mutar el
|
||||
objeto de evento compartido que ven otros plugins.
|
||||
|
||||
## Catálogo de hooks
|
||||
|
||||
Los hooks se agrupan por la superficie que extienden. Los nombres en **negrita** aceptan un
|
||||
resultado de decisión (bloquear, cancelar, anular o requerir aprobación); todos los demás son
|
||||
resultado de decisión (bloquear, cancelar, reemplazar o requerir aprobación); todos los demás son
|
||||
solo de observación.
|
||||
|
||||
**Turno del agente**
|
||||
|
||||
- `before_model_resolve` — anular el proveedor o modelo antes de que se carguen los mensajes de sesión
|
||||
- `agent_turn_prepare` — consumir inyecciones de turno de plugin en cola y agregar contexto del mismo turno antes de los hooks de prompt
|
||||
- `before_prompt_build` — agregar contexto dinámico o texto de prompt del sistema antes de la llamada al modelo
|
||||
- `before_model_resolve` — reemplaza el proveedor o el modelo antes de que se carguen los mensajes de sesión
|
||||
- `agent_turn_prepare` — consume inyecciones de turno de plugin en cola y agrega contexto del mismo turno antes de los hooks de prompt
|
||||
- `before_prompt_build` — agrega contexto dinámico o texto de prompt de sistema antes de la llamada al modelo
|
||||
- `before_agent_start` — fase combinada solo por compatibilidad; prefiere los dos hooks anteriores
|
||||
- **`before_agent_reply`** — interrumpir el turno del modelo con una respuesta sintética o silencio
|
||||
- **`before_agent_finalize`** — inspeccionar la respuesta final natural y solicitar un pase más del modelo
|
||||
- `agent_end` — observar mensajes finales, estado de éxito y duración de ejecución
|
||||
- `heartbeat_prompt_contribution` — agregar contexto solo de Heartbeat para plugins de monitorización en segundo plano y ciclo de vida
|
||||
- **`before_agent_reply`** — interrumpe el turno del modelo con una respuesta sintética o silencio
|
||||
- **`before_agent_finalize`** — inspecciona la respuesta final natural y solicita una pasada más del modelo
|
||||
- `agent_end` — observa mensajes finales, estado de éxito y duración de la ejecución
|
||||
- `heartbeat_prompt_contribution` — agrega contexto solo de Heartbeat para plugins de monitor en segundo plano y ciclo de vida
|
||||
|
||||
**Observación de conversación**
|
||||
**Observación de la conversación**
|
||||
|
||||
- `model_call_started` / `model_call_ended` — observar metadatos saneados de llamadas de proveedor/modelo, temporización, resultado y hashes acotados de id. de solicitud sin contenido de prompt ni respuesta
|
||||
- `llm_input` — observar la entrada del proveedor (prompt del sistema, prompt, historial)
|
||||
- `llm_output` — observar la salida del proveedor
|
||||
- `model_call_started` / `model_call_ended` — observa metadatos saneados de llamadas a proveedor/modelo, tiempos, resultado y hashes acotados de ID de solicitud sin contenido de prompt ni de respuesta
|
||||
- `llm_input` — observa la entrada del proveedor (prompt de sistema, prompt, historial)
|
||||
- `llm_output` — observa la salida del proveedor
|
||||
|
||||
**Herramientas**
|
||||
|
||||
- **`before_tool_call`** — reescribir parámetros de herramienta, bloquear la ejecución o requerir aprobación
|
||||
- `after_tool_call` — observar resultados de herramienta, errores y duración
|
||||
- **`tool_result_persist`** — reescribir el mensaje del asistente producido a partir de un resultado de herramienta
|
||||
- **`before_message_write`** — inspeccionar o bloquear la escritura de un mensaje en curso (poco frecuente)
|
||||
- **`before_tool_call`** — reescribe parámetros de herramienta, bloquea la ejecución o requiere aprobación
|
||||
- `after_tool_call` — observa resultados de herramientas, errores y duración
|
||||
- **`tool_result_persist`** — reescribe el mensaje del asistente producido a partir de un resultado de herramienta
|
||||
- **`before_message_write`** — inspecciona o bloquea una escritura de mensaje en curso (raro)
|
||||
|
||||
**Mensajes y entrega**
|
||||
|
||||
- **`inbound_claim`** — reclamar un mensaje entrante antes del enrutamiento del agente (respuestas sintéticas)
|
||||
- `message_received` — observar contenido entrante, remitente, hilo y metadatos
|
||||
- **`message_sending`** — reescribir contenido saliente o cancelar la entrega
|
||||
- `message_sent` — observar éxito o fallo de entrega saliente
|
||||
- **`before_dispatch`** — inspeccionar o reescribir un despacho saliente antes de la entrega al canal
|
||||
- **`reply_dispatch`** — participar en la canalización final de despacho de respuesta
|
||||
- **`inbound_claim`** — reclama un mensaje entrante antes del enrutamiento del agente (respuestas sintéticas)
|
||||
- `message_received` — observa contenido entrante, remitente, hilo y metadatos
|
||||
- **`message_sending`** — reescribe contenido saliente o cancela la entrega
|
||||
- `message_sent` — observa el éxito o fallo de la entrega saliente
|
||||
- **`before_dispatch`** — inspecciona o reescribe un despacho saliente antes de la entrega al canal
|
||||
- **`reply_dispatch`** — participa en la canalización final de despacho de respuestas
|
||||
|
||||
**Sesiones y Compaction**
|
||||
|
||||
- `session_start` / `session_end` — rastrear límites del ciclo de vida de sesión
|
||||
- `before_compaction` / `after_compaction` — observar o anotar ciclos de Compaction
|
||||
- `before_reset` — observar eventos de restablecimiento de sesión (`/reset`, restablecimientos programáticos)
|
||||
- `session_start` / `session_end` — rastrea límites del ciclo de vida de la sesión
|
||||
- `before_compaction` / `after_compaction` — observa o anota ciclos de Compaction
|
||||
- `before_reset` — observa eventos de restablecimiento de sesión (`/reset`, restablecimientos programáticos)
|
||||
|
||||
**Subagentes**
|
||||
|
||||
- `subagent_spawning` / `subagent_delivery_target` / `subagent_spawned` / `subagent_ended` — coordinar el enrutamiento de subagentes y la entrega de finalización
|
||||
- `subagent_spawning` / `subagent_delivery_target` / `subagent_spawned` / `subagent_ended` — coordina el enrutamiento de subagentes y la entrega de finalización
|
||||
|
||||
**Ciclo de vida**
|
||||
|
||||
- `gateway_start` / `gateway_stop` — iniciar o detener servicios propiedad del plugin con el Gateway
|
||||
- `cron_changed` — observar cambios del ciclo de vida de cron propiedad del gateway (agregado, actualizado, eliminado, iniciado, finalizado, programado)
|
||||
- **`before_install`** — inspeccionar escaneos de instalación de skill o plugin y bloquear opcionalmente
|
||||
- `gateway_start` / `gateway_stop` — inicia o detiene servicios propiedad del plugin con el Gateway
|
||||
- `cron_changed` — observa cambios de ciclo de vida de Cron propiedad del gateway (agregado, actualizado, eliminado, iniciado, finalizado, programado)
|
||||
- **`before_install`** — inspecciona análisis de instalación de Skill o plugin y bloquea opcionalmente
|
||||
|
||||
## Política de llamadas a herramientas
|
||||
|
||||
@ -163,7 +163,7 @@ solo de observación.
|
||||
- `event.runId` opcional
|
||||
- `event.toolCallId` opcional
|
||||
- campos de contexto como `ctx.agentId`, `ctx.sessionKey`, `ctx.sessionId`,
|
||||
`ctx.runId`, `ctx.jobId` (definido en ejecuciones impulsadas por cron) y `ctx.trace` de diagnóstico
|
||||
`ctx.runId`, `ctx.jobId` (establecido en ejecuciones impulsadas por cron) y `ctx.trace` de diagnóstico
|
||||
|
||||
Puede devolver:
|
||||
|
||||
@ -189,18 +189,18 @@ type BeforeToolCallResult = {
|
||||
Reglas:
|
||||
|
||||
- `block: true` es terminal y omite los manejadores de menor prioridad.
|
||||
- `block: false` se trata como si no hubiera decisión.
|
||||
- `params` reescribe los parámetros de herramienta para la ejecución.
|
||||
- `block: false` se trata como ausencia de decisión.
|
||||
- `params` reescribe los parámetros de la herramienta para la ejecución.
|
||||
- `requireApproval` pausa la ejecución del agente y pregunta al usuario mediante aprobaciones de plugin. El comando `/approve` puede aprobar tanto aprobaciones de exec como de plugin.
|
||||
- Un `block: true` de menor prioridad todavía puede bloquear después de que un hook de mayor prioridad
|
||||
- Un `block: true` de menor prioridad aún puede bloquear después de que un hook de mayor prioridad
|
||||
haya solicitado aprobación.
|
||||
- `onResolution` recibe la decisión de aprobación resuelta — `allow-once`,
|
||||
- `onResolution` recibe la decisión de aprobación resuelta: `allow-once`,
|
||||
`allow-always`, `deny`, `timeout` o `cancelled`.
|
||||
|
||||
Los plugins incluidos que necesiten políticas a nivel de host pueden registrar políticas de herramientas de confianza
|
||||
con `api.registerTrustedToolPolicy(...)`. Estas se ejecutan antes de los hooks
|
||||
`before_tool_call` ordinarios y antes de decisiones de plugins externos. Úsalas solo
|
||||
para barreras de confianza del host, como política del espacio de trabajo, aplicación de presupuesto o
|
||||
Los plugins incluidos que necesitan política a nivel de host pueden registrar políticas de herramientas de confianza
|
||||
con `api.registerTrustedToolPolicy(...)`. Estas se ejecutan antes que los hooks
|
||||
`before_tool_call` ordinarios y antes que las decisiones de plugins externos. Úsalas solo
|
||||
para controles de confianza del host como política de espacio de trabajo, cumplimiento de presupuesto o
|
||||
seguridad de flujos de trabajo reservados. Los plugins externos deben usar hooks `before_tool_call`
|
||||
normales.
|
||||
|
||||
@ -212,27 +212,27 @@ no como contenido de prompt:
|
||||
|
||||
- OpenClaw elimina `toolResult.details` antes de la reproducción del proveedor y la entrada de Compaction
|
||||
para que los metadatos no se conviertan en contexto del modelo.
|
||||
- Las entradas de sesión persistidas conservan solo `details` acotados. Los detalles sobredimensionados se
|
||||
- Las entradas de sesión persistidas conservan solo `details` acotados. Los detalles demasiado grandes se
|
||||
reemplazan por un resumen compacto y `persistedDetailsTruncated: true`.
|
||||
- `tool_result_persist` y `before_message_write` se ejecutan antes del límite final
|
||||
de persistencia. Aun así, los hooks deben mantener pequeños los `details` devueltos y evitar
|
||||
colocar texto relevante para el prompt solo en `details`; coloca la salida de herramienta visible para el modelo
|
||||
colocar texto relevante para el prompt solo en `details`; pon la salida de herramienta visible para el modelo
|
||||
en `content`.
|
||||
|
||||
## Hooks de prompt y modelo
|
||||
|
||||
Usa los hooks específicos de fase para plugins nuevos:
|
||||
|
||||
- `before_model_resolve`: recibe solo el prompt actual y metadatos de adjuntos.
|
||||
- `before_model_resolve`: recibe solo el prompt actual y los metadatos de adjuntos.
|
||||
Devuelve `providerOverride` o `modelOverride`.
|
||||
- `agent_turn_prepare`: recibe el prompt actual, mensajes de sesión preparados
|
||||
y cualquier inyección en cola exactamente una vez drenada para esta sesión. Devuelve
|
||||
- `agent_turn_prepare`: recibe el prompt actual, los mensajes de sesión preparados
|
||||
y cualquier inyección en cola de exactamente una vez drenada para esta sesión. Devuelve
|
||||
`prependContext` o `appendContext`.
|
||||
- `before_prompt_build`: recibe el prompt actual y los mensajes de sesión.
|
||||
Devuelve `prependContext`, `appendContext`, `systemPrompt`,
|
||||
`prependSystemContext` o `appendSystemContext`.
|
||||
- `heartbeat_prompt_contribution`: se ejecuta solo para turnos de Heartbeat y devuelve
|
||||
`prependContext` o `appendContext`. Está pensado para monitores en segundo plano
|
||||
`prependContext` o `appendContext`. Está destinado a monitores en segundo plano
|
||||
que necesitan resumir el estado actual sin cambiar turnos iniciados por el usuario.
|
||||
|
||||
`before_agent_start` permanece por compatibilidad. Prefiere los hooks explícitos anteriores
|
||||
@ -240,37 +240,53 @@ para que tu plugin no dependa de una fase combinada heredada.
|
||||
|
||||
`before_agent_start` y `agent_end` incluyen `event.runId` cuando OpenClaw puede
|
||||
identificar la ejecución activa. El mismo valor también está disponible en `ctx.runId`.
|
||||
Las ejecuciones impulsadas por Cron también exponen `ctx.jobId` (el id del trabajo cron de origen) para que
|
||||
los hooks de plugin puedan delimitar métricas, efectos secundarios o estado a un trabajo programado
|
||||
Las ejecuciones impulsadas por Cron también exponen `ctx.jobId` (el ID del trabajo cron de origen) para que
|
||||
los hooks de plugin puedan limitar métricas, efectos secundarios o estado a un trabajo programado
|
||||
específico.
|
||||
|
||||
Para ejecuciones originadas en canales, `ctx.messageProvider` es la superficie de proveedor, como
|
||||
Para ejecuciones originadas por canal, `ctx.messageProvider` es la superficie del proveedor, como
|
||||
`discord` o `telegram`, mientras que `ctx.channelId` es el identificador de destino de la conversación
|
||||
cuando OpenClaw puede derivar uno de la clave de sesión o los metadatos
|
||||
de entrega.
|
||||
cuando OpenClaw puede derivarlo de la clave de sesión o de los metadatos de entrega.
|
||||
|
||||
`agent_end` es un hook de observación y se ejecuta de forma fire-and-forget después del turno. El
|
||||
ejecutor de hooks aplica un tiempo de espera de 30 segundos para que un plugin o endpoint
|
||||
de embeddings bloqueado no pueda dejar la promesa del hook pendiente para siempre. Un tiempo de espera se registra y
|
||||
OpenClaw continúa; no cancela el trabajo de red propiedad del plugin salvo que el
|
||||
`agent_end` es un hook de observación y se ejecuta sin esperar resultado después del turno. El
|
||||
ejecutor de hooks aplica un tiempo de espera de 30 segundos para que un plugin bloqueado o un endpoint de embeddings
|
||||
no pueda dejar la promesa del hook pendiente para siempre. Se registra un tiempo de espera y
|
||||
OpenClaw continúa; no cancela trabajo de red propiedad del plugin a menos que el
|
||||
plugin también use su propia señal de aborto.
|
||||
|
||||
Usa `model_call_started` y `model_call_ended` para telemetría de llamadas de proveedor
|
||||
que no debería recibir prompts, historial, respuestas, encabezados, cuerpos de solicitud ni id. de solicitud de proveedor en bruto. Estos hooks incluyen metadatos estables como
|
||||
`runId`, `callId`, `provider`, `model`, `api`/`transport` opcional,
|
||||
`durationMs`/`outcome` terminal y `upstreamRequestIdHash` cuando OpenClaw puede derivar un
|
||||
hash acotado de id. de solicitud de proveedor.
|
||||
Usa `model_call_started` y `model_call_ended` para telemetría de llamadas a proveedor
|
||||
que no debe recibir prompts sin procesar, historial, respuestas, encabezados, cuerpos de solicitud
|
||||
ni IDs de solicitud del proveedor. Estos hooks incluyen metadatos estables como
|
||||
`runId`, `callId`, `provider`, `model`, `api`/`transport` opcionales, `durationMs`/`outcome`
|
||||
terminales y `upstreamRequestIdHash` cuando OpenClaw puede derivar un hash acotado de ID de solicitud
|
||||
del proveedor.
|
||||
|
||||
`before_agent_finalize` se ejecuta solo cuando un arnés está a punto de aceptar una
|
||||
respuesta final natural del asistente. No es la ruta de cancelación de `/stop` y no
|
||||
se ejecuta cuando el usuario aborta un turno. Devuelve `{ action: "revise", reason }` para pedir
|
||||
al arnés un pase más del modelo antes de la finalización, `{ action:
|
||||
respuesta final natural del asistente. No es la ruta de cancelación de `/stop` y no se
|
||||
ejecuta cuando el usuario aborta un turno. Devuelve `{ action: "revise", reason }` para pedirle
|
||||
al arnés una pasada más del modelo antes de la finalización, `{ action:
|
||||
"finalize", reason? }` para forzar la finalización, u omite un resultado para continuar.
|
||||
Los hooks nativos `Stop` de Codex se retransmiten a este hook como decisiones
|
||||
Los hooks `Stop` nativos de Codex se retransmiten a este hook como decisiones
|
||||
`before_agent_finalize` de OpenClaw.
|
||||
|
||||
Los plugins no incluidos que necesiten `llm_input`, `llm_output`,
|
||||
`before_agent_finalize` o `agent_end` deben definir:
|
||||
Al devolver `action: "revise"`, los plugins pueden incluir metadatos `retry` para hacer
|
||||
que la pasada adicional del modelo sea acotada y segura para reproducción:
|
||||
|
||||
```typescript
|
||||
type BeforeAgentFinalizeRetry = {
|
||||
instruction: string;
|
||||
idempotencyKey?: string;
|
||||
maxAttempts?: number;
|
||||
};
|
||||
```
|
||||
|
||||
`instruction` se agrega al motivo de revisión enviado al arnés.
|
||||
`idempotencyKey` permite al host contar reintentos para la misma solicitud de plugin a través de
|
||||
decisiones de finalización equivalentes, y `maxAttempts` limita cuántas pasadas adicionales el
|
||||
host permitirá antes de continuar con la respuesta final natural.
|
||||
|
||||
Los plugins no incluidos que necesitan `llm_input`, `llm_output`,
|
||||
`before_agent_finalize` o `agent_end` deben establecer:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -286,43 +302,42 @@ Los plugins no incluidos que necesiten `llm_input`, `llm_output`,
|
||||
}
|
||||
```
|
||||
|
||||
Los hooks que mutan prompts y las inyecciones duraderas de siguiente turno pueden deshabilitarse por plugin
|
||||
Los hooks que mutan prompts y las inyecciones duraderas para el siguiente turno pueden deshabilitarse por plugin
|
||||
con `plugins.entries.<id>.hooks.allowPromptInjection=false`.
|
||||
|
||||
### Extensiones de sesión e inyecciones de siguiente turno
|
||||
### Extensiones de sesión e inyecciones para el siguiente turno
|
||||
|
||||
Los plugins de flujo de trabajo pueden persistir un estado de sesión pequeño compatible con JSON con
|
||||
Los plugins de flujo de trabajo pueden persistir un pequeño estado de sesión compatible con JSON con
|
||||
`api.registerSessionExtension(...)` y actualizarlo mediante el método
|
||||
`sessions.pluginPatch` del Gateway. Las filas de sesión proyectan el estado de extensión registrado
|
||||
mediante `pluginExtensions`, lo que permite que Control UI y otros clientes rendericen
|
||||
estado propiedad del plugin sin conocer los detalles internos del plugin.
|
||||
mediante `pluginExtensions`, lo que permite que Control UI y otros clientes representen
|
||||
el estado propiedad del plugin sin conocer los componentes internos del plugin.
|
||||
|
||||
Usa `api.enqueueNextTurnInjection(...)` cuando un plugin necesite contexto duradero para
|
||||
llegar al siguiente turno del modelo exactamente una vez. OpenClaw vacía las inyecciones en cola antes de
|
||||
los hooks de prompt, descarta las inyecciones vencidas y deduplica por `idempotencyKey`
|
||||
por plugin. Esta es la interfaz adecuada para reanudaciones de aprobación, resúmenes de políticas,
|
||||
Usa `api.enqueueNextTurnInjection(...)` cuando un plugin necesite que el contexto duradero
|
||||
llegue al siguiente turno del modelo exactamente una vez. OpenClaw drena las inyecciones en cola antes de
|
||||
los hooks de prompt, descarta las inyecciones caducadas y deduplica por `idempotencyKey`
|
||||
por plugin. Este es el seam correcto para reanudaciones de aprobación, resúmenes de políticas,
|
||||
deltas de monitores en segundo plano y continuaciones de comandos que deben ser visibles para
|
||||
el modelo en el siguiente turno, pero no deben convertirse en texto permanente del prompt del sistema.
|
||||
|
||||
La semántica de limpieza forma parte del contrato. La limpieza de extensión de sesión y
|
||||
las callbacks de limpieza del ciclo de vida del runtime reciben `reset`, `delete`, `disable` o
|
||||
`restart`. El host elimina el estado persistente de extensión de sesión del plugin propietario
|
||||
y las inyecciones pendientes para el siguiente turno en reset/delete/disable; restart conserva
|
||||
el estado duradero de la sesión, mientras que las callbacks de limpieza permiten que los plugins liberen tareas
|
||||
del planificador, contexto de ejecución y otros recursos fuera de banda de la generación anterior
|
||||
del runtime.
|
||||
Las semánticas de limpieza forman parte del contrato. La limpieza de extensión de sesión y
|
||||
los callbacks de limpieza del ciclo de vida de runtime reciben `reset`, `delete`, `disable` o
|
||||
`restart`. El host elimina el estado persistente de extensión de sesión
|
||||
del plugin propietario y las inyecciones pendientes del siguiente turno para reset/delete/disable; restart conserva
|
||||
el estado duradero de sesión mientras los callbacks de limpieza permiten que los plugins liberen trabajos del planificador,
|
||||
contexto de ejecución y otros recursos fuera de banda de la antigua generación de runtime.
|
||||
|
||||
## Hooks de mensajes
|
||||
|
||||
Usa hooks de mensajes para enrutamiento a nivel de canal y políticas de entrega:
|
||||
Usa hooks de mensajes para el enrutamiento a nivel de canal y la política de entrega:
|
||||
|
||||
- `message_received`: observa contenido entrante, remitente, `threadId`, `messageId`,
|
||||
- `message_received`: observa el contenido entrante, remitente, `threadId`, `messageId`,
|
||||
`senderId`, correlación opcional de ejecución/sesión y metadatos.
|
||||
- `message_sending`: reescribe `content` o devuelve `{ cancel: true }`.
|
||||
- `message_sent`: observa el éxito o fallo final.
|
||||
|
||||
Para respuestas TTS solo de audio, `content` puede contener la transcripción hablada oculta
|
||||
aunque la carga útil del canal no tenga texto/subtítulo visible. Reescribir ese
|
||||
incluso cuando la carga útil del canal no tiene texto/subtítulo visible. Reescribir ese
|
||||
`content` actualiza solo la transcripción visible para el hook; no se renderiza como
|
||||
subtítulo multimedia.
|
||||
|
||||
@ -331,42 +346,43 @@ Los contextos de hooks de mensajes exponen campos de correlación estables cuand
|
||||
`ctx.traceId`, `ctx.spanId`, `ctx.parentSpanId` y `ctx.callDepth`. Prefiere
|
||||
estos campos de primera clase antes de leer metadatos heredados.
|
||||
|
||||
Prefiere los campos tipados `threadId` y `replyToId` antes de usar metadatos específicos
|
||||
del canal.
|
||||
Prefiere los campos tipados `threadId` y `replyToId` antes de usar metadatos
|
||||
específicos del canal.
|
||||
|
||||
Reglas de decisión:
|
||||
|
||||
- `message_sending` con `cancel: true` es terminal.
|
||||
- `message_sending` con `cancel: false` se trata como sin decisión.
|
||||
- El `content` reescrito continúa hacia hooks de menor prioridad salvo que un hook posterior
|
||||
- El `content` reescrito continúa hacia hooks de menor prioridad a menos que un hook posterior
|
||||
cancele la entrega.
|
||||
|
||||
## Hooks de instalación
|
||||
|
||||
`before_install` se ejecuta después del escaneo integrado para instalaciones de Skills y plugins.
|
||||
`before_install` se ejecuta después del análisis integrado de instalaciones de Skills y plugins.
|
||||
Devuelve hallazgos adicionales o `{ block: true, blockReason }` para detener la
|
||||
instalación.
|
||||
|
||||
`block: true` es terminal. `block: false` se trata como sin decisión.
|
||||
|
||||
## Ciclo de vida de Gateway
|
||||
## Ciclo de vida del Gateway
|
||||
|
||||
Usa `gateway_start` para servicios de plugin que necesitan estado propiedad de Gateway. El
|
||||
Usa `gateway_start` para servicios de plugins que necesitan estado propiedad del Gateway. El
|
||||
contexto expone `ctx.config`, `ctx.workspaceDir` y `ctx.getCron?.()` para
|
||||
inspección y actualizaciones de Cron. Usa `gateway_stop` para limpiar recursos
|
||||
inspección y actualizaciones de cron. Usa `gateway_stop` para limpiar recursos
|
||||
de larga duración.
|
||||
|
||||
No dependas del hook interno `gateway:startup` para servicios de runtime propiedad del plugin.
|
||||
No dependas del hook interno `gateway:startup` para servicios de runtime
|
||||
propiedad del plugin.
|
||||
|
||||
`cron_changed` se dispara para eventos del ciclo de vida de Cron propiedad de Gateway con una carga útil
|
||||
de evento tipada que cubre motivos `added`, `updated`, `removed`, `started`, `finished`
|
||||
`cron_changed` se activa para eventos del ciclo de vida de cron propiedad del gateway con una carga útil
|
||||
de evento tipada que cubre los motivos `added`, `updated`, `removed`, `started`, `finished`
|
||||
y `scheduled`. El evento lleva una instantánea `PluginHookGatewayCronJob`
|
||||
(incluidos `state.nextRunAtMs`, `state.lastRunStatus` y
|
||||
`state.lastError` cuando está presente), además de un `PluginHookGatewayCronDeliveryStatus`
|
||||
de `not-requested` | `delivered` | `not-delivered` | `unknown`. Los eventos
|
||||
removed aún llevan la instantánea del trabajo eliminado para que los planificadores externos puedan
|
||||
`state.lastError` cuando están presentes), además de un `PluginHookGatewayCronDeliveryStatus`
|
||||
de `not-requested` | `delivered` | `not-delivered` | `unknown`. Los eventos eliminados
|
||||
siguen llevando la instantánea del trabajo eliminado para que los planificadores externos puedan
|
||||
reconciliar el estado. Usa `ctx.getCron?.()` y `ctx.config` del contexto de runtime
|
||||
al sincronizar planificadores de activación externos, y mantén OpenClaw como la
|
||||
al sincronizar planificadores externos de activación, y conserva OpenClaw como
|
||||
fuente de verdad para comprobaciones de vencimiento y ejecución.
|
||||
|
||||
## Próximas obsolescencias
|
||||
@ -374,27 +390,27 @@ fuente de verdad para comprobaciones de vencimiento y ejecución.
|
||||
Algunas superficies adyacentes a hooks están obsoletas, pero siguen siendo compatibles. Migra
|
||||
antes de la próxima versión mayor:
|
||||
|
||||
- **Sobres de canal en texto plano** en handlers `inbound_claim` y `message_received`.
|
||||
- **Sobres de canal en texto sin formato** en controladores `inbound_claim` y `message_received`.
|
||||
Lee `BodyForAgent` y los bloques estructurados de contexto de usuario
|
||||
en lugar de analizar texto de sobre plano. Consulta
|
||||
[Sobres de canal en texto plano → BodyForAgent](/es/plugins/sdk-migration#active-deprecations).
|
||||
- **`before_agent_start`** se mantiene por compatibilidad. Los plugins nuevos deben usar
|
||||
en lugar de analizar texto plano de sobre. Consulta
|
||||
[Sobres de canal en texto sin formato → BodyForAgent](/es/plugins/sdk-migration#active-deprecations).
|
||||
- **`before_agent_start`** se mantiene por compatibilidad. Los nuevos plugins deben usar
|
||||
`before_model_resolve` y `before_prompt_build` en lugar de la fase
|
||||
combinada.
|
||||
- **`onResolution` en `before_tool_call`** ahora usa la unión tipada
|
||||
`PluginApprovalResolution` (`allow-once` / `allow-always` / `deny` /
|
||||
`timeout` / `cancelled`) en lugar de un `string` de formato libre.
|
||||
|
||||
Para la lista completa — registro de capacidad de memoria, perfil de razonamiento del proveedor,
|
||||
proveedores de autenticación externos, tipos de descubrimiento de proveedores, accesores del runtime
|
||||
de tareas y el cambio de nombre `command-auth` → `command-status` — consulta
|
||||
[Migración de Plugin SDK → Obsolescencias activas](/es/plugins/sdk-migration#active-deprecations).
|
||||
Para la lista completa — registro de capacidad de memoria, perfil de pensamiento
|
||||
del proveedor, proveedores de autenticación externos, tipos de descubrimiento de proveedor, accesores de runtime
|
||||
de tareas y el cambio de nombre de `command-auth` → `command-status` — consulta
|
||||
[Migración del SDK de Plugin → Obsolescencias activas](/es/plugins/sdk-migration#active-deprecations).
|
||||
|
||||
## Relacionado
|
||||
|
||||
- [Migración de Plugin SDK](/es/plugins/sdk-migration) — obsolescencias activas y calendario de eliminación
|
||||
- [Creación de plugins](/es/plugins/building-plugins)
|
||||
- [Resumen de Plugin SDK](/es/plugins/sdk-overview)
|
||||
- [Migración del SDK de Plugin](/es/plugins/sdk-migration) — obsolescencias activas y cronograma de eliminación
|
||||
- [Crear plugins](/es/plugins/building-plugins)
|
||||
- [Resumen del SDK de Plugin](/es/plugins/sdk-overview)
|
||||
- [Puntos de entrada de Plugin](/es/plugins/sdk-entrypoints)
|
||||
- [Hooks internos](/es/automation/hooks)
|
||||
- [Detalles internos de la arquitectura de Plugin](/es/plugins/architecture-internals)
|
||||
- [Componentes internos de la arquitectura de Plugin](/es/plugins/architecture-internals)
|
||||
|
||||
@ -1,32 +1,32 @@
|
||||
---
|
||||
read_when:
|
||||
- Debe saber desde qué subruta del SDK importar
|
||||
- Quieres una referencia de todos los métodos de registro en OpenClawPluginApi
|
||||
- Quieres una referencia de todos los métodos de registro de OpenClawPluginApi
|
||||
- Estás buscando una exportación específica del SDK
|
||||
sidebarTitle: Plugin SDK overview
|
||||
summary: Mapa de importaciones, referencia de la API de registro y arquitectura del SDK
|
||||
title: Descripción general del SDK de Plugin
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T05:33:10Z"
|
||||
generated_at: "2026-05-04T18:24:51Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: be5fa531e603fb6d87f84e3193ebd61be1431b57b8f284871ae15f34ca93fc69
|
||||
source_hash: 8187e7d4cfb9d6fb19bbdebfbaea0bb4d98fa5cea4742d0f82a765ae5bc60127
|
||||
source_path: plugins/sdk-overview.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
El SDK de plugins es el contrato tipado entre los plugins y el núcleo. Esta página es la
|
||||
El SDK de Plugin es el contrato tipado entre plugins y el núcleo. Esta página es la
|
||||
referencia de **qué importar** y **qué puedes registrar**.
|
||||
|
||||
<Note>
|
||||
Esta página es para autores de plugins que usan `openclaw/plugin-sdk/*` dentro de
|
||||
OpenClaw. Para apps externas, scripts, paneles, trabajos de CI y extensiones de IDE
|
||||
que quieren ejecutar agentes a través del Gateway, usa en su lugar el
|
||||
[SDK de apps de OpenClaw](/es/concepts/openclaw-sdk) y el paquete `@openclaw/sdk`.
|
||||
que quieran ejecutar agentes a través del Gateway, usa en su lugar el
|
||||
[SDK de OpenClaw App](/es/concepts/openclaw-sdk) y el paquete `@openclaw/sdk`.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
¿Buscas una guía práctica? Empieza con [Crear plugins](/es/plugins/building-plugins), usa [Plugins de canal](/es/plugins/sdk-channel-plugins) para plugins de canal, [Plugins de proveedor](/es/plugins/sdk-provider-plugins) para plugins de proveedor y [Hooks de Plugin](/es/plugins/hooks) para plugins de herramientas o hooks de ciclo de vida.
|
||||
¿Buscas una guía práctica? Empieza con [Crear plugins](/es/plugins/building-plugins), usa [Plugins de canal](/es/plugins/sdk-channel-plugins) para plugins de canal, [Plugins de proveedor](/es/plugins/sdk-provider-plugins) para plugins de proveedor y [Hooks de Plugin](/es/plugins/hooks) para plugins de hooks de herramienta o de ciclo de vida.
|
||||
</Tip>
|
||||
|
||||
## Convención de importación
|
||||
@ -39,139 +39,139 @@ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
```
|
||||
|
||||
Cada subruta es un módulo pequeño y autónomo. Esto mantiene el arranque rápido y
|
||||
evita problemas de dependencias circulares. Para ayudantes de entrada/compilación
|
||||
específicos de canal, prefiere `openclaw/plugin-sdk/channel-core`; reserva
|
||||
`openclaw/plugin-sdk/core` para la superficie general más amplia y los ayudantes
|
||||
compartidos como `buildChannelConfigSchema`.
|
||||
evita problemas de dependencias circulares. Para helpers de entrada/compilación específicos de canal,
|
||||
prefiere `openclaw/plugin-sdk/channel-core`; reserva `openclaw/plugin-sdk/core` para
|
||||
la superficie general más amplia y helpers compartidos como
|
||||
`buildChannelConfigSchema`.
|
||||
|
||||
Para la configuración de canal, publica el JSON Schema propiedad del canal mediante
|
||||
`openclaw.plugin.json#channelConfigs`. La subruta `plugin-sdk/channel-config-schema`
|
||||
es para primitivas de esquema compartidas y el constructor genérico. Los plugins
|
||||
incluidos de OpenClaw usan `plugin-sdk/bundled-channel-config-schema` para esquemas
|
||||
conservados de canales incluidos. Las exportaciones de compatibilidad obsoletas
|
||||
permanecen en `plugin-sdk/channel-config-schema-legacy`; ninguna subruta de esquema
|
||||
incluido es un patrón para plugins nuevos.
|
||||
retenidos de canales incluidos. Las exportaciones de compatibilidad obsoletas permanecen en
|
||||
`plugin-sdk/channel-config-schema-legacy`; ninguna subruta de esquema incluido es un
|
||||
patrón para plugins nuevos.
|
||||
|
||||
<Warning>
|
||||
No importes costuras de conveniencia con marca de proveedor o canal (por ejemplo
|
||||
No importes costuras de conveniencia con marca de proveedor o canal (por ejemplo,
|
||||
`openclaw/plugin-sdk/slack`, `.../discord`, `.../signal`, `.../whatsapp`).
|
||||
Los plugins incluidos componen subrutas genéricas del SDK dentro de sus propios
|
||||
barriles `api.ts` / `runtime-api.ts`; los consumidores del núcleo deben usar esos
|
||||
barriles locales del Plugin o añadir un contrato genérico estrecho del SDK cuando
|
||||
la necesidad sea realmente transversal entre canales.
|
||||
Los plugins incluidos componen subrutas genéricas del SDK dentro de sus propios barrels
|
||||
`api.ts` / `runtime-api.ts`; los consumidores del núcleo deberían usar esos barrels locales
|
||||
del Plugin o añadir un contrato genérico estrecho del SDK cuando la necesidad sea realmente
|
||||
multicanal.
|
||||
|
||||
Un conjunto pequeño de costuras auxiliares de plugins incluidos todavía aparece en
|
||||
el mapa de exportación generado cuando tienen uso rastreado por el propietario.
|
||||
Existen solo para mantenimiento de plugins incluidos y no se recomiendan como rutas
|
||||
de importación para nuevos plugins de terceros.
|
||||
Un pequeño conjunto de costuras auxiliares de plugins incluidos todavía aparece en el mapa de exportación
|
||||
generado cuando tienen uso rastreado por el propietario. Existen solo para el mantenimiento de plugins
|
||||
incluidos y no son rutas de importación recomendadas para nuevos plugins de terceros.
|
||||
|
||||
`openclaw/plugin-sdk/discord` y `openclaw/plugin-sdk/telegram-account` también se
|
||||
conservan como fachadas de compatibilidad obsoletas para uso rastreado por el
|
||||
propietario. No copies esas rutas de importación en plugins nuevos; usa en su lugar
|
||||
ayudantes de runtime inyectados y subrutas genéricas del SDK de canal.
|
||||
conservan como fachadas de compatibilidad obsoletas para uso rastreado por el propietario. No copies
|
||||
esas rutas de importación en plugins nuevos; usa helpers de runtime inyectados y
|
||||
subrutas genéricas del SDK de canal en su lugar.
|
||||
</Warning>
|
||||
|
||||
## Referencia de subrutas
|
||||
|
||||
El SDK de plugins se expone como un conjunto de subrutas estrechas agrupadas por área
|
||||
(entrada de Plugin, canal, proveedor, autenticación, runtime, capacidad, memoria y
|
||||
ayudantes reservados de plugins incluidos). Para ver el catálogo completo, agrupado y
|
||||
enlazado, consulta [Subrutas del SDK de plugins](/es/plugins/sdk-subpaths).
|
||||
El SDK de Plugin se expone como un conjunto de subrutas estrechas agrupadas por área (entrada de Plugin,
|
||||
canal, proveedor, autenticación, runtime, capacidad, memoria y helpers reservados
|
||||
para plugins incluidos). Para el catálogo completo, agrupado y enlazado, consulta
|
||||
[Subrutas del SDK de Plugin](/es/plugins/sdk-subpaths).
|
||||
|
||||
La lista generada de más de 200 subrutas vive en `scripts/lib/plugin-sdk-entrypoints.json`.
|
||||
|
||||
## API de registro
|
||||
|
||||
La devolución de llamada `register(api)` recibe un objeto `OpenClawPluginApi` con estos
|
||||
El callback `register(api)` recibe un objeto `OpenClawPluginApi` con estos
|
||||
métodos:
|
||||
|
||||
### Registro de capacidades
|
||||
|
||||
| Método | Qué registra |
|
||||
| ------------------------------------------------ | --------------------------------------- |
|
||||
| `api.registerProvider(...)` | Inferencia de texto (LLM) |
|
||||
| Método | Qué registra |
|
||||
| ------------------------------------------------ | ------------------------------------- |
|
||||
| `api.registerProvider(...)` | Inferencia de texto (LLM) |
|
||||
| `api.registerAgentHarness(...)` | Ejecutor de agente experimental de bajo nivel |
|
||||
| `api.registerCliBackend(...)` | Backend de inferencia de CLI local |
|
||||
| `api.registerChannel(...)` | Canal de mensajería |
|
||||
| `api.registerSpeechProvider(...)` | Síntesis de texto a voz / STT |
|
||||
| `api.registerCliBackend(...)` | Backend local de inferencia de CLI |
|
||||
| `api.registerChannel(...)` | Canal de mensajería |
|
||||
| `api.registerSpeechProvider(...)` | Síntesis de texto a voz / STT |
|
||||
| `api.registerRealtimeTranscriptionProvider(...)` | Transcripción en tiempo real por streaming |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | Sesiones de voz en tiempo real dúplex |
|
||||
| `api.registerMediaUnderstandingProvider(...)` | Análisis de imagen/audio/video |
|
||||
| `api.registerImageGenerationProvider(...)` | Generación de imágenes |
|
||||
| `api.registerMusicGenerationProvider(...)` | Generación de música |
|
||||
| `api.registerVideoGenerationProvider(...)` | Generación de video |
|
||||
| `api.registerWebFetchProvider(...)` | Proveedor de obtención / extracción web |
|
||||
| `api.registerWebSearchProvider(...)` | Búsqueda web |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | Sesiones de voz dúplex en tiempo real |
|
||||
| `api.registerMediaUnderstandingProvider(...)` | Análisis de imagen/audio/video |
|
||||
| `api.registerImageGenerationProvider(...)` | Generación de imágenes |
|
||||
| `api.registerMusicGenerationProvider(...)` | Generación de música |
|
||||
| `api.registerVideoGenerationProvider(...)` | Generación de video |
|
||||
| `api.registerWebFetchProvider(...)` | Proveedor de obtención / scraping web |
|
||||
| `api.registerWebSearchProvider(...)` | Búsqueda web |
|
||||
|
||||
### Herramientas y comandos
|
||||
|
||||
| Método | Qué registra |
|
||||
| ------------------------------ | ------------------------------------------------- |
|
||||
| Método | Qué registra |
|
||||
| ------------------------------ | --------------------------------------------- |
|
||||
| `api.registerTool(tool, opts?)` | Herramienta de agente (requerida o `{ optional: true }`) |
|
||||
| `api.registerCommand(def)` | Comando personalizado (omite el LLM) |
|
||||
| `api.registerCommand(def)` | Comando personalizado (omite el LLM) |
|
||||
|
||||
Los comandos de Plugin pueden establecer `agentPromptGuidance` cuando el agente necesita una pista breve de enrutamiento propiedad del comando. Mantén ese texto sobre el comando en sí; no añadas política específica de proveedor o Plugin a los constructores de prompts del núcleo.
|
||||
Los comandos de Plugin pueden establecer `agentPromptGuidance` cuando el agente necesita una
|
||||
pista breve de enrutamiento propiedad del comando. Mantén ese texto centrado en el propio comando; no añadas
|
||||
política específica de proveedor o Plugin a los constructores de prompts del núcleo.
|
||||
|
||||
### Infraestructura
|
||||
|
||||
| Método | Qué registra |
|
||||
| ---------------------------------------------- | -------------------------------------------- |
|
||||
| `api.registerHook(events, handler, opts?)` | Hook de evento |
|
||||
| `api.registerHttpRoute(params)` | Endpoint HTTP del Gateway |
|
||||
| `api.registerGatewayMethod(name, handler)` | Método RPC del Gateway |
|
||||
| `api.registerGatewayDiscoveryService(service)` | Anunciante de descubrimiento del Gateway local |
|
||||
| `api.registerCli(registrar, opts?)` | Subcomando de CLI |
|
||||
| `api.registerService(service)` | Servicio en segundo plano |
|
||||
| `api.registerInteractiveHandler(registration)` | Manejador interactivo |
|
||||
| `api.registerAgentToolResultMiddleware(...)` | Middleware de resultado de herramienta en runtime |
|
||||
| Método | Qué registra |
|
||||
| ---------------------------------------------- | ----------------------------------------- |
|
||||
| `api.registerHook(events, handler, opts?)` | Hook de evento |
|
||||
| `api.registerHttpRoute(params)` | Endpoint HTTP del Gateway |
|
||||
| `api.registerGatewayMethod(name, handler)` | Método RPC del Gateway |
|
||||
| `api.registerGatewayDiscoveryService(service)` | Anunciador local de descubrimiento del Gateway |
|
||||
| `api.registerCli(registrar, opts?)` | Subcomando de CLI |
|
||||
| `api.registerService(service)` | Servicio en segundo plano |
|
||||
| `api.registerInteractiveHandler(registration)` | Manejador interactivo |
|
||||
| `api.registerAgentToolResultMiddleware(...)` | Middleware de runtime para resultados de herramientas |
|
||||
| `api.registerMemoryPromptSupplement(builder)` | Sección aditiva de prompt adyacente a memoria |
|
||||
| `api.registerMemoryCorpusSupplement(adapter)` | Corpus aditivo de búsqueda/lectura de memoria |
|
||||
|
||||
### Hooks de host para plugins de flujo de trabajo
|
||||
|
||||
Los hooks de host son las costuras del SDK para plugins que necesitan participar en el
|
||||
ciclo de vida del host en lugar de limitarse a añadir un proveedor, canal o herramienta. Son
|
||||
contratos genéricos; el modo Plan puede usarlos, pero también los flujos de trabajo de
|
||||
aprobación, puertas de política de espacio de trabajo, monitores en segundo plano,
|
||||
asistentes de configuración y plugins complementarios de UI.
|
||||
Los hooks de host son las costuras del SDK para plugins que necesitan participar en el ciclo de vida del host
|
||||
en lugar de solo añadir un proveedor, canal o herramienta. Son
|
||||
contratos genéricos; Plan Mode puede usarlos, pero también pueden hacerlo flujos de aprobación,
|
||||
compuertas de política de workspace, monitores en segundo plano, asistentes de configuración y plugins complementarios de UI.
|
||||
|
||||
| Método | Contrato que posee |
|
||||
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerSessionExtension(...)` | Estado de sesión propiedad del Plugin, compatible con JSON y proyectado mediante sesiones del Gateway |
|
||||
| Método | Contrato que posee |
|
||||
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerSessionExtension(...)` | Estado de sesión propiedad del Plugin, compatible con JSON, proyectado mediante sesiones del Gateway |
|
||||
| `api.enqueueNextTurnInjection(...)` | Contexto duradero exactamente una vez inyectado en el siguiente turno del agente para una sesión |
|
||||
| `api.registerTrustedToolPolicy(...)` | Política de herramientas previa al Plugin incluida/de confianza que puede bloquear o reescribir parámetros de herramienta |
|
||||
| `api.registerToolMetadata(...)` | Metadatos de visualización del catálogo de herramientas sin cambiar la implementación de la herramienta |
|
||||
| `api.registerCommand(...)` | Comandos de Plugin con alcance; los resultados de comando pueden establecer `continueAgent: true`; los comandos nativos de Discord admiten `descriptionLocalizations` |
|
||||
| `api.registerControlUiDescriptor(...)` | Descriptores de contribución de Control UI para superficies de sesión, herramienta, ejecución o configuración |
|
||||
| `api.registerRuntimeLifecycle(...)` | Devoluciones de llamada de limpieza para recursos de runtime propiedad del Plugin en rutas de reinicio/eliminación/recarga |
|
||||
| `api.registerAgentEventSubscription(...)` | Suscripciones saneadas a eventos para estado de flujo de trabajo y monitores |
|
||||
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Estado temporal de Plugin por ejecución limpiado en el ciclo de vida terminal de la ejecución |
|
||||
| `api.registerSessionSchedulerJob(...)` | Registros de trabajos del programador de sesiones propiedad del Plugin con limpieza determinista |
|
||||
| `api.registerTrustedToolPolicy(...)` | Política de herramientas pre-Plugin incluida/de confianza que puede bloquear o reescribir parámetros de herramientas |
|
||||
| `api.registerToolMetadata(...)` | Metadatos de visualización del catálogo de herramientas sin cambiar la implementación de la herramienta |
|
||||
| `api.registerCommand(...)` | Comandos de Plugin con ámbito; los resultados de comandos pueden establecer `continueAgent: true`; los comandos nativos de Discord admiten `descriptionLocalizations` |
|
||||
| `api.registerControlUiDescriptor(...)` | Descriptores de contribución de Control UI para superficies de sesión, herramienta, ejecución o ajustes |
|
||||
| `api.registerRuntimeLifecycle(...)` | Callbacks de limpieza para recursos de runtime propiedad del Plugin en rutas de restablecimiento/eliminación/recarga |
|
||||
| `api.registerAgentEventSubscription(...)` | Suscripciones saneadas a eventos para estado de flujo de trabajo y monitores |
|
||||
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Estado temporal de Plugin por ejecución que se limpia en el ciclo de vida terminal de la ejecución |
|
||||
| `api.registerSessionSchedulerJob(...)` | Registros de trabajos del programador de sesiones propiedad del Plugin con limpieza determinista |
|
||||
|
||||
Los contratos dividen la autoridad intencionalmente:
|
||||
|
||||
- Los plugins externos pueden poseer extensiones de sesión, descriptores de UI, comandos, metadatos de herramientas, inyecciones del siguiente turno y hooks normales.
|
||||
- Las políticas de herramientas de confianza se ejecutan antes de los hooks ordinarios `before_tool_call` y son solo para plugins incluidos porque participan en la política de seguridad del host.
|
||||
- La propiedad de comandos reservados es solo para plugins incluidos. Los plugins externos deben usar sus propios nombres de comando o alias.
|
||||
- `allowPromptInjection=false` desactiva hooks que mutan prompts, incluidos `agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`, campos de prompt del `before_agent_start` heredado y `enqueueNextTurnInjection`.
|
||||
- Los plugins externos pueden poseer extensiones de sesión, descriptores de UI, comandos, metadatos de herramientas, inyecciones de siguiente turno y hooks normales.
|
||||
- Las políticas de herramientas de confianza se ejecutan antes de los hooks ordinarios `before_tool_call` y son solo para incluidos porque participan en la política de seguridad del host.
|
||||
- La propiedad de comandos reservados es solo para incluidos. Los plugins externos deberían usar sus propios nombres de comando o alias.
|
||||
- `allowPromptInjection=false` desactiva hooks que mutan prompts, incluidos `agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`, campos de prompt de `before_agent_start` heredado y `enqueueNextTurnInjection`.
|
||||
|
||||
Ejemplos de consumidores que no son de Plan:
|
||||
|
||||
| Arquetipo de Plugin | Hooks usados |
|
||||
| Arquetipo de Plugin | Hooks usados |
|
||||
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Flujo de trabajo de aprobación | Extensión de sesión, continuación de comando, inyección del siguiente turno, descriptor de UI |
|
||||
| Puerta de política de presupuesto/espacio de trabajo | Política de herramientas de confianza, metadatos de herramientas, proyección de sesión |
|
||||
| Monitor de ciclo de vida en segundo plano | Limpieza de ciclo de vida de runtime, suscripción a eventos de agente, propiedad/limpieza del programador de sesiones, contribución de prompt de heartbeat, descriptor de UI |
|
||||
| Asistente de configuración u onboarding | Extensión de sesión, comandos con alcance, descriptor de Control UI |
|
||||
| Flujo de aprobación | Extensión de sesión, continuación de comando, inyección de siguiente turno, descriptor de UI |
|
||||
| Compuerta de política de presupuesto/workspace | Política de herramienta de confianza, metadatos de herramienta, proyección de sesión |
|
||||
| Monitor de ciclo de vida en segundo plano | Limpieza de ciclo de vida de runtime, suscripción a eventos de agente, propiedad/limpieza del programador de sesiones, contribución al prompt de heartbeat, descriptor de UI |
|
||||
| Asistente de configuración u onboarding | Extensión de sesión, comandos con ámbito, descriptor de Control UI |
|
||||
|
||||
<Note>
|
||||
Los espacios de nombres reservados de administración del núcleo (`config.*`, `exec.approvals.*`, `wizard.*`,
|
||||
`update.*`) siempre permanecen como `operator.admin`, incluso si un Plugin intenta asignar un
|
||||
alcance de método del Gateway más estrecho. Prefiere prefijos específicos de Plugin para
|
||||
ámbito más estrecho de método de Gateway. Prefiere prefijos específicos de Plugin para
|
||||
métodos propiedad del Plugin.
|
||||
</Note>
|
||||
|
||||
<Accordion title="Cuándo usar middleware de resultado de herramienta">
|
||||
<Accordion title="Cuándo usar middleware de resultados de herramientas">
|
||||
Los plugins incluidos pueden usar `api.registerAgentToolResultMiddleware(...)` cuando
|
||||
necesitan reescribir un resultado de herramienta después de la ejecución y antes de que el runtime
|
||||
devuelva ese resultado al modelo. Esta es la costura de confianza y neutral respecto al runtime
|
||||
@ -179,14 +179,18 @@ Ejemplos de consumidores que no son de Plan:
|
||||
|
||||
Los plugins incluidos deben declarar `contracts.agentToolResultMiddleware` para cada
|
||||
runtime objetivo, por ejemplo `["pi", "codex"]`. Los plugins externos
|
||||
no pueden registrar este middleware; conserva los hooks normales de plugins de OpenClaw para trabajo
|
||||
que no necesite temporización de resultado de herramienta previa al modelo. La antigua ruta de
|
||||
registro de fábrica de extensión integrada solo para Pi se eliminó.
|
||||
no pueden registrar este middleware; conserva los hooks normales de OpenClaw Plugin para trabajo
|
||||
que no necesite temporización de resultado de herramienta previa al modelo. La antigua ruta de registro de fábrica de
|
||||
extensión integrada solo de Pi se ha eliminado.
|
||||
</Accordion>
|
||||
|
||||
### Registro de descubrimiento del Gateway
|
||||
|
||||
`api.registerGatewayDiscoveryService(...)` permite que un plugin anuncie el Gateway activo en un transporte de descubrimiento local como mDNS/Bonjour. OpenClaw llama al servicio durante el inicio del Gateway cuando el descubrimiento local está habilitado, pasa los puertos actuales del Gateway y datos de pista TXT no secretos, y llama al controlador `stop` devuelto durante el apagado del Gateway.
|
||||
`api.registerGatewayDiscoveryService(...)` permite que un plugin anuncie el Gateway activo
|
||||
en un transporte de descubrimiento local como mDNS/Bonjour. OpenClaw llama al
|
||||
servicio durante el arranque del Gateway cuando el descubrimiento local está habilitado, pasa los
|
||||
puertos actuales del Gateway y datos de sugerencia TXT no secretos, y llama al manejador
|
||||
`stop` devuelto durante el apagado del Gateway.
|
||||
|
||||
```typescript
|
||||
api.registerGatewayDiscoveryService({
|
||||
@ -202,16 +206,21 @@ api.registerGatewayDiscoveryService({
|
||||
});
|
||||
```
|
||||
|
||||
Los plugins de descubrimiento de Gateway no deben tratar los valores TXT anunciados como secretos ni como autenticación. El descubrimiento es una pista de enrutamiento; la autenticación del Gateway y la fijación de TLS siguen siendo responsables de la confianza.
|
||||
Los plugins de descubrimiento del Gateway no deben tratar los valores TXT anunciados como secretos ni
|
||||
autenticación. El descubrimiento es una sugerencia de enrutamiento; la autenticación del Gateway y la fijación de TLS
|
||||
siguen siendo responsables de la confianza.
|
||||
|
||||
### Metadatos de registro de la CLI
|
||||
|
||||
`api.registerCli(registrar, opts?)` acepta dos tipos de metadatos de nivel superior:
|
||||
|
||||
- `commands`: raíces de comandos explícitas propiedad del registrador
|
||||
- `descriptors`: descriptores de comandos en tiempo de análisis usados para la ayuda de la CLI raíz, el enrutamiento y el registro diferido de la CLI del plugin
|
||||
- `descriptors`: descriptores de comandos en tiempo de análisis usados para la ayuda de la CLI raíz,
|
||||
el enrutamiento y el registro diferido de la CLI del plugin
|
||||
|
||||
Si quieres que un comando de plugin se mantenga con carga diferida en la ruta normal de la CLI raíz, proporciona `descriptors` que cubran cada raíz de comando de nivel superior expuesta por ese registrador.
|
||||
Si quieres que un comando de plugin permanezca cargado de forma diferida en la ruta normal de la CLI raíz,
|
||||
proporciona `descriptors` que cubran cada raíz de comando de nivel superior expuesta por ese
|
||||
registrador.
|
||||
|
||||
```typescript
|
||||
api.registerCli(
|
||||
@ -231,79 +240,95 @@ api.registerCli(
|
||||
);
|
||||
```
|
||||
|
||||
Usa `commands` por sí solo únicamente cuando no necesites el registro diferido en la CLI raíz. Esa ruta de compatibilidad inmediata sigue estando soportada, pero no instala marcadores de posición respaldados por descriptores para la carga diferida en tiempo de análisis.
|
||||
Usa `commands` por sí solo únicamente cuando no necesites el registro diferido de la CLI raíz.
|
||||
Esa ruta de compatibilidad inmediata sigue siendo compatible, pero no instala
|
||||
marcadores de posición respaldados por descriptores para la carga diferida en tiempo de análisis.
|
||||
|
||||
### Registro de backend de CLI
|
||||
### Registro de backend de la CLI
|
||||
|
||||
`api.registerCliBackend(...)` permite que un plugin sea propietario de la configuración predeterminada de un backend local de CLI de IA como `codex-cli`.
|
||||
`api.registerCliBackend(...)` permite que un plugin sea propietario de la configuración predeterminada de un backend local
|
||||
de CLI de IA como `codex-cli`.
|
||||
|
||||
- El `id` del backend se convierte en el prefijo del proveedor en referencias de modelo como `codex-cli/gpt-5`.
|
||||
- El `id` del backend se convierte en el prefijo de proveedor en referencias de modelo como `codex-cli/gpt-5`.
|
||||
- La `config` del backend usa la misma forma que `agents.defaults.cliBackends.<id>`.
|
||||
- La configuración del usuario sigue ganando. OpenClaw fusiona `agents.defaults.cliBackends.<id>` sobre el valor predeterminado del plugin antes de ejecutar la CLI.
|
||||
- Usa `normalizeConfig` cuando un backend necesite reescrituras de compatibilidad después de la fusión (por ejemplo, normalizar formas antiguas de flags).
|
||||
- La configuración de usuario sigue teniendo prioridad. OpenClaw fusiona `agents.defaults.cliBackends.<id>` sobre el
|
||||
valor predeterminado del plugin antes de ejecutar la CLI.
|
||||
- Usa `normalizeConfig` cuando un backend necesite reescrituras de compatibilidad después de la fusión
|
||||
(por ejemplo, normalizar formas antiguas de flags).
|
||||
- Usa `resolveExecutionArgs` para reescrituras de argv con alcance de solicitud que pertenezcan
|
||||
al dialecto de la CLI, como asignar los niveles de pensamiento de OpenClaw a un flag nativo de esfuerzo.
|
||||
|
||||
### Slots exclusivos
|
||||
|
||||
| Método | Qué registra |
|
||||
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Motor de contexto (uno activo a la vez). El callback `assemble()` recibe `availableTools` y `citationsMode` para que el motor pueda adaptar añadidos al prompt. |
|
||||
| `api.registerMemoryCapability(capability)` | Capacidad de memoria unificada |
|
||||
| `api.registerMemoryPromptSection(builder)` | Constructor de sección de prompt de memoria |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | Resolver de plan de vaciado de memoria |
|
||||
| `api.registerMemoryRuntime(runtime)` | Adaptador de runtime de memoria |
|
||||
| Método | Qué registra |
|
||||
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Motor de contexto (uno activo a la vez). El callback `assemble()` recibe `availableTools` y `citationsMode` para que el motor pueda adaptar las adiciones al prompt. |
|
||||
| `api.registerMemoryCapability(capability)` | Capacidad de memoria unificada |
|
||||
| `api.registerMemoryPromptSection(builder)` | Constructor de sección de prompt de memoria |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | Resolvedor de plan de vaciado de memoria |
|
||||
| `api.registerMemoryRuntime(runtime)` | Adaptador de runtime de memoria |
|
||||
|
||||
### Adaptadores de embedding de memoria
|
||||
### Adaptadores de embeddings de memoria
|
||||
|
||||
| Método | Qué registra |
|
||||
| ---------------------------------------------- | ------------------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | Adaptador de embedding de memoria para el plugin activo |
|
||||
| Método | Qué registra |
|
||||
| ---------------------------------------------- | ---------------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | Adaptador de embeddings de memoria para el plugin activo |
|
||||
|
||||
- `registerMemoryCapability` es la API exclusiva preferida para plugins de memoria.
|
||||
- `registerMemoryCapability` también puede exponer `publicArtifacts.listArtifacts(...)` para que los plugins complementarios puedan consumir artefactos de memoria exportados mediante `openclaw/plugin-sdk/memory-host-core` en vez de acceder al diseño privado de un plugin de memoria específico.
|
||||
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` y `registerMemoryRuntime` son API exclusivas de plugins de memoria compatibles con legado.
|
||||
- `MemoryFlushPlan.model` puede fijar el turno de vaciado a una referencia exacta de `provider/model`, como `ollama/qwen3:8b`, sin heredar la cadena de fallback activa.
|
||||
- `registerMemoryEmbeddingProvider` permite que el plugin de memoria activo registre uno o más ids de adaptadores de embedding (por ejemplo `openai`, `gemini` o un id personalizado definido por el plugin).
|
||||
- La configuración del usuario, como `agents.defaults.memorySearch.provider` y `agents.defaults.memorySearch.fallback`, se resuelve contra esos ids de adaptador registrados.
|
||||
- `registerMemoryCapability` también puede exponer `publicArtifacts.listArtifacts(...)`
|
||||
para que los plugins complementarios puedan consumir artefactos de memoria exportados mediante
|
||||
`openclaw/plugin-sdk/memory-host-core` en lugar de acceder al diseño privado de un
|
||||
plugin de memoria específico.
|
||||
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` y
|
||||
`registerMemoryRuntime` son API exclusivas de plugins de memoria compatibles con legado.
|
||||
- `MemoryFlushPlan.model` puede fijar el turno de vaciado a una referencia exacta de `provider/model`
|
||||
como `ollama/qwen3:8b`, sin heredar la cadena de fallback activa.
|
||||
- `registerMemoryEmbeddingProvider` permite que el plugin de memoria activo registre uno
|
||||
o más ids de adaptador de embeddings (por ejemplo `openai`, `gemini` o un id personalizado
|
||||
definido por el plugin).
|
||||
- La configuración de usuario como `agents.defaults.memorySearch.provider` y
|
||||
`agents.defaults.memorySearch.fallback` se resuelve contra esos ids de adaptador
|
||||
registrados.
|
||||
|
||||
### Eventos y ciclo de vida
|
||||
|
||||
| Método | Qué hace |
|
||||
| Método | Qué hace |
|
||||
| -------------------------------------------- | ----------------------------- |
|
||||
| `api.on(hookName, handler, opts?)` | Hook de ciclo de vida tipado |
|
||||
| `api.on(hookName, handler, opts?)` | Hook de ciclo de vida tipado |
|
||||
| `api.onConversationBindingResolved(handler)` | Callback de enlace de conversación |
|
||||
|
||||
Consulta [hooks de Plugin](/es/plugins/hooks) para ver ejemplos, nombres de hooks comunes y semántica de protección.
|
||||
Consulta [Hooks de Plugin](/es/plugins/hooks) para ver ejemplos, nombres de hooks comunes y semánticas de protección.
|
||||
|
||||
### Semántica de decisión de hooks
|
||||
### Semántica de decisiones de hooks
|
||||
|
||||
- `before_tool_call`: devolver `{ block: true }` es terminal. Una vez que cualquier controlador lo establece, se omiten los controladores de menor prioridad.
|
||||
- `before_tool_call`: devolver `{ block: false }` se trata como ausencia de decisión (igual que omitir `block`), no como una sobrescritura.
|
||||
- `before_install`: devolver `{ block: true }` es terminal. Una vez que cualquier controlador lo establece, se omiten los controladores de menor prioridad.
|
||||
- `before_install`: devolver `{ block: false }` se trata como ausencia de decisión (igual que omitir `block`), no como una sobrescritura.
|
||||
- `reply_dispatch`: devolver `{ handled: true, ... }` es terminal. Una vez que cualquier controlador reclama el despacho, se omiten los controladores de menor prioridad y la ruta predeterminada de despacho del modelo.
|
||||
- `message_sending`: devolver `{ cancel: true }` es terminal. Una vez que cualquier controlador lo establece, se omiten los controladores de menor prioridad.
|
||||
- `message_sending`: devolver `{ cancel: false }` se trata como ausencia de decisión (igual que omitir `cancel`), no como una sobrescritura.
|
||||
- `message_received`: usa el campo tipado `threadId` cuando necesites enrutamiento entrante de hilo/tema. Mantén `metadata` para extras específicos del canal.
|
||||
- `message_sending`: usa los campos de enrutamiento tipados `replyToId` / `threadId` antes de recurrir a `metadata` específico del canal.
|
||||
- `gateway_start`: usa `ctx.config`, `ctx.workspaceDir` y `ctx.getCron?.()` para el estado de inicio propiedad del gateway en vez de depender de hooks internos `gateway:startup`.
|
||||
- `cron_changed`: observa los cambios del ciclo de vida de cron propiedad del gateway. Usa `event.job?.state?.nextRunAtMs` y `ctx.getCron?.()` al sincronizar planificadores externos de activación, y mantén OpenClaw como fuente de verdad para las comprobaciones de vencimiento y la ejecución.
|
||||
- `before_tool_call`: devolver `{ block: true }` es terminal. Una vez que cualquier manejador lo establece, los manejadores de menor prioridad se omiten.
|
||||
- `before_tool_call`: devolver `{ block: false }` se trata como ausencia de decisión (igual que omitir `block`), no como una anulación.
|
||||
- `before_install`: devolver `{ block: true }` es terminal. Una vez que cualquier manejador lo establece, los manejadores de menor prioridad se omiten.
|
||||
- `before_install`: devolver `{ block: false }` se trata como ausencia de decisión (igual que omitir `block`), no como una anulación.
|
||||
- `reply_dispatch`: devolver `{ handled: true, ... }` es terminal. Una vez que cualquier manejador reclama el despacho, los manejadores de menor prioridad y la ruta predeterminada de despacho del modelo se omiten.
|
||||
- `message_sending`: devolver `{ cancel: true }` es terminal. Una vez que cualquier manejador lo establece, los manejadores de menor prioridad se omiten.
|
||||
- `message_sending`: devolver `{ cancel: false }` se trata como ausencia de decisión (igual que omitir `cancel`), no como una anulación.
|
||||
- `message_received`: usa el campo tipado `threadId` cuando necesites enrutamiento entrante por hilo/tema. Mantén `metadata` para extras específicos del canal.
|
||||
- `message_sending`: usa los campos tipados de enrutamiento `replyToId` / `threadId` antes de recurrir a `metadata` específico del canal.
|
||||
- `gateway_start`: usa `ctx.config`, `ctx.workspaceDir` y `ctx.getCron?.()` para el estado de arranque propiedad del gateway en lugar de depender de hooks internos `gateway:startup`.
|
||||
- `cron_changed`: observa los cambios de ciclo de vida de Cron propiedad del gateway. Usa `event.job?.state?.nextRunAtMs` y `ctx.getCron?.()` al sincronizar programadores de activación externos, y mantén OpenClaw como la fuente de verdad para las comprobaciones de vencimiento y la ejecución.
|
||||
|
||||
### Campos del objeto API
|
||||
|
||||
| Campo | Tipo | Descripción |
|
||||
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `api.id` | `string` | Id del Plugin |
|
||||
| `api.name` | `string` | Nombre para mostrar |
|
||||
| `api.version` | `string?` | Versión del Plugin (opcional) |
|
||||
| `api.description` | `string?` | Descripción del Plugin (opcional) |
|
||||
| `api.source` | `string` | Ruta de origen del Plugin |
|
||||
| `api.rootDir` | `string?` | Directorio raíz del Plugin (opcional) |
|
||||
| `api.config` | `OpenClawConfig` | Instantánea de configuración actual (instantánea activa de runtime en memoria cuando esté disponible) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | Configuración específica del Plugin desde `plugins.entries.<id>.config` |
|
||||
| `api.runtime` | `PluginRuntime` | [Helpers de runtime](/es/plugins/sdk-runtime) |
|
||||
| `api.logger` | `PluginLogger` | Logger acotado (`debug`, `info`, `warn`, `error`) |
|
||||
| `api.registrationMode` | `PluginRegistrationMode` | Modo de carga actual; `"setup-runtime"` es la ventana ligera de inicio/configuración previa a la entrada completa |
|
||||
| `api.resolvePath(input)` | `(string) => string` | Resuelve una ruta relativa a la raíz del plugin |
|
||||
| `api.id` | `string` | Id del plugin |
|
||||
| `api.name` | `string` | Nombre visible |
|
||||
| `api.version` | `string?` | Versión del plugin (opcional) |
|
||||
| `api.description` | `string?` | Descripción del plugin (opcional) |
|
||||
| `api.source` | `string` | Ruta de origen del plugin |
|
||||
| `api.rootDir` | `string?` | Directorio raíz del plugin (opcional) |
|
||||
| `api.config` | `OpenClawConfig` | Snapshot de configuración actual (snapshot de runtime en memoria activo cuando esté disponible) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | Configuración específica del plugin desde `plugins.entries.<id>.config` |
|
||||
| `api.runtime` | `PluginRuntime` | [Helpers de runtime](/es/plugins/sdk-runtime) |
|
||||
| `api.logger` | `PluginLogger` | Logger con alcance (`debug`, `info`, `warn`, `error`) |
|
||||
| `api.registrationMode` | `PluginRegistrationMode` | Modo de carga actual; `"setup-runtime"` es la ventana ligera de arranque/configuración previa a la entrada completa |
|
||||
| `api.resolvePath(input)` | `(string) => string` | Resuelve la ruta relativa a la raíz del plugin |
|
||||
|
||||
## Convención de módulos internos
|
||||
|
||||
@ -323,19 +348,30 @@ my-plugin/
|
||||
`./runtime-api.ts`. La ruta del SDK es solo el contrato externo.
|
||||
</Warning>
|
||||
|
||||
Las superficies públicas de plugins incluidos cargadas por fachada (`api.ts`, `runtime-api.ts`, `index.ts`, `setup-entry.ts` y archivos de entrada públicos similares) prefieren la instantánea de configuración de runtime activa cuando OpenClaw ya se está ejecutando. Si aún no existe ninguna instantánea de runtime, recurren al archivo de configuración resuelto en disco. Las fachadas de plugins incluidos empaquetados deben cargarse mediante los cargadores de fachadas de plugins de OpenClaw; las importaciones directas desde `dist/extensions/...` omiten el manifiesto y las comprobaciones del sidecar de runtime que las instalaciones empaquetadas usan para el código propiedad del plugin.
|
||||
Las superficies públicas de plugins incluidos cargadas por fachada (`api.ts`, `runtime-api.ts`,
|
||||
`index.ts`, `setup-entry.ts` y archivos de entrada públicos similares) prefieren el
|
||||
snapshot de configuración de runtime activo cuando OpenClaw ya se está ejecutando. Si todavía no existe ningún snapshot
|
||||
de runtime, recurren al archivo de configuración resuelto en disco.
|
||||
Las fachadas de plugins incluidos empaquetados deben cargarse mediante los cargadores de fachadas de plugins de
|
||||
OpenClaw; las importaciones directas desde `dist/extensions/...` omiten el manifiesto
|
||||
y las comprobaciones de sidecar de runtime que las instalaciones empaquetadas usan para código propiedad del plugin.
|
||||
|
||||
Los plugins de proveedor pueden exponer un barrel de contrato local y estrecho del plugin cuando un helper es intencionadamente específico del proveedor y aún no pertenece a una subruta genérica del SDK. Ejemplos incluidos:
|
||||
Los plugins de proveedor pueden exponer un barrel de contrato estrecho y local al plugin cuando un
|
||||
helper es intencionalmente específico del proveedor y aún no pertenece a una subruta genérica del SDK.
|
||||
Ejemplos incluidos:
|
||||
|
||||
- **Anthropic**: superficie pública `api.ts` / `contract-api.ts` para helpers de beta-header de Claude y streaming de `service_tier`.
|
||||
- **`@openclaw/openai-provider`**: `api.ts` exporta constructores de proveedor, helpers de modelo predeterminado y constructores de proveedor en tiempo real.
|
||||
- **`@openclaw/openrouter-provider`**: `api.ts` exporta el constructor de proveedor más helpers de onboarding/configuración.
|
||||
- **Anthropic**: superficie pública `api.ts` / `contract-api.ts` para helpers de streaming de
|
||||
beta-header de Claude y `service_tier`.
|
||||
- **`@openclaw/openai-provider`**: `api.ts` exporta constructores de proveedor,
|
||||
helpers de modelo predeterminado y constructores de proveedor en tiempo real.
|
||||
- **`@openclaw/openrouter-provider`**: `api.ts` exporta el constructor de proveedor
|
||||
junto con helpers de onboarding/configuración.
|
||||
|
||||
<Warning>
|
||||
El código de producción de extensiones también debe evitar importaciones de `openclaw/plugin-sdk/<other-plugin>`.
|
||||
Si un helper realmente es compartido, promuévelo a una subruta neutral del SDK
|
||||
Si un helper es realmente compartido, promuévelo a una subruta neutral del SDK
|
||||
como `openclaw/plugin-sdk/speech`, `.../provider-model-shared` u otra
|
||||
superficie orientada a capacidades en vez de acoplar dos plugins entre sí.
|
||||
superficie orientada a capacidades en lugar de acoplar dos plugins entre sí.
|
||||
</Warning>
|
||||
|
||||
## Relacionado
|
||||
@ -344,7 +380,7 @@ Los plugins de proveedor pueden exponer un barrel de contrato local y estrecho d
|
||||
<Card title="Puntos de entrada" icon="door-open" href="/es/plugins/sdk-entrypoints">
|
||||
Opciones de `definePluginEntry` y `defineChannelPluginEntry`.
|
||||
</Card>
|
||||
<Card title="Ayudantes de runtime" icon="gears" href="/es/plugins/sdk-runtime">
|
||||
<Card title="Ayudantes de tiempo de ejecución" icon="gears" href="/es/plugins/sdk-runtime">
|
||||
Referencia completa del espacio de nombres `api.runtime`.
|
||||
</Card>
|
||||
<Card title="Configuración inicial y configuración" icon="sliders" href="/es/plugins/sdk-setup">
|
||||
@ -357,6 +393,6 @@ Los plugins de proveedor pueden exponer un barrel de contrato local y estrecho d
|
||||
Migración desde superficies obsoletas.
|
||||
</Card>
|
||||
<Card title="Aspectos internos de Plugin" icon="diagram-project" href="/es/plugins/architecture">
|
||||
Arquitectura profunda y modelo de capacidades.
|
||||
Arquitectura detallada y modelo de capacidades.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -1,40 +1,40 @@
|
||||
---
|
||||
read_when:
|
||||
- Quieres defensa en profundidad contra ataques SSRF y de reenlace DNS
|
||||
- Desea contar con defensa en profundidad contra ataques SSRF y de revinculación de DNS
|
||||
- Configuración de un proxy de reenvío externo para el tráfico en tiempo de ejecución de OpenClaw
|
||||
summary: Cómo enrutar el tráfico HTTP y WebSocket del entorno de ejecución de OpenClaw a través de un proxy de filtrado gestionado por el operador
|
||||
summary: Cómo enrutar el tráfico HTTP y WebSocket en tiempo de ejecución de OpenClaw a través de un proxy de filtrado administrado por el operador
|
||||
title: Proxy de red
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T05:29:05Z"
|
||||
generated_at: "2026-05-04T18:24:34Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: fc7140c5ced0e7454a6f85d1ea8f3256bbd28cc0cb42eeafe8e5e6439b90e3f0
|
||||
source_hash: eedbf3bac14800c34c7ca2e3b6879dac360a88d51b5b7449ddf41a4dd471648b
|
||||
source_path: security/network-proxy.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# Proxy de red
|
||||
|
||||
OpenClaw puede enrutar el tráfico HTTP y WebSocket en tiempo de ejecución a través de un proxy de reenvío administrado por el operador. Esta es una defensa opcional en profundidad para despliegues que quieren control centralizado de salida, protección SSRF más sólida y mejor auditabilidad de red.
|
||||
OpenClaw puede enrutar el tráfico HTTP y WebSocket en tiempo de ejecución a través de un proxy de reenvío administrado por el operador. Esto es una defensa en profundidad opcional para despliegues que quieren control central de egreso, protección SSRF más fuerte y mejor auditabilidad de red.
|
||||
|
||||
OpenClaw no incluye, descarga, inicia, configura ni certifica ningún proxy. Tú ejecutas la tecnología de proxy que encaja con tu entorno, y OpenClaw enruta los clientes HTTP y WebSocket normales locales al proceso a través de él.
|
||||
OpenClaw no incluye, descarga, inicia, configura ni certifica un proxy. Tú ejecutas la tecnología de proxy que se ajuste a tu entorno, y OpenClaw enruta los clientes HTTP y WebSocket normales locales al proceso a través de él.
|
||||
|
||||
## ¿Por qué usar un proxy?
|
||||
|
||||
Un proxy da a los operadores un único punto de control de red para el tráfico HTTP y WebSocket saliente. Eso puede ser útil incluso más allá del refuerzo contra SSRF:
|
||||
Un proxy ofrece a los operadores un único punto de control de red para el tráfico HTTP y WebSocket saliente. Eso puede ser útil incluso fuera del endurecimiento contra SSRF:
|
||||
|
||||
- Política central: mantén una única política de salida en lugar de depender de que cada punto de llamada HTTP de la aplicación aplique correctamente las reglas de red.
|
||||
- Comprobaciones en el momento de conexión: evalúa el destino después de la resolución DNS e inmediatamente antes de que el proxy abra la conexión ascendente.
|
||||
- Defensa contra DNS rebinding: reduce la brecha entre una comprobación DNS a nivel de aplicación y la conexión saliente real.
|
||||
- Cobertura más amplia de JavaScript: enruta clientes ordinarios como `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch y similares por la misma ruta.
|
||||
- Auditabilidad: registra destinos permitidos y denegados en el límite de salida.
|
||||
- Control operativo: aplica reglas de destino, segmentación de red, límites de tasa o listas de permitidos salientes sin reconstruir OpenClaw.
|
||||
- Política central: mantener una sola política de egreso en lugar de depender de que cada punto de llamada HTTP de la aplicación aplique correctamente las reglas de red.
|
||||
- Comprobaciones en tiempo de conexión: evaluar el destino después de la resolución DNS e inmediatamente antes de que el proxy abra la conexión ascendente.
|
||||
- Defensa contra DNS rebinding: reducir la brecha entre una comprobación DNS a nivel de aplicación y la conexión saliente real.
|
||||
- Cobertura más amplia de JavaScript: enrutar clientes ordinarios de `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch y similares por la misma ruta.
|
||||
- Auditabilidad: registrar destinos permitidos y denegados en el límite de egreso.
|
||||
- Control operativo: aplicar reglas de destino, segmentación de red, límites de tasa o listas de permitidos salientes sin reconstruir OpenClaw.
|
||||
|
||||
El enrutamiento por proxy es una barrera a nivel de proceso para la salida HTTP y WebSocket normal. Da a los operadores una ruta cerrada ante fallos para enrutar clientes HTTP JavaScript compatibles a través de su propio proxy filtrante, pero no es un sandbox de red a nivel de sistema operativo y no hace que OpenClaw certifique la política de destinos del proxy.
|
||||
El enrutamiento por proxy es una barandilla a nivel de proceso para el egreso HTTP y WebSocket normal. Ofrece a los operadores una ruta de cierre ante fallos para enrutar clientes HTTP de JavaScript compatibles a través de su propio proxy de filtrado, pero no es un sandbox de red a nivel de sistema operativo y no hace que OpenClaw certifique la política de destinos del proxy.
|
||||
|
||||
## Cómo OpenClaw enruta el tráfico
|
||||
|
||||
Cuando `proxy.enabled=true` y se configura una URL de proxy, los procesos protegidos en tiempo de ejecución, como `openclaw gateway run`, `openclaw node run` y `openclaw agent --local`, enrutan la salida HTTP y WebSocket normal a través del proxy configurado:
|
||||
Cuando `proxy.enabled=true` y se configura una URL de proxy, los procesos en tiempo de ejecución protegidos como `openclaw gateway run`, `openclaw node run` y `openclaw agent --local` enrutan el egreso HTTP y WebSocket normal a través del proxy configurado:
|
||||
|
||||
```text
|
||||
OpenClaw process
|
||||
@ -43,27 +43,27 @@ OpenClaw process
|
||||
WebSocket clients -> operator-managed filtering proxy -> public internet
|
||||
```
|
||||
|
||||
El contrato público es el comportamiento de enrutamiento, no los hooks internos de Node usados para implementarlo. Los clientes WebSocket del plano de control de OpenClaw Gateway usan una ruta directa estrecha para el tráfico RPC de Gateway de local loopback cuando la URL del Gateway usa `localhost` o una IP de loopback literal como `127.0.0.1` o `[::1]`. Esa ruta del plano de control debe poder alcanzar Gateways de loopback incluso cuando el proxy del operador bloquea destinos de loopback. Las solicitudes HTTP y WebSocket normales en tiempo de ejecución siguen usando el proxy configurado.
|
||||
El contrato público es el comportamiento de enrutamiento, no los hooks internos de Node utilizados para implementarlo. Los clientes WebSocket del plano de control de OpenClaw Gateway usan una ruta directa estrecha para el tráfico RPC de Gateway con local loopback cuando la URL del Gateway usa `localhost` o una IP literal de loopback como `127.0.0.1` o `[::1]`. Esa ruta del plano de control debe poder alcanzar Gateways de loopback incluso cuando el proxy del operador bloquea destinos de loopback. Las solicitudes HTTP y WebSocket normales en tiempo de ejecución siguen usando el proxy configurado.
|
||||
|
||||
Internamente, OpenClaw usa dos hooks de enrutamiento a nivel de proceso para esta función:
|
||||
|
||||
- El enrutamiento del despachador de Undici cubre `fetch`, clientes respaldados por undici y transportes que proporcionan su propio despachador de undici.
|
||||
- El enrutamiento de `global-agent` cubre llamadores del núcleo de Node `node:http` y `node:https`, incluidas muchas bibliotecas construidas sobre `http.request`, `https.request`, `http.get` y `https.get`. El modo de proxy administrado fuerza ese agente global para que los agentes HTTP explícitos de Node no omitan accidentalmente el proxy del operador.
|
||||
- El enrutamiento de `global-agent` cubre llamadores del núcleo de Node `node:http` y `node:https`, incluidas muchas bibliotecas construidas sobre `http.request`, `https.request`, `http.get` y `https.get`. El modo de proxy administrado fuerza ese agente global para que los agentes HTTP explícitos de Node no eviten accidentalmente el proxy del operador.
|
||||
|
||||
Algunos plugins poseen transportes personalizados que necesitan cableado explícito del proxy incluso cuando existe enrutamiento a nivel de proceso. Por ejemplo, el transporte de Bot API de Telegram usa su propio despachador HTTP/1 de undici y, por lo tanto, respeta las variables de entorno de proxy del proceso más el fallback administrado `OPENCLAW_PROXY_URL` en esa ruta de transporte específica del propietario.
|
||||
Algunos plugins poseen transportes personalizados que necesitan cableado explícito de proxy incluso cuando existe enrutamiento a nivel de proceso. Por ejemplo, el transporte de la Bot API de Telegram usa su propio despachador HTTP/1 de undici y por lo tanto respeta el entorno de proxy del proceso más el respaldo administrado `OPENCLAW_PROXY_URL` en esa ruta de transporte específica del propietario.
|
||||
|
||||
La URL del proxy en sí debe usar `http://`. Los destinos HTTPS siguen siendo compatibles a través del proxy con HTTP `CONNECT`; esto solo significa que OpenClaw espera un listener de proxy de reenvío HTTP plano como `http://127.0.0.1:3128`.
|
||||
La propia URL del proxy debe usar `http://`. Los destinos HTTPS siguen siendo compatibles a través del proxy con HTTP `CONNECT`; esto solo significa que OpenClaw espera un listener de proxy de reenvío HTTP plano como `http://127.0.0.1:3128`.
|
||||
|
||||
Mientras el proxy está activo, OpenClaw limpia `no_proxy`, `NO_PROXY` y `GLOBAL_AGENT_NO_PROXY`. Esas listas de omisión se basan en destino, así que dejar `localhost` o `127.0.0.1` allí permitiría que objetivos SSRF de alto riesgo se saltaran el proxy filtrante.
|
||||
Mientras el proxy está activo, OpenClaw limpia `no_proxy`, `NO_PROXY` y `GLOBAL_AGENT_NO_PROXY`. Esas listas de omisión están basadas en destinos, así que dejar `localhost` o `127.0.0.1` allí permitiría que objetivos SSRF de alto riesgo se saltaran el proxy de filtrado.
|
||||
|
||||
Al apagarse, OpenClaw restaura el entorno de proxy anterior y restablece el estado de enrutamiento de proceso en caché.
|
||||
|
||||
## Términos de proxy relacionados
|
||||
|
||||
- `proxy.enabled` / `proxy.proxyUrl`: enrutamiento saliente mediante proxy de reenvío para la salida en tiempo de ejecución de OpenClaw. Esta página documenta esa función.
|
||||
- `gateway.auth.mode: "trusted-proxy"`: autenticación entrante mediante proxy inverso con identidad para el acceso al Gateway. Consulta [Autenticación de proxy de confianza](/es/gateway/trusted-proxy-auth).
|
||||
- `proxy.enabled` / `proxy.proxyUrl`: enrutamiento por proxy de reenvío saliente para el egreso en tiempo de ejecución de OpenClaw. Esta página documenta esa función.
|
||||
- `gateway.auth.mode: "trusted-proxy"`: autenticación entrante de proxy inverso consciente de identidad para acceso al Gateway. Consulta [Autenticación de proxy de confianza](/es/gateway/trusted-proxy-auth).
|
||||
- `openclaw proxy`: proxy local de depuración e inspector de captura para desarrollo y soporte. Consulta [openclaw proxy](/es/cli/proxy).
|
||||
- Configuraciones de proxy específicas de canal o proveedor: anulaciones específicas del propietario para un transporte particular. Prefiere el proxy de red administrado cuando el objetivo sea el control centralizado de salida en todo el runtime.
|
||||
- Configuraciones de proxy específicas de canal o proveedor: sobrescrituras específicas del propietario para un transporte particular. Prefiere el proxy de red administrado cuando el objetivo sea el control central de egreso en todo el runtime.
|
||||
|
||||
## Configuración
|
||||
|
||||
@ -81,7 +81,7 @@ OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run
|
||||
|
||||
`proxy.proxyUrl` tiene precedencia sobre `OPENCLAW_PROXY_URL`.
|
||||
|
||||
Si `enabled=true` pero no se configura una URL de proxy válida, los comandos protegidos fallan al iniciar en lugar de volver al acceso directo a la red.
|
||||
Si `enabled=true` pero no se configura una URL de proxy válida, los comandos protegidos fallan al iniciar en lugar de recurrir al acceso directo a la red.
|
||||
|
||||
Para servicios de gateway administrados iniciados con `openclaw gateway start`, prefiere almacenar la URL en la configuración:
|
||||
|
||||
@ -92,9 +92,9 @@ openclaw gateway install --force
|
||||
openclaw gateway start
|
||||
```
|
||||
|
||||
El fallback de entorno es mejor para ejecuciones en primer plano. Si lo usas con un servicio instalado, coloca `OPENCLAW_PROXY_URL` en el entorno persistente del servicio, como `$OPENCLAW_STATE_DIR/.env` o `~/.openclaw/.env`, y luego reinstala el servicio para que launchd, systemd o Scheduled Tasks inicie el gateway con ese valor.
|
||||
El respaldo de entorno es mejor para ejecuciones en primer plano. Si lo usas con un servicio instalado, coloca `OPENCLAW_PROXY_URL` en el entorno durable del servicio, como `$OPENCLAW_STATE_DIR/.env` o `~/.openclaw/.env`, y luego reinstala el servicio para que launchd, systemd o Scheduled Tasks inicie el gateway con ese valor.
|
||||
|
||||
Para comandos `openclaw --container ...`, OpenClaw reenvía `OPENCLAW_PROXY_URL` a la CLI hija dirigida al contenedor cuando está establecida. La URL debe ser accesible desde dentro del contenedor; `127.0.0.1` se refiere al propio contenedor, no al host. OpenClaw rechaza URL de proxy de loopback para comandos dirigidos a contenedores a menos que anules explícitamente esa comprobación de seguridad.
|
||||
Para comandos `openclaw --container ...`, OpenClaw reenvía `OPENCLAW_PROXY_URL` al CLI hijo dirigido al contenedor cuando está definido. La URL debe ser alcanzable desde dentro del contenedor; `127.0.0.1` se refiere al propio contenedor, no al host. OpenClaw rechaza URLs de proxy de loopback para comandos dirigidos a contenedores a menos que sobrescribas explícitamente esa comprobación de seguridad.
|
||||
|
||||
## Requisitos del proxy
|
||||
|
||||
@ -102,41 +102,41 @@ La política del proxy es el límite de seguridad. OpenClaw no puede verificar q
|
||||
|
||||
Configura el proxy para:
|
||||
|
||||
- Enlazarse solo a loopback o a una interfaz privada de confianza.
|
||||
- Vincularse solo a loopback o a una interfaz privada de confianza.
|
||||
- Restringir el acceso para que solo el proceso, host, contenedor o cuenta de servicio de OpenClaw pueda usarlo.
|
||||
- Resolver los destinos por sí mismo y bloquear las IP de destino después de la resolución DNS.
|
||||
- Aplicar la política en el momento de conexión tanto para solicitudes HTTP planas como para túneles HTTPS `CONNECT`.
|
||||
- Resolver destinos por sí mismo y bloquear IPs de destino después de la resolución DNS.
|
||||
- Aplicar la política en tiempo de conexión tanto para solicitudes HTTP planas como para túneles HTTPS `CONNECT`.
|
||||
- Rechazar omisiones basadas en destino para rangos de loopback, privados, link-local, metadatos, multicast, reservados o de documentación.
|
||||
- Evitar listas de permitidos por nombre de host a menos que confíes plenamente en la ruta de resolución DNS.
|
||||
- Evitar listas de permitidos de nombres de host a menos que confíes plenamente en la ruta de resolución DNS.
|
||||
- Registrar destino, decisión, estado y motivo sin registrar cuerpos de solicitud, encabezados de autorización, cookies u otros secretos.
|
||||
- Mantener la política del proxy bajo control de versiones y revisar los cambios como configuración sensible a la seguridad.
|
||||
|
||||
## Destinos bloqueados recomendados
|
||||
|
||||
Usa esta lista de denegación como punto de partida para cualquier proxy de reenvío, firewall o política de salida.
|
||||
Usa esta lista de denegación como punto de partida para cualquier proxy de reenvío, firewall o política de egreso.
|
||||
|
||||
La lógica de clasificación a nivel de aplicación de OpenClaw vive en `src/infra/net/ssrf.ts` y `src/shared/net/ip.ts`. Los hooks de paridad relevantes son `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` y el manejo del centinela IPv4 integrado para NAT64, 6to4, Teredo, ISATAP y formas IPv4-mapped. Esos archivos son referencias útiles al mantener una política externa de proxy, pero OpenClaw no exporta ni aplica automáticamente esas reglas en tu proxy.
|
||||
La lógica de clasificación a nivel de aplicación de OpenClaw vive en `src/infra/net/ssrf.ts` y `src/shared/net/ip.ts`. Los hooks de paridad relevantes son `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` y el manejo centinela IPv4 incrustado para NAT64, 6to4, Teredo, ISATAP y formas mapeadas a IPv4. Esos archivos son referencias útiles al mantener una política de proxy externa, pero OpenClaw no exporta ni aplica automáticamente esas reglas en tu proxy.
|
||||
|
||||
| Rango o host | Por qué bloquear |
|
||||
| ------------------------------------------------------------------------------------ | ---------------------------------------------------- |
|
||||
| `127.0.0.0/8`, `localhost`, `localhost.localdomain` | Loopback IPv4 |
|
||||
| `::1/128` | Loopback IPv6 |
|
||||
| `0.0.0.0/8`, `::/128` | Direcciones no especificadas y de esta red |
|
||||
| `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | Redes privadas RFC1918 |
|
||||
| Rango o host | Por qué bloquear |
|
||||
| ------------------------------------------------------------------------------------ | --------------------------------------------------- |
|
||||
| `127.0.0.0/8`, `localhost`, `localhost.localdomain` | Loopback IPv4 |
|
||||
| `::1/128` | Loopback IPv6 |
|
||||
| `0.0.0.0/8`, `::/128` | Direcciones no especificadas y de esta red |
|
||||
| `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | Redes privadas RFC1918 |
|
||||
| `169.254.0.0/16`, `fe80::/10` | Direcciones link-local y rutas comunes de metadatos en la nube |
|
||||
| `169.254.169.254`, `metadata.google.internal` | Servicios de metadatos en la nube |
|
||||
| `100.64.0.0/10` | Espacio de direcciones compartido de NAT de grado operador |
|
||||
| `198.18.0.0/15`, `2001:2::/48` | Rangos de benchmarking |
|
||||
| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Rangos de uso especial y documentación |
|
||||
| `224.0.0.0/4`, `ff00::/8` | Multicast |
|
||||
| `240.0.0.0/4` | IPv4 reservado |
|
||||
| `fc00::/7`, `fec0::/10` | Rangos IPv6 locales/privados |
|
||||
| `100::/64`, `2001:20::/28` | Rangos IPv6 discard y ORCHIDv2 |
|
||||
| `64:ff9b::/96`, `64:ff9b:1::/48` | Prefijos NAT64 con IPv4 integrado |
|
||||
| `2002::/16`, `2001::/32` | 6to4 y Teredo con IPv4 integrado |
|
||||
| `::/96`, `::ffff:0:0/96` | IPv6 compatible con IPv4 e IPv6 IPv4-mapped |
|
||||
| `169.254.169.254`, `metadata.google.internal` | Servicios de metadatos en la nube |
|
||||
| `100.64.0.0/10` | Espacio de direcciones compartidas de NAT de grado operador |
|
||||
| `198.18.0.0/15`, `2001:2::/48` | Rangos de benchmarking |
|
||||
| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Rangos de uso especial y documentación |
|
||||
| `224.0.0.0/4`, `ff00::/8` | Multicast |
|
||||
| `240.0.0.0/4` | IPv4 reservado |
|
||||
| `fc00::/7`, `fec0::/10` | Rangos IPv6 locales/privados |
|
||||
| `100::/64`, `2001:20::/28` | Rangos IPv6 de descarte y ORCHIDv2 |
|
||||
| `64:ff9b::/96`, `64:ff9b:1::/48` | Prefijos NAT64 con IPv4 incrustado |
|
||||
| `2002::/16`, `2001::/32` | 6to4 y Teredo con IPv4 incrustado |
|
||||
| `::/96`, `::ffff:0:0/96` | IPv6 compatible con IPv4 y mapeado a IPv4 |
|
||||
|
||||
Si tu proveedor de nube o plataforma de red documenta hosts de metadatos o rangos reservados adicionales, añádelos también.
|
||||
Si tu proveedor de nube o plataforma de red documenta hosts de metadatos o rangos reservados adicionales, agrégalos también.
|
||||
|
||||
## Validación
|
||||
|
||||
@ -146,9 +146,9 @@ Valida el proxy desde el mismo host, contenedor o cuenta de servicio que ejecuta
|
||||
openclaw proxy validate --proxy-url http://127.0.0.1:3128
|
||||
```
|
||||
|
||||
De forma predeterminada, cuando no se proporcionan destinos personalizados, el comando comprueba que `https://example.com/` tenga éxito e inicia un canario temporal de loopback que el proxy no debe alcanzar. La comprobación denegada predeterminada pasa cuando el proxy devuelve una respuesta de denegación que no sea 2xx o bloquea el canario con un fallo de transporte; falla si una respuesta correcta llega al canario. Si no hay ningún proxy habilitado y configurado, la validación informa de un problema de configuración; usa `--proxy-url` para una comprobación preliminar puntual antes de cambiar la configuración. Usa `--allowed-url` y `--denied-url` para probar expectativas específicas del despliegue. Los destinos denegados personalizados son cerrados ante fallos: cualquier respuesta HTTP significa que el destino fue accesible a través del proxy, y cualquier error de transporte se informa como inconcluso porque OpenClaw no puede demostrar que el proxy bloqueó un origen accesible. Si la validación falla, el comando sale con código 1.
|
||||
De forma predeterminada, cuando no se proporcionan destinos personalizados, el comando comprueba que `https://example.com/` tenga éxito e inicia un canario temporal de loopback que el proxy no debe alcanzar. La comprobación denegada predeterminada pasa cuando el proxy devuelve una respuesta de denegación no 2xx o bloquea el canario con un fallo de transporte; falla si una respuesta correcta llega al canario. Si no hay un proxy habilitado y configurado, la validación informa un problema de configuración; usa `--proxy-url` para una comprobación previa puntual antes de cambiar la configuración. Usa `--allowed-url` y `--denied-url` para probar expectativas específicas del despliegue. Agrega `--apns-reachable` para verificar también que la entrega directa HTTP/2 de APNs pueda abrir un túnel CONNECT a través del proxy y recibir una respuesta APNs de sandbox; la prueba usa un token de proveedor intencionalmente inválido, por lo que se espera `403 InvalidProviderToken` y cuenta como alcanzable. Los destinos denegados personalizados cierran ante fallos: cualquier respuesta HTTP significa que el destino fue alcanzable a través del proxy, y cualquier error de transporte se informa como no concluyente porque OpenClaw no puede demostrar que el proxy bloqueó un origen alcanzable. Si la validación falla, el comando sale con código 1.
|
||||
|
||||
Usa `--json` para automatización. La salida JSON contiene el resultado global, la fuente efectiva de configuración del proxy, cualquier error de configuración y cada comprobación de destino. Las credenciales de la URL del proxy se redactan en la salida de texto y JSON:
|
||||
Usa `--json` para automatización. La salida JSON contiene el resultado general, la fuente efectiva de configuración del proxy, cualquier error de configuración y cada comprobación de destino. Las credenciales de URL de proxy se redactan en la salida de texto y JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -165,6 +165,12 @@ Usa `--json` para automatización. La salida JSON contiene el resultado global,
|
||||
"url": "https://example.com/",
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"kind": "apns",
|
||||
"url": "https://api.sandbox.push.apple.com",
|
||||
"ok": true,
|
||||
"status": 403
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -178,9 +184,9 @@ curl -x http://127.0.0.1:3128 http://127.0.0.1/
|
||||
curl -x http://127.0.0.1:3128 http://169.254.169.254/
|
||||
```
|
||||
|
||||
La solicitud pública debería completarse correctamente. Las solicitudes de loopback y de metadatos deberían ser bloqueadas por el proxy. Para `openclaw proxy validate`, el canario de loopback integrado puede distinguir una denegación del proxy de un origen accesible. Las comprobaciones personalizadas con `--denied-url` no tienen ese canario, así que trata tanto las respuestas HTTP como los fallos de transporte ambiguos como fallos de validación, salvo que tu proxy exponga una señal de denegación específica del despliegue que puedas verificar por separado.
|
||||
La solicitud pública debería realizarse correctamente. El proxy debería bloquear las solicitudes de loopback y de metadatos. Para `openclaw proxy validate`, la comprobación de loopback integrada puede distinguir una denegación del proxy de un origen alcanzable. Las comprobaciones personalizadas de `--denied-url` no tienen esa comprobación, así que trata tanto las respuestas HTTP como los fallos de transporte ambiguos como fallos de validación, a menos que tu proxy exponga una señal de denegación específica del despliegue que puedas verificar por separado.
|
||||
|
||||
Luego habilita el enrutamiento de proxy de OpenClaw:
|
||||
Luego habilita el enrutamiento por proxy de OpenClaw:
|
||||
|
||||
```bash
|
||||
openclaw config set proxy.enabled true
|
||||
@ -188,7 +194,7 @@ openclaw config set proxy.proxyUrl http://127.0.0.1:3128
|
||||
openclaw gateway run
|
||||
```
|
||||
|
||||
o configura:
|
||||
o establece:
|
||||
|
||||
```yaml
|
||||
proxy:
|
||||
@ -198,11 +204,11 @@ proxy:
|
||||
|
||||
## Límites
|
||||
|
||||
- El proxy mejora la cobertura para clientes HTTP y WebSocket de JavaScript locales al proceso, pero no es un sandbox de red a nivel del sistema operativo.
|
||||
- Los sockets sin procesar de `net`, `tls` y `http2`, los complementos nativos y los procesos secundarios pueden omitir el enrutamiento de proxy a nivel de Node, salvo que hereden y respeten las variables de entorno del proxy.
|
||||
- IRC es un canal TCP/TLS sin procesar fuera del enrutamiento de proxy directo administrado por el operador. En despliegues que requieren que todo el tráfico de salida pase por ese proxy directo, configura `channels.irc.enabled=false`, salvo que el tráfico de salida directo de IRC esté aprobado explícitamente.
|
||||
- El proxy de depuración local es una herramienta de diagnóstico, y su reenvío ascendente directo para solicitudes de proxy y túneles CONNECT está deshabilitado de forma predeterminada mientras el modo de proxy administrado está activo; habilita el reenvío directo solo para diagnósticos locales aprobados.
|
||||
- Las WebUI locales del usuario y los servidores de modelos locales deberían incluirse en la lista de permitidos de la política de proxy del operador cuando sea necesario; OpenClaw no expone una omisión general de la red local para ellos.
|
||||
- La omisión del proxy del plano de control del Gateway está limitada intencionalmente a `localhost` y a URL de IP de loopback literales. Usa `ws://127.0.0.1:18789`, `ws://[::1]:18789` o `ws://localhost:18789` para conexiones directas locales al plano de control del Gateway; otros nombres de host se enrutan como tráfico ordinario basado en nombres de host.
|
||||
- El proxy mejora la cobertura para clientes HTTP y WebSocket de JavaScript locales al proceso, pero no es un sandbox de red a nivel de sistema operativo.
|
||||
- Los sockets sin procesar `net`, `tls` y `http2`, los addons nativos y los procesos secundarios pueden omitir el enrutamiento por proxy a nivel de Node, a menos que hereden y respeten las variables de entorno del proxy.
|
||||
- IRC es un canal TCP/TLS sin procesar fuera del enrutamiento por proxy de reenvío gestionado por el operador. En despliegues que requieren que todo el tráfico saliente pase por ese proxy de reenvío, establece `channels.irc.enabled=false` a menos que el tráfico saliente directo de IRC esté aprobado explícitamente.
|
||||
- El proxy de depuración local es una herramienta de diagnóstico, y su reenvío ascendente directo para solicitudes de proxy y túneles CONNECT está deshabilitado de forma predeterminada mientras el modo de proxy gestionado está activo; habilita el reenvío directo solo para diagnósticos locales aprobados.
|
||||
- Las WebUIs locales del usuario y los servidores de modelos locales deben incluirse en la lista de permitidos de la política de proxy del operador cuando sea necesario; OpenClaw no expone una omisión general de red local para ellos.
|
||||
- La omisión del proxy del plano de control del Gateway se limita intencionalmente a `localhost` y a URL con IP de loopback literales. Usa `ws://127.0.0.1:18789`, `ws://[::1]:18789` o `ws://localhost:18789` para conexiones locales directas al plano de control del Gateway; otros nombres de host se enrutan como tráfico ordinario basado en nombres de host.
|
||||
- OpenClaw no inspecciona, prueba ni certifica tu política de proxy.
|
||||
- Trata los cambios en la política de proxy como cambios operativos sensibles para la seguridad.
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
---
|
||||
read_when:
|
||||
- Ajuste del razonamiento, fast-mode o el análisis sintáctico o los valores predeterminados de la directiva verbose
|
||||
- Ajustar el razonamiento, el modo rápido o el análisis sintáctico o los valores predeterminados de directivas detalladas
|
||||
summary: Sintaxis de directivas para /think, /fast, /verbose, /trace y visibilidad del razonamiento
|
||||
title: Niveles de pensamiento
|
||||
title: Niveles de razonamiento
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T02:26:04Z"
|
||||
generated_at: "2026-05-04T18:24:45Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 6fa1b0a2b5f7b93a706488c3ad39dfe08c08eed0bdd30880eb4c07d730ee4d4f
|
||||
source_hash: fcd1cd76ca5d0b08656e0629df656ad8aa037201d8de68093b3e46eb0708f811
|
||||
source_path: tools/thinking.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -20,124 +20,125 @@ x-i18n:
|
||||
- low → “think hard”
|
||||
- medium → “think harder”
|
||||
- high → “ultrathink” (presupuesto máximo)
|
||||
- xhigh → “ultrathink+” (modelos GPT-5.2+ y Codex, además del esfuerzo de Anthropic Claude Opus 4.7)
|
||||
- adaptive → pensamiento adaptativo administrado por el proveedor (compatible con Claude 4.6 en Anthropic/Bedrock, Anthropic Claude Opus 4.7 y el pensamiento dinámico de Google Gemini)
|
||||
- max → razonamiento máximo del proveedor (Anthropic Claude Opus 4.7; Ollama lo asigna a su esfuerzo nativo `think` más alto)
|
||||
- xhigh → “ultrathink+” (modelos GPT-5.2+ y Codex, más esfuerzo de Anthropic Claude Opus 4.7)
|
||||
- adaptive → pensamiento adaptativo gestionado por el proveedor (compatible con Claude 4.6 en Anthropic/Bedrock, Anthropic Claude Opus 4.7 y el pensamiento dinámico de Google Gemini)
|
||||
- max → razonamiento máximo del proveedor (Anthropic Claude Opus 4.7; Ollama lo asigna a su esfuerzo `think` nativo más alto)
|
||||
- `x-high`, `x_high`, `extra-high`, `extra high` y `extra_high` se asignan a `xhigh`.
|
||||
- `highest` se asigna a `high`.
|
||||
- Notas del proveedor:
|
||||
- Los menús y selectores de pensamiento se controlan mediante perfiles de proveedor. Los plugins de proveedor declaran el conjunto exacto de niveles para el modelo seleccionado, incluidas etiquetas como el binario `on`.
|
||||
- Los menús y selectores de pensamiento se controlan mediante perfiles de proveedor. Los plugins de proveedor declaran el conjunto exacto de niveles para el modelo seleccionado, incluidas etiquetas como el valor binario `on`.
|
||||
- `adaptive`, `xhigh` y `max` solo se anuncian para perfiles de proveedor/modelo que los admiten. Las directivas escritas para niveles no compatibles se rechazan con las opciones válidas de ese modelo.
|
||||
- Los niveles no compatibles almacenados existentes se reasignan según el rango del perfil del proveedor. `adaptive` retrocede a `medium` en modelos no adaptativos, mientras que `xhigh` y `max` retroceden al mayor nivel no `off` compatible para el modelo seleccionado.
|
||||
- Los modelos Anthropic Claude 4.6 usan `adaptive` de forma predeterminada cuando no se define ningún nivel de pensamiento explícito.
|
||||
- Anthropic Claude Opus 4.7 no usa pensamiento adaptativo de forma predeterminada. El valor predeterminado de esfuerzo de su API sigue siendo propiedad del proveedor, salvo que definas explícitamente un nivel de pensamiento.
|
||||
- Los niveles no compatibles almacenados existentes se reasignan según el rango del perfil de proveedor. `adaptive` vuelve a `medium` en modelos no adaptativos, mientras que `xhigh` y `max` vuelven al nivel no `off` más alto compatible con el modelo seleccionado.
|
||||
- Los modelos Anthropic Claude 4.6 usan `adaptive` de forma predeterminada cuando no se establece ningún nivel de pensamiento explícito.
|
||||
- Anthropic Claude Opus 4.7 no usa pensamiento adaptativo de forma predeterminada. El valor predeterminado de esfuerzo de su API sigue siendo propiedad del proveedor, a menos que establezcas explícitamente un nivel de pensamiento.
|
||||
- Anthropic Claude Opus 4.7 asigna `/think xhigh` a pensamiento adaptativo más `output_config.effort: "xhigh"`, porque `/think` es una directiva de pensamiento y `xhigh` es la configuración de esfuerzo de Opus 4.7.
|
||||
- Anthropic Claude Opus 4.7 también expone `/think max`; se asigna a la misma ruta de esfuerzo máximo propiedad del proveedor.
|
||||
- Los modelos DeepSeek V4 exponen `/think xhigh|max`; ambos se asignan a DeepSeek `reasoning_effort: "max"`, mientras que los niveles inferiores no `off` se asignan a `high`.
|
||||
- Los modelos de Ollama con capacidad de pensamiento exponen `/think low|medium|high|max`; `max` se asigna al nativo `think: "high"` porque la API nativa de Ollama acepta las cadenas de esfuerzo `low`, `medium` y `high`.
|
||||
- Los modelos OpenAI GPT asignan `/think` mediante el soporte de esfuerzo específico del modelo de la Responses API. `/think off` envía `reasoning.effort: "none"` solo cuando el modelo de destino lo admite; de lo contrario, OpenClaw omite la carga útil de razonamiento deshabilitado en lugar de enviar un valor no compatible.
|
||||
- Las entradas de catálogo personalizadas compatibles con OpenAI pueden optar por `/think xhigh` configurando `models.providers.<provider>.models[].compat.supportedReasoningEfforts` para incluir `"xhigh"`. Esto usa los mismos metadatos de compatibilidad que asignan las cargas útiles salientes de esfuerzo de razonamiento de OpenAI, por lo que los menús, la validación de sesión, el CLI del agente y `llm-task` coinciden con el comportamiento de transporte.
|
||||
- Las referencias obsoletas configuradas de OpenRouter Hunter Alpha omiten la inyección de razonamiento por proxy porque esa ruta retirada podía devolver texto de respuesta final mediante campos de razonamiento.
|
||||
- Los modelos de Ollama con capacidad de pensamiento exponen `/think low|medium|high|max`; `max` se asigna al valor nativo `think: "high"` porque la API nativa de Ollama acepta las cadenas de esfuerzo `low`, `medium` y `high`.
|
||||
- Los modelos OpenAI GPT asignan `/think` mediante la compatibilidad de esfuerzo específica del modelo en la Responses API. `/think off` envía `reasoning.effort: "none"` solo cuando el modelo de destino lo admite; de lo contrario, OpenClaw omite la carga de razonamiento deshabilitada en lugar de enviar un valor no compatible.
|
||||
- Las entradas de catálogo personalizadas compatibles con OpenAI pueden optar por `/think xhigh` estableciendo `models.providers.<provider>.models[].compat.supportedReasoningEfforts` para incluir `"xhigh"`. Esto usa los mismos metadatos de compatibilidad que asignan las cargas de esfuerzo de razonamiento salientes de OpenAI, por lo que los menús, la validación de sesión, la CLI del agente y `llm-task` concuerdan con el comportamiento de transporte.
|
||||
- Las referencias configuradas obsoletas de OpenRouter Hunter Alpha omiten la inyección de razonamiento del proxy porque esa ruta retirada podía devolver texto de respuesta final mediante campos de razonamiento.
|
||||
- Google Gemini asigna `/think adaptive` al pensamiento dinámico propiedad del proveedor de Gemini. Las solicitudes de Gemini 3 omiten un `thinkingLevel` fijo, mientras que las solicitudes de Gemini 2.5 envían `thinkingBudget: -1`; los niveles fijos siguen asignándose al `thinkingLevel` o presupuesto de Gemini más cercano para esa familia de modelos.
|
||||
- MiniMax (`minimax/*`) en la ruta de streaming compatible con Anthropic usa de forma predeterminada `thinking: { type: "disabled" }`, salvo que definas explícitamente pensamiento en parámetros de modelo o parámetros de solicitud. Esto evita deltas filtrados de `reasoning_content` desde el formato de stream no nativo de Anthropic de MiniMax.
|
||||
- MiniMax (`minimax/*`) en la ruta de streaming compatible con Anthropic usa de forma predeterminada `thinking: { type: "disabled" }`, a menos que establezcas explícitamente el pensamiento en parámetros de modelo o de solicitud. Esto evita deltas filtrados de `reasoning_content` desde el formato de streaming no nativo de Anthropic de MiniMax.
|
||||
- Z.AI (`zai/*`) solo admite pensamiento binario (`on`/`off`). Cualquier nivel que no sea `off` se trata como `on` (asignado a `low`).
|
||||
- Moonshot (`moonshot/*`) asigna `/think off` a `thinking: { type: "disabled" }` y cualquier nivel que no sea `off` a `thinking: { type: "enabled" }`. Cuando el pensamiento está habilitado, Moonshot solo acepta `tool_choice` `auto|none`; OpenClaw normaliza los valores incompatibles a `auto`.
|
||||
- Moonshot (`moonshot/*`) asigna `/think off` a `thinking: { type: "disabled" }` y cualquier nivel que no sea `off` a `thinking: { type: "enabled" }`. Cuando el pensamiento está habilitado, Moonshot solo acepta `tool_choice` `auto|none`; OpenClaw normaliza valores incompatibles a `auto`.
|
||||
|
||||
## Orden de resolución
|
||||
|
||||
1. Directiva en línea en el mensaje (se aplica solo a ese mensaje).
|
||||
2. Anulación de sesión (definida al enviar un mensaje que solo contiene la directiva).
|
||||
2. Sobrescritura de sesión (establecida al enviar un mensaje que contiene solo la directiva).
|
||||
3. Valor predeterminado por agente (`agents.list[].thinkingDefault` en la configuración).
|
||||
4. Valor predeterminado global (`agents.defaults.thinkingDefault` en la configuración).
|
||||
5. Reserva: valor predeterminado declarado por el proveedor cuando está disponible; de lo contrario, los modelos con capacidad de razonamiento se resuelven a `medium` o al nivel no `off` compatible más cercano para ese modelo, y los modelos sin razonamiento permanecen en `off`.
|
||||
5. Respaldo: valor predeterminado declarado por el proveedor cuando esté disponible; de lo contrario, los modelos con capacidad de razonamiento se resuelven a `medium` o al nivel no `off` compatible más cercano para ese modelo, y los modelos sin razonamiento permanecen en `off`.
|
||||
|
||||
## Configurar un valor predeterminado de sesión
|
||||
## Establecer un valor predeterminado de sesión
|
||||
|
||||
- Envía un mensaje que sea **solo** la directiva (se permiten espacios en blanco), por ejemplo, `/think:medium` o `/t high`.
|
||||
- Eso queda fijado para la sesión actual (por remitente de forma predeterminada); se borra con `/think:off` o con el restablecimiento por inactividad de la sesión.
|
||||
- Se envía una respuesta de confirmación (`Thinking level set to high.` / `Thinking disabled.`). Si el nivel no es válido (por ejemplo, `/thinking big`), el comando se rechaza con una sugerencia y el estado de la sesión no cambia.
|
||||
- Envía un mensaje que sea **solo** la directiva (se permiten espacios en blanco), por ejemplo `/think:medium` o `/t high`.
|
||||
- Eso se conserva para la sesión actual (por remitente de forma predeterminada); se borra con `/think:off` o con el reinicio por inactividad de la sesión.
|
||||
- Se envía una respuesta de confirmación (`Thinking level set to high.` / `Thinking disabled.`). Si el nivel no es válido (por ejemplo, `/thinking big`), el comando se rechaza con una sugerencia y el estado de la sesión queda sin cambios.
|
||||
- Envía `/think` (o `/think:`) sin argumento para ver el nivel de pensamiento actual.
|
||||
|
||||
## Aplicación por agente
|
||||
|
||||
- **Pi integrado**: el nivel resuelto se pasa al runtime del agente Pi en proceso.
|
||||
- **Backend de CLI Claude**: los niveles que no son off se pasan a Claude Code como `--effort` cuando se usa `claude-cli`; consulta [backends de CLI](/es/gateway/cli-backends).
|
||||
|
||||
## Modo rápido (/fast)
|
||||
|
||||
- Niveles: `on|off`.
|
||||
- Un mensaje que solo contiene la directiva alterna una anulación de modo rápido de sesión y responde `Fast mode enabled.` / `Fast mode disabled.`.
|
||||
- Un mensaje que solo contiene la directiva alterna una sobrescritura de modo rápido de sesión y responde `Fast mode enabled.` / `Fast mode disabled.`.
|
||||
- Envía `/fast` (o `/fast status`) sin modo para ver el estado efectivo actual del modo rápido.
|
||||
- OpenClaw resuelve el modo rápido en este orden:
|
||||
1. `/fast on|off` en línea o como única directiva
|
||||
2. Anulación de sesión
|
||||
1. `/fast on|off` en línea/solo directiva
|
||||
2. Sobrescritura de sesión
|
||||
3. Valor predeterminado por agente (`agents.list[].fastModeDefault`)
|
||||
4. Configuración por modelo: `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
5. Reserva: `off`
|
||||
5. Respaldo: `off`
|
||||
- Para `openai/*`, el modo rápido se asigna al procesamiento prioritario de OpenAI enviando `service_tier=priority` en solicitudes Responses compatibles.
|
||||
- Para `openai-codex/*`, el modo rápido envía la misma marca `service_tier=priority` en Codex Responses. OpenClaw mantiene un único conmutador `/fast` compartido entre ambas rutas de autenticación.
|
||||
- Para solicitudes públicas directas `anthropic/*`, incluido el tráfico autenticado con OAuth enviado a `api.anthropic.com`, el modo rápido se asigna a los niveles de servicio de Anthropic: `/fast on` define `service_tier=auto`, `/fast off` define `service_tier=standard_only`.
|
||||
- Para `openai-codex/*`, el modo rápido envía el mismo indicador `service_tier=priority` en Codex Responses. OpenClaw mantiene un único interruptor `/fast` compartido entre ambas rutas de autenticación.
|
||||
- Para solicitudes públicas directas `anthropic/*`, incluido el tráfico autenticado con OAuth enviado a `api.anthropic.com`, el modo rápido se asigna a los niveles de servicio de Anthropic: `/fast on` establece `service_tier=auto`, `/fast off` establece `service_tier=standard_only`.
|
||||
- Para `minimax/*` en la ruta compatible con Anthropic, `/fast on` (o `params.fastMode: true`) reescribe `MiniMax-M2.7` como `MiniMax-M2.7-highspeed`.
|
||||
- Los parámetros de modelo explícitos Anthropic `serviceTier` / `service_tier` anulan el valor predeterminado de modo rápido cuando ambos están configurados. OpenClaw sigue omitiendo la inyección de nivel de servicio de Anthropic para URL base de proxy que no sean Anthropic.
|
||||
- Los parámetros de modelo Anthropic explícitos `serviceTier` / `service_tier` sobrescriben el valor predeterminado del modo rápido cuando ambos están establecidos. OpenClaw sigue omitiendo la inyección de nivel de servicio de Anthropic para URL base de proxy que no sean de Anthropic.
|
||||
- `/status` muestra `Fast` solo cuando el modo rápido está habilitado.
|
||||
|
||||
## Directivas detalladas (/verbose o /v)
|
||||
|
||||
- Niveles: `on` (mínimo) | `full` | `off` (predeterminado).
|
||||
- Un mensaje que solo contiene la directiva alterna el modo detallado de sesión y responde `Verbose logging enabled.` / `Verbose logging disabled.`; los niveles no válidos devuelven una sugerencia sin cambiar el estado.
|
||||
- `/verbose off` almacena una anulación de sesión explícita; bórrala mediante la UI de sesiones eligiendo `inherit`.
|
||||
- La directiva en línea afecta solo a ese mensaje; en los demás casos se aplican los valores predeterminados de sesión/globales.
|
||||
- `/verbose off` almacena una sobrescritura de sesión explícita; bórrala mediante la UI de Sessions eligiendo `inherit`.
|
||||
- La directiva en línea afecta solo a ese mensaje; los valores predeterminados de sesión/globales se aplican en los demás casos.
|
||||
- Envía `/verbose` (o `/verbose:`) sin argumento para ver el nivel detallado actual.
|
||||
- Cuando el modo detallado está activado, los agentes que emiten resultados de herramientas estructurados (Pi, otros agentes JSON) devuelven cada llamada de herramienta como su propio mensaje solo de metadatos, con el prefijo `<emoji> <tool-name>: <arg>` cuando está disponible. Estos resúmenes de herramientas se envían en cuanto se inicia cada herramienta (burbujas separadas), no como deltas de streaming.
|
||||
- Los resúmenes de fallos de herramientas permanecen visibles en modo normal, pero los sufijos de detalle de error sin procesar se ocultan salvo que el modo detallado sea `on` o `full`.
|
||||
- Cuando el modo detallado está en `full`, las salidas de herramientas también se reenvían después de completarse (burbuja separada, truncada a una longitud segura). Si alternas `/verbose on|full|off` mientras una ejecución está en curso, las burbujas de herramientas posteriores respetan la nueva configuración.
|
||||
- `agents.defaults.toolProgressDetail` controla la forma de los resúmenes de herramientas de `/verbose` y las líneas de herramientas de borrador de progreso. Usa `"explain"` (predeterminado) para etiquetas humanas compactas como `🛠️ Exec: checking JS syntax`; usa `"raw"` cuando también quieras anexar el comando/detalle sin procesar para depuración. `agents.list[].toolProgressDetail` por agente anula el valor predeterminado.
|
||||
- Cuando el modo detallado está activado, los agentes que emiten resultados de herramientas estructurados (Pi, otros agentes JSON) envían cada llamada de herramienta como su propio mensaje solo de metadatos, con el prefijo `<emoji> <tool-name>: <arg>` cuando está disponible. Estos resúmenes de herramientas se envían tan pronto como cada herramienta se inicia (burbujas separadas), no como deltas de streaming.
|
||||
- Los resúmenes de fallos de herramientas permanecen visibles en modo normal, pero los sufijos con detalle de error sin procesar se ocultan a menos que el modo detallado sea `on` o `full`.
|
||||
- Cuando el modo detallado es `full`, las salidas de herramientas también se reenvían después de completarse (burbuja separada, truncada a una longitud segura). Si alternas `/verbose on|full|off` mientras una ejecución está en curso, las burbujas de herramientas posteriores respetan la nueva configuración.
|
||||
- `agents.defaults.toolProgressDetail` controla la forma de los resúmenes de herramientas de `/verbose` y las líneas de herramientas de borrador de progreso. Usa `"explain"` (predeterminado) para etiquetas humanas compactas como `🛠️ Exec: checking JS syntax`; usa `"raw"` cuando también quieras anexar el comando/detalle sin procesar para depuración. `agents.list[].toolProgressDetail` por agente sobrescribe el valor predeterminado.
|
||||
- `explain`: `🛠️ Exec: check JS syntax for /tmp/app.js`
|
||||
- `raw`: `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js`
|
||||
|
||||
## Directivas de traza de Plugin (/trace)
|
||||
|
||||
- Niveles: `on` | `off` (predeterminado).
|
||||
- Un mensaje que solo contiene la directiva alterna la salida de traza de plugin de sesión y responde `Plugin trace enabled.` / `Plugin trace disabled.`.
|
||||
- La directiva en línea afecta solo a ese mensaje; en los demás casos se aplican los valores predeterminados de sesión/globales.
|
||||
- Un mensaje que solo contiene la directiva alterna la salida de traza de Plugin de sesión y responde `Plugin trace enabled.` / `Plugin trace disabled.`.
|
||||
- La directiva en línea afecta solo a ese mensaje; los valores predeterminados de sesión/globales se aplican en los demás casos.
|
||||
- Envía `/trace` (o `/trace:`) sin argumento para ver el nivel de traza actual.
|
||||
- `/trace` es más estrecho que `/verbose`: solo expone líneas de traza/depuración propiedad del plugin, como resúmenes de depuración de Active Memory.
|
||||
- Las líneas de traza pueden aparecer en `/status` y como un mensaje de diagnóstico de seguimiento después de la respuesta normal del asistente.
|
||||
- `/trace` es más limitado que `/verbose`: solo expone líneas de traza/depuración propiedad del plugin, como resúmenes de depuración de Active Memory.
|
||||
- Las líneas de traza pueden aparecer en `/status` y como un mensaje de diagnóstico posterior después de la respuesta normal del asistente.
|
||||
|
||||
## Visibilidad del razonamiento (/reasoning)
|
||||
|
||||
- Niveles: `on|off|stream`.
|
||||
- Un mensaje que solo contiene la directiva alterna si los bloques de pensamiento se muestran en las respuestas.
|
||||
- Cuando está habilitado, el razonamiento se envía como un **mensaje separado** con el prefijo `Reasoning:`.
|
||||
- `stream` (solo Telegram): transmite el razonamiento en la burbuja de borrador de Telegram mientras se genera la respuesta, y luego envía la respuesta final sin razonamiento.
|
||||
- `stream` (solo Telegram): transmite el razonamiento a la burbuja de borrador de Telegram mientras se genera la respuesta y luego envía la respuesta final sin razonamiento.
|
||||
- Alias: `/reason`.
|
||||
- Envía `/reasoning` (o `/reasoning:`) sin argumento para ver el nivel de razonamiento actual.
|
||||
- Orden de resolución: directiva en línea, luego anulación de sesión, luego valor predeterminado por agente (`agents.list[].reasoningDefault`), luego reserva (`off`).
|
||||
- Orden de resolución: directiva en línea, luego sobrescritura de sesión, luego valor predeterminado por agente (`agents.list[].reasoningDefault`), luego respaldo (`off`).
|
||||
|
||||
Las etiquetas de razonamiento de modelos locales mal formadas se manejan de forma conservadora. Los bloques cerrados `<think>...</think>` permanecen ocultos en respuestas normales, y el razonamiento sin cerrar después de texto ya visible también se oculta. Si una respuesta está completamente envuelta en una única etiqueta de apertura sin cerrar y de otro modo se entregaría como texto vacío, OpenClaw elimina la etiqueta de apertura mal formada y entrega el texto restante.
|
||||
Las etiquetas de razonamiento de modelos locales con formato incorrecto se manejan de forma conservadora. Los bloques cerrados `<think>...</think>` permanecen ocultos en respuestas normales, y el razonamiento no cerrado después de texto ya visible también se oculta. Si una respuesta está totalmente envuelta en una sola etiqueta de apertura no cerrada y, de otro modo, se entregaría como texto vacío, OpenClaw elimina la etiqueta de apertura con formato incorrecto y entrega el texto restante.
|
||||
|
||||
## Relacionado
|
||||
|
||||
- La documentación del modo elevado está en [Modo elevado](/es/tools/elevated).
|
||||
- La documentación del modo elevado está en [modo elevado](/es/tools/elevated).
|
||||
|
||||
## Heartbeats
|
||||
|
||||
- El cuerpo de la sonda Heartbeat es el prompt de Heartbeat configurado (predeterminado: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Las directivas en línea en un mensaje de Heartbeat se aplican como de costumbre (pero evita cambiar valores predeterminados de sesión desde Heartbeats).
|
||||
- La entrega de Heartbeat se limita de forma predeterminada a la carga útil final. Para enviar también el mensaje `Reasoning:` separado (cuando esté disponible), define `agents.defaults.heartbeat.includeReasoning: true` o `agents.list[].heartbeat.includeReasoning: true` por agente.
|
||||
- El cuerpo del sondeo Heartbeat es el prompt de Heartbeat configurado (predeterminado: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Las directivas en línea en un mensaje de Heartbeat se aplican como de costumbre (pero evita cambiar valores predeterminados de sesión desde Heartbeats).
|
||||
- La entrega de Heartbeat usa de forma predeterminada solo la carga final. Para enviar también el mensaje separado `Reasoning:` (cuando esté disponible), establece `agents.defaults.heartbeat.includeReasoning: true` o `agents.list[].heartbeat.includeReasoning: true` por agente.
|
||||
|
||||
## UI de chat web
|
||||
|
||||
- El selector de pensamiento del chat web refleja el nivel almacenado de la sesión desde el almacén/configuración de sesión entrante cuando se carga la página.
|
||||
- Elegir otro nivel escribe la anulación de sesión inmediatamente mediante `sessions.patch`; no espera al siguiente envío y no es una anulación `thinkingOnce` de un solo uso.
|
||||
- La primera opción siempre es `Default (<resolved level>)`, donde el valor predeterminado resuelto proviene del perfil de pensamiento del proveedor del modelo de la sesión activa más la misma lógica de reserva que usan `/status` y `session_status`.
|
||||
- El selector usa `thinkingLevels` devuelto por la fila/valores predeterminados de sesión del Gateway, con `thinkingOptions` conservado como lista heredada de etiquetas. La UI del navegador no mantiene su propia lista regex de proveedores; los plugins son propietarios de los conjuntos de niveles específicos de modelo.
|
||||
- `/think:<level>` sigue funcionando y actualiza el mismo nivel almacenado de sesión, por lo que las directivas del chat y el selector permanecen sincronizados.
|
||||
- Elegir otro nivel escribe la sobrescritura de sesión inmediatamente mediante `sessions.patch`; no espera al siguiente envío y no es una sobrescritura `thinkingOnce` de un solo uso.
|
||||
- La primera opción siempre es `Default (<resolved level>)`, donde el valor predeterminado resuelto proviene del perfil de pensamiento del proveedor del modelo activo de la sesión más la misma lógica de respaldo que usan `/status` y `session_status`.
|
||||
- El selector usa `thinkingLevels` devuelto por la fila/valores predeterminados de sesión del gateway, con `thinkingOptions` conservado como una lista de etiquetas heredada. La UI del navegador no conserva su propia lista de regex de proveedor; los plugins poseen los conjuntos de niveles específicos de modelo.
|
||||
- `/think:<level>` sigue funcionando y actualiza el mismo nivel de sesión almacenado, por lo que las directivas de chat y el selector permanecen sincronizados.
|
||||
|
||||
## Perfiles de proveedor
|
||||
|
||||
- Los plugins de proveedor pueden exponer `resolveThinkingProfile(ctx)` para definir los niveles admitidos y el valor predeterminado del modelo.
|
||||
- Los plugins de proveedor que actúan como proxy de modelos Claude deben reutilizar `resolveClaudeThinkingProfile(modelId)` de `openclaw/plugin-sdk/provider-model-shared` para que los catálogos directos de Anthropic y de proxy permanezcan alineados.
|
||||
- Los plugins de proveedor pueden exponer `resolveThinkingProfile(ctx)` para definir los niveles admitidos por el modelo y el valor predeterminado.
|
||||
- Los plugins de proveedor que actúen como proxy para modelos Claude deben reutilizar `resolveClaudeThinkingProfile(modelId)` de `openclaw/plugin-sdk/provider-model-shared` para que los catálogos directos de Anthropic y de proxy permanezcan alineados.
|
||||
- Cada nivel de perfil tiene un `id` canónico almacenado (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `adaptive` o `max`) y puede incluir una `label` de visualización. Los proveedores binarios usan `{ id: "low", label: "on" }`.
|
||||
- Los plugins de herramientas que necesiten validar una anulación explícita del razonamiento deben usar `api.runtime.agent.resolveThinkingPolicy({ provider, model })` junto con `api.runtime.agent.normalizeThinkingLevel(...)`; no deben mantener sus propias listas de niveles de proveedor/modelo.
|
||||
- Los plugins de herramientas con acceso a metadatos configurados de modelos personalizados pueden pasar `catalog` a `resolveThinkingPolicy` para que las suscripciones de `compat.supportedReasoningEfforts` se reflejen en la validación del lado del plugin.
|
||||
- Los plugins de herramientas que necesiten validar una anulación explícita de razonamiento deben usar `api.runtime.agent.resolveThinkingPolicy({ provider, model })` junto con `api.runtime.agent.normalizeThinkingLevel(...)`; no deben mantener sus propias listas de niveles por proveedor/modelo.
|
||||
- Los plugins de herramientas con acceso a metadatos configurados de modelos personalizados pueden pasar `catalog` a `resolveThinkingPolicy` para que las suscripciones voluntarias de `compat.supportedReasoningEfforts` se reflejen en la validación del lado del plugin.
|
||||
- Los hooks heredados publicados (`supportsXHighThinking`, `isBinaryThinking` y `resolveDefaultThinkingLevel`) permanecen como adaptadores de compatibilidad, pero los nuevos conjuntos de niveles personalizados deben usar `resolveThinkingProfile`.
|
||||
- Las filas/valores predeterminados del Gateway exponen `thinkingLevels`, `thinkingOptions` y `thinkingDefault` para que los clientes ACP/chat representen los mismos identificadores y etiquetas de perfil que usa la validación en tiempo de ejecución.
|
||||
- Las filas/valores predeterminados del Gateway exponen `thinkingLevels`, `thinkingOptions` y `thinkingDefault` para que los clientes de ACP/chat representen los mismos ids y etiquetas de perfil que usa la validación en tiempo de ejecución.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user