Web interfaces

دردشة الويب

الحالة: تتواصل واجهة دردشة SwiftUI في macOS/iOS مباشرةً مع WebSocket الخاص بـ Gateway. لا يوجد متصفح مضمّن ولا خادم ثابت محلي.

ما هي

  • واجهة دردشة أصلية لـ Gateway.
  • تستخدم الجلسات وقواعد التوجيه نفسها التي تستخدمها القنوات الأخرى.
  • توجيه حتمي: تعود الردود دائمًا إلى WebChat.
  • يُجلب السجل دائمًا من Gateway (من دون مراقبة ملفات محلية). إذا تعذّر الوصول إلى Gateway، يصبح WebChat للقراءة فقط.

البدء السريع

  1. شغّل Gateway.
  2. افتح واجهة WebChat (تطبيق macOS/iOS) أو علامة تبويب الدردشة في واجهة التحكم.
  3. تأكد من إعداد مسار مصادقة صالح لـ Gateway (سر مشترك افتراضيًا، حتى على واجهة الاسترجاع).

آلية العمل

  • تتصل الواجهة بـ WebSocket الخاص بـ Gateway وتستخدم أساليب RPC ‏chat.history وchat.send وchat.inject وchat.message.get.
  • تُفرض حدود على chat.history لضمان الاستقرار: قد يقتطع Gateway حقول النص الطويلة، ويحذف بيانات التعريف الثقيلة، ويستبدل الإدخالات المتجاوزة للحجم بـ [chat.history omitted: message too large]. يمكن لعملاء API إرسال maxChars لكل طلب لتجاوز الحد الافتراضي في استدعاء واحد.
  • عندما تكون رسالة مساعد ظاهرة قد اقتُطعت في chat.history، يمكن لواجهة التحكم فتح قارئ جانبي وجلب الإدخال الكامل بعد تطبيع عرضه عند الطلب عبر chat.message.get، من دون زيادة حمولة السجل الافتراضية. يستخدم chat.message.get فرع النص المنسوخ وقواعد العرض نفسها التي يستخدمها chat.history، لكنه يستهدف إدخالًا واحدًا بواسطة messageId ويعيد سببًا صريحًا لعدم التوفر عندما يتعذر إرجاع المحتوى الكامل.
  • يتبع chat.history فرع النص المنسوخ النشط لملفات الجلسات التي تدعم الإلحاق فقط، ولذلك لا تُعرض في WebChat فروع إعادة الكتابة المتروكة ولا نُسخ المطالبات التي حلت محلها نسخ أحدث.
  • تُعرض إدخالات Compaction على هيئة فاصل باسم "السجل المضغوط" يوضح أن النص المنسوخ المضغوط محفوظ كنقطة تحقق، مع إجراء لفتح نقاط تحقق الجلسة (التفريع أو الاستعادة، عندما تسمح الأذونات).
  • تتذكر واجهة التحكم sessionId الداعم في Gateway الذي يعيده chat.history، وتضمّنه في استدعاءات chat.send اللاحقة، بحيث تواصل عمليات إعادة الاتصال وتحديث الصفحة المحادثة المخزنة نفسها ما لم يبدأ المستخدم جلسة أو يعِد ضبطها.
  • يأخذ chat.send مفتاحًا لضمان تكرار آمن (تستخدم واجهة التحكم معرّف التشغيل)؛ يزيل Gateway الطلبات المتكررة التي تعيد استخدام المفتاح نفسه، ولذلك لا تؤدي عمليات الإرسال المُعادَة أو المكررة والجارية للجلسة/الرسالة/المرفقات نفسها إلى إنشاء تشغيل ثانٍ.
  • تُمرر ملفات بدء مساحة العمل وتعليمات BOOTSTRAP.md المعلقة عبر قسم # Project Context في مطالبة نظام الوكيل، بدلًا من نسخها إلى رسالة مستخدم WebChat. إذا اقتُطع محتوى التمهيد، تتلقى مطالبة النظام بدلًا منه إشعارًا موجزًا باسم "إشعار سياق التمهيد"؛ وتبقى الأعداد التفصيلية وخيارات الإعداد على واجهات التشخيص.
  • يزيل تطبيع العرض في chat.history: سياق OpenClaw الخاص بوقت التشغيل فقط، وأغلفة المظاريف الواردة، ووسوم توجيهات التسليم المضمنة مثل [[reply_to_current]] و[[reply_to:<id>]] و[[audio_as_voice]]، وحمولات XML النصية العادية لاستدعاءات الأدوات (<tool_call> و<function_call> و<tool_calls> و<function_calls>، بما فيها الكتل المقتطعة)، ورموز تحكم النموذج المسرّبة بترميز ASCII أو بعرض كامل. تُحذف إدخالات المساعد التي لا يحتوي نصها الظاهر بالكامل إلا على رمز الصمت NO_REPLY (من دون حساسية لحالة الأحرف).
  • تُستبعد حمولات الرد الموسومة بأنها استدلال (isReasoning: true) من محتوى مساعد WebChat، ونص إعادة تشغيل النص المنسوخ، وكتل المحتوى الصوتي، بحيث لا تظهر الحمولات المخصصة للتفكير فقط كرسائل مساعد مرئية أو صوت قابل للتشغيل.
  • يلحق chat.inject ملاحظة مساعد مباشرةً بالنص المنسوخ ويبثها إلى الواجهة (من دون تشغيل وكيل).
  • يمكن لعمليات التشغيل المُجهضة إبقاء مخرجات المساعد الجزئية ظاهرة في الواجهة. يحفظ Gateway ذلك النص الجزئي في سجل النص المنسوخ عند وجود مخرجات مخزنة مؤقتًا، ويضع على الإدخال بيانات تعريف الإجهاض.

