Web interfaces
WebChat
الحالة: تتواصل واجهة دردشة SwiftUI على macOS/iOS مباشرة مع WebSocket الخاص بـ Gateway.
ما هي
- واجهة دردشة أصلية لـ Gateway (من دون متصفح مضمّن ومن دون خادم ثابت محلي).
- تستخدم الجلسات نفسها وقواعد التوجيه نفسها مثل القنوات الأخرى.
- توجيه حتمي: تعود الردود دائمًا إلى WebChat.
البدء السريع
- ابدأ تشغيل Gateway.
- افتح واجهة WebChat (تطبيق macOS/iOS) أو تبويب الدردشة في Control UI.
- تأكد من تكوين مسار مصادقة صالح لـ Gateway (السر المشترك افتراضيًا، حتى على الحلقة الراجعة).
كيف يعمل (السلوك)
- تتصل الواجهة بـ WebSocket الخاص بـ Gateway وتستخدم
chat.historyوchat.sendوchat.inject. chat.historyمحدود لضمان الاستقرار: قد يقتطع Gateway حقول النص الطويلة، ويحذف البيانات الوصفية الثقيلة، ويستبدل الإدخالات كبيرة الحجم بـ[chat.history omitted: message too large].- عندما تكون رسالة مساعد مرئية قد اقتُطعت في
chat.history، يمكن لـ Control UI فتح قارئ جانبي وجلب الإدخال الكامل بعد تطبيع العرض عند الطلب عبرchat.message.getمن دون زيادة حمولة السجل الافتراضية. - يتبع
chat.historyفرع النص النشط لملفات الجلسات الحديثة القائمة على الإلحاق فقط، لذلك لا تُعرَض فروع إعادة الكتابة المهجورة ونسخ المطالبات المستبدلة في WebChat. - تُعرَض إدخالات Compaction كفاصل صريح للسجل المضغوط. يوضح الفاصل أن النص المضغوط محفوظ كنقطة تحقق ويربط بعناصر تحكم نقاط تحقق الجلسات، حيث يمكن للمشغلين إنشاء فرع أو الاستعادة من ذلك العرض المضغوط عندما تسمح أذوناتهم بذلك.
- يتذكر Control UI قيمة
sessionIdالخاصة بـ Gateway التي يعيدهاchat.historyويضمّنها في استدعاءاتchat.sendاللاحقة، بحيث تستمر عمليات إعادة الاتصال وتحديث الصفحة في المحادثة المخزنة نفسها ما لم يبدأ المستخدم جلسة أو يعيد ضبطها. - يدمج Control UI عمليات الإرسال المكررة الجارية للجلسة والرسالة والمرفقات نفسها قبل إنشاء معرف تشغيل
chat.sendجديد؛ ولا يزال Gateway يزيل تكرار الطلبات المتكررة التي تعيد استخدام مفتاح عديمية التكرار نفسه. - تُمرَّر ملفات بدء مساحة العمل وتعليمات
BOOTSTRAP.mdالمعلّقة عبر سياق المشروع في موجه نظام الوكيل، ولا تُنسخ إلى رسالة مستخدم WebChat. لا يضيف اقتطاع Bootstrap إلا إشعار استرداد موجزًا في موجه النظام؛ وتبقى العدادات التفصيلية ومقابض التكوين على أسطح التشخيص. chat.historyمطبّع أيضًا للعرض: سياق OpenClaw الخاص بوقت التشغيل فقط، وأغلفة المغلفات الواردة، ووسوم توجيه التسليم المضمّنة مثل[[reply_to_*]]و[[audio_as_voice]]، وحمولات XML النصية الصرفة لاستدعاءات الأدوات (بما في ذلك<tool_call>...</tool_call>، و<function_call>...</function_call>، و<tool_calls>...</tool_calls>، و<function_calls>...</function_calls>، وكتل استدعاء الأدوات المقتطعة)، ورموز تحكم النموذج المسرّبة بصيغة ASCII/العرض الكامل تُزال من النص المرئي، وتُحذف إدخالات المساعد التي يكون نصها المرئي كله هو رمز الصمت الدقيقNO_REPLY/no_replyفقط.- تُستبعد حمولات الرد المعلّمة بالاستدلال (
isReasoning: true) من محتوى مساعد WebChat، ونص إعادة تشغيل النص، وكتل المحتوى الصوتي، لذلك لا تظهر الحمولات المخصصة للتفكير فقط كرسائل مساعد مرئية أو صوت قابل للتشغيل. - يضيف
chat.injectملاحظة مساعد مباشرة إلى النص ويبثها إلى الواجهة (من دون تشغيل وكيل). - يمكن أن تُبقي عمليات التشغيل المُجهضة إخراج المساعد الجزئي مرئيًا في الواجهة.
- يحفظ Gateway نص المساعد الجزئي المُجهض في سجل النص عندما يوجد إخراج مخزّن مؤقتًا، ويميّز تلك الإدخالات ببيانات وصفية للإجهاض.
- يُجلَب السجل دائمًا من Gateway (من دون مراقبة ملفات محلية).
- إذا تعذّر الوصول إلى Gateway، يكون WebChat للقراءة فقط.
نموذج النص والتسليم
لدى WebChat مساران منفصلان للبيانات:
- ملف JSONL للجلسة هو نص النموذج/وقت التشغيل المتين. في عمليات تشغيل الوكيل العادية، يحفظ وقت تشغيل OpenClaw المضمّن رسائل
userوassistantوtoolResultالمرئية للنموذج عبر مدير الجلسات. لا يكتب WebChat نصوص تسليم أو حالة أو مساعدة عشوائية في ذلك النص. - أحداث
ReplyPayloadالخاصة بـ Gateway هي إسقاط التسليم الحي. يمكن تطبيعها لعرض WebChat/القناة، وبث الكتل، ووسوم التوجيه، وتضمين الوسائط، وأعلام TTS/الصوت، وسلوك الرجوع في الواجهة. وهي ليست بحد ذاتها سجل الجلسة القانوني. - لا تزال الحِزم التي تتطلب ردودًا مرئية عبر
tools.messageتستخدم WebChat كمصب رد داخلي للتشغيل الحالي. يُسقطmessage.sendبلا هدف من تشغيل WebChat النشط هذا في الدردشة نفسها ويُعكس إلى نص الجلسة؛ ولا يصبح WebChat قناة صادرة قابلة لإعادة الاستخدام ولا يرثlastChannelأبدًا. - يحقن WebChat إدخالات نص المساعد فقط عندما يملك Gateway رسالة معروضة خارج دورة وكيل مضمّنة عادية:
chat.inject، وردود الأوامر غير الوكيلة، والإخراج الجزئي المُجهض، وملاحق نص الوسائط التي يديرها WebChat. - يقرأ
chat.historyنص الجلسة المخزّن ويطبّق إسقاط عرض WebChat. إذا ظهر نص مساعد حي أثناء تشغيل ثم اختفى بعد إعادة تحميل السجل، فتحقق أولًا مما إذا كان JSONL الخام يحتوي على نص المساعد، ثم مما إذا كان إسقاطchat.historyقد جرّده، ثم مما إذا كان دمج الذيل التفاؤلي في Control UI قد استبدل حالة التسليم المحلية باللقطة المخزنة. - يستخدم
chat.message.getفرع النص نفسه وقواعد إسقاط العرض نفسها مثلchat.history، بما في ذلك نطاق الوكيل النشط، لكنه يستهدف إدخال نص واحدًا بواسطةmessageIdويعيد سبب عدم إتاحة صادقًا عندما لا يمكن إعادة المحتوى الكامل بعد الآن.
ينبغي أن تكون الإجابات النهائية لعمليات تشغيل الوكيل العادية متينة لأن وقت التشغيل المضمّن يكتب message_end الخاص بالمساعد. يجب على أي رجوع يعكس حمولة نهائية مسلّمة إلى النص أن يتجنب أولًا تكرار دورة مساعد كتبها وقت التشغيل المضمّن بالفعل.
لوحة أدوات وكلاء Control UI
- تحتوي لوحة الأدوات في
/agentsضمن Control UI على عرضين منفصلين:- متاح الآن يستخدم
tools.effective(sessionKey=...)ويعرض إسقاطًا للقراءة فقط مشتقًا من الخادم لمخزون الجلسة الحالي، بما في ذلك الأدوات الأساسية، وأدوات Plugin، والأدوات المملوكة للقنوات، وأدوات خادم MCP المكتشفة بالفعل. - تكوين الأدوات يستخدم
tools.catalogويبقى مركّزًا على الملفات الشخصية، والتجاوزات، ودلالات الفهرس.
- متاح الآن يستخدم
- الإتاحة في وقت التشغيل مرتبطة بنطاق الجلسة. يمكن أن يؤدي تبديل الجلسات على الوكيل نفسه إلى تغيير قائمة متاح الآن. إذا لم تكن خوادم MCP المكوّنة قد اتصلت أو تغيّرت منذ آخر اكتشاف، تعرض اللوحة إشعارًا بدلًا من بدء نواقل MCP بصمت من مسار القراءة.
- لا يعني محرر التكوين الإتاحة في وقت التشغيل؛ فلا يزال الوصول الفعّال يتبع أسبقية السياسة
(
allow/deny، وتجاوزات كل وكيل ومزود/قناة).
الاستخدام عن بُعد
- يمرر الوضع البعيد WebSocket الخاص بـ Gateway عبر SSH/Tailscale.
- لا تحتاج إلى تشغيل خادم WebChat منفصل.
مرجع التكوين (WebChat)
التكوين الكامل: التكوين
لا يحتوي WebChat على قسم تكوين محفوظ. يستخدم Gateway حد العرض المضمّن لـ chat.history؛ يمكن لعملاء API إرسال maxChars لكل طلب لتجاوزه لاستدعاء chat.history واحد. أُحيل تكوين 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: يمكن لتبويب دردشة Control UI في المتصفح استخدام ترويسات هوية Tailscale Serve عند تفعيلها.gateway.auth.mode: "trusted-proxy": مصادقة الوكيل العكسي لعملاء المتصفح خلف مصدر وكيل غير حلقة راجعة واعٍ بالهوية (انظر مصادقة الوكيل الموثوق).gateway.remote.url،gateway.remote.token،gateway.remote.password: هدف Gateway البعيد.session.*: تخزين الجلسة والافتراضيات الرئيسية للمفتاح.
ذات صلة
Was this useful?