Messages and delivery

استریم و قطعه‌بندی

OpenClaw دو لایهٔ مستقل برای استریم دارد و در حال حاضر هیچ استریم واقعی تفاضل توکن به پیام‌های کانال وجود ندارد:

  • استریم بلوکی (کانال‌ها): هم‌زمان با نوشتن دستیار، بلوک‌های تکمیل‌شده را منتشر می‌کند. این‌ها پیام‌های عادی کانال‌اند، نه تفاضل‌های توکن.
  • استریم پیش‌نمایش (Telegram/Discord/Slack/Matrix/Mattermost/MS Teams): هنگام تولید، یک پیام پیش‌نمایش موقت را به‌روزرسانی می‌کند (ارسال + ویرایش‌ها/افزودن‌ها).

وضعیت راه‌اندازی رابط کاربری کنترل

پس از آنکه chat.send یک اجرای فعال را تأیید می‌کند، Gateway می‌تواند پیش از نمایان‌شدن متن دستیار یا فعالیت ابزار، یک وضعیت راه‌اندازی سطح‌بالا و نوع‌دار ارسال کند. رابط کاربری کنترل این وضعیت را در کنار نشانگر کار نمایش می‌دهد و شامل مراحلی برای آماده‌سازی فضای کاری، تأمین محیط، آماده‌سازی زمینه و راه‌اندازی مدل است.

اولین تفاضل دستیار یا شروع ابزار، وضعیت راه‌اندازی آن اجرا را برای همیشه جایگزین می‌کند. تا زمانی که ابزاری منتظر اقدام اپراتور است، وضعیت تأیید اولویت دارد. ایجاد درخت کاری و اعزام اولیه به ابر پیش از وجود یک اجرای چت رخ می‌دهند؛ بنابراین پیشرفت RPC پیش از اجرای آن‌ها به‌عنوان وضعیت راه‌اندازی اجرا نمایش داده نمی‌شود؛ تأمین محیط تنها زمانی در اینجا ظاهر می‌شود که یک اجرای فعال، کارگر بازیابی‌شده‌ای را دوباره تأمین کند.

استریم بلوکی (پیام‌های کانال)

استریم بلوکی، خروجی دستیار را هم‌زمان با دردسترس‌قرارگرفتن در قطعه‌های درشت ارسال می‌کند.

text
خروجی مدل  └─ text_delta/رویدادها       ├─ (blockStreamingBreak=text_end)       │    └─ قطعه‌بند با رشد بافر، بلوک‌ها را منتشر می‌کند       └─ (blockStreamingBreak=message_end)            └─ قطعه‌بند در message_end تخلیه می‌شود                   └─ ارسال کانال (پاسخ‌های بلوکی)
  • text_delta/events: رویدادهای استریم مدل (ممکن است برای مدل‌های بدون استریم پراکنده باشند).
  • chunker: EmbeddedBlockChunker که کران‌های حداقل/حداکثر + ترجیح شکست را اعمال می‌کند.
  • channel send: پیام‌های خروجی واقعی (پاسخ‌های بلوکی).

کنترل‌ها (همگی زیر agents.defaults، مگر آنکه خلافش ذکر شده باشد):

کلید مقادیر / ساختار پیش‌فرض
blockStreamingDefault "on" / "off" "off"
blockStreamingBreak "text_end" / "message_end" -
blockStreamingChunk { minChars, maxChars, breakPreference? } -
blockStreamingCoalesce { minChars?, maxChars?, idleMs? } (ادغام بلوک‌های استریم‌شده پیش از ارسال) -
*.streaming.block.enabled (بازنویسی کانال) true / false، استریم بلوکی را برای هر کانال (و هر حساب) اجباری می‌کند -
*.textChunkLimit (برای مثال channels.whatsapp.textChunkLimit) عدد، سقف سخت 4000
*.streaming.chunkMode "length" / "newline" "length"
channels.discord.maxLinesPerMessage عدد، سقف نرم خطوط که پاسخ‌های بلند را برای جلوگیری از بریده‌شدن در رابط کاربری تقسیم می‌کند 17

streaming.chunkMode: "newline" پیش از بازگشت به قطعه‌بندی بر اساس طول، متن را در خطوط خالی (مرز پاراگراف‌ها)، نه در هر خط جدید، تقسیم می‌کند؛ این بازگشت زمانی رخ می‌دهد که متن از محدودیت فراتر رود.

