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

Керування рядками прогресу

Рядки прогресу за замовчуванням увімкнені в режимі прогресу. Вони походять із реальних подій виконання: запусків інструментів, оновлень елементів, планів завдань, схвалень, виводу команд, підсумків патчів і подібної активності агента.

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 за замовчуванням обрізає довгі рядки прогресу, щоб повторні редагування чернетки не переносилися по-різному під час кожного оновлення. Префікс залишається читабельним, а довгі подробиці, як-от шляхи або необроблені команди, скорочуються трикрапкою.

Slack може відображати рядки прогресу як структуровані поля Block Kit замість одного текстового тіла:

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

Розширене відображення зберігає той самий резервний простий текст, щоб канали й клієнти, які не підтримують багатшу форму, усе одно могли показати компактний текст прогресу.

Збережіть одну чернетку прогресу, але приховайте рядки інструментів і завдань:

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

З toolProgress: false OpenClaw усе одно приглушує старіші окремі повідомлення про прогрес інструментів для цього ходу. Канал лишається візуально тихим до фінальної відповіді, окрім мітки, якщо її налаштовано.

Поведінка каналів

Кожен канал використовує найчистіший транспорт, який підтримує:

Канал Транспорт прогресу Примітки
Discord Надіслати одне повідомлення, потім редагувати його. Фінальний текст редагується на місці, коли вміщується в одне безпечне повідомлення попереднього перегляду.
Matrix Надіслати одну подію, потім редагувати її. Конфігурація потокової передачі на рівні облікового запису керує чернетками на рівні облікового запису.
Microsoft Teams Нативний потік Teams в особистих чатах. streaming.mode: "block" відповідає блоковій доставці Teams.
Slack Нативний потік або редагований допис-чернетка. Доступність треду впливає на те, чи можна використовувати нативну потокову передачу.
Telegram Надіслати одне повідомлення, потім редагувати його. Старіші видимі чернетки можуть бути замінені, щоб фінальні часові позначки залишалися корисними.
Mattermost Редагований допис-чернетка. Активність інструментів згортається в той самий допис у стилі чернетки.

Канали без безпечної підтримки редагування зазвичай повертаються до індикаторів набору тексту або доставки лише фінальної відповіді.

Фіналізація

Коли фінальна відповідь готова, OpenClaw намагається зберегти чат чистим:

  • Якщо чернетка може безпечно стати фінальною відповіддю, OpenClaw редагує її на місці.
  • Якщо канал використовує нативну потокову передачу прогресу, OpenClaw фіналізує цей потік, коли нативний транспорт приймає фінальний текст.
  • Якщо фінальна відповідь містить медіа, запит на схвалення, явну ціль відповіді, забагато фрагментів або невдале редагування чи надсилання, OpenClaw надсилає фінальну відповідь через звичайний шлях доставки каналу.

Резервний шлях є навмисним. Краще надіслати нову фінальну відповідь, ніж втратити текст, неправильно прив’язати відповідь до треду або перезаписати чернетку корисним навантаженням, яке канал не може безпечно представити.

Усунення несправностей

Я бачу лише фінальну відповідь.

Перевірте, що channels.<channel>.streaming.mode установлено в progress для облікового запису або каналу, який обробив повідомлення. Деякі групові шляхи або шляхи відповіді з цитуванням можуть вимикати попередні перегляди чернеток для ходу, коли канал не може безпечно редагувати правильне повідомлення.

Я бачу мітку, але не бачу рядків інструментів.

Перевірте streaming.progress.toolProgress. Якщо значення false, OpenClaw зберігає поведінку з однією чернеткою, але приховує рядки прогресу інструментів і завдань.

Я бачу нове фінальне повідомлення замість відредагованої чернетки.

Це резервний механізм безпеки. Таке може трапитися для відповідей із медіа, довгих відповідей, явних цілей відповіді, старих чернеток Telegram, відсутніх цілей тредів Slack, видалених повідомлень попереднього перегляду або невдалої фіналізації нативного потоку.

Я все ще бачу окремі повідомлення про прогрес.

Режим прогресу приглушує стандартні окремі повідомлення про прогрес інструментів, коли чернетка активна. Якщо окремі повідомлення все ще з’являються, перевірте, що хід справді використовує режим прогресу, а не streaming.mode: "off" чи шлях каналу, який не може створити чернетку для цього повідомлення.

Teams поводиться інакше, ніж Discord або Telegram.

Microsoft Teams використовує нативний потік в особистих чатах замість загального транспорту попереднього перегляду з надсиланням і редагуванням. Teams також трактує streaming.mode: "block" як блокову доставку Teams, бо не має такого самого режиму блочного попереднього перегляду чернетки, який використовують Discord і Telegram.

Пов’язане