بروتوكول Gateway (WebSocket)
بروتوكول WS الخاص بـ Gateway هو مستوى التحكم الواحد + نقل العُقد لـ OpenClaw. جميع العملاء (CLI، واجهة الويب، تطبيق macOS، عُقد iOS/Android، العُقد بدون واجهة) يتصلون عبر WebSocket ويُعلنون الدور + النطاق عند وقت المصافحة.النقل
- WebSocket، إطارات نصية بحمولات JSON.
- يجب أن يكون الإطار الأول حتماً طلب
connect.
المصافحة (الاتصال)
Gateway → العميل (تحدّي ما قبل الاتصال):hello-ok أيضًا:
مثال عُقدة
إطارات
- طلب:
{type:"req", id, method, params} - استجابة:
{type:"res", id, ok, payload|error} - حدث:
{type:"event", event, payload, seq?, stateVersion?}
الأدوار + النطاقات
الأدوار
operator= عميل مستوى التحكم (CLI/واجهة مستخدم/أتمتة).node= مضيف قدرات (كاميرا/شاشة/لوحة/system.run).
النطاقات (المشغل)
نطاقات شائعة:operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairing
القدرات/الأوامر/الأذونات (العُقدة)
تُعلن العُقد مطالبات القدرات عند وقت الاتصال:caps: فئات القدرات عالية المستوى.commands: قائمة السماح للأوامر القابلة للاستدعاء.permissions: مفاتيح تبديل دقيقة (مثلscreen.record،camera.capture).
الحضور
system-presenceيعيد إدخالات مفهرسة بهوية الجهاز.- تتضمن إدخالات الحضور
deviceId،roles، وscopesبحيث يمكن لواجهات المستخدم عرض صف واحد لكل جهاز حتى عندما يتصل بدوري المشغّل والعُقدة.
أساليب مساعدة للعُقد
- يمكن للعُقد استدعاء
skills.binsلجلب القائمة الحالية لملفات Skills التنفيذية للتحقق التلقائي من السماح.
موافقات التنفيذ
- عندما يتطلب طلب التنفيذ موافقة، يقوم Gateway ببث
exec.approval.requested. - تحسم عملاء المشغّل ذلك عبر استدعاء
exec.approval.resolve(يتطلب نطاقoperator.approvals).
الإصدارات
PROTOCOL_VERSIONموجود فيsrc/gateway/protocol/schema.ts.- يرسل العملاء
minProtocol+maxProtocol؛ ويرفض الخادم عدم التطابق. - تُولَّد المخططات + النماذج من تعريفات TypeBox:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
المصادقة
- إذا تم تعيين
OPENCLAW_GATEWAY_TOKEN(أو--token)، فيجب أن يتطابقconnect.params.auth.tokenوإلا يُغلَق المقبس. - بعد الإقران، يُصدر Gateway رمز جهاز مضبوطًا على
دور الاتصال + النطاقات. ويُعاد في
hello-ok.auth.deviceTokenويجب على العميل حفظه للاتصالات المستقبلية. - يمكن تدوير/إبطال رموز الأجهزة عبر
device.token.rotateوdevice.token.revoke(يتطلب نطاقoperator.pairing).
هوية الجهاز + الإقران
- ينبغي أن تتضمن العُقد هوية جهاز مستقرة (
device.id) مشتقة من بصمة زوج مفاتيح. - تُصدر Gateways رموزًا لكل جهاز + دور.
- تتطلب معرفات الأجهزة الجديدة موافقات إقران ما لم يكن الاعتماد التلقائي المحلي مُمكّنًا.
- تتضمن الاتصالات المحلية loopback وعنوان tailnet الخاص بمضيف Gateway نفسه (بحيث يمكن لارتباطات tailnet على نفس المضيف أن تعتمد تلقائيًا).
- يجب على جميع عملاء WS تضمين هوية
deviceأثناءconnect(المشغّل + العُقدة). يمكن لواجهة التحكم إغفالها فقط عندما يكونgateway.controlUi.allowInsecureAuthمُمكّنًا (أوgateway.controlUi.dangerouslyDisableDeviceAuthلاستخدام «كسر الزجاج»). - يجب على الاتصالات غير المحلية توقيع nonce الموفَّر من الخادم
connect.challenge.
TLS + التثبيت
- يدعم TLS اتصالات WS.
- يمكن للعملاء اختياريًا تثبيت بصمة شهادة Gateway (انظر تهيئة
gateway.tlsإضافةً إلىgateway.remote.tlsFingerprintأو CLI--tls-fingerprint).
النطاق
يكشف هذا البروتوكول واجهة برمجة التطبيقات الكاملة لـ Gateway (الحالة، القنوات، النماذج، الدردشة، الوكيل، الجلسات، العُقد، الموافقات، إلخ). ويُعرَّف السطح الدقيق بواسطة مخططات TypeBox فيsrc/gateway/protocol/schema.ts.