کانال‌های همراه این بازنویسی‌ها را به‌شکل channels.<id>.streaming.{chunkMode,block.enabled,block.coalesce} می‌نویسند. شکل‌های مسطح *.chunkMode / *.blockStreaming / *.blockStreamingCoalesce در همهٔ کانال‌های همراه قدیمی‌اند: openclaw doctor --fix آن‌ها را به ساختار تودرتو مهاجرت می‌دهد و طرح‌واره‌های کانال آن‌ها را رد می‌کنند. پیکربندی‌های Plugin خارجی SDK که همچنان از شکل‌های مسطح استفاده می‌کنند، تا چرخهٔ انتشار بعدی از طریق یک مسیر جایگزین منسوخ‌شده (همراه با هشدار زمان اجرا) به کار خود ادامه می‌دهند.

معنای مرزها برای blockStreamingBreak:

  • text_end: بلوک‌ها را به‌محض انتشار از قطعه‌بند استریم می‌کند؛ در هر text_end تخلیه می‌کند.
  • message_end: تا پایان پیام دستیار صبر می‌کند، سپس خروجی بافرشده را تخلیه می‌کند. اگر متن بافرشده از maxChars فراتر رود، همچنان از قطعه‌بند استفاده می‌کند؛ بنابراین می‌تواند در پایان چند قطعه منتشر کند.

تحویل رسانه با استریم بلوکی

رسانهٔ استریم‌شده باید از فیلدهای ساختاریافتهٔ بار داده مانند mediaUrl یا mediaUrls استفاده کند؛ متن استریم‌شده به‌عنوان فرمان پیوست تجزیه نمی‌شود. وقتی استریم بلوکی رسانه را زودتر ارسال می‌کند، OpenClaw آن تحویل را برای آن نوبت به خاطر می‌سپارد. اگر بار دادهٔ نهایی دستیار همان URL رسانه را تکرار کند، تحویل نهایی رسانهٔ تکراری را به‌جای ارسال دوبارهٔ پیوست حذف می‌کند.

بارهای دادهٔ نهایی کاملاً تکراری سرکوب می‌شوند. اگر بار دادهٔ نهایی متن متمایزی را پیرامون رسانه‌ای که قبلاً استریم شده است اضافه کند، OpenClaw همچنان متن جدید را ارسال می‌کند و رسانه را فقط یک‌بار تحویل می‌دهد. این کار از تکرار یادداشت‌های صوتی یا فایل‌ها در کانال‌هایی مانند Telegram جلوگیری می‌کند.

الگوریتم قطعه‌بندی (کران‌های پایین/بالا)

قطعه‌بندی بلوکی توسط EmbeddedBlockChunker پیاده‌سازی شده است:

  • کران پایین: تا زمانی که بافر >= minChars نشده است منتشر نکنید (مگر به‌اجبار).
  • کران بالا: شکست پیش از maxChars ترجیح داده می‌شود؛ در صورت اجبار، در maxChars تقسیم می‌شود.
  • زنجیرهٔ ترجیح شکست: paragraph -> newline -> sentence -> فاصلهٔ سفید -> شکست سخت.
  • حصارهای کد: هرگز درون حصارها تقسیم نکنید؛ هنگام اجبار در maxChars، حصار را ببندید و دوباره باز کنید تا Markdown معتبر بماند.

maxChars به textChunkLimit کانال محدود می‌شود؛ بنابراین نمی‌توان از سقف‌های هر کانال فراتر رفت.

هم‌آمیزی (ادغام بلوک‌های استریم‌شده)

