> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# मेनू बार

# मेनू बार स्थिति तर्क

## क्या दिखाया जाता है

* हम वर्तमान एजेंट के कार्य‑स्थिति को मेनू बार आइकन और मेनू की पहली स्थिति पंक्ति में प्रदर्शित करते हैं।
* कार्य सक्रिय होने के दौरान स्वास्थ्य स्थिति छिपी रहती है; सभी सत्र निष्क्रिय होने पर यह वापस आती है।
* मेनू में “Nodes” ब्लॉक केवल **डिवाइस** सूचीबद्ध करता है ( `node.list` के माध्यम से पेयर्ड नोड्स), न कि क्लाइंट/उपस्थिति प्रविष्टियाँ।
* जब प्रदाता उपयोग स्नैपशॉट उपलब्ध होते हैं, तो Context के अंतर्गत “Usage” अनुभाग दिखाई देता है।

## स्थिति मॉडल

* 20. सेशंस: इवेंट्स `runId` (प्रति‑रन) के साथ आते हैं, और पेलोड में `sessionKey` भी होता है। 21. “main” सेशन की कुंजी `main` है; यदि अनुपस्थित हो, तो हम सबसे हाल में अपडेट हुए सेशन पर फ़ॉलबैक करते हैं।
* 22. प्राथमिकता: main हमेशा जीतता है। अगर main active है, तो उसका state तुरंत दिखाया जाता है। 24. यदि main idle है, तो सबसे हाल में सक्रिय non‑main सेशन दिखाया जाता है। 25. हम गतिविधि के बीच flip‑flop नहीं करते; केवल तब स्विच करते हैं जब वर्तमान सेशन idle हो जाए या main सक्रिय हो जाए।
* गतिविधि प्रकार:
  * `job`: उच्च‑स्तरीय कमांड निष्पादन (`state: started|streaming|done|error`)।
  * `tool`: `phase: start|result` के साथ `toolName` और `meta/args`।

## IconState एनम (Swift)

* `idle`
* `workingMain(ActivityKind)`
* `workingOther(ActivityKind)`
* `overridden(ActivityKind)` (डिबग ओवरराइड)

### ActivityKind → ग्लिफ़

* `exec` → 💻
* `read` → 📄
* `write` → ✍️
* `edit` → 📝
* `attach` → 📎
* default → 🛠️

### दृश्य मैपिंग

* `idle`: सामान्य क्रिटर।
* `workingMain`: ग्लिफ़ के साथ बैज, पूर्ण टिंट, पैर “कार्यरत” एनीमेशन।
* `workingOther`: ग्लिफ़ के साथ बैज, म्यूट टिंट, बिना स्करी।
* `overridden`: गतिविधि की परवाह किए बिना चुना गया ग्लिफ़/टिंट उपयोग करता है।

## स्थिति पंक्ति पाठ (मेनू)

* जब कार्य सक्रिय हो: `<Session role> · <activity label>`
  * उदाहरण: `Main · exec: pnpm test`, `Other · read: apps/macos/Sources/OpenClaw/AppState.swift`।
* जब निष्क्रिय हो: स्वास्थ्य सारांश पर वापस जाता है।

## इवेंट इनजेशन

* स्रोत: कंट्रोल‑चैनल `agent` इवेंट्स (`ControlChannel.handleAgentEvent`)।
* पार्स किए गए फ़ील्ड:
  * `stream: "job"` जिसमें प्रारंभ/रोक के लिए `data.state`।
  * `stream: "tool"` जिसमें `data.phase`, `name`, वैकल्पिक `meta`/`args`।
* लेबल:
  * `exec`: `args.command` की पहली पंक्ति।
  * `read`/`write`: संक्षिप्त पथ।
  * `edit`: पथ तथा `meta`/डिफ़ काउंट्स से अनुमानित परिवर्तन प्रकार।
  * फॉलबैक: टूल का नाम।

## डिबग ओवरराइड

* सेटिंग्स ▸ डिबग ▸ “Icon override” पिकर:
  * `System (auto)` (डिफ़ॉल्ट)
  * `Working: main` (प्रति टूल प्रकार)
  * `Working: other` (प्रति टूल प्रकार)
  * `Idle`
* `@AppStorage("iconOverride")` के माध्यम से संग्रहीत; `IconState.overridden` से मैप किया गया।

## परीक्षण चेकलिस्ट

* मुख्य सत्र जॉब ट्रिगर करें: सत्यापित करें कि आइकन तुरंत स्विच होता है और स्थिति पंक्ति मुख्य लेबल दिखाती है।
* मुख्य निष्क्रिय होने पर गैर‑मुख्य सत्र जॉब ट्रिगर करें: आइकन/स्थिति गैर‑मुख्य दिखाती है; उसके समाप्त होने तक स्थिर रहती है।
* अन्य सक्रिय होने पर मुख्य शुरू करें: आइकन तुरंत मुख्य पर फ़्लिप हो जाता है।
* तीव्र टूल बर्स्ट: सुनिश्चित करें कि बैज फ़्लिकर न करे (टूल परिणामों पर TTL ग्रेस)।
* सभी सत्र निष्क्रिय होने पर स्वास्थ्य पंक्ति पुनः दिखाई देती है।
