WebChat (UI WebSocket del Gateway)
Estado: la UI de chat SwiftUI de macOS/iOS se comunica directamente con el WebSocket del Gateway.Qué es
- Una UI de chat nativa para el gateway (sin navegador incrustado ni servidor estático local).
- Usa las mismas sesiones y reglas de enrutamiento que otros canales.
- Enrutamiento determinista: las respuestas siempre vuelven a WebChat.
Inicio rápido
- Inicia el gateway.
- Abre la UI de WebChat (app de macOS/iOS) o la pestaña de chat de la Control UI.
- Asegúrate de que esté configurada una ruta de autenticación válida del gateway (shared-secret de forma predeterminada, incluso en loopback).
Cómo funciona (comportamiento)
- La UI se conecta al WebSocket del Gateway y usa
chat.history,chat.sendychat.inject. chat.historyestá acotado por estabilidad: Gateway puede truncar campos de texto largos, omitir metadatos pesados y sustituir entradas sobredimensionadas por[chat.history omitted: message too large].chat.historytambién está normalizado para visualización: se eliminan del texto visible las etiquetas de directivas de entrega en línea como[[reply_to_*]]y[[audio_as_voice]], las cargas útiles XML de llamadas a herramientas en texto plano (incluidas<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>y bloques truncados de llamadas a herramientas), y los tokens de control del modelo filtrados en ASCII/de ancho completo, y se omiten las entradas del asistente cuyo texto visible completo sea solo el token silencioso exactoNO_REPLY/no_reply.chat.injectañade una nota del asistente directamente a la transcripción y la difunde a la UI (sin ejecución del agente).- Las ejecuciones abortadas pueden mantener salida parcial visible del asistente en la UI.
- Gateway persiste en el historial de la transcripción el texto parcial abortado del asistente cuando existe salida almacenada en búfer, y marca esas entradas con metadatos de aborto.
- El historial siempre se obtiene del gateway (sin observación de archivos local).
- Si no se puede acceder al gateway, WebChat es de solo lectura.
Panel de herramientas de agentes de la Control UI
- El panel de herramientas de
/agentsde la Control UI tiene dos vistas separadas:- Available Right Now usa
tools.effective(sessionKey=...)y muestra lo que la sesión actual puede usar realmente en runtime, incluidas herramientas core, de plugins y propias del canal. - Tool Configuration usa
tools.catalogy sigue centrado en perfiles, anulaciones y semántica de catálogo.
- Available Right Now usa
- La disponibilidad en runtime está acotada a la sesión. Cambiar de sesión en el mismo agente puede cambiar la lista de Available Right Now.
- El editor de configuración no implica disponibilidad en runtime; el acceso efectivo sigue la precedencia
de políticas (
allow/deny, anulaciones por agente y por proveedor/canal).
Uso remoto
- El modo remoto tuneliza el WebSocket del gateway a través de SSH/Tailscale.
- No necesitas ejecutar un servidor WebChat independiente.
Referencia de configuración (WebChat)
Configuración completa: Configuración Opciones de WebChat:gateway.webchat.chatHistoryMaxChars: recuento máximo de caracteres para campos de texto en respuestas dechat.history. Cuando una entrada de la transcripción supera este límite, Gateway trunca los campos de texto largos y puede sustituir mensajes sobredimensionados por un marcador. El cliente también puede enviarmaxCharspor solicitud para anular este valor predeterminado en una sola llamada achat.history.
gateway.port,gateway.bind: host/puerto del WebSocket.gateway.auth.mode,gateway.auth.token,gateway.auth.password: autenticación shared-secret del WebSocket.gateway.auth.allowTailscale: la pestaña de chat de la Control UI del navegador puede usar encabezados de identidad de Tailscale Serve cuando está habilitado.gateway.auth.mode: "trusted-proxy": autenticación de proxy inverso para clientes del navegador detrás de un origen de proxy fuera de loopback con reconocimiento de identidad (consulta Autenticación de proxy de confianza).gateway.remote.url,gateway.remote.token,gateway.remote.password: destino del gateway remoto.session.*: valores predeterminados para almacenamiento de sesiones y clave principal.