وقتی استریم بلوکی فعال است، OpenClaw می‌تواند پیش از ارسال، قطعه‌های بلوکی پیاپی را ادغام کند؛ در نتیجه هرزپیام‌های تک‌خطی کاهش می‌یابند و در عین حال خروجی تدریجی حفظ می‌شود.

  • هم‌آمیزی پیش از تخلیه منتظر وقفه‌های بیکاری (idleMs) می‌ماند.
  • بافرها با maxChars سقف‌گذاری می‌شوند و در صورت عبور از آن تخلیه می‌شوند.
  • minChars تا زمان انباشته‌شدن متن کافی از ارسال قطعه‌های بسیار کوچک جلوگیری می‌کند (تخلیهٔ نهایی همیشه متن باقی‌مانده را ارسال می‌کند).
  • جداکننده از blockStreamingChunk.breakPreference استخراج می‌شود: paragraph -> \n\n، newline -> \n، sentence -> فاصله.
  • بازنویسی‌های کانال از طریق *.streaming.block.coalesce در دسترس‌اند (از جمله پیکربندی‌های هر حساب).
  • Discord، Signal و Slack به‌طور پیش‌فرض تا { minChars: 1500, idleMs: 1000 } هم‌آمیزی می‌کنند، مگر آنکه بازنویسی شوند.

آهنگ شبیه انسان میان بلوک‌ها

وقتی استریم بلوکی فعال است، پس از بلوک نخست میان پاسخ‌های بلوکی یک مکث تصادفی اضافه می‌شود تا پاسخ‌های چندحبابی طبیعی‌تر به نظر برسند.

agents.defaults.humanDelay.mode رفتار
off (پیش‌فرض) بدون مکث
natural مکث تصادفی 800-2500ms
custom minMs/maxMs

برای هر عامل از طریق agents.entries.*.humanDelay بازنویسی کنید. فقط بر پاسخ‌های بلوکی اعمال می‌شود، نه پاسخ‌های نهایی یا خلاصه‌های ابزار.

«استریم قطعه‌ها یا همه‌چیز»

  • استریم قطعه‌ها: blockStreamingDefault: "on" + blockStreamingBreak: "text_end" (هم‌زمان با پیشروی منتشر می‌کند). کانال‌های غیر Telegram به *.streaming.block.enabled: true نیز نیاز دارند.
  • استریم همه‌چیز در پایان: blockStreamingBreak: "message_end" (یک‌بار تخلیه می‌کند؛ اگر بسیار طولانی باشد، احتمالاً در چند قطعه).
  • بدون استریم بلوکی: blockStreamingDefault: "off" (فقط پاسخ نهایی).

استریم بلوکی خاموش است، مگر آنکه *.streaming.block.enabled صراحتاً روی true تنظیم شده باشد (استثنا: QQ Bot هیچ کلید streaming.block ندارد و پاسخ‌های بلوکی را استریم می‌کند، مگر آنکه channels.qqbot.streaming.mode برابر با "off" باشد). کانال‌ها می‌توانند بدون پاسخ‌های بلوکی، یک پیش‌نمایش زنده (channels.<channel>.streaming.mode) را استریم کنند. پیش‌فرض‌های blockStreaming* زیر agents.defaults قرار دارند، نه در ریشهٔ پیکربندی.

حالت‌های استریم پیش‌نمایش

کلید معیار: channels.<channel>.streaming (کلید تودرتوی { mode, ... }؛ شکل‌های بولی/رشته‌ای قدیمی در سطح بالا توسط openclaw doctor --fix بازنویسی می‌شوند).

حالت رفتار
off غیرفعال‌کردن استریم پیش‌نمایش
partial جایگزینی یک پیش‌نمایش واحد با تازه‌ترین متن
block به‌روزرسانی پیش‌نمایش در گام‌های قطعه‌ای/افزایشی
progress پیش‌نمایش پیشرفت/وضعیت هنگام تولید، پاسخ نهایی پس از تکمیل

streaming.mode: "block" یک حالت استریم پیش‌نمایش برای کانال‌های دارای قابلیت ویرایش مانند Discord و Telegram است؛ این حالت به‌تنهایی تحویل بلوکی کانال را در آن‌ها فعال نمی‌کند. برای پاسخ‌های بلوکی عادی از streaming.block.enabled استفاده کنید. Microsoft Teams استثنا است: انتقال بلوکی پیش‌نویس پیش‌نمایش ندارد؛ بنابراین streaming.mode: "block" استریم بومی را کاملاً غیرفعال می‌کند و پاسخ به‌جای استریم جزئی/پیشرفت بومی، به‌صورت تحویل بلوکی عادی می‌رسد. Mattermost نیز متفاوت است: در حالت block، پیش‌نمایش را میان متن تکمیل‌شده و بلوک‌های فعالیت ابزار جابه‌جا می‌کند؛ بنابراین بلوک‌های قبلی به‌جای بازنویسی‌شدن در یک پیش‌نویس قابل‌ویرایش، به‌صورت پست‌های جداگانه قابل‌مشاهده می‌مانند.

