macOS companion app
Menubalk
Wat wordt getoond
- We tonen de huidige werkstatus van de agent in het menubalkpictogram en in de eerste statusrij van het menu.
- De gezondheidsstatus wordt verborgen terwijl er werk actief is; deze keert terug wanneer alle sessies inactief zijn.
- Een hoofdsubmenu "Context" bevat recente sessies in plaats van ze rechtstreeks in het hoofdmenu uit te vouwen.
- Het blok "Knooppunten" in het hoofdmenu toont alleen apparaten (gekoppelde knooppunten via
node.list), geen client-/aanwezigheidsitems. - Een hoofdsectie "Gebruik" verschijnt onder Context wanneer snapshots van providergebruik beschikbaar zijn, gevolgd door gebruikskosten-details wanneer beschikbaar.
Statusmodel
- Sessies: gebeurtenissen komen binnen met
runId(per uitvoering) plussessionKeyin de payload. De "hoofd"-sessie is de sleutelmain; als die ontbreekt, vallen we terug op de laatst bijgewerkte sessie. - Prioriteit: hoofd wint altijd. Als hoofd actief is, wordt de status ervan onmiddellijk getoond. Als hoofd inactief is, wordt de meest recent actieve niet-hoofdsessie getoond. We wisselen niet heen en weer tijdens activiteit; we schakelen alleen wanneer de huidige sessie inactief wordt of hoofd actief wordt.
- Activiteitstypen:
job: opdrachtuitvoering 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 → symbool
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- standaard → 🛠️
Visuele mapping
idle: normaal beestje.workingMain: badge met symbool, volledige tint, "werkende" beenanimatie.workingOther: badge met symbool, gedempte tint, geen gehaast.overridden: gebruikt het gekozen symbool/de gekozen tint ongeacht de activiteit.
Contextsubmenu
- Het hoofdmenu toont één rij "Context" met een sessietelling/-status en opent een submenu.
- De koptekst van het Contextsubmenu toont het aantal actieve sessies van de laatste 24 uur.
- Elke sessierij behoudt de tokenbalk, leeftijd, preview, denk-/verbose-status, en acties voor resetten, compact maken en verwijderen.
- Berichten voor laden, verbroken verbinding en fouten bij het laden van sessies verschijnen binnen het Contextsubmenu.
- Providergebruik en gebruikskosten-details blijven op hoofdniveau onder Context, zodat ze in één oogopslag zichtbaar blijven zonder het submenu te openen.
Statusrijtekst (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.
Gebeurtenisinname
- Bron: control-channel
agent-gebeurtenissen (ControlChannel.handleAgentEvent). - Geparste velden:
stream: "job"metdata.statevoor starten/stoppen.stream: "tool"metdata.phase,name, optioneelmeta/args.
- Labels:
exec: eerste regel vanargs.command.read/write: verkort pad.edit: pad plus afgeleide wijzigingssoort uitmeta/diff-tellingen.- fallback: toolnaam.
Debug-override
- Instellingen ▸ Debug ▸ keuzelijst "Pictogram-override":
System (auto)(standaard)Working: main(per toolsoort)Working: other(per toolsoort)Idle
- Opgeslagen via
@AppStorage("iconOverride"); gemapt naarIconState.overridden.
Testchecklist
- Activeer taak in hoofdsessie: controleer of het pictogram onmiddellijk wisselt en de statusrij het hoofdlabel toont.
- Activeer taak in niet-hoofdsessie terwijl hoofd inactief is: pictogram/status toont niet-hoofd; blijft stabiel totdat deze is voltooid.
- Start hoofd terwijl andere sessie actief is: pictogram schakelt direct naar hoofd.
- Snelle toolbursts: zorg dat de badge niet flikkert (TTL-gratie op toolresultaten).
- Gezondheidsrij verschijnt opnieuw zodra alle sessies inactief zijn.