Messages and delivery
مسودات التقدم
تجعل مسودات التقدم دورات الوكيل طويلة التشغيل تبدو حية في الدردشة دون تحويل المحادثة إلى كومة من ردود الحالة المؤقتة.
عند تفعيل مسودات التقدم، ينشئ OpenClaw رسالة عمل قيد التنفيذ واحدة مرئية فقط بعد أن تثبت الدورة أنها تنجز عملا حقيقيا، ويحدّثها بينما يقرأ الوكيل أو يخطط أو يستدعي الأدوات أو ينتظر الموافقة، ثم يحول تلك المسودة إلى الإجابة النهائية عندما تستطيع القناة فعل ذلك بأمان.
Shelling...📖 from docs/concepts/progress-drafts.md🔎 Web Search: for "discord edit message"🛠️ Bash: run testsاستخدم مسودات التقدم عندما تريد رسالة حالة واحدة مرتبة أثناء العمل الكثيف بالأدوات، ثم الإجابة النهائية عند اكتمال الدورة.
البدء السريع
فعّل مسودات التقدم لكل قناة باستخدام streaming.mode: "progress":
{ channels: { discord: { streaming: { mode: "progress", }, }, },}هذا يكفي عادة. سيختار OpenClaw تسمية تلقائية من كلمة واحدة، وينتظر إلى أن يستمر العمل خمس ثوان على الأقل أو يصدر حدث عمل ثانيا، ويضيف أسطر تقدم موجزة أثناء حدوث عمل مفيد، ويمنع ثرثرة التقدم المستقلة المكررة لتلك الدورة.
ما يراه المستخدمون
تتكون مسودة التقدم من جزأين:
| الجزء | الغرض |
|---|---|
| التسمية | سطر بداية/حالة قصير مثل Working أو Shelling. |
| أسطر التقدم | تحديثات تشغيل موجزة تستخدم أيقونات الأدوات ومنسق التفاصيل نفسيهما كما في الإخراج المطول. |
تظهر التسمية بعد أن يبدأ الوكيل عملا ذا معنى، وإما أن يبقى مشغولا لخمس ثوان أو يصدر حدث عمل ثانيا. وهي جزء من قائمة أسطر التقدم المتحركة، لذلك تختفي حالة البداية من العرض عند ظهور ما يكفي من العمل الملموس. لا تعرض الردود النصية الصرفة مسودة تقدم. تضاف أسطر التقدم فقط عندما يصدر الوكيل تحديثات عمل مفيدة، مثل 🛠️ Bash: run tests أو 🔎 Web Search: for "discord edit message" أو ✍️ Write: to /tmp/file.
افتراضيا تستخدم وضع الشرح الموجز نفسه مثل /verbose؛ اضبط agents.defaults.toolProgressDetail: "raw" عند التصحيح وعندما تريد أيضا إلحاق الأوامر/التفاصيل الخام.
تستبدل الإجابة النهائية المسودة عندما يكون ذلك ممكنا؛ وإلا يرسل OpenClaw الإجابة النهائية بالطريقة العادية وينظف المسودة أو يتوقف عن تحديثها وفقا لنقل القناة.
اختيار وضع
يتحكم channels.<channel>.streaming.mode في سلوك التقدم المرئي قيد التنفيذ:
| الوضع | الأنسب لـ | ما يظهر في الدردشة |
|---|---|---|
off |
القنوات الهادئة | الإجابة النهائية فقط. |
partial |
مشاهدة نص الإجابة وهو يظهر | مسودة واحدة تعدل بأحدث نص للإجابة. |
block |
مقاطع أكبر لمعاينة الإجابة | معاينة واحدة تحدّث أو يضاف إليها بمقاطع أكبر. |
progress |
الدورات الكثيفة بالأدوات أو طويلة التشغيل | مسودة حالة واحدة، ثم الإجابة النهائية. |
اختر progress عندما يهتم المستخدمون أكثر بـ"ما الذي يحدث" بدلا من مشاهدة نص الإجابة يتدفق رمزا برمز.
اختر partial عندما تكون الإجابة نفسها هي إشارة التقدم.
اختر block عندما تريد تحديثات معاينة المسودة في مقاطع نصية أكبر. على Discord وTelegram، لا يزال streaming.mode: "block" بث معاينة، وليس تسليم كتل عاديا. استخدم streaming.block.enabled أو الخيار القديم blockStreaming عندما تريد ردود الكتل العادية.
تكوين التسميات
توجد تسميات التقدم ضمن channels.<channel>.streaming.progress.
التسمية الافتراضية هي auto، التي تختار من مجموعة التسميات أحادية الكلمة المضمنة في OpenClaw:
WorkingShellingScuttlingClawingPinchingMoltingBubblingTidingReefingCrackingSiftingBriningNautilingKrillingBarnaclingLobsteringTidepoolingPearlingSnappingSurfacingاستخدم تسمية ثابتة:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "Investigating", }, }, }, },}استخدم مجموعة تسميات تلقائية خاصة بك:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "auto", labels: ["Checking", "Reading", "Testing", "Finishing"], }, }, }, },}أخف التسمية وأظهر أسطر التقدم فقط:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: false, }, }, }, },}التحكم في أسطر التقدم
أسطر التقدم مفعلة افتراضيا في وضع التقدم. وهي تأتي من أحداث تشغيل حقيقية: بدايات الأدوات، وتحديثات العناصر، وخطط المهام، والموافقات، وإخراج الأوامر، وملخصات التصحيحات، ونشاط الوكيل المشابه.
يمكن للأدوات أيضا إصدار تقدم ذي نوع محدد بينما لا يزال استدعاء أداة واحد قيد التشغيل. بهذه الطريقة يمكن لعملية جلب أو بحث بطيئة تحديث المسودة المرئية قبل أن تعيد الأداة نتيجتها النهائية. تحديث التقدم هو نتيجة أداة جزئية بمحتوى نموذج فارغ وبيانات وصفية صريحة لقناة عامة:
{ "content": [], "progress": { "text": "Fetching page content...", "visibility": "channel", "privacy": "public", "id": "web_fetch:fetching" }}يعرض OpenClaw قيمة progress.text فقط في واجهة تقدم القناة. لا تزال نتيجة الأداة العادية تصل لاحقا بصفتها content وdetails، وهي الجزء الوحيد الذي يعود إلى النموذج.
عند إضافة تقدم إلى أداة، استخدم رسالة قصيرة وعامة وأخرها إلى أن تكون العملية معلقة لمدة كافية لتكون مفيدة:
const clearProgressTimer = scheduleToolProgress( onUpdate, { text: "Fetching page content...", id: "web_fetch:fetching" }, 5_000, { signal },); try { return await runToolWork();} finally { clearProgressTimer();}يعني هذا النمط أن الاستدعاءات السريعة لا تعرض سطر تقدم، وأن الاستدعاءات الطويلة تعرض سطرا بينما لا تزال معلقة، وأن الاستدعاءات الملغاة تمسح المؤقت قبل أن يظهر تقدم قديم. نص التقدم قناة جانبية عامة لواجهة المستخدم، لذلك يجب ألا يتضمن أسرارا أو وسائط خاما أو محتوى مجلوبا أو إخراج أوامر أو نص صفحة.
يستخدم OpenClaw المنسق نفسه لمسودات التقدم و/verbose:
{ agents: { defaults: { toolProgressDetail: "explain", // explain | raw }, },}"explain" هو الافتراضي ويحافظ على استقرار المسودات بتسميات موجزة مثل 🛠️ check JS syntax for /tmp/app.js. يضيف "raw" الأمر/التفصيل الأساسي عند توفره، وهو مفيد أثناء التصحيح لكنه أكثر ضجيجا في الدردشة.
على سبيل المثال، يظهر الأمر نفسه بشكل مختلف حسب وضع التفاصيل:
| الوضع | سطر التقدم |
|---|---|
explain |
🛠️ check JS syntax for /tmp/app.js |
raw |
🛠️ check JS syntax for /tmp/app.js, node --check /tmp/app.js |
حدد عدد الأسطر التي تبقى مرئية:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLines: 4, }, }, }, },}تضغط أسطر التقدم تلقائيا لتقليل إعادة تدفق فقاعة الدردشة أثناء تعديل المسودة.
يقتطع OpenClaw أسطر التقدم الطويلة افتراضيا حتى لا تلتف تعديلات المسودة المتكررة بشكل مختلف في كل تحديث. الميزانية الافتراضية لكل سطر هي 120 حرفا. يقتطع النثر عند حد كلمة، بينما تختصر التفاصيل الطويلة مثل المسارات أو الأوامر الخام بعلامة حذف وسطية حتى تبقى اللاحقة مرئية.
اضبط ميزانية كل سطر:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLineChars: 160, }, }, }, },}يمكن لـSlack عرض أسطر التقدم كحقول Block Kit منظمة بدلا من جسم نصي واحد:
{ channels: { slack: { streaming: { mode: "progress", progress: { render: "rich", }, }, }, },}يحافظ العرض الغني على بديل النص العادي نفسه حتى تتمكن القنوات والعملاء الذين لا يدعمون الشكل الأغنى من إظهار نص التقدم الموجز.
احتفظ بمسودة التقدم الواحدة لكن أخف أسطر الأدوات والمهام:
{ channels: { discord: { streaming: { mode: "progress", progress: { toolProgress: false, }, }, }, },}مع toolProgress: false، لا يزال OpenClaw يمنع رسائل تقدم الأدوات المستقلة الأقدم لتلك الدورة. تبقى القناة هادئة بصريا حتى الإجابة النهائية، باستثناء التسمية إذا كانت مهيأة.
سلوك القناة
تستخدم كل قناة أنظف وسيلة نقل تدعمها:
| القناة | نقل التقدم | ملاحظات |
|---|---|---|
| Discord | إرسال رسالة واحدة، ثم تعديلها. | تعدل النص النهائي في مكانه عندما يناسب رسالة معاينة آمنة واحدة. |
| Matrix | إرسال حدث واحد، ثم تعديله. | يتحكم تكوين البث على مستوى الحساب في المسودات على مستوى الحساب. |
| Microsoft Teams | بث Teams أصلي في الدردشات الشخصية. | يرتبط streaming.mode: "block" بتسليم كتل Teams. |
| Slack | بث أصلي أو منشور مسودة قابل للتعديل. | يؤثر توفر السلسلة في إمكانية استخدام البث الأصلي. |
| Telegram | إرسال رسالة واحدة، ثم تعديلها. | قد تستبدل المسودات المرئية الأقدم حتى تبقى الطوابع الزمنية النهائية مفيدة. |
| Mattermost | منشور مسودة قابل للتعديل. | يدمج نشاط الأدوات في المنشور نفسه بأسلوب المسودة. |
القنوات التي لا تدعم التحرير الآمن تعود عادة إلى مؤشرات الكتابة أو التسليم النهائي فقط.
الإنهاء
عندما تصبح الإجابة النهائية جاهزة، يحاول OpenClaw إبقاء الدردشة نظيفة:
- إذا كان يمكن تحويل المسودة بأمان إلى الإجابة النهائية، يعدلها OpenClaw في مكانها.
- إذا كانت القناة تستخدم بث تقدم أصليا، ينهي OpenClaw ذلك البث عندما يقبل النقل الأصلي النص النهائي.
- إذا كانت الإجابة النهائية تحتوي على وسائط، أو مطالبة موافقة، أو هدف رد صريح، أو عددا كبيرا جدا من المقاطع، أو فشل تحرير/إرسال، يرسل OpenClaw الإجابة النهائية عبر مسار تسليم القناة العادي.
مسار الرجوع مقصود. من الأفضل إرسال إجابة نهائية جديدة بدلا من فقدان النص أو إسناد الرد إلى سلسلة خاطئة أو استبدال مسودة بحمولة لا تستطيع القناة تمثيلها بأمان.
استكشاف الأخطاء وإصلاحها
أرى الإجابة النهائية فقط.
تحقق من أن channels.<channel>.streaming.mode مضبوط على progress للحساب أو القناة التي عالجت الرسالة. قد تعطل بعض مسارات المجموعات أو الردود المقتبسة معاينات المسودات لدورة ما عندما لا تستطيع القناة تعديل الرسالة الصحيحة بأمان.
أرى التسمية لكن لا أرى أسطر الأدوات.
تحقق من streaming.progress.toolProgress. إذا كانت false، يحافظ OpenClaw على سلوك المسودة الواحدة لكنه يخفي أسطر تقدم الأدوات والمهام.
أرى رسالة نهائية جديدة بدلا من مسودة معدلة.
هذا رجوع أمان. يمكن أن يحدث لردود الوسائط، أو الإجابات الطويلة، أو أهداف الرد الصريحة، أو مسودات Telegram القديمة، أو أهداف سلاسل Slack المفقودة، أو رسائل المعاينة المحذوفة، أو فشل إنهاء البث الأصلي.
ما زلت أرى رسائل تقدم مستقلة.
يمنع وضع التقدم رسائل تقدم الأدوات المستقلة الافتراضية عندما تكون مسودة نشطة. إذا ظلت الرسائل المستقلة تظهر، فتحقق من أن الدورة تستخدم وضع التقدم فعلا وليست streaming.mode: "off" أو مسار قناة لا يستطيع إنشاء مسودة لتلك الرسالة.
يتصرف Teams بشكل مختلف عن Discord أو Telegram.
يستخدم Microsoft Teams دفقًا أصليًا في المحادثات الشخصية بدلًا من نقل المعاينة العام القائم على الإرسال ثم التحرير. ويتعامل Teams أيضًا مع streaming.mode: "block" كتسليم كتل في Teams، لأنه لا يملك وضع كتل معاينة المسودات نفسه المستخدم في Discord وTelegram.