نگاشت کانال

کانال off partial block progress
Telegram بله بله بله پیش‌نویس پیشرفت قابل‌ویرایش
Discord بله بله بله پیش‌نویس پیشرفت قابل‌ویرایش
Slack بله بله بله بله
Mattermost بله بله بله بله
MS Teams بله بله بله استریم بومی پیشرفت

پیکربندی قطعه‌های پیش‌نمایش (streaming.preview.chunk.*، برای مثال زیر channels.discord.streaming یا channels.telegram.streaming) به‌طور پیش‌فرض minChars: 200، maxChars: 800 (محدودشده به textChunkLimit کانال) و breakPreference: "paragraph" است.

فقط Slack:

  • channels.slack.streaming.nativeTransport فراخوانی‌های API استریم بومی Slack (chat.startStream/chat.appendStream/chat.stopStream) را هنگامی تغییر وضعیت می‌دهد که channels.slack.streaming.mode="partial" باشد (پیش‌فرض: true).
  • استریم بومی Slack و وضعیت رشتهٔ دستیار Slack به یک هدف رشتهٔ پاسخ نیاز دارند. پیام‌های خصوصی سطح بالا آن پیش‌نمایش رشته‌مانند را نشان نمی‌دهند، اما همچنان می‌توانند از پست‌ها و ویرایش‌های پیش‌نویس پیش‌نمایش Slack استفاده کنند.

مهاجرت کلید قدیمی

کانال کلیدهای قدیمی وضعیت
Telegram streamMode، streaming اسکالر/بولی توسط openclaw doctor --fix به streaming.mode بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود
Discord streamMode، streaming بولی توسط openclaw doctor --fix به streaming.mode بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود
Slack streamMode؛ streaming بولی؛ nativeStreaming قدیمی توسط openclaw doctor --fix به streaming.mode (و برای شکل‌های بولی/قدیمی به streaming.nativeTransport) بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود
Matrix streaming اسکالر/بولی توسط openclaw doctor --fix به streaming.mode (شامل حالت "quiet" متعلق به Matrix) بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود
Feishu streaming بولی توسط openclaw doctor --fix به streaming.mode بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود
QQ Bot streaming بولی؛ streaming.c2cStreamApi توسط openclaw doctor --fix به streaming.mode (و برای شکل‌های بولی/c2cStreamApi به streaming.nativeTransport) بازنویسی می‌شود؛ در زمان اجرا خوانده نمی‌شود

رفتار زمان اجرا

Telegram

  • از به‌روزرسانی‌های پیش‌نمایش sendMessage + editMessageText در پیام‌های خصوصی و گروه‌ها/موضوع‌ها استفاده می‌کند؛ متن نهایی، پیش‌نمایش فعال را در همان محل ویرایش می‌کند. پیش‌نویس‌های موقت ۳۰ثانیه‌ای «در حال تایپ» Telegram ‏(sendMessageDraft) برای استریم پاسخ استفاده نمی‌شوند.
  • پیش‌نمایش‌های اولیه کوتاه همچنان برای تجربه کاربری اعلان‌های فشاری با تأخیر کنترل می‌شوند، اما پس از تأخیری محدود ظاهر می‌شوند تا اجراهای فعال از نظر بصری ساکت نمانند.
  • خروجی‌های نهایی طولانی برای قطعه نخست از پیام پیش‌نمایش دوباره استفاده می‌کنند و فقط قطعه‌های باقی‌مانده را می‌فرستند.
  • حالت block در streaming.preview.chunk.maxChars پیش‌نمایش را به پیامی جدید منتقل می‌کند (پیش‌فرض 800، با سقف محدودیت ویرایش 4096 در Telegram)؛ حالت‌های دیگر یک پیش‌نمایش را تا 4096 نویسه گسترش می‌دهند.
  • حالت progress پیشرفت ابزار را در یک پیش‌نویس وضعیت قابل‌ویرایش نگه می‌دارد، وقتی استریم پاسخ فعال است اما هنوز خط ابزاری موجود نیست، برچسب وضعیت را نمایش می‌دهد، پیش‌نویس را هنگام تکمیل پاک می‌کند و پاسخ نهایی را از مسیر تحویل عادی می‌فرستد.
  • اگر ویرایش نهایی پیش از تأیید متن تکمیل‌شده شکست بخورد، OpenClaw از تحویل نهایی عادی استفاده می‌کند و پیش‌نمایش کهنه را پاک می‌کند.
  • وقتی استریم بلوکی Telegram صراحتاً فعال باشد، استریم پیش‌نمایش نادیده گرفته می‌شود تا استریم دوگانه رخ ندهد.
  • /reasoning stream می‌تواند استدلال را در پیش‌نمایشی گذرا بنویسد که پس از تحویل نهایی حذف می‌شود.
  • پاسخ‌های نقل‌قول انتخاب‌شده در Telegram یک استثنا هستند: وقتی replyToMode برابر "off" نیست و متن نقل‌قول انتخاب‌شده وجود دارد، OpenClaw برای آن نوبت از استریم پیش‌نمایش پاسخ صرف‌نظر می‌کند (پاسخ نهایی باید از مسیر بومی پاسخ به نقل‌قول عبور کند)، بنابراین خطوط پیش‌نمایش پیشرفت ابزار قابل نمایش نیستند. پاسخ به پیام فعلی بدون متن نقل‌قول انتخاب‌شده همچنان استریم پیش‌نمایش را حفظ می‌کند. برای جزئیات به مستندات کانال Telegram مراجعه کنید.

