Skip to main content

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 خام):
تتوفر مساعدات أعلى مستوى لسير العمل الشائع «إعطاء الوكيل مرفق MEDIA».

لقطات الشاشة (لقطات اللوحة)

إذا كانت العُقدة تعرض اللوحة (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)

تكشف عُقدة macOS system.run، system.notify، و system.execApprovals.get/set. ويكشف مضيف العُقدة بدون واجهة system.run، system.which، و system.execApprovals.get/set. أمثلة:
ملاحظات:
  • يعيد system.run stdout/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.