Lohika ng Status ng Menu Bar¶
Ano ang ipinapakita¶
- Ipinapakita namin ang kasalukuyang estado ng trabaho ng agent sa icon ng menu bar at sa unang status row ng menu.
- Nakatago ang health status habang may aktibong trabaho; bumabalik ito kapag idle na ang lahat ng session.
- Ang block na “Nodes” sa menu ay naglilista ng mga device lamang (paired nodes via
node.list), hindi mga entry ng client/presence. - Lumalabas ang seksyong “Usage” sa ilalim ng Context kapag available ang provider usage snapshots.
Modelo ng estado¶
- Mga session: dumarating ang mga event na may
runId(per-run) kasama angsessionKeysa payload. Ang “main” na session ay ang key namain; kung wala ito, babalik tayo sa pinakahuling na-update na session. - Prayoridad: laging nananalo ang main. 1. Kapag aktibo ang main, agad na ipinapakita ang estado nito. Kung idle ang main, ipinapakita ang pinakahuling aktibong non‑main na session. Hindi kami nagpapalit-palit sa gitna ng aktibidad; nagpapalit lamang kami kapag naging idle ang kasalukuyang session o naging aktibo ang main.
- Mga uri ng aktibidad:
job: high‑level na pag-execute ng command (state: started|streaming|done|error).tool:phase: start|resultna maytoolNameatmeta/args.
IconState enum (Swift)¶
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(debug override)
ActivityKind → glyph¶
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- default → 🛠️
Visual mapping¶
idle: normal na critter.workingMain: badge na may glyph, full tint, animation ng “working” na mga paa.workingOther: badge na may glyph, muted na tint, walang scurry.overridden: ginagamit ang napiling glyph/tint anuman ang aktibidad.
Teksto ng status row (menu)¶
- Habang aktibo ang trabaho:
<Session role> · <activity label> - Mga halimbawa:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift. - Kapag idle: bumabalik sa buod ng health.
Pag-ingest ng event¶
- Pinagmulan: control‑channel
agentevents (ControlChannel.handleAgentEvent). - Mga na-parse na field:
stream: "job"na maydata.statepara sa start/stop.stream: "tool"na maydata.phase,name, opsyonal nameta/args.- Mga label:
exec: unang linya ngargs.command.read/write: pinaikling path.edit: path kasama ang inferred na uri ng pagbabago mula sameta/bilang ng diff.- fallback: pangalan ng tool.
Debug override¶
- Settings ▸ Debug ▸ “Icon override” picker:
System (auto)(default)Working: main(per tool kind)Working: other(per tool kind)Idle- Ini-store sa pamamagitan ng
@AppStorage("iconOverride"); mina-map saIconState.overridden.
Checklist sa testing¶
- I-trigger ang job ng main session: tiyaking agad na nag-i-switch ang icon at ipinapakita ng status row ang label ng main.
- I-trigger ang job ng non‑main session habang idle ang main: ipinapakita ng icon/status ang non‑main; nananatiling stable hanggang matapos ito.
- Simulan ang main habang may ibang aktibo: agad na lilipat ang icon sa main.
- Mabilis na mga burst ng tool: tiyaking hindi nagfi-flicker ang badge (TTL grace sa mga resulta ng tool).
- Muling lalabas ang health row kapag idle na ang lahat ng session.