macOS companion app
شريط القائمة
ما يظهر
- نعرض حالة عمل الوكيل الحالية في أيقونة شريط القوائم وفي صف الحالة الأول من القائمة.
- تُخفى حالة الصحة أثناء نشاط العمل؛ وتعود عندما تكون كل الجلسات خاملة.
- تحتوي القائمة الفرعية الجذرية "السياق" على الجلسات الحديثة بدلاً من توسيعها مباشرة في القائمة الجذرية.
- تسرد كتلة "العُقد" في القائمة الجذرية الأجهزة فقط (العُقد المقترنة عبر
node.list)، وليس إدخالات العميل/الحضور. - يظهر قسم جذري باسم "الاستخدام" أسفل السياق عند توفر لقطات استخدام المزوّد، تليه تفاصيل تكلفة الاستخدام عند توفرها.
نموذج الحالة
- الجلسات: تصل الأحداث مع
runId(لكل تشغيل) بالإضافة إلىsessionKeyفي الحمولة. الجلسة "الرئيسية" هي المفتاحmain؛ وإذا غاب، نعود إلى أحدث جلسة تم تحديثها. - الأولوية: الرئيسية تفوز دائماً. إذا كانت الرئيسية نشطة، تُعرض حالتها فوراً. إذا كانت الرئيسية خاملة، تُعرض أحدث جلسة غير رئيسية كانت نشطة مؤخراً. لا نتنقل ذهاباً وإياباً أثناء النشاط؛ نبدّل فقط عندما تصبح الجلسة الحالية خاملة أو تصبح الرئيسية نشطة.
- أنواع النشاط:
job: تنفيذ أمر عالي المستوى (state: started|streaming|done|error).tool:phase: start|resultمعtoolNameوmeta/args.
تعداد IconState (Swift)
idleworkingMain(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/أعداد الفروقات.- الاحتياطي: اسم الأداة.
تجاوز التصحيح
- الإعدادات ▸ التصحيح ▸ منتقي "تجاوز الأيقونة":
System (auto)(افتراضي)Working: main(لكل نوع أداة)Working: other(لكل نوع أداة)Idle
- يُخزّن عبر
@AppStorage("iconOverride")؛ ويُعيّن إلىIconState.overridden.
قائمة اختبار
- شغّل مهمة في الجلسة الرئيسية: تحقق من أن الأيقونة تتبدل فوراً وأن صف الحالة يعرض تسمية الرئيسية.
- شغّل مهمة في جلسة غير رئيسية بينما الرئيسية خاملة: تعرض الأيقونة/الحالة غير الرئيسية؛ وتبقى مستقرة حتى تنتهي.
- ابدأ الرئيسية أثناء نشاط أخرى: تتحول الأيقونة إلى الرئيسية فوراً.
- دفعات أدوات سريعة: تأكد من أن الشارة لا تومض (مهلة سماح TTL على نتائج الأدوات).
- يعود صف الصحة للظهور بمجرد أن تصبح كل الجلسات خاملة.