Ir al contenido

Lógica de estados en la Menu Bar

Seguro que te ha pasado: lanzas un proceso en segundo plano y pierdes el rastro de lo que está haciendo. No saber si el agent está procesando datos, escribiendo código o simplemente esperando puede romper tu flujo de trabajo. Necesitas una forma clara de ver qué ocurre sin interrumpir lo que estás haciendo en la pantalla principal.

Esta guía te explica cómo el sistema gestiona la prioridad de las sesiones y qué significan los cambios visuales que ves en la Menu Bar.

  • Acceso a la lista de dispositivos mediante node.list (paired nodes).
  • Eventos de agent del ControlChannel para la ingesta de datos.
  • Snapshots de uso del provider para la sección “Usage”.
  • Acceso a los ajustes de Debug para pruebas de IconState.

Sigue estos pasos para entender cómo se procesa y muestra la actividad del agent en menos de 5 minutos.

El sistema utiliza runId y sessionKey para identificar el trabajo. La sesión con la clave main siempre tiene prioridad absoluta.

  • Si main está activa, verás su estado inmediatamente.
  • Si main está idle, se muestra la sesión “non-main” activa más reciente.
  • El sistema no cambia de icono durante una actividad; solo hace el switch cuando la sesión actual termina o cuando main se activa.

Cada tarea tiene un glyph asociado en la Menu Bar. Aquí tienes el mapeo que utiliza el sistema:

  • exec -> 💻 (ejecución de comandos)
  • read -> 📄 (lectura de archivos)
  • write -> ✍️ (escritura de datos)
  • edit -> 📝 (edición de código)
  • attach -> 📎 (adjuntar archivos)
  • Por defecto -> 🛠️

Si trabajas con el código en Swift, el estado del icono se define mediante este enum:

enum IconState {
case idle
case workingMain(ActivityKind)
case workingOther(ActivityKind)
case overridden(ActivityKind) // Para debug override
}

Los datos se reciben a través de ControlChannel.handleAgentEvent. El sistema parsea dos tipos de streams:

  • job: Monitoriza data.state (started, streaming, done, error).
  • tool: Monitoriza data.phase (start, result) y extrae etiquetas como el comando ejecutado o la ruta del archivo.
  • El icono parpadea en ráfagas rápidas de herramientas: Esto se evita mediante un TTL grace en los resultados de las herramientas. Si notas flickering, verifica que los eventos de phase: result no estén llegando de forma desincronizada.
  • No aparece el estado de salud (health status): El estado de salud se oculta automáticamente mientras hay trabajo activo. Volverá a aparecer en la primera fila del menú cuando todas las sesiones estén en idle.
  • El icono no cambia al iniciar una sesión secundaria: Comprueba si la sesión main sigue activa. La sesión main siempre bloquea la visualización de otras sesiones hasta que termina su tarea.
  • Los nodos no aparecen en el menú: La sección “Nodes” solo lista dispositivos vinculados mediante node.list, no entradas de presencia o clientes genéricos.

AI Setup Assistant

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.