Discord

  • از ارسال + ویرایش پیام‌های پیش‌نمایش استفاده می‌کند.
  • حالت block از قطعه‌بندی پیش‌نویس (draftChunk) استفاده می‌کند.
  • وقتی استریم بلوکی Discord صراحتاً فعال باشد، استریم پیش‌نمایش نادیده گرفته می‌شود.
  • حالت progress یک رسید فعالیت کوچک -# (تعداد فکرها/فراخوانی‌های ابزار و زمان سپری‌شده) را به پاسخ نهایی می‌افزاید و پس از تحویل آن پاسخ، پیش‌نویس وضعیت را حذف می‌کند تا در کانال‌های شلوغ، گزارش ابزار یتیمی بالای پاسخ باقی نماند. در خروجی‌های نهایی خطادار، پیش‌نویس به‌عنوان سابقه نوبت ناموفق حفظ می‌شود.
  • بارهای نهایی رسانه‌ای، خطا و پاسخ صریح، پیش‌نمایش‌های در انتظار را بدون تخلیه پیش‌نویس جدید لغو می‌کنند و سپس از تحویل عادی استفاده می‌کنند.

Slack

  • partial در صورت دسترس‌بودن می‌تواند از استریم بومی Slack ‏(chat.startStream/append/stop) استفاده کند.
  • block از پیش‌نمایش‌های پیش‌نویس به سبک الحاقی استفاده می‌کند.
  • progress ابتدا از متن پیش‌نمایش وضعیت و سپس از پاسخ نهایی استفاده می‌کند.
  • پیام‌های خصوصی سطح‌بالا که رشته پاسخی ندارند، به‌جای استریم بومی Slack از پست‌های پیش‌نمایش پیش‌نویس و ویرایش آن‌ها استفاده می‌کنند.
  • استریم بومی و پیش‌نمایش پیش‌نویس، پاسخ‌های بلوکی را برای آن نوبت سرکوب می‌کنند تا یک پاسخ Slack تنها از یک مسیر تحویل استریم شود.
  • بارهای نهایی رسانه‌ای/خطا و خروجی‌های نهایی پیشرفت، پیام‌های پیش‌نویس یک‌بارمصرف ایجاد نمی‌کنند؛ فقط خروجی‌های نهایی متنی/بلوکی که می‌توانند پیش‌نمایش را ویرایش کنند، متن پیش‌نویس در انتظار را تخلیه می‌کنند.

