Multi-agent

الحضور

تشير «حالة الحضور» في OpenClaw إلى عرض مبسّط قائم على بذل أفضل جهد لما يلي:

  • الـ Gateway نفسه، و
  • العملاء المرئيون للمستخدم والمتصلون بـ Gateway (تطبيق Mac وWebChat وNodes وغيرها)

تعرض حالة الحضور بيانات الاتصال الوصفية المباشرة في صفحة الأجهزة ضمن واجهة التحكم (ضمن الإعدادات ← الأجهزة) وفي علامة تبويب المثيلات في تطبيق macOS.

تتناول هذه الصفحة قائمة عملاء Gateway. لاكتشاف جهاز Mac الذي استُخدم مؤخرًا وتوجيه تنبيهات Node إليه، راجع حالة حضور الكمبيوتر النشط.

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

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

  • instanceId (اختياري، لكنه موصى به بشدة): هوية عميل ثابتة (عادةً connect.client.instanceId)
  • host: اسم مضيف سهل القراءة
  • ip: عنوان IP قائم على بذل أفضل جهد
  • version: سلسلة إصدار العميل
  • deviceFamily / modelIdentifier: تلميحات عن العتاد
  • mode: ui، webchat، cli، backend، node، probe، test
  • lastInputSeconds: عدد الثواني منذ آخر إدخال للمستخدم، إن كان معلومًا
  • reason: سلسلة حرة يوفّرها العميل؛ ولا يصدر Gateway نفسه سوى self وconnect وdisconnect
  • deviceId، roles، scopes: هوية الجهاز وتلميحات الدور/النطاق الواردة من مصافحة الاتصال
  • ts: الطابع الزمني لآخر تحديث (بالمللي ثانية منذ الحقبة)

الجهات المنتجة (مصادر حالة الحضور)

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

1) إدخال Gateway الذاتي

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

2) اتصال WebSocket

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

سبب عدم ظهور اتصالات مستوى التحكم المؤقتة

غالبًا ما تتصل أوامر CLI وعملاء RPC الخلفيون والمسابير لفترة وجيزة. ولتجنّب الاحتفاظ بهذا التبدّل طوال مدة TTL لحالة الحضور، لا تتحول اتصالات العملاء في وضع cli أو backend أو probe إلى إدخالات حالة حضور. ويستمر تتبّع العملاء في وضع الاختبار لأن مجموعات الاختبار تستخدمهم بدائل للعملاء الحقيقيين.

3) إشارات system-event

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

4) اتصالات Node (الدور: node)

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

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

تُخزّن إدخالات حالة الحضور في خريطة واحدة داخل الذاكرة، وتكون مفاتيحها غير حساسة لحالة الأحرف استنادًا إلى أول قيمة متاحة بالترتيب التالي: معرّف جهاز مقترن، ثم connect.client.instanceId، ثم معرّف كل اتصال كحل أخير.

يُستبعد عملاء مستوى التحكم المؤقتون من التتبّع بالكامل (راجع أعلاه)، لذلك لا تصبح معرّفات اتصالاتهم مفاتيح مطلقًا. أما لكل عميل آخر، فيعني استخدام معرّف الاتصال كحل احتياطي أن العميل الذي يعيد الاتصال من دون instanceId ثابت يظهر كصف مكرر.

TTL والحجم المحدود

حالة الحضور مؤقتة بطبيعتها:

  • TTL: تُزال الإدخالات التي يزيد عمرها على 5 دقائق
  • الحد الأقصى للإدخالات: 200 (تُحذف الأقدم أولًا)

يحافظ ذلك على حداثة القائمة ويمنع نمو الذاكرة بلا حدود.

تنبيه بشأن الاتصال البعيد/النفق (عناوين IP للحلقة المحلية)

عندما يتصل عميل عبر نفق SSH أو إعادة توجيه منفذ محلي، قد يرى Gateway العنوان البعيد على أنه 127.0.0.1. ولتجنّب تسجيل عنوان النفق هذا باعتباره عنوان IP للعميل، تحذف معالجة الاتصال ip بالكامل للعملاء المكتشفين محليًا (الحلقة المحلية)، بدلًا من كتابة عنوان الحلقة المحلية في الإدخال.

الجهات المستهلكة

صفحة الأجهزة في واجهة التحكم

تربط صفحة الأجهزة system-presence بسجلات الاقتران وNode الدائمة. وتثبّت الإشارة الذاتية لـGateway أولًا، كما تستخدم معرّفات الجهاز أو المثيل المتطابقة لبيانات المنصة والإصدار والطراز وحداثة الإدخال المباشرة.

علامة تبويب المثيلات في macOS

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

نصائح تصحيح الأخطاء

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

ذو صلة

Was this useful?
On this page

On this page