Messages and delivery

مسودات التقدم

تحوّل مسودات التقدّم رسالة واحدة في القناة إلى سطر حالة مباشر أثناء عمل الوكيل، بدلًا من كومة من ردود «ما زال العمل جاريًا» المؤقتة. اضبط channels.<channel>.streaming.mode: "progress" وسينشئ OpenClaw الرسالة بمجرد بدء العمل الفعلي، ويعدّلها بينما يقرأ الوكيل أو يخطط أو يستدعي الأدوات أو ينتظر الموافقة، ثم يحوّلها إلى الإجابة النهائية.

text
جارٍ العمل...📖 من docs/concepts/progress-drafts.md🔎 بحث الويب: عن "discord edit message"🛠️ Bash: تشغيل الاختبارات

البدء السريع

json5
{  channels: {    discord: {      streaming: {        mode: "progress",      },    },  },}

القيم الافتراضية من هنا: تأخير بدء قدره 5 ثوانٍ، وأسطر تقدّم موجزة أثناء حدوث عمل مفيد، ومنع رسائل التقدّم المستقلة الأقدم لهذه الجولة. تستخدم مسودات أسطر الأدوات الأولية تسمية تلقائية من كلمة واحدة؛ ويحذف عنوان الحالة تلك التسمية الزائدة ما لم تضبط واحدة صراحةً.

تتناول هذه الصفحة تجربة مسودة التقدّم وخيارات إعدادها. للاطلاع على مصفوفة أوضاع البث الكاملة، وملاحظات وقت التشغيل لكل قناة، وترحيل المفاتيح القديمة، راجع البث والتقسيم إلى أجزاء.

ما يراه المستخدمون

الجزء الغرض
عنوان الحالة في Discord وTelegram، تمهيد النموذج؛ ويضيف Discord نصًا مساعدًا.
التسمية سطر بدء/حالة اختياري مثل Working.
أسطر التقدّم تحديثات تشغيل موجزة تستخدم أيقونات الأدوات ومنسّق التفاصيل نفسيهما كما في /verbose.

بالنسبة إلى تقدّم الأدوات الأولي، تظهر التسمية بمجرد أن يبدأ الوكيل عملًا ذا معنى ويظل منشغلًا طوال مدة التأخير الأولية. توجد في أعلى قائمة أسطر التقدّم المتجددة، لذا تختفي بالتمرير بمجرد ظهور ما يكفي من أسطر العمل الفعلية. لا يعرض عنوان الحالة سوى حالة الوكيل بلغة واضحة ما لم تُضبط تسمية صراحةً. لا تعرض الردود النصية البحتة مسودة تقدّم مطلقًا؛ ولا يظهر سطر إلا لتحديثات العمل الفعلية، مثل 🛠️ Bash: run tests، أو 🔎 Web Search: for "discord edit message"، أو ✍️ Write: to /tmp/file.

تحل الإجابة النهائية محل المسودة في موضعها عندما تستطيع القناة تنفيذ ذلك بأمان؛ وإلا يرسل OpenClaw الإجابة النهائية عبر التسليم المعتاد وينظّف المسودة أو يتوقف عن تحديثها (راجع الإنهاء).

اختيار وضع

يتحكم channels.<channel>.streaming.mode في السلوك المرئي أثناء التنفيذ:

الوضع الأنسب لـ ما يظهر في المحادثة
off القنوات الهادئة الإجابة النهائية فقط.
partial مشاهدة ظهور نص الإجابة مسودة واحدة تُعدّل بأحدث نص للإجابة.
block أجزاء أكبر من معاينة الإجابة معاينة واحدة تُحدّث أو تُلحق بأجزاء أكبر.
progress الجولات كثيفة الأدوات أو الطويلة مسودة حالة واحدة، ثم الإجابة النهائية.

اختر progress عندما يهتم المستخدمون بمعرفة «ما الذي يحدث» أكثر من مشاهدة بث نص الإجابة رمزًا مميزًا تلو الآخر؛ واختر partial عندما يكون نص الإجابة نفسه إشارة التقدّم؛ واختر block لأجزاء معاينة أكبر. في Discord و Telegram، يظل streaming.mode: "block" بثًا للمعاينة، وليس تسليمًا عاديًا للردود الكتلية — استخدم streaming.block.enabled لذلك.

ضبط التسميات

توجد تسميات التقدّم ضمن channels.<channel>.streaming.progress. تسمية أسطر الأدوات الأولية الافتراضية هي "auto"، التي تستخدم تسمية Working البسيطة المضمّنة. يخفي عنوان الحالة تلك التسمية الضمنية؛ اضبط label: "auto" صراحةً إذا أردت تسمية فوقه أيضًا:

text
جارٍ العمل

