---
read_when:
    - ضبط واجهة قائمة mac أو منطق الحالة
summary: منطق حالة شريط القوائم وما يُعرض للمستخدمين
title: شريط القوائم
x-i18n:
    generated_at: "2026-07-12T06:10:21Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 480a85f383a6495c0e45850a322c0c67c4cc35e21d2d29b4bd86f42fdbf9430a
    source_path: platforms/mac/menu-bar.md
    workflow: 16
---

## ما يُعرض

- تُعرض حالة عمل الوكيل الحالية في أيقونة شريط القوائم وفي صف الحالة الأول من القائمة.
- تُخفى حالة السلامة أثناء نشاط العمل؛ وتظهر مجددًا بعد دخول جميع الجلسات في حالة الخمول.
- يفتح عنصر "السياق" في الجذر قائمة فرعية تتضمن الجلسات الأخيرة بدلًا من توسيعها في القائمة الجذرية.
- تسرد كتلة "العُقد" في القائمة الجذرية **الأجهزة** المقترنة فقط (من `node.list`)، وليس إدخالات العملاء/الحضور.
- يظهر قسم "الاستخدام" في الجذر أسفل السياق عند توفر لقطات استخدام المزوّد، وتتبعه تفاصيل التكلفة عند توفرها.

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

- المصدر: `WorkActivityStore` ‏(`apps/macos/Sources/OpenClaw/WorkActivityStore.swift`).
- تصل الأحداث بصيغة `ControlAgentEvent` مع `runId`؛ ويقرأ المعالج (`ControlChannel.routeWorkActivity`) قيمة `sessionKey` من حمولة الحدث ويستخدم `"main"` افتراضيًا عند غيابها.
- الأولوية: تكون الغلبة دائمًا للجلسة الرئيسية (`sessionKey == "main"` افتراضيًا). إذا كانت الجلسة الرئيسية نشطة، فتُعرض حالتها فورًا. وإذا كانت خاملة، فتُعرض بدلًا منها أحدث جلسة غير رئيسية كانت نشطة. لا يبدّل المخزن الجلسة في أثناء النشاط؛ بل يبدّلها فقط عندما تدخل الجلسة الحالية في حالة الخمول أو تصبح الجلسة الرئيسية نشطة.
- أنواع النشاط:
  - `job`: تنفيذ أمر عالي المستوى (`state: started|streaming|done|error|...`).
  - `tool`: ‏`phase: start|result` مع `name`، و`meta`/`args` اختياريين.

## تعداد IconState ‏(Swift)

- `idle`
- `workingMain(ActivityKind)`
- `workingOther(ActivityKind)`
- `overridden(ActivityKind)` (تجاوز لتصحيح الأخطاء)

### ActivityKind -> رمز الشارة

يغلّف `ActivityKind` نوعًا من `ToolKind` ‏(`bash`، و`read`، و`write`، و`edit`، و`attach`، و`other`) أو `job` مستقلًا. ويُربط كل منها برمز SF Symbol يُرسم كشارة فوق أيقونة المخلوق (`IconState.badgeSymbolName`):

| النوع           | الرمز                              |
| --------------- | ---------------------------------- |
| `bash`          | `chevron.left.slash.chevron.right` |
| `read`          | `doc`                              |
| `write`         | `pencil`                           |
| `edit`          | `pencil.tip`                       |
| `attach`        | `paperclip`                        |
| `other` / `job` | `gearshape.fill`                   |

### التمثيل المرئي

- `idle`: المخلوق بالحالة العادية، دون شارة.
- `workingMain`: شارة تحمل الرمز، وتلوين كامل (بروز `.primary`)، وحركة "العمل" للساقين.
- `workingOther`: شارة تحمل الرمز، وتلوين خافت (بروز `.secondary`)، من دون حركة اندفاع.
- `overridden`: يستخدم الرمز/التلوين المحددين بغض النظر عن النشاط الفعلي.

## القائمة الفرعية للسياق

- تعرض القائمة الجذرية صفًا واحدًا باسم "السياق" مع عدد الجلسات/حالتها؛ ويفتح هذا الصف قائمة فرعية (`MenuSessionsInjector`).
- يعرض رأس القائمة الفرعية عدد الجلسات النشطة خلال آخر 24 ساعة.
- يحتفظ كل صف جلسة بشريط الرموز المميزة والعمر والمعاينة ومفتاح تبديل التفكير/الإسهاب وإجراءات إعادة الضبط والضغط والحذف.
- تظهر رسائل التحميل وانقطاع الاتصال وأخطاء تحميل الجلسات داخل القائمة الفرعية للسياق.
- تظل أقسام الاستخدام والتكلفة في المستوى الجذري أسفل السياق، لكي تبقى قابلة للاطلاع السريع من دون فتح القائمة الفرعية.

## نص صف الحالة (القائمة)

- أثناء نشاط العمل: `<Session role> · <activity label>` (`"\(roleLabel) · \(activity.label)"` في `MenuContentView`)؛ حيث تكون تسمية الدور `Main` أو `Other`.
- عند الخمول: يعود إلى ملخص الحالة الصحية.

## استيعاب الأحداث

- المصدر: أحداث `agent` لقناة التحكم، التي يوجّهها `ControlChannel.routeWorkActivity(from:)`.
- الحقول المحللة:
  - `stream: "job"` مع `data.state` للبدء/الإيقاف.
  - `stream: "tool"` مع `data.phase` و`data.name` و`data.meta`/`data.args` الاختياريين.
- تأتي تسميات الأدوات من `ToolDisplayRegistry.resolve(name:args:meta:)`؛ وتعود الأسماء التي يتعذر حلها إلى اسم الأداة الخام.

## تجاوز تصحيح الأخطاء

- Settings > Debug > منتقي "Icon override":
  - `System (auto)` (الافتراضي)
  - `Working: main` / `Working: other` (حسب نوع الأداة: bash، والقراءة، والكتابة، والتحرير، وأخرى)
  - `Idle`
- يُخزَّن ضمن مفتاح `UserDefaults` المسمّى `openclaw.iconOverride`؛ ويُربط بـ `IconState.overridden`.

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

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

## ذو صلة

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