نموذج النص المنسوخ والتسليم

لدى WebChat مساران منفصلان للبيانات:

  • صفوف النص المنسوخ في SQLite هي النص المنسوخ الدائم للنموذج/وقت التشغيل. في عمليات تشغيل الوكيل العادية، يحفظ وقت تشغيل OpenClaw المضمّن رسائل user وassistant وtoolResult المرئية للنموذج عبر موصّل الجلسة. لا يكتب WebChat نصوص تسليم أو حالة أو مساعدة اعتباطية في ذلك النص المنسوخ.
  • أحداث ReplyPayload في Gateway هي إسقاط التسليم المباشر: مطبّعة للعرض في WebChat/القناة، وبث الكتل، ووسوم التوجيهات، وتضمين الوسائط، وأعلام تحويل النص إلى كلام/الصوت، وسلوك الواجهة الاحتياطي. وهي ليست في حد ذاتها سجل الجلسة المرجعي.
  • تظل أطر الاختبار التي تتطلب ردودًا ظاهرة عبر tools.message تستخدم WebChat كمصب داخلي لرد المصدر في التشغيل الحالي. يُسقط message.send بلا هدف من تشغيل WebChat النشط في الدردشة نفسها ويُنسخ إلى النص المنسوخ للجلسة؛ ولا يصبح WebChat قناة صادرة قابلة لإعادة الاستخدام، ولا يرث lastChannel مطلقًا.
  • لا يحقن WebChat إدخالات المساعد في النص المنسوخ إلا عندما يمتلك Gateway رسالة معروضة خارج دورة وكيل مضمّن عادية: chat.inject، وردود الأوامر غير التابعة للوكيل، والمخرجات الجزئية المُجهضة، ومكمّلات النص المنسوخ للوسائط التي يديرها WebChat.
  • إذا ظهر نص المساعد مباشرةً أثناء تشغيل ثم اختفى بعد إعادة تحميل السجل، فتحقق بالترتيب مما يلي: ما إذا كان النص المنسوخ في SQLite يحتوي على نص المساعد، وما إذا كان إسقاط عرض chat.history قد أزاله، ثم ما إذا كان دمج الذيل التفاؤلي في واجهة التحكم قد استبدل حالة التسليم المحلية باللقطة المحفوظة.

ينبغي أن تكون الإجابات النهائية لعمليات تشغيل الوكيل العادية دائمة لأن وقت التشغيل المضمّن يكتب message_end الخاص بالمساعد. يجب على أي مسار احتياطي ينسخ حمولة نهائية مسلّمة إلى النص المنسوخ أن يتجنب أولًا تكرار دورة مساعد كتبها وقت التشغيل المضمّن بالفعل.

لوحة أدوات الوكلاء في واجهة التحكم

  • تحتوي لوحة الأدوات /agents في واجهة التحكم على عرض "متاح الآن" تدعمه tools.effective(sessionKey=...): إسقاط للقراءة فقط مشتق من الخادم لمخزون أدوات الجلسة الحالية، ويشمل الأدوات الأساسية وأدوات Plugin والأدوات المملوكة للقنوات وأدوات خوادم MCP المكتشفة بالفعل.
  • يغطي عرض منفصل لتحرير الإعداد (تدعمه tools.catalog) ملفات التعريف، والتجاوزات الخاصة بكل وكيل، ودلالات الكتالوج.
  • يقتصر التوفر في وقت التشغيل على نطاق الجلسة. يمكن أن يؤدي تبديل الجلسات على الوكيل نفسه إلى تغيير قائمة "متاح الآن". إذا لم تكن خوادم MCP المُعدّة قد اتصلت أو تغيرت منذ آخر اكتشاف، تعرض اللوحة إشعارًا بدلًا من تشغيل عمليات نقل MCP ضمنيًا من مسار القراءة.
  • لا يعني محرر الإعداد التوفر في وقت التشغيل؛ إذ يظل الوصول الفعلي تابعًا لأسبقية السياسات (allow/deny، والتجاوزات الخاصة بكل وكيل وموفر/قناة).

الاستخدام عن بُعد

  • يمرر الوضع البعيد WebSocket الخاص بـ Gateway عبر نفق SSH/Tailscale.
  • لا حاجة إلى تشغيل خادم WebChat منفصل.

مرجع الإعداد (WebChat)

الإعداد الكامل: الإعداد

ليس لدى WebChat قسم إعداد محفوظ. يستخدم Gateway حد العرض المضمّن chat.history؛ ويمكن لعملاء API إرسال maxChars لكل طلب لتجاوز هذا الحد في استدعاء واحد. أُلغي إعداد channels.webchat وgateway.webchat القديم؛ شغّل openclaw doctor --fix لإزالته.

الخيارات العامة ذات الصلة:

  • gateway.port، gateway.bind: مضيف/منفذ WebSocket.
  • gateway.auth.mode، gateway.auth.token، gateway.auth.password: مصادقة WebSocket بالسر المشترك.
  • gateway.auth.allowTailscale: يمكن لعلامة تبويب دردشة واجهة التحكم في المتصفح استخدام ترويسات هوية Serve الخاصة بـ Tailscale عند تمكينها.
  • gateway.auth.mode: "trusted-proxy": مصادقة الوكيل العكسي لعملاء المتصفح خلف مصدر وكيل غير تابع لواجهة الاسترجاع ومدرك للهوية (راجع مصادقة الوكيل الموثوق).
  • gateway.remote.url، gateway.remote.token، gateway.remote.password: هدف Gateway البعيد.
  • session.*: تخزين الجلسة والإعدادات الافتراضية للمفتاح الرئيسي.

ذو صلة

Was this useful?
On this page

On this page