Instalar los paquetes
Estos paquetes se distribuyen con los ciclos de lanzamiento 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álelos solo después de que estén disponibles las páginas del registro indicadas a continuación.@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áquina.@openclaw/gateway-clientes la implementación de referencia para la conexión. Importe la raíz del paquete para el cliente de Node y@openclaw/gateway-client/browserpara los auxiliares compatibles con navegadores relativos al protocolo, la autenticación del dispositivo y la reconexión.
Elegir los ámbitos y emparejar el dispositivo
Un cliente de chat interactivo completo que también muestre solicitudes de aprobación debe solicitarrole: "operator" con estos ámbitos:
Añada
operator.questions solo si el cliente gestiona preguntas interactivas,
operator.pairing solo si administra dispositivos o nodos emparejados y
operator.admin solo para operaciones administrativas como config.patch.
La referencia de ámbitos del operador
define las reglas completas para los métodos y el momento de la aprobación.
No cree manualmente un token de portador por cliente editando openclaw.json. Configure
la autenticación de arranque compartida del Gateway con openclaw configure --section gateway o las opciones openclaw onboard --gateway-auth ... y, a continuación, permita que el
emparejamiento del dispositivo genere el token del cliente:
- Conserve una identidad de dispositivo Ed25519 en el cliente.
- Espere a
connect.challenge, firme la carga útil del dispositivo vinculada al desafío y envíeconnectcon el rol de operador y los ámbitos solicitados, además del token o la contraseña compartidos del Gateway para la autenticación de arranque. - Si el Gateway devuelve detalles estructurados de
PAIRING_REQUIRED, muestre el ID de la solicitud y ponga en pausa o vuelva a intentarlo segúnerror.details.recommendedNextStep. - En el host del Gateway, revise la solicitud con
openclaw devices listy, a continuación, apruebe exactamente esa solicitud actual conopenclaw devices approve <requestId>. - Vuelva a conectarse y conserve
hello-ok.auth.deviceTokencon el rol y los ámbitos negociados. Use 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. Importe 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.
Anuncie solo las capacidades que el cliente implemente realmente.
Las herramientas de agente condicionadas por capacidades constituyen un uso independiente de la misma declaración. Si una
herramienta de agente requiere una capacidad del cliente, el Gateway omite esa herramienta a menos que el
cliente de origen haya anunciado todas las capacidades necesarias.
Recuperar el estado después de la reconexión
Trate cada reconexión correcta como una nueva proyección del historial persistente y del estado actual de las ejecuciones en memoria:- Restablezca
sessions.subscribey la suscripciónsessions.messages.subscribede la sesión seleccionada. - Llame a
chat.historypara elsessionKeyseleccionado y sustituya las filas persistentes locales por la proyecciónmessagesdevuelta. - Si
inFlightRunestá presente, adopte surunId, eltextalmacenado en búfer y elplanopcional. Adopte la ejecución incluso cuandotextesté vacío. - Lea
sessionInfo.hasActiveRunysessionInfo.activeRunIds. Al determinar si una ejecución conservada sigue controlando la interfaz de transmisión, dé preferencia a la pertenencia exacta aactiveRunIds. Un valor verdadero dehasActiveRunsin ningún ID enumerado puede representar otra proyección activa del entorno de ejecución. - Concilie los eventos posteriores de
agentporpayload.runIdypayload.seq. Mantenga de forma independiente la secuencia aceptada más alta para cada ejecución, ignore una secuencia ya vista o inferior y considere un salto hacia delante como motivo para volver a cargar el historial autoritativo.
seq opcional, que ordena los eventos en la
conexión WebSocket actual. Se restablece con cada conexión nueva. El seq incluido
en la carga útil de un evento agent se asigna por ejecución y ordena los eventos del ciclo de vida,
del asistente, del plan, de las herramientas y de otros flujos 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. Úsela para las solicitudes de historial con anclaje, pero no como clave única de la 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 coincidente 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 tras un restablecimiento o una Compaction. Conserve __openclaw.id en su lugar.
Para restaurar el contexto alrededor de una fila conocida, llame a chat.history con messageId y el
sessionId que lo devolvió. El Gateway puede resolver ese anclaje a partir del historial del
archivo de restablecimiento; las respuestas con anclaje omiten deliberadamente los metadatos numéricos de paginación.
Suscribirse en lugar de sondear el uso
Cargue el catálogo inicial consessions.list y, a continuación, llame una vez a sessions.subscribe
por conexión. Combine los eventos sessions.changed por sessionKey. Las cargas útiles de cambios
de sesión pueden incluir inputTokens, outputTokens, totalTokens,
totalTokensFresh, contextTokens, estimatedCostUsd en directo, ajustes del uso
de las respuestas y el estado de las ejecuciones activas.
Algunas notificaciones de cambios son solo señales de invalidación. Si un evento omite los
campos de fila que necesita la vista, actualice sessions.list. No sondee usage.cost ni
sessions.usage para mantener actualizada una lista de sesiones en directo; reserve 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
se complete hello-ok y, a continuación, llamar a exec.approval.list para recuperar las solicitudes
anteriores a la conexión. Concilie la lista y los eventos en directo
exec.approval.requested / exec.approval.resolved por ID de aprobación para que una
transición simultánea con 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 exactamente la versión actual con minProtocol: 4 y maxProtocol: 4.
Solo los clientes de nodo autenticados y las sondas ligeras disponen de la ventana 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
since de la versión de lanzamiento 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 evento de ruptura explícito para los clientes de terceros. Fije las
versiones de los paquetes que pruebe, actualice conjuntamente el cliente y el Gateway cuando cambie la versión
del protocolo de comunicación y consulte el
registro de cambios de OpenClaw
antes de cada actualización.