---
read_when:
    - تنظیم رابط کاربری منوی مک یا منطق وضعیت
summary: منطق وضعیت نوار منو و آنچه به کاربران نمایش داده می‌شود
title: نوار منو
x-i18n:
    generated_at: "2026-07-12T10:23:13Z"
    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 نگاشت می‌شوند که روی نماد جانورک ترسیم می‌شود (`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`) را باز می‌کند.
- سرآیند زیرمنو تعداد نشست‌های فعال در ۲۴ ساعت گذشته را نشان می‌دهد.
- هر ردیف نشست، نوار توکن، سن، پیش‌نمایش، کلید تغییر حالت تفکر/مشروح، و کنش‌های بازنشانی، فشرده‌سازی و حذف خود را حفظ می‌کند.
- پیام‌های بارگذاری، قطع اتصال و خطای بارگذاری نشست درون زیرمنوی زمینه نمایش داده می‌شوند.
- بخش‌های مصرف و هزینه در سطح اصلی و زیر زمینه باقی می‌مانند تا بدون باز کردن زیرمنو با یک نگاه قابل مشاهده باشند.

## متن ردیف وضعیت (منو)

- هنگام فعال بودن کار: `<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`
- در کلید `openclaw.iconOverride` از `UserDefaults` ذخیره و به `IconState.overridden` نگاشت می‌شود.

## فهرست بررسی آزمایش

- کار نشست اصلی را فعال کنید: نماد فوراً تغییر می‌کند و ردیف وضعیت برچسب اصلی را نشان می‌دهد.
- هنگامی که نشست اصلی بیکار است، کار نشست غیراصلی را فعال کنید: نماد/وضعیت نشست غیراصلی را نشان می‌دهد و تا پایان آن ثابت می‌ماند.
- هنگامی که نشست دیگری فعال است، نشست اصلی را شروع کنید: نماد فوراً به حالت اصلی تغییر می‌کند.
- فوران‌های سریع ابزار: نشان چشمک نمی‌زند (مهلت ۲ ثانیه‌ای پیش از پاک‌کردن ابزار پایان‌یافته، `WorkActivityStore.toolResultGrace`).
- پس از بیکارشدن همهٔ نشست‌ها، ردیف سلامت دوباره ظاهر می‌شود.

## مرتبط

- [برنامهٔ macOS](/fa/platforms/macos)
- [نماد نوار منو](/fa/platforms/mac/icon)
