---
read_when:
    - تكوين تحديثات التقدم المرئية لأدوار الدردشة طويلة الأمد
    - الاختيار بين أوضاع البث الجزئي، والبث بالكتل، وبث التقدم
    - شرح كيفية تحديث OpenClaw لرسالة واحدة في القناة أثناء سير العمل
    - مسودات تقدّم استكشاف الأخطاء وإصلاحها، أو رسائل التقدّم المستقلة، أو الإجراء الاحتياطي للإنهاء
summary: 'مسودات التقدم: رسالة واحدة مرئية للعمل قيد التنفيذ تُحدَّث أثناء تشغيل وكيل'
title: مسودات التقدم
x-i18n:
    generated_at: "2026-07-16T13:59:45Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 4ef66dd4d7a31c753f5faa0b88b83ec3760beecf3118cf8aae84f5e57652e809
    source_path: concepts/progress-drafts.md
    workflow: 16
---

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

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

<Note>
  يستخدم Discord بالفعل القيمة الافتراضية `streaming.mode: "progress"` عندما تكون
  `channels.discord.streaming` غير مضبوطة، لذا تظهر مسودات التقدّم
  فيه دون أي إعداد. تستخدم كل قناة أخرى القيمة الافتراضية `partial`
  أو `off`؛ راجع [البث والتقسيم إلى أجزاء](/ar/concepts/streaming#channel-mapping)
  للاطلاع على جدول القيم الافتراضية الكامل لكل قناة.
</Note>

## البدء السريع

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

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

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

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

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

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

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

## اختيار وضع

يتحكم `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`) سرد
تعليقات/تمهيد النموذج قبل الأداة (💬، مثلًا «سأتحقق... ثم
...») مع أسطر الأدوات في المسودة. راجع
[البث والتقسيم إلى أجزاء](/ar/concepts/streaming#commentary-progress-lane) للاطلاع على
بنية الإعداد المشتركة بين القنوات.

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

### عنوان الحالة

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

في Discord، عندما يُحدَّد نموذج مساعد للوكيل — سواء كان
[`utilityModel`](/ar/gateway/config-agents#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` بين النص المكتمل ومنشورات نشاط الأدوات؛ بينما تدمج الأوضاع الأخرى نشاط الأدوات في المنشور نفسه ذي نمط المسودة.                       |

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

## الإنهاء

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## ذو صلة

- [البث والتقسيم إلى أجزاء](/ar/concepts/streaming)
- [الرسائل](/ar/concepts/messages)
- [إعداد القنوات](/ar/gateway/config-channels)
- [Discord](/ar/channels/discord)
- [Matrix](/ar/channels/matrix)
- [Microsoft Teams](/ar/channels/msteams)
- [Slack](/ar/channels/slack)
- [Telegram](/ar/channels/telegram)
- [Mattermost](/ar/channels/mattermost)
