Logique de statut de la barre de menus¶
Ce qui est affiché¶
- Nous affichons lâĂ©tat de travail actuel de lâagent dans lâicĂŽne de la barre de menus et dans la premiĂšre ligne de statut du menu.
- LâĂ©tat de santĂ© est masquĂ© pendant que le travail est actif ; il rĂ©apparaĂźt lorsque toutes les sessions sont inactives.
- Le bloc «âŻNodesâŻÂ» du menu liste uniquement les appareils (nĆuds appairĂ©s via
node.list), et non les entrĂ©es client/prĂ©sence. - Une section «âŻUsageâŻÂ» apparaĂźt sous Context lorsque des instantanĂ©s dâutilisation du fournisseur sont disponibles.
ModĂšle dâĂ©tat¶
- SessionsâŻ: les Ă©vĂ©nements arrivent avec
runId(par exĂ©cution) plussessionKeydans la charge utile. La session «âŻprincipaleâŻÂ» est la clĂ©main; si elle est absente, nous revenons Ă la session mise Ă jour le plus rĂ©cemment. - PrioritĂ©âŻ: la session principale lâemporte toujours. Si la principale est active, son Ă©tat est affichĂ© immĂ©diatement. Si la principale est inactive, la session non principale la plus rĂ©cemment active est affichĂ©e. Nous nâalterÂnons pas en cours dâactivitĂ© ; nous basculons uniquement lorsque la session courante devient inactive ou que la principale devient active.
- Types dâactivitĂ©âŻ:
jobâŻ: exĂ©cution de commandes de haut niveau (state: started|streaming|done|error).toolâŻ:phase: start|resultavectoolNameetmeta/args.
Enum IconState (Swift)¶
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(remplacement de débogage)
ActivityKind â glyphe¶
execâ đ»readâ đwriteâ âïžeditâ đattachâ đ- par dĂ©faut â đ ïž
Mappage visuel¶
idleâŻ: crĂ©ature normale.workingMainâŻ: badge avec glyphe, teinte complĂšte, animation de pattes «âŻen travailâŻÂ».workingOtherâŻ: badge avec glyphe, teinte attĂ©nuĂ©e, pas de dĂ©placement.overriddenâŻ: utilise le glyphe/la teinte choisis indĂ©pendamment de lâactivitĂ©.
Texte de la ligne de statut (menu)¶
- Pendant que le travail est actifâŻ:
<Session role> · <activity label> - ExemplesâŻ:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift. - Ă lâinactivitĂ©âŻ: retour au rĂ©capitulatif de santĂ©.
Ingestion des événements¶
- SourceâŻ: Ă©vĂ©nements
agentdu canal de contrĂŽle (ControlChannel.handleAgentEvent). - Champs analysĂ©sâŻ:
stream: "job"avecdata.statepour dĂ©marrage/arrĂȘt.stream: "tool"avecdata.phase,name,meta/argsoptionnels.- LibellĂ©sâŻ:
execâŻ: premiĂšre ligne deargs.command.read/writeâŻ: chemin raccourci.editâŻ: chemin plus type de modification dĂ©duit demeta/comptes de diff.- repliâŻ: nom de lâoutil.
Forçage du mode débogage¶
- RĂ©glages âž Debug âž sĂ©lecteur «âŻIcon overrideâŻÂ»âŻ:
System (auto)(par dĂ©faut)Working: main(par type dâoutil)Working: other(par type dâoutil)Idle- StockĂ© via
@AppStorage("iconOverride"); mappé versIconState.overridden.
Liste de vérification de test¶
- DĂ©clencher un job de la session principaleâŻ: vĂ©rifier que lâicĂŽne bascule immĂ©diatement et que la ligne de statut affiche le libellĂ© principal.
- DĂ©clencher un job de session non principale lorsque la principale est inactiveâŻ: lâicĂŽne/le statut affichent la non principale ; restent stables jusquâĂ la fin.
- DĂ©marrer la principale alors quâune autre est activeâŻ: lâicĂŽne bascule instantanĂ©ment vers la principale.
- Rafales rapides dâoutilsâŻ: sâassurer que le badge ne scintille pas (dĂ©lai de grĂące TTL sur les rĂ©sultats dâoutils).
- La ligne de santé réapparaßt une fois toutes les sessions inactives.