macOS companion app
نوار منو
آنچه نمایش داده میشود
- وضعیت کار عامل فعلی را در نماد نوار منو و در اولین ردیف وضعیت منو نمایش میدهیم.
- وضعیت سلامت هنگام فعال بودن کار پنهان میشود؛ وقتی همه نشستها بیکار باشند دوباره برمیگردد.
- زیرمنوی ریشهای «زمینه» بهجای گسترش مستقیم نشستها در منوی ریشه، نشستهای اخیر را در خود دارد.
- بلوک «Nodes» در منوی ریشه فقط دستگاهها را فهرست میکند (گرههای جفتشده از طریق
node.list)، نه ورودیهای کلاینت/حضور. - وقتی snapshotهای مصرف ارائهدهنده در دسترس باشند، یک بخش ریشهای «مصرف» زیر زمینه ظاهر میشود و در صورت وجود، جزئیات هزینه مصرف پس از آن میآید.
مدل وضعیت
- نشستها: رویدادها با
runId(برای هر اجرا) بههمراهsessionKeyدر payload میرسند. نشست «اصلی» کلیدmainاست؛ اگر وجود نداشته باشد، به آخرین نشست بهروزرسانیشده بازمیگردیم. - اولویت: اصلی همیشه برنده است. اگر اصلی فعال باشد، وضعیت آن بلافاصله نمایش داده میشود. اگر اصلی بیکار باشد، آخرین نشست غیر اصلی فعال نمایش داده میشود. در میانه فعالیت رفتوبرگشت نمیکنیم؛ فقط وقتی نشست فعلی بیکار شود یا اصلی فعال شود جابهجا میشویم.
- انواع فعالیت:
job: اجرای فرمان سطحبالا (state: started|streaming|done|error).tool:phase: start|resultباtoolNameوmeta/args.
enum IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(نادیدهگیری اشکالزدایی)
ActivityKind → نماد
exec→ 💻read→ 📄write→ ✍️edit→ 📝attach→ 📎- پیشفرض → 🛠️
نگاشت بصری
idle: موجودک عادی.workingMain: نشان با نماد، tint کامل، انیمیشن پای «در حال کار».workingOther: نشان با نماد، tint کمرنگ، بدون دویدن.overridden: صرفنظر از فعالیت، از نماد/tint انتخابشده استفاده میکند.
زیرمنوی زمینه
- منوی ریشه یک ردیف «زمینه» با تعداد/وضعیت نشست نشان میدهد و یک زیرمنو باز میکند.
- سرصفحه زیرمنوی زمینه تعداد نشستهای فعال در ۲۴ ساعت گذشته را نشان میدهد.
- هر ردیف نشست، نوار توکن، سن، پیشنمایش، thinking/verbose، و اقدامات reset، compact و delete خود را نگه میدارد.
- پیامهای بارگذاری، قطع اتصال، و خطای بارگذاری نشست داخل زیرمنوی زمینه ظاهر میشوند.
- مصرف ارائهدهنده و جزئیات هزینه مصرف در سطح ریشه، زیر زمینه، باقی میمانند تا بدون باز کردن زیرمنو در یک نگاه دیده شوند.
متن ردیف وضعیت (منو)
- هنگام فعال بودن کار:
<Session role> · <activity label>- مثالها:
Main · exec: pnpm test،Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- مثالها:
- هنگام بیکاری: به خلاصه سلامت بازمیگردد.
دریافت رویداد
- منبع: رویدادهای
agentدر control-channel (ControlChannel.handleAgentEvent). - فیلدهای parseشده:
stream: "job"باdata.stateبرای شروع/توقف.stream: "tool"باdata.phase،name، وmeta/argsاختیاری.
- برچسبها:
exec: خط اولargs.command.read/write: مسیر کوتاهشده.edit: مسیر بههمراه نوع تغییر استنباطشده ازmeta/تعداد diffها.- fallback: نام ابزار.
نادیدهگیری اشکالزدایی
- تنظیمات ▸ اشکالزدایی ▸ انتخابگر «نادیدهگیری نماد»:
System (auto)(پیشفرض)Working: main(برای هر نوع ابزار)Working: other(برای هر نوع ابزار)Idle
- از طریق
@AppStorage("iconOverride")ذخیره میشود؛ بهIconState.overriddenنگاشت میشود.
فهرست بررسی آزمایش
- کار نشست اصلی را فعال کنید: بررسی کنید نماد بلافاصله تغییر کند و ردیف وضعیت برچسب اصلی را نشان دهد.
- وقتی اصلی بیکار است، کار نشست غیر اصلی را فعال کنید: نماد/وضعیت غیر اصلی را نشان میدهد؛ تا پایان آن پایدار میماند.
- هنگام فعال بودن دیگری، اصلی را شروع کنید: نماد فوراً به اصلی تغییر میکند.
- burstهای سریع ابزار: مطمئن شوید نشان چشمک نمیزند (مهلت TTL روی نتایج ابزار).
- پس از بیکار شدن همه نشستها، ردیف سلامت دوباره ظاهر میشود.