بروتوكول الجسر (نقل العُقد القديمة)
بروتوكول الجسر هو نقل عُقد قديم (TCP JSONL). ينبغي لعملاء العُقد الجدد استخدام بروتوكول Gateway الموحد عبر WebSocket بدلًا من ذلك. إذا كنت تبني مُشغّلًا أو عميل عُقدة، فاستخدم بروتوكول Gateway. ملاحظة: لم تعد إصدارات OpenClaw الحالية تُضمّن مستمع جسر TCP؛ ويُحتفَظ بهذه الوثيقة للمرجعية التاريخية. لم تعد مفاتيح التهيئة القديمةbridge.* جزءًا من مخطط التهيئة.
لماذا لدينا الاثنان معًا
- حدّ أمني: يعرِض الجسر قائمة سماح صغيرة بدلًا من السطح الكامل لواجهة برمجة تطبيقات الـ Gateway.
- الإقران + هوية العُقدة: قبول العُقد مملوك للـ Gateway ومرتبط برمز مميّز لكل عُقدة.
- تجربة الاكتشاف: يمكن للعُقد اكتشاف الـ Gateway عبر Bonjour على الشبكة المحلية، أو الاتصال مباشرة عبر tailnet.
- WS عبر loopback: يبقى مستوى التحكم الكامل عبر WebSocket محليًا ما لم يتم تمريره عبر SSH.
النقل
- TCP، كائن JSON واحد لكل سطر (JSONL).
- TLS اختياري (عندما يكون
bridge.tls.enabledمفعّلًا). - كان منفذ الاستماع الافتراضي القديم هو
18790(الإصدارات الحالية لا تبدأ جسر TCP).
bridgeTls=1 بالإضافة إلى
bridgeTlsSha256 لكي تتمكن العُقد من تثبيت الشهادة. لاحظ أن سجلات Bonjour/mDNS TXT
غير موثَّقة؛ يجب ألا يتعامل العملاء مع البصمة المُعلَن عنها على أنها
بصمة معتمدة دون نية صريحة من المستخدم أو تحقق آخر خارج النطاق.
المصافحة + الإقران
- يرسل العميل
helloمع بيانات تعريف العُقدة + الرمز المميّز (إن كانت مقترنة مسبقًا). - إذا لم تكن مقترنة، يردّ الـ Gateway بـ
error(NOT_PAIRED/UNAUTHORIZED). - يرسل العميل
pair-request. - ينتظر الـ Gateway الموافقة، ثم يرسل
pair-okوhello-ok.
hello-ok القيمة serverName وقد يتضمن canvasHostUrl.
الإطارات
من العميل → الـ Gateway:req/res: استدعاء RPC للـ Gateway ضمن نطاق محدد (الدردشة، الجلسات، التهيئة، الصحة، voicewake، skills.bins)event: إشارات العُقدة (نصّ الصوت، طلب الوكيل، الاشتراك في الدردشة، دورة حياة التنفيذ)
invoke/invoke-res: أوامر العُقدة (canvas.*،camera.*،screen.record،location.get،sms.send)event: تحديثات الدردشة للجلسات المُشترَك فيهاping/pong: إبقاء الاتصال حيًا
src/gateway/server-bridge.ts (أُزيل).
أحداث دورة حياة التنفيذ
يمكن للعُقد إصدار أحداثexec.finished أو exec.denied لإظهار نشاط system.run.
تُعيَّن هذه إلى أحداث نظام داخل الـ Gateway. (قد تواصل العُقد القديمة إصدار exec.started.)
حقول الحمولة (جميعها اختيارية ما لم يُذكر خلاف ذلك):
sessionKey(مطلوب): جلسة الوكيل التي ستتلقى حدث النظام.runId: معرّف تنفيذ فريد للتجميع.command: سلسلة الأمر الخام أو المنسّقة.exitCode،timedOut،success،output: تفاصيل الإكمال (عند الانتهاء فقط).reason: سبب الرفض (عند الرفض فقط).
استخدام tailnet
- اربط الجسر بعنوان IP ضمن tailnet:
bridge.bind: "tailnet"في~/.openclaw/openclaw.json. - يتصل العملاء عبر اسم MagicDNS أو عنوان IP ضمن tailnet.
- لا يعبر Bonjour الشبكات؛ استخدم المضيف/المنفذ يدويًا أو DNS‑SD واسع النطاق عند الحاجة.