واجهة التحكّم (المتصفح)
واجهة التحكّم هي تطبيق صفحة واحدة صغير مبني باستخدام Vite + Lit ويتم تقديمه بواسطة Gateway:- الافتراضي:
http://<host>:18789/ - بادئة اختيارية: عيّن
gateway.controlUi.basePath(على سبيل المثال:/openclaw)
الفتح السريع (محلي)
إذا كان Gateway يعمل على الكمبيوتر نفسه، افتح: إذا فشل تحميل الصفحة، ابدأ تشغيل Gateway أولًا:openclaw gateway.
يتم توفير المصادقة أثناء مصافحة WebSocket عبر:
connect.params.auth.tokenconnect.params.auth.passwordتتيح لوحة إعدادات لوحة التحكّم تخزين رمز مميّز؛ ولا يتم حفظ كلمات المرور. يقوم معالج التهيئة الأولية بإنشاء رمز Gateway افتراضيًا، لذا الصقه هنا عند الاتصال الأول.
إقران الجهاز (الاتصال الأول)
عند الاتصال بواجهة التحكّم من متصفح أو جهاز جديد، يتطلّب Gateway موافقة إقران لمرة واحدة — حتى لو كنت على Tailnet نفسه معgateway.auth.allowTailscale: true. هذا إجراء أمني لمنع
الوصول غير المصرّح به.
ما ستراه: “disconnected (1008): pairing required”
للموافقة على الجهاز:
openclaw devices revoke --device <id> --role <role>. راجع
Devices CLI لتدوير الرموز وإلغائها.
ملاحظات:
- الاتصالات المحلية (
127.0.0.1) تتم الموافقة عليها تلقائيًا. - الاتصالات عن بعد (الشبكة المحلية، تايلنيت، إلخ) يتطلب موافقة صريحة.
- يقوم كل ملف تعريف متصفح بإنشاء معرّف جهاز فريد، لذا فإن تبديل المتصفحات أو مسح بيانات المتصفح سيتطلّب إعادة الإقران.
ما الذي يمكنها فعله (حاليًا)
- الدردشة مع النموذج عبر Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) - بثّ استدعاءات الأدوات + بطاقات إخراج الأدوات الحية في الدردشة (أحداث الوكيل)
- القنوات: حالة قنوات WhatsApp/Telegram/Discord/Slack + قنوات الإضافات (Mattermost، إلخ) + تسجيل الدخول عبر QR + تهيئة لكل قناة (
channels.status,web.login.*,config.patch) القنوات: حالة قنوات WhatsApp/Telegram/Discord/Slack + قنوات الإضافات (Mattermost، إلخ) + تسجيل الدخول عبر QR + تهيئة لكل قناة (channels.status,web.login.*,config.patch) حالة + تسجيل الدخول QR + لكل قناة تهيئة (channels.status,web.login.*,config.patch) - المثيلات: قائمة الحضور + تحديث (
system-presence) - الجلسات: قائمة + تجاوزات التفكير/الوضع المطوّل لكل جلسة (
sessions.list,sessions.patch) - مهام Cron: سرد/إضافة/تشغيل/تمكين/تعطيل + سجل التشغيل (
cron.*) - Skills: الحالة، تمكين/تعطيل، تثبيت، تحديثات مفاتيح API (
skills.*) - العُقد: قائمة + القدرات (
node.list) - موافقات التنفيذ: تحرير قوائم السماح لـ Gateway أو العُقد + طلب سياسة لـ
exec host=gateway/node(exec.approvals.*) - التهيئة: عرض/تحرير
~/.openclaw/openclaw.json(config.get,config.set) - التهيئة: تطبيق + إعادة تشغيل مع التحقّق (
config.apply) وإيقاظ آخر جلسة نشطة - تتضمّن عمليات كتابة التهيئة حارس تجزئة أساسي لمنع الكتابة فوق تعديلات متزامنة
- مخطط التهيئة + عرض النماذج (
config.schema، بما في ذلك مخططات الإضافات والقنوات)؛ يظل محرّر JSON الخام متاحًا - التصحيح: لقطات الحالة/السلامة/النماذج + سجل الأحداث + استدعاءات RPC يدوية (
status,health,models.list) - السجلات: تتبّع مباشر لسجلات ملفات Gateway مع التصفية/التصدير (
logs.tail) - التحديث: تشغيل تحديث حزمة/مستودع git + إعادة تشغيل (
update.run) مع تقرير إعادة التشغيل
- للمهام المعزولة، يكون التسليم افتراضيًا على إعلان ملخّص. يمكنك التبديل إلى «بدون» إذا أردت تشغيلًا داخليًا فقط.
- تظهر حقول القناة/الهدف عند اختيار «إعلان».
سلوك الدردشة
chat.sendغير حاجز: يتم الإقرار فورًا بـ{ runId, status: "started" }ويتم بثّ الاستجابة عبر أحداثchat.- إعادة الإرسال باستخدام نفس
idempotencyKeyتُرجع{ status: "in_flight" }أثناء التشغيل، و{ status: "ok" }بعد الاكتمال. chat.injectيُلحق ملاحظة مساعد بنص الجلسة ويبث حدثchatلتحديثات واجهة المستخدم فقط (من دون تشغيل وكيل، ومن دون تسليم إلى قناة).- الإيقاف:
- انقر Stop (يستدعي
chat.abort) - اكتب
/stop(أوstop|esc|abort|wait|exit|interrupt) للإلغاء خارج النطاق - يدعم
chat.abort{ sessionKey }(من دونrunId) لإلغاء جميع عمليات التشغيل النشطة لتلك الجلسة
- انقر Stop (يستدعي
الوصول عبر Tailnet (موصى به)
Tailscale Serve المدمج (المفضّل)
أبقِ Gateway على local loopback ودع Tailscale Serve يقوم بالوساطة عبر HTTPS:https://<magicdns>/(أوgateway.controlUi.basePathالذي قمت بتهيئته)
tailscale-user-login) عندما يكون gateway.auth.allowTailscale هو true. يقوم OpenClaw
بالتحقق من الهوية عبر حل عنوان x-forwarded-for باستخدام
tailscale whois ومطابقته مع الترويسة، ولا يقبل ذلك إلا عندما
يصل الطلب إلى local loopback مع ترويسات x-forwarded-* الخاصة بـ Tailscale. عيّن
gateway.auth.allowTailscale: false (أو افرض gateway.auth.mode: "password")
إذا أردت اشتراط رمز/كلمة مرور حتى لحركة Serve.
الربط بـ tailnet + رمز
http://<tailscale-ip>:18789/(أوgateway.controlUi.basePathالذي قمت بتهيئته)
connect.params.auth.token).
HTTP غير الآمن
إذا فتحت لوحة التحكّم عبر HTTP عادي (http://<lan-ip> أو http://<tailscale-ip>),
فإن المتصفح يعمل في سياق غير آمن ويمنع WebCrypto. افتراضيًا،
يقوم OpenClaw بحظر اتصالات واجهة التحكّم دون هوية جهاز.
الإصلاح الموصى به: استخدم HTTPS (Tailscale Serve) أو افتح الواجهة محليًا:
https://<magicdns>/(Serve)http://127.0.0.1:18789/(على مضيف Gateway)
بناء الواجهة
يقدّم Gateway ملفات ثابتة منdist/control-ui. قم ببنائها باستخدام:
ws://127.0.0.1:18789).
التصحيح/الاختبار: خادم التطوير + Gateway بعيد
واجهة التحكّم هي ملفات ثابتة؛ وهدف WebSocket قابل للتهيئة ويمكن أن يختلف عن أصل HTTP. هذا مفيد عندما تريد خادم تطوير Vite محليًا بينما يعمل Gateway في مكان آخر.- ابدأ خادم تطوير الواجهة:
pnpm ui:dev - افتح عنوان URL مثل:
- يتم تخزين
gatewayUrlفي localStorage بعد التحميل وإزالته من عنوان URL. - يتم تخزين
tokenفي localStorage؛ بينما يُحتفظ بـpasswordفي الذاكرة فقط. - عند تعيين
gatewayUrl، لا تعود الواجهة إلى بيانات اعتماد التهيئة أو البيئة. قدّمtoken(أوpassword) صراحةً. يُعد غياب بيانات اعتماد صريحة خطأً. - استخدم
wss://عندما يكون Gateway خلف TLS (Tailscale Serve، وكيل HTTPS، إلخ). - لا يُقبل
gatewayUrlإلا في نافذة من المستوى الأعلى (غير مضمّنة) لمنع هجمات النقر الخادع. - لإعدادات التطوير عبر أصول متعددة (على سبيل المثال:
pnpm ui:devإلى Gateway بعيد)، أضِف أصل الواجهة إلىgateway.controlUi.allowedOrigins.