Nodes
العُقدة هي جهاز مُرافِق (macOS/iOS/Android/بدون واجهة) يتصل بـ WebSocket الخاص بـ Gateway (نفس المنفذ الخاص بالمشغّلين) معrole: "node" ويكشف سطح أوامر (مثل canvas.*، camera.*، system.*) عبر node.invoke. تفاصيل البروتوكول: بروتوكول Gateway.
نقل قديم: بروتوكول Bridge (TCP JSONL؛ مُهمل/مزال للعُقد الحالية).
يمكن لـ macOS أيضًا العمل في وضع العُقدة: يتصل تطبيق شريط القوائم بخادم WS الخاص بـ Gateway ويكشف أوامر اللوحة/الكاميرا المحلية الخاصة به كعُقدة (بحيث يعمل openclaw nodes … على هذا الـ Mac).
ملاحظات:
- العُقد ملحقات وليست بوابات. لا تُشغِّل خدمة البوابة.
- رسائل Telegram/WhatsApp/etc. تصل إلى البوابة وليس إلى العُقد.
- دليل استكشاف الأخطاء وإصلاحها: /nodes/troubleshooting
الاقتران + الحالة
عُقد WS تستخدم اقتران الأجهزة. تعرض العُقد هوية جهاز أثناءconnect؛ وتنشئ Gateway طلب اقتران جهاز لـ role: node. وافق عبر CLI الخاص بالأجهزة (أو الواجهة).
CLI سريع:
- يُعلِّم
nodes statusالعُقدة كـ مقترنة عندما يتضمن دور اقتران الجهازnode. node.pair.*(CLI:openclaw nodes pending/approve/reject) هو مخزن اقتران عُقد منفصل مملوك للبوابة؛ ولا يقيّد مصافحة WS الخاصة بـconnect.
مضيف عُقدة بعيد (system.run)
استخدم مضيف عُقدة عندما تعمل Gateway على جهاز وتريد تنفيذ الأوامر على جهاز آخر. لا يزال النموذج يتحدث إلى البوابة؛ وتُمرِّر البوابة استدعاءاتexec إلى مضيف العُقدة عند اختيار host=node.
ما الذي يعمل وأين
- مضيف Gateway: يستقبل الرسائل، يُشغِّل النموذج، ويوجّه استدعاءات الأدوات.
- مضيف العُقدة: ينفّذ
system.run/system.whichعلى جهاز العُقدة. - الموافقات: تُفرَض على مضيف العُقدة عبر
~/.openclaw/exec-approvals.json.
بدء مضيف عُقدة (في الواجهة الأمامية)
على جهاز العُقدة:بوابة بعيدة عبر نفق SSH (ربط loopback)
إذا كانت Gateway ترتبط بـ loopback (gateway.bind=loopback، الافتراضي في الوضع المحلي)، فلا يمكن لمضيفي العُقدة البعيدين الاتصال مباشرة. أنشئ نفق SSH ووجّه مضيف العُقدة إلى الطرف المحلي للنفق.
مثال (مضيف العُقدة -> مضيف البوابة):
- الرمز المميّز هو
gateway.auth.tokenمن تهيئة البوابة (~/.openclaw/openclaw.jsonعلى مضيف البوابة). - يقرأ
openclaw node runقيمةOPENCLAW_GATEWAY_TOKENللمصادقة.
بدء مضيف عُقدة (كخدمة)
الاقتران + التسمية
على مضيف البوابة:--display-nameعلىopenclaw node run/openclaw node install(يستمر في~/.openclaw/node.jsonعلى العُقدة).openclaw nodes rename --node <id|name|ip> --name "Build Node"(تجاوز من البوابة).
إدراج الأوامر في قائمة السماح
موافقات التنفيذ تكون لكل مضيف عُقدة. أضف إدخالات قائمة السماح من البوابة:~/.openclaw/exec-approvals.json.
نقطة خارجية في العقدة
اضبط القيم الافتراضية (تهيئة البوابة):exec مع host=node يُنفَّذ على مضيف العُقدة (وفقًا لقائمة السماح/الموافقات الخاصة بالعُقدة).
ذو صلة:
استدعاء الأوامر
منخفض المستوى (RPC خام):لقطات الشاشة (لقطات اللوحة)
إذا كانت العُقدة تعرض اللوحة (WebView)، فإنcanvas.snapshot يعيد { format, base64 }.
مساعد CLI (يكتب إلى ملف مؤقت ويطبع MEDIA:<path>):
عناصر تحكم اللوحة
- يقبل
canvas presentعناوين URL أو مسارات ملفات محلية (--target)، بالإضافة إلى--x/--y/--width/--heightاختياريًا للتموضع. - يقبل
canvas evalشيفرة JavaScript مضمنة (--js) أو وسيطًا موضعيًا.
A2UI (اللوحة)
- مدعوم فقط A2UI v0.8 JSONL (يتم رفض v0.9/createSurface).
الصور + الفيديوهات (كاميرا العُقدة)
الصور (jpg):
mp4):
- يجب أن تكون العُقدة في المقدّمة لـ
canvas.*وcamera.*(تُرجع الاستدعاءات في الخلفيةNODE_BACKGROUND_UNAVAILABLE). - يتم تقييد مدة المقطع (حاليًا
<= 60s) لتجنّب حمولات base64 كبيرة الحجم. - سيطلب Android أذونات
CAMERA/RECORD_AUDIOعند الإمكان؛ الأذونات المرفوضة تفشل بـ*_PERMISSION_REQUIRED.
تسجيلات الشاشة (العُقد)
تكشف العُقدscreen.record (mp4). مثال:
- يتطلب
screen.recordأن يكون تطبيق العُقدة في المقدّمة. - سيعرض Android مطالبة النظام لالتقاط الشاشة قبل التسجيل.
- يتم تقييد تسجيلات الشاشة إلى
<= 60s. - يعطّل
--no-audioالتقاط الميكروفون (مدعوم على iOS/Android؛ يستخدم macOS صوت التقاط النظام). - استخدم
--screen <index>لاختيار شاشة عند توفر شاشات متعددة.
الموقع (العُقد)
تكشف العُقدlocation.get عندما يكون الموقع مُمكّنًا في الإعدادات.
مساعد CLI:
- الموقع معطّل افتراضيًا.
- يتطلب خيار «دائمًا» إذن النظام؛ والجلب في الخلفية يكون بأفضل جهد.
- تتضمن الاستجابة خط العرض/خط الطول، والدقة (بالأمتار)، والطابع الزمني.
SMS (عُقد Android)
يمكن لعُقد Android كشفsms.send عندما يمنح المستخدم إذن SMS ويدعم الجهاز الاتصال الهاتفي.
استدعاء منخفض المستوى:
- يجب قبول مطالبة الإذن على جهاز Android قبل الإعلان عن القدرة.
- الأجهزة المعتمدة على Wi‑Fi فقط وبدون اتصال هاتفي لن تعلن عن
sms.send.
أوامر النظام (مضيف العُقدة / عُقدة mac)
تكشف عُقدة macOSsystem.run، system.notify، و system.execApprovals.get/set.
ويكشف مضيف العُقدة بدون واجهة system.run، system.which، و system.execApprovals.get/set.
أمثلة:
- يعيد
system.runstdout/stderr/رمز الخروج في الحمولة. - يحترم
system.notifyحالة أذونات الإشعارات في تطبيق macOS. - يدعم
system.runكلاً من--cwd،--env KEY=VAL،--command-timeout، و--needs-screen-recording. - يدعم
system.notifyكلاً من--priority <passive|active|timeSensitive>و--delivery <system|overlay|auto>. - تتجاهل مضيفات Node أي تجاوزات لقيمة
PATH. إذا كنت بحاجة إلى إدخالات PATH إضافية، فقم بتهيئة بيئة خدمة مضيف العقدة (أو تثبيت الأدوات في المواقع القياسية) بدلاً من تمريرPATHعبر--env. - في وضع عُقدة macOS، يتم تقييد
system.runبموافقات التنفيذ في تطبيق macOS (الإعدادات → Exec approvals). تعمل ask/allowlist/full بنفس سلوك مضيف العُقدة بدون واجهة؛ وتُرجِع المطالبات المرفوضةSYSTEM_RUN_DENIED. - على مضيف العُقدة بدون واجهة، يتم تقييد
system.runبموافقات التنفيذ (~/.openclaw/exec-approvals.json).
ربط Exec بعُقدة
عند توفر عدة عُقد، يمكنك ربط Exec بعُقدة محددة. يُعيّن هذا العُقدة الافتراضية لـexec host=node (ويمكن تجاوزه لكل وكيل).
الافتراضي العام:
خريطة الأذونات
قد تتضمن العُقد خريطةpermissions في node.list / node.describe، مفهرسة باسم الإذن (مثل screenRecording، accessibility) بقيم منطقية (true = مُنِح).
مضيف عُقدة بدون واجهة (متعدد المنصات)
يمكن لـ OpenClaw تشغيل مضيف عُقدة بدون واجهة (بدون UI) يتصل بـ WebSocket الخاص بـ Gateway ويكشفsystem.run / system.which. هذا مفيد على Linux/Windows
أو لتشغيل عُقدة بسيطة بجوار خادم.
ابدأه:
- لا يزال الاقتران مطلوبًا (ستعرض Gateway مطالبة موافقة على العُقدة).
- يخزن مضيف العُقدة معرّف العُقدة والرمز المميّز واسم العرض ومعلومات اتصال البوابة في
~/.openclaw/node.json. - تُفرَض موافقات التنفيذ محليًا عبر
~/.openclaw/exec-approvals.json(انظر موافقات Exec). - على macOS، يفضّل مضيف العُقدة بدون واجهة مضيف التنفيذ الخاص بالتطبيق المُرافِق عند توفره، ويعود
إلى التنفيذ المحلي إذا كان التطبيق غير متاح. اضبط
OPENCLAW_NODE_EXEC_HOST=appلفرض استخدام التطبيق، أوOPENCLAW_NODE_EXEC_FALLBACK=0لتعطيل الرجوع. - أضف
--tls/--tls-fingerprintعندما يستخدم WS الخاص بـ Gateway بروتوكول TLS.
وضع عُقدة Mac
- يتصل تطبيق شريط القوائم في macOS بخادم WS الخاص بـ Gateway كعُقدة (بحيث يعمل
openclaw nodes …على هذا الـ Mac). - في الوضع البعيد، يفتح التطبيق نفق SSH لمنفذ Gateway ويتصل بـ
localhost.