---
read_when:
    - تعديل واجهة مستخدم قائمة Mac أو منطق الحالة
summary: منطق حالة شريط القوائم وما يُعرض للمستخدمين
title: شريط القوائم
x-i18n:
    generated_at: "2026-05-01T07:41:28Z"
    model: gpt-5.5
    provider: openai
    source_hash: 340b86a2e222fb1fe7fda4f0f0434127af1393a64348ea033ea284ba52866beb
    source_path: platforms/mac/menu-bar.md
    workflow: 16
---

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

## ما الذي يُعرَض

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

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

- الجلسات: تصل الأحداث مع `runId` (لكل تشغيل) إضافةً إلى `sessionKey` في الحمولة. الجلسة "الرئيسية" هي المفتاح `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`: شارة مع رمز، تلوين خافت، بلا حركة سريعة.
- `overridden`: يستخدم الرمز/التلوين المختار بغض النظر عن النشاط.

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

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

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

- أثناء نشاط العمل: `<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`/أعداد الفروقات.
  - البديل الاحتياطي: اسم الأداة.

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

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

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

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

## ذو صلة

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