Messages and delivery

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

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

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

Shelling...
📖 Read: from docs/concepts/progress-drafts.md
🔎 Web Search: for "discord edit message"
🛠️ Exec: run tests

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

شروع سریع

پیش‌نویس‌های پیشرفت را برای هر کانال با streaming.mode: "progress" فعال کنید:

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

همین معمولا کافی است. OpenClaw یک برچسب تک‌واژه‌ای خودکار انتخاب می‌کند، صبر می‌کند تا کار دست‌کم پنج ثانیه طول بکشد یا رویداد کاری دومی منتشر کند، هنگام انجام کار مفید خطوط پیشرفت فشرده اضافه می‌کند، و گفت‌وگوی پیشرفت مستقل تکراری را برای آن نوبت سرکوب می‌کند.

آنچه کاربران می‌بینند

یک پیش‌نویس پیشرفت دو بخش دارد:

بخش هدف
برچسب عنوانی کوتاه مانند Thinking... یا Shelling....
خطوط پیشرفت به‌روزرسانی‌های فشرده اجرا با همان برچسب‌ها و آیکون‌های ابزار مانند خروجی مفصل.

برچسب پس از شروع کار معنادار توسط عامل ظاهر می‌شود و یا برای پنج ثانیه مشغول می‌ماند یا رویداد کاری دومی منتشر می‌کند. پاسخ‌های فقط متن ساده پیش‌نویس پیشرفت نشان نمی‌دهند. خطوط پیشرفت فقط وقتی اضافه می‌شوند که عامل به‌روزرسانی‌های کاری مفید منتشر کند، برای مثال 🛠️ Exec، 🔎 Web Search، یا ✍️ 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 به‌صورت تک‌واژه‌ای همراه با سه‌نقطه انتخاب می‌کند:

Thinking...
Shelling...
Scuttling...
Clawing...
Pinching...
Molting...
Bubbling...
Tiding...
Reefing...
Cracking...
Sifting...
Brining...
Nautiling...
Krilling...
Barnacling...
Lobstering...
Tidepooling...
Pearling...
Snapping...
Surfacing...

از یک برچسب ثابت استفاده کنید:

{
  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,
        },
      },
    },
  },
}

کنترل خطوط پیشرفت

خطوط پیشرفت در حالت پیشرفت به‌طور پیش‌فرض فعال هستند. آن‌ها از رویدادهای واقعی اجرا می‌آیند: شروع ابزار، به‌روزرسانی آیتم‌ها، برنامه‌های وظیفه، تاییدها، خروجی دستور، خلاصه‌های patch و فعالیت‌های مشابه عامل.

OpenClaw از یک قالب‌ساز مشترک برای پیش‌نویس‌های پیشرفت و /verbose استفاده می‌کند:

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

"explain" پیش‌فرض است و پیش‌نویس‌ها را با برچسب‌های کوتاهی مانند 🛠️ Exec: check JS syntax for /tmp/app.js پایدار نگه می‌دارد. "raw" وقتی موجود باشد دستور/جزئیات زیربنایی را پیوست می‌کند، که هنگام عیب‌یابی مفید است اما در گفت‌وگو پرسروصداتر است.

برای مثال، همان دستور بسته به حالت جزئیات متفاوت ظاهر می‌شود:

حالت خط پیشرفت
explain 🛠️ Exec: check JS syntax for /tmp/app.js
raw 🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js

تعداد خطوطی را که قابل مشاهده می‌مانند محدود کنید:

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

خطوط پیشرفت به‌طور خودکار فشرده می‌شوند تا هنگام ویرایش پیش‌نویس، بازچینی حباب گفت‌وگو کمتر شود.

OpenClaw به‌طور پیش‌فرض خطوط پیشرفت طولانی را کوتاه می‌کند تا ویرایش‌های تکراری پیش‌نویس در هر به‌روزرسانی به شکل متفاوتی wrap نشوند. پیشوند خوانا می‌ماند، و جزئیات طولانی مانند مسیرها یا دستورهای خام با سه‌نقطه کوتاه می‌شوند.

