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