Mattermost

  • در حالت partial، تفکر و متن جزئی پاسخ را در یک پست پیش‌نمایش پیش‌نویس استریم می‌کند که وقتی ارسال پاسخ نهایی ایمن باشد، در همان محل نهایی می‌شود.
  • در حالت progress، تفکر و فعالیت ابزار را در یک پیش‌نمایش وضعیت واحد استریم می‌کند که وقتی ارسال پاسخ نهایی ایمن باشد، در همان محل نهایی می‌شود.
  • در حالت block، میان متن تکمیل‌شده و پست‌های فعالیت ابزار جابه‌جا می‌شود؛ به‌روزرسانی‌های موازی و متوالی ابزار، پست فعلی فعالیت ابزار را به‌اشتراک می‌گذارند.
  • اگر پست پیش‌نمایش حذف شده یا هنگام نهایی‌سازی به هر دلیل دیگری در دسترس نباشد، به ارسال یک پست نهایی تازه برمی‌گردد.
  • بارهای نهایی رسانه‌ای/خطا، به‌جای تخلیه یک پست پیش‌نمایش موقت، به‌روزرسانی‌های پیش‌نمایش در انتظار را پیش از تحویل عادی لغو می‌کنند.

Matrix

  • وقتی متن نهایی بتواند از رویداد پیش‌نمایش دوباره استفاده کند، پیش‌نمایش‌های پیش‌نویس در همان محل نهایی می‌شوند.
  • خروجی‌های نهایی فقط‌رسانه‌ای، خطا و دارای عدم تطابق مقصد پاسخ، به‌روزرسانی‌های پیش‌نمایش در انتظار را پیش از تحویل عادی لغو می‌کنند؛ پیش‌نمایش کهنه‌ای که از قبل قابل‌مشاهده است، حذف محتوایی می‌شود.

به‌روزرسانی‌های پیش‌نمایش پیشرفت ابزار

استریم پیش‌نمایش می‌تواند شامل به‌روزرسانی‌های پیشرفت ابزار نیز باشد: خطوط وضعیت کوتاهی مانند «در حال جست‌وجوی وب»، «در حال خواندن فایل» یا «در حال فراخوانی ابزار» که هنگام اجرای ابزارها، پیش از پاسخ نهایی در همان پیام پیش‌نمایش ظاهر می‌شوند. در حالت app-server برنامه Codex، پیام‌های مقدمه/توضیحات Codex از همین مسیر پیش‌نمایش استفاده می‌کنند؛ بنابراین یادداشت‌های کوتاه پیشرفت مانند «دارم بررسی می‌کنم...» می‌توانند در پیش‌نویس قابل‌ویرایش استریم شوند، بی‌آنکه بخشی از پاسخ نهایی شوند. این کار باعث می‌شود نوبت‌های چندمرحله‌ای ابزار، به‌جای سکوت میان نخستین پیش‌نمایش تفکر و پاسخ نهایی، از نظر بصری فعال بمانند.

ابزارهای طولانی‌مدت ممکن است پیش از بازگشت، پیشرفت نوع‌دار منتشر کنند. برای نمونه، web_fetch هنگام شروع یک زمان‌سنج پنج‌ثانیه‌ای فعال می‌کند: اگر واکشی همچنان در انتظار باشد، پیش‌نمایش Fetching page content... را نشان می‌دهد؛ اگر واکشی پیش از آن تمام یا لغو شود، هیچ خط پیشرفتی منتشر نمی‌شود. نتیجه نهایی بعدی ابزار همچنان به‌طور عادی به مدل تحویل داده می‌شود.

