الحضور
"حضور" 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(التكرارات متوقعة في هذه الحالة)
- تأكد من أن العملاء يرسلون