الانتقال إلى المحتوى الرئيسي

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

ما الذي يظهر

  • نعرض حالة عمل الوكيل الحالية في أيقونة شريط القوائم وفي أول صف حالة داخل القائمة.
  • تُخفى حالة السلامة أثناء نشاط العمل؛ وتعود عندما تصبح كل الجلسات في وضع الخمول.
  • تسرد كتلة “Nodes” في القائمة الأجهزة فقط (العقد المقترنة عبر node.list)، وليس إدخالات العميل/Presence.
  • يظهر قسم “Usage” تحت Context عندما تكون لقطات استخدام الموفّر متاحة.

نموذج الحالة

  • الجلسات: تصل الأحداث مع 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: يستخدم الرمز/التلوين المختار بغض النظر عن النشاط.

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

  • أثناء نشاط العمل: <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 على نتائج الأدوات).
  • يظهر صف السلامة مرة أخرى بمجرد خمول جميع الجلسات.