Instalar los paquetes
Estos paquetes se distribuyen con los ciclos de versiones de OpenClaw. Durante el despliegue inicial, npm
puede devolver
E404 hasta que se publique la primera versión de OpenClaw que incluya los paquetes;
instálalos únicamente después de que las páginas del registro indicadas a continuación estén disponibles.@openclaw/gateway-protocolproporciona esquemas, validadores en tiempo de ejecución, tipos de TypeScript, registros de identidad y capacidades del cliente, lectores de errores estructurados y constantes de versión del protocolo. Su archivo tar de npm también incluye el contrato generadoprotocol.schema.jsonlegible por máquinas.@openclaw/gateway-clientes la implementación de referencia de la conexión. Importa la raíz del paquete para el cliente de Node y@openclaw/gateway-client/browserpara los ayudantes compatibles con navegadores relativos al protocolo, la autenticación de dispositivos y la reconexión.
Elegir ámbitos y vincular el dispositivo
Un cliente de chat interactivo completo que también muestre solicitudes de aprobación debe solicitarrole: "operator" con estos ámbitos:
Añade
operator.questions únicamente si el cliente gestiona preguntas interactivas,
operator.pairing únicamente si administra dispositivos o nodos vinculados y
operator.admin únicamente para operaciones administrativas como config.patch.
La referencia de ámbitos de operador
define las reglas completas para los métodos y el momento de aprobación.
No crees manualmente un token de portador para cada cliente editando openclaw.json. Configura
la autenticación de arranque compartida de Gateway con openclaw configure --section gateway o las opciones de openclaw onboard --gateway-auth ... y, después, permite que la
vinculación del dispositivo genere el token del cliente:
- Conserva una identidad de dispositivo Ed25519 en el cliente.
- Espera a
connect.challenge, firma la carga útil del dispositivo vinculada al desafío y envíaconnectcon el rol de operador y los ámbitos solicitados, además del token o la contraseña compartidos de Gateway para la autenticación de arranque. - Si Gateway devuelve detalles estructurados de
PAIRING_REQUIRED, muestra el ID de la solicitud y pausa o reintenta segúnerror.details.recommendedNextStep. - En el host de Gateway, revisa la solicitud con
openclaw devices listy, después, aprueba exactamente esa solicitud vigente conopenclaw devices approve <requestId>. - Vuelve a conectarte y conserva
hello-ok.auth.deviceTokencon el rol y los ámbitos negociados. Usa ese token de dispositivo para las conexiones posteriores.
Anunciar las capacidades del cliente
connect.params.caps describe el comportamiento opcional que el cliente puede utilizar. No
concede autorización. Importa los nombres desde GATEWAY_CLIENT_CAPS en lugar de
duplicar literales de cadena:
approvals, exec-approvals, inline-widgets,
run-tool-bindings, session-scoped-events, plugin-approvals,
task-suggestions, terminal-offset-seq, tool-events y ui-commands.
Anuncia únicamente las capacidades que el cliente implemente realmente.
Las herramientas del agente restringidas por capacidades constituyen un uso independiente de la misma declaración. Si una
herramienta del agente requiere una capacidad del cliente, Gateway omite esa herramienta salvo que el
cliente de origen haya anunciado todas las capacidades requeridas.
Recuperar el estado tras una reconexión
Trata cada reconexión correcta como una nueva proyección sobre el historial persistente y el estado actual de las ejecuciones en memoria:- Restablece
sessions.subscribey la suscripciónsessions.messages.subscribede la sesión seleccionada. - Llama a
chat.historypara elsessionKeyseleccionado y sustituye las filas persistentes locales por la proyecciónmessagesdevuelta. - Si
inFlightRunestá presente, adopta surunId, eltextalmacenado en búfer y elplanopcional. Adopta la ejecución incluso cuandotextesté vacío. - Lee
sessionInfo.hasActiveRunysessionInfo.activeRunIds. Al determinar si una ejecución conservada sigue controlando la interfaz de transmisión, da preferencia a la pertenencia exacta aactiveRunIds. UnhasActiveRunverdadero sin ningún ID enumerado puede representar otra proyección de ejecución activa. - Concilia los eventos
agentposteriores mediantepayload.runIdypayload.seq. Mantén de forma independiente la secuencia aceptada más alta para cada ejecución, ignora una secuencia ya vista o inferior y considera un salto hacia delante como motivo para volver a cargar el historial autorizado.
seq opcional, que ordena los eventos en la
conexión WebSocket actual. Se reinicia con cada conexión nueva. El seq dentro de
la carga útil de un evento agent se asigna por ejecución y ordena el ciclo de vida,
el asistente, el plan, las herramientas y los demás eventos transmitidos de esa ejecución.
Usar metadatos del historial y anclajes estables
Las filas devueltas porchat.history pueden incluir un contenedor de metadatos __openclaw:
ides la identidad de la entrada de la transcripción. Úsala para solicitudes de historial ancladas, pero no como clave única de una fila mostrada.seqes la secuencia positiva del registro de la transcripción. Un registro almacenado puede proyectarse en más de una fila mostrada, por lo que deben mantenerse juntas las filas relacionadas con el mismoidy la misma secuencia.kindidentifica las filas sintéticas. Un límite de Compaction usakind: "compaction"y puede incluirtokensBeforeytokensAftercuando un punto de control correspondiente haya registrado esas métricas.
hasMore y nextOffset de la respuesta. Los desplazamientos
numéricos describen la proyección actual de la transcripción, por lo que no deben conservarse como
marcadores de larga duración entre reinicios o procesos de Compaction. Conserva __openclaw.id en su lugar.
Para restaurar el contexto en torno a una fila conocida, llama a chat.history con messageId y el
sessionId que lo devolvió. Gateway puede resolver ese anclaje a partir del historial
archivado tras el reinicio; las respuestas ancladas omiten intencionadamente los metadatos numéricos de paginación.
Suscribirse en lugar de consultar periódicamente el uso
Carga el catálogo inicial consessions.list y, después, llama a sessions.subscribe una vez
por conexión. Combina los eventos sessions.changed mediante sessionKey. Las cargas útiles de cambios
de sesión pueden incluir datos en directo de inputTokens, outputTokens, totalTokens,
totalTokensFresh, contextTokens, estimatedCostUsd, ajustes de uso de respuestas
y el estado de las ejecuciones activas.
Algunas notificaciones de cambios solo son señales de invalidación. Si un evento omite los
campos de fila que necesita la vista, actualiza sessions.list. No consultes periódicamente usage.cost ni
sessions.usage para mantener actualizada una lista de sesiones en directo; reserva esos métodos para
informes agregados o detallados bajo demanda.
Recuperar aprobaciones de ejecución anteriores
Un cliente conoperator.approvals debe instalar su receptor de eventos en cuanto
termine hello-ok y, después, llamar a exec.approval.list para recuperar las solicitudes
anteriores a la conexión. Concilia la lista y los eventos en directo
exec.approval.requested / exec.approval.resolved mediante el ID de aprobación para que una
transición simultánea a la solicitud de la lista no se pierda ni vuelva a aparecer.
Controlar las versiones del protocolo
La versión actual del protocolo de comunicación es4. Los clientes generales de operador y WebChat deben
negociar la versión actual exacta con minProtocol: 4 y maxProtocol: 4.
Solo los clientes Node autenticados y las sondas ligeras disponen del intervalo de aceptación
N-1, que actualmente abarca desde el protocolo 3 hasta 4.
Los cambios del protocolo son primero aditivos. protocol.schema.json incluye metadatos de antigüedad
de la versión since y metadatos de los ámbitos requeridos para los métodos principales, pero un
incremento de la versión del protocolo de comunicación sigue siendo un cambio incompatible explícito para los clientes de terceros. Fija las
versiones de los paquetes que pruebes, actualiza el cliente y Gateway conjuntamente cuando cambie la versión
del protocolo de comunicación y revisa el
registro de cambios de OpenClaw
antes de cada actualización.