استخدم تسمية ثابتة:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "جارٍ التحقيق",        },      },    },  },}

استخدم مجموعة التسميات الخاصة بك (مع استمرار الاختيار عشوائيًا/حسب القيمة الأولية عند label: "auto"):

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "auto",          labels: ["جارٍ التحقق", "جارٍ القراءة", "جارٍ الاختبار", "جارٍ الإنهاء"],        },      },    },  },}

أخفِ التسمية واعرض أسطر التقدّم فقط:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: false,        },      },    },  },}

التحكم في أسطر التقدّم

تأتي أسطر التقدّم من أحداث تشغيل فعلية: بدء الأدوات، وتحديثات العناصر، وخطط المهام، والموافقات، ومخرجات الأوامر، وملخصات الرقع، وأنشطة الوكيل المشابهة. وهي مفعّلة افتراضيًا (progress.toolProgress، والقيمة الافتراضية true).

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

json
{  "content": [],  "progress": {    "text": "جارٍ جلب محتوى الصفحة...",    "visibility": "channel",    "privacy": "public",    "id": "web_fetch:fetching"  }}

يعرض OpenClaw فقط progress.text في واجهة تقدّم القناة. وتصل نتيجة الأداة العادية لاحقًا بصيغة content/details وهي الجزء الوحيد الذي يُعاد إلى النموذج.

عند إضافة التقدّم إلى أداة، أصدر رسالة قصيرة وعامة وأخّرها حتى تظل العملية معلّقة مدة كافية لتكون مفيدة. ينفّذ web_fetch ذلك تمامًا بتأخير قدره 5 ثوانٍ:

typescript
const clearProgressTimer = scheduleToolProgress(  onUpdate,  { text: "جارٍ جلب محتوى الصفحة...", id: "web_fetch:fetching" },  5_000,  { signal },); try {  return await runToolWork();} finally {  clearProgressTimer();}

لا تعرض الاستدعاءات السريعة أي سطر تقدّم؛ وتعرض الاستدعاءات الطويلة سطرًا أثناء بقائها معلّقة؛ وتمسح الاستدعاءات الملغاة المؤقت قبل أن يظهر تقدّم قديم. نص التقدّم قناة جانبية عامة لواجهة المستخدم، لذا يجب ألا يتضمن مطلقًا أسرارًا أو وسائط أولية أو محتوى مجلوبًا أو مخرجات أوامر أو نص صفحة.

وضع التفاصيل

يستخدم OpenClaw المنسّق نفسه لمسودات التقدّم و/verbose:

json5
{  agents: {    defaults: {      toolProgressDetail: "explain", // explain | raw    },  },}

"explain" هو الوضع الافتراضي ويحافظ على استقرار المسودات باستخدام تسميات موجزة. يُلحق "raw" الأمر الأساسي عند توفره، وهو مفيد أثناء تصحيح الأخطاء لكنه أكثر إزعاجًا في المحادثة. على سبيل المثال، يُعرض استدعاء node --check /tmp/app.js بصورة مختلفة حسب الوضع:

الوضع سطر التقدّم
explain 🛠️ check js syntax for /tmp/app.js
raw 🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js

نص الأمر/التنفيذ

يتحكم streaming.progress.commandText (القيمة الافتراضية "raw") في مقدار تفاصيل الأمر التي تظهر بجوار أسطر تقدّم exec/bash، بصورة مستقلة عن وضع التفاصيل أعلاه. اضبطه على "status" لإبقاء سطر تقدّم الأداة مرئيًا مع إخفاء نص الأمر بالكامل:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          commandText: "status",        },      },    },  },}

مسار التعليق

يدمج streaming.progress.commentary (القيمة الافتراضية false) سرد تعليقات/تمهيد النموذج قبل الأداة (💬، مثلًا «سأتحقق... ثم ...») مع أسطر الأدوات في المسودة. راجع البث والتقسيم إلى أجزاء للاطلاع على بنية الإعداد المشتركة بين القنوات.

عند تفعيل مسار التعليق، لا تُعرض التمهيدات إلا في صورة أسطر 💬 متداخلة؛ ويظل عنوان الحالة أدناه بعيدًا حتى يحافظ المسار على بنيته الموثقة.

عنوان الحالة

في Discord وTelegram ضمن وضع التقدّم، يصبح تمهيد النموذج المحدد النوع قبل الأداة عنوان حالة المسودة كلما كان متاحًا. وتحتفظ قنوات وضع التقدّم الأخرى بسلوك الحالة الحالي لديها. يكون العنوان مفعّلًا افتراضيًا ولا يتجاوز بوابة النشاط المعتادة للجولات القصيرة؛ ويؤدي تفعيل streaming.progress.commentary إلى تمرير التمهيدات إلى مسار التعليق المتداخل بدلًا من ذلك.