Slack می‌تواند خطوط پیشرفت را به‌جای یک بدنه متنی واحد، به‌صورت فیلدهای ساختاریافته Block Kit نمایش دهد:

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

نمایش غنی همان fallback متن ساده را نگه می‌دارد تا کانال‌ها و کلاینت‌هایی که از شکل غنی‌تر پشتیبانی نمی‌کنند همچنان بتوانند متن پیشرفت فشرده را نشان دهند.

پیش‌نویس پیشرفت واحد را نگه دارید اما خطوط ابزار و وظیفه را پنهان کنید:

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

با toolProgress: false، OpenClaw همچنان پیام‌های قدیمی‌تر پیشرفت ابزار مستقل را برای آن نوبت سرکوب می‌کند. کانال تا پاسخ نهایی از نظر بصری ساکت می‌ماند، به‌جز برچسب، اگر پیکربندی شده باشد.

رفتار کانال

هر کانال از تمیزترین انتقالی که پشتیبانی می‌کند استفاده می‌کند:

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

کانال‌هایی که از ویرایش ایمن پشتیبانی نمی‌کنند معمولا به نشانگرهای تایپ یا تحویل فقط نهایی fallback می‌کنند.

نهایی‌سازی

وقتی پاسخ نهایی آماده است، OpenClaw تلاش می‌کند گفت‌وگو را تمیز نگه دارد:

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

مسیر fallback عمدی است. فرستادن یک پاسخ نهایی تازه بهتر از این است که متن از دست برود، پاسخ در thread اشتباه قرار گیرد، یا پیش‌نویس با payloadای بازنویسی شود که کانال نمی‌تواند آن را ایمن نمایش دهد.

عیب‌یابی

فقط پاسخ نهایی را می‌بینم.

بررسی کنید که channels.<channel>.streaming.mode برای حساب یا کانالی که پیام را مدیریت کرده روی progress تنظیم شده باشد. برخی مسیرهای گروهی یا پاسخ نقل‌قولی ممکن است برای یک نوبت پیش‌نمایش‌های پیش‌نویس را غیرفعال کنند، وقتی کانال نتواند پیام درست را با ایمنی ویرایش کند.

برچسب را می‌بینم اما خطوط ابزار را نه.

streaming.progress.toolProgress را بررسی کنید. اگر false باشد، OpenClaw رفتار پیش‌نویس واحد را نگه می‌دارد اما خطوط پیشرفت ابزار و وظیفه را پنهان می‌کند.

به‌جای پیش‌نویس ویرایش‌شده، یک پیام نهایی تازه می‌بینم.

این یک fallback ایمنی است. ممکن است برای پاسخ‌های رسانه‌ای، پاسخ‌های طولانی، هدف‌های پاسخ صریح، پیش‌نویس‌های قدیمی Telegram، هدف‌های thread گمشده در Slack، پیام‌های پیش‌نمایش حذف‌شده، یا نهایی‌سازی ناموفق پخش بومی رخ دهد.

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

وقتی یک پیش‌نویس فعال باشد، حالت پیشرفت پیام‌های پیش‌فرض پیشرفت ابزار مستقل را سرکوب می‌کند. اگر پیام‌های مستقل همچنان ظاهر می‌شوند، بررسی کنید که نوبت واقعا از حالت پیشرفت استفاده می‌کند و نه streaming.mode: "off" یا مسیر کانالی که نمی‌تواند برای آن پیام پیش‌نویس بسازد.

Teams با Discord یا Telegram متفاوت رفتار می‌کند.

Microsoft Teams در گفت‌وگوهای شخصی به‌جای انتقال پیش‌نمایش عمومیِ ارسال‌و‌ویرایش از یک پخش بومی استفاده می‌کند. Teams همچنین streaming.mode: "block" را به‌عنوان تحویل بلوکی Teams در نظر می‌گیرد، چون همان حالت بلوکی پیش‌نمایش پیش‌نویس را که Discord و Telegram استفاده می‌کنند ندارد.

مرتبط