Protocolo de puente
Protocolo de puente (transporte de nodo heredado)
Sección titulada «Protocolo de puente (transporte de nodo heredado)»Por qué tenemos ambos
Sección titulada «Por qué tenemos ambos»- Límite de seguridad: el puente expone una pequeña lista de permitidos en lugar de la superficie completa de la API de la puerta de enlace.
- Emparejamiento + identidad de nodo: la admisión de nodos es propiedad de la puerta de enlace y está vinculada a un token por nodo.
- Experiencia de usuario (UX) de descubrimiento: los nodos pueden descubrir puertas de enlace a través de Bonjour en la LAN, o conectarse directamente a través de una tailnet.
- WS de bucle local (loopback): el plano de control WS completo permanece local a menos que se tunelice a través de SSH.
Transporte
Sección titulada «Transporte»- TCP, un objeto JSON por línea (JSONL).
- TLS opcional (cuando
bridge.tls.enabledes verdadero). - El puerto de escucha predeterminado heredado era
18790(las compilaciones actuales no inician un puente TCP).
Cuando TLS está habilitado, los registros TXT de descubrimiento incluyen bridgeTls=1 más
bridgeTlsSha256 como una pista no secreta. Tenga en cuenta que los registros TXT de Bonjour/mDNS son
no autenticados; los clientes no deben tratar la huella digital anunciada como un
pin autoritativo sin la intención explícita del usuario u otra verificación fuera de banda.
Protocolo de enlace (Handshake) + emparejamiento
Sección titulada «Protocolo de enlace (Handshake) + emparejamiento»- El cliente envía
hellocon metadatos del nodo + token (si ya está emparejado). - Si no está emparejado, la puerta de enlace responde
error(NOT_PAIRED/UNAUTHORIZED). - El cliente envía
pair-request. - La puerta de enlace espera la aprobación y luego envía
pair-okyhello-ok.
hello-ok devuelve serverName y puede incluir canvasHostUrl.
Cliente → Puerta de enlace:
req/res: RPC con ámbito de puerta de enlace (chat, sesiones, configuración, salud, voicewake, skills.bins)event: señales de nodo (transcripción de voz, solicitud de agente, suscripción de chat, ciclo de vida de exec)
Puerta de enlace → Cliente:
invoke/invoke-res: comandos de nodo (canvas.*,camera.*,screen.record,location.get,sms.send)event: actualizaciones de chat para sesiones suscritasping/pong: keepalive
El cumplimiento de la lista de permitidos (allowlist) heredado vivía en src/gateway/server-bridge.ts (eliminado).
Eventos del ciclo de vida de ejecución
Sección titulada «Eventos del ciclo de vida de ejecución»Los nodos pueden emitir eventos exec.finished o exec.denied para exponer la actividad de system.run.
Estos se asignan a eventos del sistema en la puerta de enlace. (Los nodos heredados aún pueden emitir exec.started.)
Campos de carga útil (todos son opcionales a menos que se indique lo contrario):
sessionKey(obligatorio): sesión del agente para recibir el evento del sistema.runId: id de ejecución único para agrupar.command: cadena de comando sin formato o con formato.exitCode,timedOut,success,output: detalles de finalización (solo finalizado).reason: motivo de denegación (solo denegado).
Uso de Tailnet
Sección titulada «Uso de Tailnet»- Enlace del puente a una IP de tailnet:
bridge.bind: "tailnet"en~/.openclaw/openclaw.json. - Los clientes se conectan a través del nombre MagicDNS o la IP de tailnet.
- Bonjour no cruza redes; use host/puerto manual o DNS‑SD de área amplia cuando sea necesario.
Control de versiones
Sección titulada «Control de versiones»Bridge actualmente está en la v1 implícita (sin negociación mín/máx). Se espera compatibilidad con versiones anteriores; agregue un campo de versión de protocolo de puente antes de cualquier cambio ruptura.