في Discord، عندما يُحدَّد نموذج مساعد للوكيل — سواء كان utilityModel صريحًا، أو الإعداد الافتراضي المعلن للنموذج الصغير لدى المزوّد الأساسي (OpenAI ← gpt-5.6-luna، Anthropic ← claude-haiku-4-5) — فإنه يوفر نصًا مساعدًا قصيرًا بلغة واضحة عندما لا يصدر النموذج تمهيدًا أو يظل صامتًا لنحو 20 ثانية (عنوان Telegram يقتصر على التمهيد حاليًا):

text
جارٍ تحديث النموذج الافتراضي في إعدادك، ثم إعادة تشغيل Gateway لتطبيقه.فشل استدعاء واحد لسرد الوكلاء وتُعاد محاولته.

يكون السرد المساعد مفعّلًا افتراضيًا (streaming.progress.narration، والقيمة الافتراضية true) ولا يرجع مطلقًا إلى النموذج الأساسي: فلا يعمل إلا بوجود utilityModel صريح أو إعداد افتراضي معلن من المزوّد للمزوّد الأساسي للوكيل. اضبط utilityModel: "" لتعطيل التوجيه المساعد بالكامل. تستمر أسطر الأدوات في التراكم أسفل العنوان وتعود إذا توقف مصدرا الحالة كلاهما. ولا تزال تعديلات المسودة تنتظر بوابة النشاط المعتادة وتغييرًا فعليًا في النص، ما يمنع الومضات في الجولات السريعة ويقلل كثرة التعديلات في القنوات المزدحمة. اضبط narration: false لتعطيل النص المساعد من النموذج المساعد فقط؛ وتظل عناوين تمهيد النموذج مفعّلة:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          narration: false,        },      },    },  },}

مدخلات السرد محدودة ومنقّحة: يتلقى النموذج المساعد نص الطلب الوارد إضافةً إلى ملخصات الأدوات الموجزة والمنقّحة نفسها التي ستعرضها المسودة — وليس مخرجات الأوامر الأولية أو نتائج الأدوات مطلقًا. مع commandText: "status"، تحذف مدخلات السرد أيضًا نص أمر exec/bash، بما يطابق ما تعرضه المسودة.

حدود الأسطر

حدّد عدد الأسطر التي تظل مرئية (القيمة الافتراضية 8):

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLines: 4,        },      },    },  },}

تُضغط أسطر التقدّم تلقائيًا لتقليل إعادة تدفق فقاعة المحادثة أثناء تعديل المسودة، ويقتطع OpenClaw الأسطر الطويلة حتى لا تلتف تعديلات المسودة المتكررة بصورة مختلفة عند كل تحديث. الميزانية الافتراضية لكل سطر هي 120 حرفًا؛ ويُقطع النثر عند حد كلمة، بينما تُختصر التفاصيل الطويلة مثل المسارات أو الأوامر الأولية بعلامة حذف وسطية حتى تظل اللاحقة مرئية.

اضبط الميزانية لكل سطر:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLineChars: 160,        },      },    },  },}

العرض المنسّق (Slack)

يمكن لـSlack عرض أسطر التقدّم كحقول Block Kit منظّمة بدلًا من النص العادي:

json5
{  channels: {    slack: {      streaming: {        mode: "progress",        progress: {          render: "rich",        },      },    },  },}

يرسل العرض المنسّق دائمًا متن النص العادي نفسه إلى جانب حقول Block Kit، لذا تظل البرامج العميلة التي لا تستطيع عرض البنية الأكثر تنسيقًا تعرض نص التقدّم الموجز.

إخفاء أسطر الأدوات/المهام

احتفظ بمسودة التقدّم الواحدة لكن أخفِ أسطر الأدوات والمهام:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          toolProgress: false,        },      },    },  },}

مع toolProgress: false، يواصل OpenClaw كبت رسائل تقدّم الأدوات المستقلة الأقدم لتلك الدورة — وتظل القناة هادئة بصريًا حتى الإجابة النهائية، باستثناء التسمية إذا كانت مُهيأة.

سلوك القنوات