سطوح پشتیبانی‌شده:

  • Discord، Slack، Telegram و Matrix، وقتی استریم پیش‌نمایش فعال باشد، به‌طور پیش‌فرض پیشرفت ابزار و به‌روزرسانی‌های مقدمه Codex را در ویرایش زنده پیش‌نمایش استریم می‌کنند. Microsoft Teams در گفت‌وگوهای شخصی از استریم بومی پیشرفت خود استفاده می‌کند.
  • Telegram از v2026.4.22 با به‌روزرسانی‌های پیش‌نمایش پیشرفت ابزار فعال منتشر شده است؛ فعال نگه‌داشتن آن‌ها این رفتار منتشرشده را حفظ می‌کند.
  • Mattermost فعالیت ابزار را در حالت‌های partial و progress در یک پست پیش‌نمایش ادغام می‌کند، یا در حالت block یک پست فعالیت ابزار را میان بلوک‌های متنی قرار می‌دهد (بخش بالا را ببینید).
  • ویرایش‌های پیشرفت ابزار از حالت فعال استریم پیش‌نمایش پیروی می‌کنند؛ وقتی استریم پیش‌نمایش off باشد یا استریم بلوکی کنترل پیام را به دست گرفته باشد، نادیده گرفته می‌شوند. در Telegram، ‏streaming.mode: "off" فقط برای خروجی نهایی است: گفت‌وگوی عمومی پیشرفت نیز به‌جای تحویل به‌صورت پیام‌های وضعیت مستقل، سرکوب می‌شود؛ درحالی‌که درخواست‌های تأیید، بارهای رسانه‌ای و خطاها همچنان به‌طور عادی مسیریابی می‌شوند.
  • برای حفظ استریم پیش‌نمایش و پنهان‌کردن خطوط پیشرفت ابزار، streaming.preview.toolProgress را برای آن کانال روی false تنظیم کنید (پیش‌فرض true). برای قابل‌مشاهده نگه‌داشتن خطوط پیشرفت ابزار و پنهان‌کردن متن فرمان/اجرا، streaming.preview.commandText را روی "status" یا streaming.progress.commandText را روی "status" تنظیم کنید؛ مقدار پیش‌فرض "raw" است تا رفتار منتشرشده حفظ شود. این سیاست میان کانال‌های پیش‌نویس/پیشرفت که از رندرکننده فشرده پیشرفت OpenClaw استفاده می‌کنند مشترک است، از جمله Discord،‏ Matrix، Microsoft Teams،‏ Mattermost، پیش‌نمایش‌های پیش‌نویس Slack و Telegram. برای غیرفعال‌کردن کامل ویرایش‌های پیش‌نمایش، streaming.mode را روی off تنظیم کنید.

رندر پیش‌نویس پیشرفت

پیش‌نویس‌های حالت پیشرفت (streaming.progress.*) محدود و برای هر کانال قابل‌پیکربندی هستند:

کلید پیش‌فرض رفتار
streaming.progress.maxLines 8 حداکثر خطوط فشرده پیشرفت که زیر برچسب پیش‌نویس نگه داشته می‌شوند
streaming.progress.maxLineChars 120 حداکثر نویسه‌های هر خط فشرده پیش از کوتاه‌سازی (با توجه به مرز واژه‌ها)
streaming.progress.label "auto" عنوان پیش‌نویس؛ یک رشته سفارشی، یا false برای پنهان‌کردن آن
streaming.progress.labels مجموعه داخلی برچسب‌های نامزد مورد استفاده هنگام label: "auto"

مسیر پیشرفت توضیحات

فراتر از پیشرفت ابزار، رندرکننده فشرده پیشرفت می‌تواند یک مسیر دیگر را نیز در پیش‌نویس نمایش دهد:

  • streaming.progress.commentary - توضیحات پیش از ابزار مدل (روایتی کوتاه مانند «بررسی می‌کنم... سپس...») را درهم‌تنیده با خطوط ابزار در پیش‌نویس پیشرفت رندر می‌کند. در Discord و Telegram در حالت پیشرفت، همان مقدمه حتی وقتی این مسیر اختیاری خاموش است، عنوان وضعیت را تأمین می‌کند؛ کانال‌های دیگر رفتار پیشرفت موجود خود را حفظ می‌کنند. به پیش‌نویس‌های پیشرفت مراجعه کنید.
json
{  "channels": {    "discord": {      "streaming": { "mode": "progress", "progress": { "commentary": true } }    }  }}

خطوط پیشرفت را قابل‌مشاهده نگه دارید، اما متن خام فرمان/اجرا را پنهان کنید:

json
{  "channels": {    "telegram": {      "streaming": {        "mode": "partial",        "preview": {          "toolProgress": true,          "commandText": "status"        }      }    }  }}

از همین ساختار زیر کلید کانال فشرده پیشرفت دیگری استفاده کنید، برای نمونه channels.discord، channels.matrix، channels.msteams، channels.mattermost یا پیش‌نمایش‌های پیش‌نویس Slack. برای حالت پیش‌نویس پیشرفت، همین سیاست را زیر streaming.progress قرار دهید:

json
{  "channels": {    "telegram": {      "streaming": {        "mode": "progress",        "progress": {          "toolProgress": true,          "commandText": "status"        }      }    }  }}

مرتبط

Was this useful?
On this page

On this page