Statuslogik för menyraden
Vad som visas
- Vi visar den aktuella agentens arbetsstatus i menyradsikonen och i den första statusraden i menyn.
- Hälsostatus döljs medan arbete är aktivt; den återkommer när alla sessioner är inaktiva.
- Blocket ”Nodes” i menyn listar endast enheter (parade noder via
node.list), inte klient-/närvaroposter. - Ett avsnitt ”Usage” visas under Context när ögonblicksbilder av leverantörsanvändning finns tillgängliga.
Tillståndsmodell
- Sessioner: händelser anländer med
runId(per-run) plussessionKeyi nyttolasten. “main” sessionen är nyckelnmain; om den saknas, vi faller tillbaka till den senast uppdaterade sessionen. - Prioritet: main alltid vinner. Om huvud är aktiv, dess tillstånd visas omedelbart. Om huvud är inaktiv, den senaste aktiva non‐main sessionen visas. Vi växlar inte flip‐flop mid‐activity; vi växlar bara när den aktuella sessionen går vilande eller main blir aktiv.
- Aktivitetstyper:
job: exekvering av kommandon på hög nivå (state: started|streaming|done|error).tool:phase: start|resultmedtoolNameochmeta/args.
IconState-enum (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(felsökningsåsidosättning)
ActivityKind → glyf
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- default → 🛠️
Visuell mappning
idle: vanlig varelse.workingMain: märke med glyph, full toning, ”working”-benanimation.workingOther: märke med glyph, dämpad toning, ingen scurry.overridden: använder vald glyph/toning oavsett aktivitet.
Statusradstext (meny)
- När arbete är aktivt:
<Session role> · <activity label>- Exempel:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Exempel:
- När inaktiv: faller tillbaka till hälsosammanfattningen.
Händelseintag
- Källa: control‑channel
agent‑händelser (ControlChannel.handleAgentEvent). - Parsade fält:
stream: "job"meddata.stateför start/stopp.stream: "tool"meddata.phase,name, valfrittmeta/args.
- Etiketter:
exec: första raden avargs.command.read/write: förkortad sökväg.edit: sökväg plus härledd ändringstyp frånmeta/diff‑antal.- reserv: verktygsnamn.
Felsökningsåsidosättning
- Inställningar ▸ Debug ▸ väljare för ”Icon override”:
System (auto)(standard)Working: main(per verktygstyp)Working: other(per verktygstyp)Idle
- Lagring via
@AppStorage("iconOverride"); mappas tillIconState.overridden.
Testchecklista
- Starta jobb i huvudsessionen: verifiera att ikonen växlar omedelbart och att statusraden visar huvudetiketten.
- Starta jobb i icke‑huvudsession medan huvudsessionen är inaktiv: ikon/status visar icke‑huvudsessionen; förblir stabil tills den är klar.
- Starta huvudsessionen medan annan är aktiv: ikonen växlar till huvudsessionen direkt.
- Snabba verktygsburstar: säkerställ att märket inte flimrar (TTL‑marginal på verktygsresultat).
- Hälsoraden visas igen när alla sessioner är inaktiva.