Statuslogica van de menubalk
Wat wordt getoond
- We tonen de huidige werkstatus van de agent in het menubalkpictogram en in de eerste statusregel van het menu.
- De gezondheidsstatus is verborgen terwijl werk actief is; deze keert terug wanneer alle sessies inactief zijn.
- Het blok “Nodes” in het menu toont alleen apparaten (gekoppelde nodes via
node.list), geen client-/presence‑items. - Een sectie “Usage” verschijnt onder Context wanneer snapshots van providergebruik beschikbaar zijn.
Statusmodel
- Sessies: events komen binnen met
runId(per run) plussessionKeyin de payload. De “hoofd”-sessie is de sleutelmain; als die ontbreekt, vallen we terug op de meest recent bijgewerkte sessie. - Prioriteit: hoofd wint altijd. Als de hoofd-sessie actief is, wordt die status direct getoond. Als de hoofd-sessie inactief is, wordt de meest recent actieve niet-hoofd-sessie getoond. We wisselen niet midden in een activiteit; we schakelen alleen wanneer de huidige sessie inactief wordt of de hoofd-sessie actief wordt.
- Activiteitstypen:
job: uitvoering van opdrachten op hoog niveau (state: started|streaming|done|error).tool:phase: start|resultmettoolNameenmeta/args.
IconState enum (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(debug-override)
ActivityKind → glyph
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- standaard → 🛠️
Visuele mapping
idle: normale critter.workingMain: badge met glyph, volledige tint, “werkende” pootanimatie.workingOther: badge met glyph, gedempte tint, geen gescharrel.overridden: gebruikt de gekozen glyph/tint ongeacht de activiteit.
Tekst van statusregel (menu)
- Terwijl werk actief is:
<Session role> · <activity label>- Voorbeelden:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Voorbeelden:
- Wanneer inactief: valt terug op de gezondheidssamenvatting.
Eventverwerking
- Bron: control‑channel
agent-events (ControlChannel.handleAgentEvent). - Geparseerde velden:
stream: "job"metdata.statevoor start/stop.stream: "tool"metdata.phase,name, optioneelmeta/args.
- Labels:
exec: eerste regel vanargs.command.read/write: verkort pad.edit: pad plus afgeleid wijzigingstype uitmeta/diff‑aantallen.- fallback: toolnaam.
Debug-overide
- Instellingen ▸ Debug ▸ kiezer “Icon override”:
System (auto)(standaard)Working: main(per tooltype)Working: other(per tooltype)Idle
- Opgeslagen via
@AppStorage("iconOverride"); gemapt naarIconState.overridden.
Testchecklist
- Start een hoofd-sessietaak: verifieer dat het pictogram direct wisselt en de statusregel het hoofdlabel toont.
- Start een niet-hoofd-sessietaak terwijl de hoofd-sessie inactief is: pictogram/status toont niet-hoofd; blijft stabiel tot deze klaar is.
- Start hoofd terwijl een andere actief is: pictogram schakelt direct naar hoofd.
- Snelle toolbursts: zorg dat de badge niet flikkert (TTL-speling op toolresultaten).
- Gezondheidsregel verschijnt opnieuw zodra alle sessies inactief zijn.