---
read_when:
    - تعديل واجهة قائمة Mac أو منطق الحالة
summary: منطق حالة شريط القائمة وما يتم عرضه للمستخدمين
title: شريط القائمة
x-i18n:
  refreshed_at: '2026-04-28T05:23:26Z'
  generated_at: "2026-04-24T07:52:36Z"
  model: gpt-5.4
  provider: openai
  source_hash: 89b03f3b0f9e56057d4cbf10bd1252372c65a2b2ae5e0405a844e9a59b51405d
  source_path: platforms/mac/menu-bar.md
  workflow: 15
---

# منطق حالة شريط القائمة

## ما الذي يتم عرضه

- نعرض حالة عمل الوكيل الحالية في أيقونة شريط القائمة وفي صف الحالة الأول في القائمة.
- يتم إخفاء حالة الصحة أثناء وجود عمل نشط؛ وتعود عندما تصبح كل الجلسات خاملة.
- تعرض كتلة “Nodes” في القائمة **الأجهزة** فقط (nodes المقترنة عبر `node.list`)، وليس إدخالات العميل/الحضور.
- يظهر قسم “Usage” تحت Context عندما تكون لقطات استخدام الموفّر متاحة.

## نموذج الحالة

- الجلسات: تصل الأحداث مع `runId` ‏(لكل تشغيل) بالإضافة إلى `sessionKey` في الحمولة. والجلسة “main” هي المفتاح `main`؛ وإذا كانت غائبة، فإننا نرجع إلى الجلسة التي تم تحديثها مؤخرًا.
- الأولوية: تفوز main دائمًا. إذا كانت main نشطة، فسيتم عرض حالتها فورًا. وإذا كانت main خاملة، فسيتم عرض الجلسة غير الرئيسية الأكثر نشاطًا مؤخرًا. ولا نتنقل ذهابًا وإيابًا أثناء النشاط؛ بل نبدّل فقط عندما تصبح الجلسة الحالية خاملة أو عندما تصبح 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` → 📎
- الافتراضي → 🛠️

### الربط البصري

- `idle`: الكائن المعتاد.
- `workingMain`: شارة مع رمز، وتلوين كامل، وحركة "عمل" للساق.
- `workingOther`: شارة مع رمز، وتلوين خافت، ومن دون حركة scurry.
- `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`/عدادات diff.
  - الرجوع: اسم الأداة.

## تجاوز التصحيح

- Settings ▸ Debug ▸ منتقي “Icon override”:
  - `System (auto)` ‏(افتراضي)
  - `Working: main` ‏(لكل نوع أداة)
  - `Working: other` ‏(لكل نوع أداة)
  - `Idle`
- يُخزَّن عبر `@AppStorage("iconOverride")`؛ ويُربط إلى `IconState.overridden`.

## قائمة التحقق من الاختبار

- فعّل مهمة في الجلسة الرئيسية: تحقّق من أن الأيقونة تتبدل فورًا وأن صف الحالة يعرض تسمية main.
- فعّل مهمة في جلسة غير رئيسية بينما main خاملة: تعرض الأيقونة/الحالة الجلسة غير الرئيسية؛ وتبقى مستقرة حتى تنتهي.
- ابدأ main بينما الأخرى نشطة: تنقلب الأيقونة إلى main فورًا.
- دفعات أدوات سريعة: تأكد من أن الشارة لا تومض (فترة سماح TTL على نتائج الأدوات).
- يعود صف الصحة للظهور بمجرد أن تصبح كل الجلسات خاملة.

## ذو صلة

- [تطبيق macOS](/ar/platforms/macos)
- [أيقونة شريط القائمة](/ar/platforms/mac/icon)
