macOS companion app
मेनू बार
क्या दिखाया जाता है
- हम मौजूदा agent कार्य स्थिति को menu bar icon में और menu की पहली status row में दिखाते हैं।
- काम सक्रिय होने पर health status छिपा रहता है; सभी sessions idle होने पर यह वापस आ जाता है।
- root "Context" submenu में recent sessions होते हैं, उन्हें सीधे root menu में expand नहीं किया जाता।
- root menu में "Nodes" block केवल devices सूचीबद्ध करता है (
node.listके ज़रिए paired nodes), client/presence entries नहीं। - provider usage snapshots उपलब्ध होने पर Context के नीचे root "Usage" section दिखाई देता है, और उपलब्ध होने पर उसके बाद usage-cost details आती हैं।
State model
- Sessions: events
runId(per-run) और payload मेंsessionKeyके साथ आते हैं। "main" session की keymainहै; अगर वह मौजूद न हो, तो हम सबसे हाल में updated session पर fall back करते हैं। - Priority: main हमेशा जीतता है। अगर main active है, तो उसकी state तुरंत दिखाई जाती है। अगर main idle है, तो सबसे हाल में active रहा non-main session दिखाया जाता है। हम mid-activity में flip-flop नहीं करते; हम केवल तब switch करते हैं जब current session idle हो जाता है या main active हो जाता है।
- Activity kinds:
job: high-level command execution (state: started|streaming|done|error)।tool:toolNameऔरmeta/argsके साथphase: start|result।
IconState enum (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(debug override)
ActivityKind → glyph
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- default → 🛠️
Visual mapping
idle: सामान्य critter।workingMain: glyph वाला badge, full tint, leg "working" animation।workingOther: glyph वाला badge, muted tint, कोई scurry नहीं।overridden: activity की परवाह किए बिना चुना गया glyph/tint इस्तेमाल करता है।
Context submenu
- root menu एक session count/status के साथ एक "Context" row दिखाता है और submenu खोलता है।
- Context submenu header पिछले 24 hours के लिए active session count दिखाता है।
- हर session row अपना token bar, age, preview, thinking/verbose, reset, compact, और delete actions रखती है।
- Loading, disconnected, और session-load error messages Context submenu के अंदर दिखाई देते हैं।
- Provider usage और usage-cost details Context के नीचे root-level पर रहते हैं ताकि submenu खोले बिना वे एक नज़र में दिख सकें।
Status row text (menu)
- काम सक्रिय होने पर:
<Session role> · <activity label>- Examples:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- Examples:
- idle होने पर: health summary पर fall back करता है।
Event ingestion
- Source: control-channel
agentevents (ControlChannel.handleAgentEvent)। - Parsed fields:
- start/stop के लिए
data.stateके साथstream: "job"। data.phase,name, optionalmeta/argsके साथstream: "tool"।
- start/stop के लिए
- Labels:
exec:args.commandकी पहली line।read/write: छोटा किया गया path।edit: path औरmeta/diff counts से inferred change kind।- fallback: tool name।
Debug override
- Settings ▸ Debug ▸ "Icon override" picker:
System (auto)(default)Working: main(per tool kind)Working: other(per tool kind)Idle
@AppStorage("iconOverride")के ज़रिए stored;IconState.overriddenपर mapped।
Testing checklist
- main session job trigger करें: verify करें कि icon तुरंत switch होता है और status row main label दिखाती है।
- main idle रहते हुए non-main session job trigger करें: icon/status non-main दिखाता है; खत्म होने तक stable रहता है।
- other active रहते हुए main start करें: icon तुरंत main पर flip होता है।
- Rapid tool bursts: सुनिश्चित करें कि badge flicker नहीं करता (tool results पर TTL grace)।
- सभी sessions idle होने पर health row फिर से दिखाई देती है।
Related
Was this useful?