Menüleisten-Status-Logik
Was angezeigt wird
- Der aktuelle Arbeitsstatus des Agent wird im Menüleisten-Icon und in der ersten Statuszeile des Menüs angezeigt.
- Der Health-Status wird ausgeblendet, während der Agent arbeitet. Er erscheint wieder, sobald alle Sessions im Leerlauf sind.
- Der “Nodes”-Block im Menü listet nur Geräte auf (gepaarte Nodes über
node.list), keine Client- oder Presence-Einträge. - Ein “Usage”-Bereich erscheint unter Context, wenn Provider-Nutzungsstatistiken verfügbar sind.
State-Modell
- Sessions: Events kommen mit
runId(pro Durchlauf) plussessionKeyin der Payload an. Die “main”-Session hat den Keymain. Falls nicht vorhanden, wird auf die zuletzt aktualisierte Session zurückgegriffen. - Priorität: main gewinnt immer. Wenn main aktiv ist, wird ihr Status sofort angezeigt. Wenn main im Leerlauf ist, wird die zuletzt aktive Nicht-main-Session angezeigt. Wir wechseln nicht während einer Aktivität hin und her – nur wenn die aktuelle Session in den Leerlauf geht oder main aktiv wird.
- Aktivitätsarten:
job: High-Level-Befehlsausführung (state: started|streaming|done|error).tool:phase: start|resultmittoolNameundmeta/args.
IconState enum (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(Debug-Override)
ActivityKind → Glyph
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- default → 🛠️
Visuelle Zuordnung
idle: normales Critter.workingMain: Badge mit Glyph, volle Färbung, Bein-”Working”-Animation.workingOther: Badge mit Glyph, gedämpfte Färbung, kein Scurry.overridden: verwendet das gewählte Glyph/Färbung unabhängig von der Aktivität.
Statuszeilen-Text (Menü)
- Während der Agent arbeitet:
<Session-Rolle> · <Aktivitätslabel>- Beispiele:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Beispiele:
- Im Leerlauf: fällt zurück auf die Health-Zusammenfassung.
Event-Verarbeitung
- Quelle: Control-Channel
agent-Events (ControlChannel.handleAgentEvent). - Geparste Felder:
stream: "job"mitdata.statefür Start/Stop.stream: "tool"mitdata.phase,name, optionalmeta/args.
- Labels:
exec: erste Zeile vonargs.command.read/write: gekürzter Pfad.edit: Pfad plus abgeleitete Änderungsart ausmeta/Diff-Counts.- Fallback: Tool-Name.
Debug-Override
- Settings ▸ Debug ▸ “Icon override”-Auswahl:
System (auto)(Standard)Working: main(pro Tool-Art)Working: other(pro Tool-Art)Idle
- Gespeichert über
@AppStorage("iconOverride"); gemappt aufIconState.overridden.
Test-Checkliste
- Main-Session-Job auslösen: prüfe, ob das Icon sofort wechselt und die Statuszeile das Main-Label zeigt.
- Nicht-main-Session-Job auslösen, während main im Leerlauf ist: Icon/Status zeigt Nicht-main; bleibt stabil, bis es fertig ist.
- Main starten, während andere aktiv ist: Icon wechselt sofort zu main.
- Schnelle Tool-Bursts: stelle sicher, dass das Badge nicht flackert (TTL-Gnadenfrist bei Tool-Results).
- Health-Zeile erscheint wieder, sobald alle Sessions im Leerlauf sind.