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

متعدد الوكلاء

الحضور

"حضور" OpenClaw هو عرض خفيف الوزن وذو جهد أفضل لـ:

  • البوابة نفسها، و
  • العملاء المتصلين بالبوابة (تطبيق ماك، WebChat، CLI، إلخ.)

يُستخدم الحضور بشكل أساسي لعرض تبويب الحالات في تطبيق macOS ولتوفير رؤية سريعة للمشغل.

حقول الحضور (ما يظهر)​

إدخالات الحضور هي كائنات منظمة تحتوي على حقول مثل:

  • instanceId (اختياري ولكن موصى به بشدة): هوية مستقرة للعميل (عادةً connect.client.instanceId)
  • host: اسم مضيف مفهوم للإنسان
  • ip: عنوان IP ذو جهد أفضل
  • version: سلسلة إصدار العميل
  • deviceFamily / modelIdentifier: تلميحات للأجهزة
  • mode: ui, webchat, cli, backend, probe, test, node, …
  • lastInputSeconds: "الثواني منذ آخر إدخال للمستخدم" (إذا كان معروفًا)
  • reason: self, connect, node-connected, periodic, …
  • ts: طابع زمني آخر تحديث (مللي ثانية منذ العصر)

المنتجون (مصدر بيانات الحضور)​

يتم إنتاج إدخالات الحضور من مصادر متعددة ويتم دمجها.

1) إدخال البوابة الذاتي​

تقوم البوابة دائمًا بإنشاء إدخال "ذاتي" عند بدء التشغيل حتى تعرض الواجهات مضيف البوابة حتى قبل اتصال أي عملاء.

2) اتصال WebSocket​

يبدأ كل عميل WS بطلب connect. عند اكتمال المصافحة بنجاح، تقوم البوابة بإدراج أو تحديث إدخال حضور لهذا الاتصال.

لماذا لا تظهر أوامر CLI الفردية​

غالبًا ما يتصل CLI لأوامر فردية قصيرة. لتجنب إغراق قائمة الحالات، لا يتم تحويل client.mode === "cli" إلى إدخال حضور.

3) إشارات system-event الدورية​

يمكن للعملاء إرسال إشارات دورية أكثر تفصيلاً عبر طريقة system-event. يستخدم تطبيق ماك هذا للإبلاغ عن اسم المضيف، وعنوان IP، وlastInputSeconds.

4) اتصال العقد (دور: node)​

عندما تتصل عقدة عبر WebSocket الخاص بالبوابة بـ role: node، تقوم البوابة بإدراج أو تحديث إدخال حضور لتلك العقدة (نفس تدفق عملاء WS الآخرين).

قواعد الدمج وإزالة التكرار (أهمية instanceId)​

يتم تخزين إدخالات الحضور في خريطة ذاكرة واحدة:

  • يتم فهرسة الإدخالات بواسطة مفتاح حضور.
  • أفضل مفتاح هو instanceId مستقر (من connect.client.instanceId) يبقى بعد إعادة التشغيل.
  • المفاتيح لا تراعي حالة الأحرف.

إذا أعاد العميل الاتصال بدون instanceId مستقر، فقد يظهر كصف مكرر.

مدة الصلاحية والحجم المحدود​

الحضور قصير الأجل عن قصد:

  • مدة الصلاحية (TTL): يتم حذف الإدخالات الأقدم من 5 دقائق
  • الحد الأقصى للإدخالات: 200 (يتم حذف الأقدم أولاً)

هذا يحافظ على نضارة القائمة ويتجنب نمو الذاكرة غير المحدود.

تحذير بشأن النفق/الاتصال عن بُعد (عناوين IP loopback)​

عندما يتصل عميل عبر نفق SSH / إعادة توجيه منفذ محلي، قد ترى البوابة العنوان البعيد كـ 127.0.0.1. لتجنب الكتابة فوق عنوان IP جيد أبلغ عنه العميل، يتم تجاهل عناوين loopback البعيدة.

المستهلكون​

تبويب الحالات في macOS​

يعرض تطبيق macOS ناتج `system-presence ويطبق مؤشر حالة صغير (نشط/خامل/قديم) بناءً على عمر آخر تحديث.

نصائح التصحيح​

  • لرؤية القائمة الأولية، استدعِ system-presence ضد البوابة.
  • إذا رأيت تكرارات:
    • تأكد من أن العملاء يرسلون client.instanceId مستقر في المصافحة
    • تأكد من أن الإشارات الدورية تستخدم نفس instanceId
    • تحقق مما إذا كان الإدخال المشتق من الاتصال يفتقد instanceId (التكرارات متوقعة في هذه الحالة)

توجيه متعدد الوكلاءالرسائل