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

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

ما الذي يتم عرضه

  • نعرض حالة عمل الوكيل الحالية في أيقونة شريط القوائم وفي صف الحالة الأول داخل القائمة.
  • يتم إخفاء حالة الصحة أثناء وجود عمل نشط؛ وتعود للظهور عندما تصبح جميع الجلسات في وضع الخمول.
  • تسرد كتلة «Nodes» في القائمة الأجهزة فقط (العُقد المقترنة عبر node.list)، وليس إدخالات العميل/الحضور.
  • يظهر قسم «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 (ControlChannel.handleAgentEvent).
  • الحقول المُحلَّلة:
    • stream: "job" مع data.state للبداية/الإيقاف.
    • stream: "tool" مع data.phase، name، و meta/args الاختيارية.
  • التسميات:
    • exec: السطر الأول من args.command.
    • read/write: مسار مختصر.
    • edit: مسار مع نوع التغيير المُستنتَج من meta/عدّادات الفروق.
    • البديل: اسم الأداة.

Debug override

  • الإعدادات ▸ Debug ▸ مُنتقي «Icon override»:
    • System (auto) (الافتراضي)
    • Working: main (لكل نوع أداة)
    • Working: other (لكل نوع أداة)
    • Idle
  • يتم التخزين عبر @AppStorage("iconOverride")؛ ويُربط بـ IconState.overridden.

قائمة التحقق للاختبار

  • تشغيل مهمة للجلسة الرئيسية: التحقق من تبديل الأيقونة فورًا وعرض تسمية الرئيسية في صف الحالة.
  • تشغيل مهمة لجلسة غير رئيسية بينما الرئيسية خاملة: تُظهر الأيقونة/الحالة غير الرئيسية؛ وتبقى مستقرة حتى تنتهي.
  • بدء الرئيسية بينما أخرى نشطة: تنقلب الأيقونة إلى الرئيسية فورًا.
  • دفعات أدوات سريعة: التأكد من أن الشارة لا تومض (مهلة TTL لنتائج الأدوات).
  • عودة صف الصحة للظهور بمجرد أن تصبح جميع الجلسات خاملة.