القناة وسيلة نقل التقدّم ملاحظات
Discord إرسال رسالة واحدة، ثم تعديلها. الوضع الافتراضي هو progress؛ وتحمل الإجابة النهائية إيصال نشاط -#، وتُحذف مسودة الحالة بعد وصول الإجابة.
Matrix إرسال حدث واحد، ثم تعديله. يتحكم إعداد البث على مستوى الحساب في المسودات على مستوى الحساب.
Microsoft Teams بث أصلي من Teams في المحادثات الشخصية. يُحوَّل streaming.mode: "block" إلى تسليم كتل Teams بدلًا من ذلك.
Slack بث أصلي أو منشور مسودة قابل للتعديل. يتطلب هدفًا لسلسلة الردود؛ ولا تزال الرسائل الخاصة ذات المستوى الأعلى التي لا تحتوي على هدف تتلقى منشورات معاينة للمسودة وتعديلات عليها.
Telegram إرسال رسالة واحدة، ثم تعديلها. إذا وصلت رسالة بين مسودة التقدّم والإجابة، تُعاد مشاركة المسودة أسفلها (نشر الجديدة ثم حذف القديمة) بدلًا من التسبب في قفزة تمرير لدى العميل.
Mattermost منشور مسودة قابل للتعديل. يتناوب وضع block بين النص المكتمل ومنشورات نشاط الأدوات؛ بينما تدمج الأوضاع الأخرى نشاط الأدوات في المنشور نفسه ذي نمط المسودة.

تعود القنوات التي لا تدعم التعديل الآمن إلى مؤشرات الكتابة أو التسليم النهائي فقط. راجع البث والتقسيم إلى أجزاء للاطلاع على التفصيل الكامل لسلوك وقت التشغيل لكل قناة.

الإنهاء

عندما تصبح الإجابة النهائية جاهزة، يحاول OpenClaw إبقاء المحادثة مرتبة:

  • في وضع progress على Discord، تُرسل الإجابة النهائية كرسالة جديدة مع إرفاق إيصال نشاط صغير -# (على سبيل المثال -# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s)، وتُحذف مسودة الحالة بمجرد تسليم تلك الإجابة. لا تحتفظ القنوات المزدحمة بأي سجل أداة متروك فوق الرد؛ بينما تُبقي الإجابات النهائية التي تتضمن خطأ المسودة كسجل مرئي للدورة الفاشلة.
  • إذا كان من الممكن أن تصبح المسودة هي الإجابة النهائية بأمان (وضعا partial/block)، يعدّلها OpenClaw في مكانها.
  • إذا كانت القناة تستخدم بث التقدّم الأصلي، يُنهي OpenClaw ذلك البث عندما تقبل وسيلة النقل الأصلية النص النهائي.
  • بخلاف ذلك (وسائط، أو مطالبة بالموافقة، أو هدف رد صريح، أو عدد كبير جدًا من الأجزاء، أو فشل في التعديل/الإرسال)، يرسل OpenClaw الإجابة النهائية عبر مسار التسليم العادي للقناة بدلًا من الكتابة فوق المسودة.

هذا الرجوع مقصود: فإرسال إجابة نهائية جديدة أفضل من فقدان النص، أو وضع الرد في سلسلة خاطئة، أو الكتابة فوق مسودة بحمولة لا تستطيع القناة تمثيلها بأمان.

استكشاف الأخطاء وإصلاحها

لا أرى سوى الإجابة النهائية.

تحقق من أن channels.<channel>.streaming.mode هو progress للحساب أو القناة التي عالجت الرسالة. تعطّل بعض مسارات المجموعات أو الرد على الاقتباس معاينات المسودة لدورة ما عندما لا تستطيع القناة تعديل الرسالة الصحيحة بأمان.

أرى التسمية، لكن لا أرى سطور الأدوات.

تحقق من streaming.progress.toolProgress. إذا كان false، يحتفظ OpenClaw بسلوك المسودة الواحدة، لكنه يخفي سطور تقدّم الأدوات والمهام.

أرى رسالة نهائية جديدة بدلًا من مسودة معدّلة.

هذا هو الرجوع الآمن الموضح في الإنهاء. ويمكن أن يحدث مع الردود التي تتضمن وسائط، أو الإجابات الطويلة، أو أهداف الرد الصريحة، أو مسودات Telegram القديمة، أو أهداف سلاسل Slack المفقودة، أو رسائل المعاينة المحذوفة، أو فشل إنهاء البث الأصلي.

ما زلت أرى رسائل تقدّم مستقلة.

يكبت وضع التقدّم رسائل تقدّم الأدوات المستقلة الافتراضية كلما كانت هناك مسودة نشطة. إذا استمرت الرسائل المستقلة في الظهور، فتأكد من أن الدورة تستخدم بالفعل وضع progress وليس streaming.mode: "off" أو مسار قناة لا يستطيع إنشاء مسودة لتلك الرسالة.

يختلف سلوك Teams عن Discord أو Telegram.

يستخدم Microsoft Teams بثًا أصليًا في المحادثات الشخصية بدلًا من وسيلة نقل المعاينة العامة القائمة على الإرسال والتعديل، ويحوّل streaming.mode: "block" إلى تسليم كتل Teams لأنه لا يملك وضع كتل لمعاينة المسودة مثل Discord و Telegram.

ذو صلة

Was this useful?
On this page

On this page