الشبكات والاكتشاف

الاقتران المملوك للبوابة

في الاقتران المملوك للبوابة، تكون البوابة هي المصدر الموثوق لتحديد العقد المسموح لها بالانضمام. واجهات المستخدم (تطبيق macOS، والعملاء المستقبليون) هي مجرد واجهات أمامية توافق على الطلبات المعلقة أو ترفضها. مهم: تستخدم عقد WS اقتران الجهاز (الدور node) أثناء connect. node.pair.* هو مخزن اقتران منفصل ولا يتحكم في مصافحة WS. فقط العملاء الذين يستدعون node.pair.* صراحةً يستخدمون هذا المسار.

المفاهيم

  • الطلب المعلق: عقدة طلبت الانضمام؛ وتتطلب موافقة.
  • العقدة المقترنة: عقدة تمت الموافقة عليها وتم إصدار رمز مصادقة لها.
  • الناقل: نقطة نهاية WS للبوابة تقوم بتوجيه الطلبات ولكنها لا تقرر العضوية. (دعم جسر TCP القديم مهمل/تمت إزالته.)

كيفية عمل الاقتران

  1. تتصل عقدة ببوابة WS وتطلب الاقتران.
  2. تقوم البوابة بتخزين طلب معلق وتصدر حدث node.pair.requested.
  3. تقوم أنت بالموافقة على الطلب أو رفضه (سطر الأوامر أو واجهة المستخدم).
  4. عند الموافقة، تصدر البوابة رمزًا جديدًا (يتم تجديد الرموز عند إعادة الاقتران).
  5. تعيد العقدة الاتصال باستخدام الرمز وتصبح الآن "مقترنة".

تنتهي صلاحية الطلبات المعلقة تلقائيًا بعد 5 دقائق.

سير العمل عبر سطر الأوامر (ملائم للاستخدام بدون واجهة)

openclaw nodes pending
openclaw nodes approve <requestId>
openclaw nodes reject <requestId>
openclaw nodes status
openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"

يظهر nodes status العقد المقترنة/المتصلة وقدراتها.

واجهة برمجة التطبيقات (بروتوكول البوابة)

الأحداث:

  • node.pair.requested — يصدر عند إنشاء طلب معلق جديد.
  • node.pair.resolved — يصدر عند الموافقة على طلب أو رفضه أو انتهاء صلاحيته.

الطرق:

  • node.pair.request — إنشاء طلب معلق أو إعادة استخدامه.
  • node.pair.list — سرد العقد المعلقة + المقترنة.
  • node.pair.approve — الموافقة على طلب معلق (يصدر رمزًا).
  • node.pair.reject — رفض طلب معلق.
  • node.pair.verify — التحقق من { nodeId, token }.

ملاحظات:

  • node.pair.request هو عملية متكررة لكل عقدة: تعيد الاستدعاءات المتكررة نفس الطلب المعلق.
  • الموافقة دائمًا تولد رمزًا جديدًا؛ لا يتم إرجاع أي رمز من node.pair.request.
  • قد تتضمن الطلبات silent: true كتلميح لمسارات الموافقة التلقائية.

الموافقة التلقائية (تطبيق macOS)

يمكن لتطبيق macOS محاولة موافقة صامتة اختيارية عندما:

  • يكون الطلب معلمًا بـ silent، و
  • يمكن للتطبيق التحقق من اتصال SSH بجهاز البوابة باستخدام نفس المستخدم.

إذا فشلت الموافقة الصامتة، يعود إلى نافذة "الموافقة/الرفض" العادية.

التخزين (محلي، خاص)

يتم تخزين حالة الاقتران تحت دليل حالة البوابة (الافتراضي ~/.openclaw):

  • ~/.openclaw/nodes/paired.json
  • ~/.openclaw/nodes/pending.json

إذا قمت بتجاوز OPENCLAW_STATE_DIR، فإن مجلد nodes/ ينتقل معه. ملاحظات أمنية:

  • الرموز هي أسرار؛ عامل paired.json على أنه حساس.
  • تجديد الرمز يتطلب إعادة موافقة (أو حذف إدخال العقدة).

سلوك الناقل

  • الناقل بلا حالة؛ لا يقوم بتخزين العضوية.
  • إذا كانت البوابة غير متصلة أو تم تعطيل الاقتران، لا يمكن للعقد الاقتران.
  • إذا كانت البوابة في الوضع البعيد، يحدث الاقتران مقابل مخزن البوابة البعيدة.

نموذج الشبكةالاكتشاف والناقلات