منطق حالة شريط القوائم
ما الذي يظهر
- نعرض حالة عمل الوكيل الحالية في أيقونة شريط القوائم وفي أول صف حالة داخل القائمة.
- تُخفى حالة السلامة أثناء نشاط العمل؛ وتعود عندما تصبح كل الجلسات في وضع الخمول.
- تسرد كتلة “Nodes” في القائمة الأجهزة فقط (العقد المقترنة عبر
node.list)، وليس إدخالات العميل/Presence. - يظهر قسم “Usage” تحت Context عندما تكون لقطات استخدام الموفّر متاحة.
نموذج الحالة
- الجلسات: تصل الأحداث مع
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: يستخدم الرمز/التلوين المختار بغض النظر عن النشاط.
نص صف الحالة (القائمة)
- أثناء نشاط العمل:
<Session role> · <activity label>- أمثلة:
Main · exec: pnpm test,Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
- أمثلة:
- عند الخمول: يعود إلى ملخص السلامة.
استيعاب الأحداث
- المصدر: أحداث
agentفي control-channel (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.
قائمة التحقق للاختبار
- شغّل job في الجلسة الرئيسية: تحقق من أن الأيقونة تتبدل فورًا وأن صف الحالة يعرض تسمية الجلسة الرئيسية.
- شغّل job في جلسة غير رئيسية بينما الجلسة الرئيسية خاملة: تعرض الأيقونة/الحالة الجلسة غير الرئيسية؛ وتبقى مستقرة حتى تنتهي.
- ابدأ الجلسة الرئيسية بينما الأخرى نشطة: تنقلب الأيقونة إلى الجلسة الرئيسية فورًا.
- دفعات أدوات سريعة: تأكد من أن الشارة لا تومض (مهلة سماح TTL على نتائج الأدوات).
- يظهر صف السلامة مرة أخرى بمجرد خمول جميع الجلسات.