Barra de menús
Lógica de estado de la barra de menús
Sección titulada «Lógica de estado de la barra de menús»Qué se muestra
Sección titulada «Qué se muestra»- Mostramos el estado de trabajo actual del agente en el icono de la barra de menús y en la primera fila de estado del menú.
- El estado de salud se oculta mientras hay trabajo activo; vuelve a aparecer cuando todas las sesiones están inactivas.
- El bloque “Nodes” en el menú lista solo dispositivos (nodos emparejados a través de
node.list), no entradas de cliente/presencia. - Aparece una sección “Usage” (Uso) debajo de Contexto cuando hay instantáneas de uso del proveedor disponibles.
Modelo de estado
Sección titulada «Modelo de estado»- Sesiones: los eventos llegan con
runId(por ejecución) mássessionKeyen el payload. La sesión “principal” es la clavemain; si está ausente, recurrimos a la sesión actualizada más recientemente. - Prioridad: la principal siempre gana. Si la principal está activa, su estado se muestra inmediatamente. Si la principal está inactiva, se muestra la sesión no principal activa más reciente. No cambiamos de un lado a otro a mitad de la actividad; solo cambiamos cuando la sesión actual pasa a inactiva o la principal se vuelve activa.
- Tipos de actividad:
job: ejecución de comandos de alto nivel (state: started|streaming|done|error).tool:phase: start|resultcontoolNameymeta/args.
Enum IconState (Swift)
Sección titulada «Enum IconState (Swift)»idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(anulación de depuración)
ActivityKind → glifo
Sección titulada «ActivityKind → glifo»exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- predeterminado → 🛠️
Mapeo visual
Sección titulada «Mapeo visual»idle: criatura normal.workingMain: insignia con glifo, tinte completo, animación de pata “trabajando”.workingOther: insignia con glifo, tinte silenciado, sin movimiento rápido.overridden: usa el glifo/tinte elegido independientemente de la actividad.
Texto de fila de estado (menú)
Sección titulada «Texto de fila de estado (menú)»- Mientras el trabajo está activo:
<Session role> · <activity label>- Ejemplos:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Ejemplos:
- Cuando está inactivo: vuelve al resumen de estado.
Ingestión de eventos
Sección titulada «Ingestión de eventos»- Fuente: eventos
agentdel control‑channel (ControlChannel.handleAgentEvent). - Campos analizados:
stream: "job"condata.statepara iniciar/detener.stream: "tool"condata.phase,name,meta/argsopcionales.
- Etiquetas:
exec: primera línea deargs.command.read/write: ruta abreviada.edit: ruta más tipo de cambio inferido demeta/recuentos de diferencias.- alternativo (fallback): nombre de la herramienta.
Anulación de depuración
Sección titulada «Anulación de depuración»- Configuración ▸ Depuración ▸ Selector “Icon override”:
System (auto)(predeterminado)Working: main(por tipo de herramienta)Working: other(por tipo de herramienta)Idle
- Almacenado mediante
@AppStorage("iconOverride"); mapeado aIconState.overridden.
Lista de comprobación de pruebas
Sección titulada «Lista de comprobación de pruebas»- Activar tarea de sesión principal: verificar que el icono cambie inmediatamente y que la fila de estado muestre la etiqueta principal.
- Activar tarea de sesión no principal mientras la principal está inactiva: el icono/estado muestra la no principal; se mantiene estable hasta que finaliza.
- Iniciar la principal mientras otra está activa: el icono cambia instantáneamente a la principal.
- Ráfagas rápidas de herramientas: asegurar que la insignia no parpadee (gracia TTL en los resultados de herramientas).
- La fila de estado (Health) vuelve a aparecer una vez que todas las sesiones están inactivas.