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 की key main है; अगर वह मौजूद न हो, तो हम सबसे हाल में 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)

  • idle
  • workingMain(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)

  • काम सक्रिय होने पर: &lt;Session role&gt; · <activity label>
    • Examples: Main · exec: pnpm test, Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
  • idle होने पर: health summary पर fall back करता है।

Event ingestion

  • Source: control-channel agent events (ControlChannel.handleAgentEvent)।
  • Parsed fields:
    • start/stop के लिए data.state के साथ stream: "job"
    • data.phase, name, optional meta/args के साथ stream: "tool"
  • 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 फिर से दिखाई देती है।
Was this useful?
On this page

On this page