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 секунд (или немедленный запуск при втором рабочем событии), компактные строки прогресса во время выполнения полезной работы и подавление прежних отдельных сообщений о прогрессе для этого хода. Черновики необработанных строк инструментов используют автоматическую метку из одного слова; в повествовательном статусе этот избыточный заголовок отсутствует, если вы не настроите его явно.

На этой странице описаны работа черновиков прогресса и параметры их настройки. Полную матрицу режимов потоковой передачи, примечания о среде выполнения для каждого канала и миграцию устаревших ключей см. в разделе Потоковая передача и разбиение на части.

Что видят пользователи

Часть Назначение
Метка Необязательная начальная строка или строка состояния, например Working или Shelling.
Строки прогресса Компактные обновления выполнения с теми же значками инструментов и форматированием подробностей, что и в /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", которая выбирается из встроенного в OpenClaw набора однословных меток. В повествовательном прогрессе эта неявная метка скрыта; задайте 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: "Fetching page content...", 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

Текст команды/exec

streaming.progress.commandText (значение по умолчанию "raw") управляет объёмом сведений о команде, отображаемых рядом со строками прогресса exec/bash, независимо от описанного выше режима подробностей. Задайте "status", чтобы сохранить видимой строку прогресса инструмента, полностью скрыв текст команды:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          commandText: "status",        },      },    },  },}

Канал комментариев

streaming.progress.commentary (значение по умолчанию false) перемежает предварительные комментарии или вводное повествование модели перед использованием инструмента (💬, например «Я проверю... затем ...») со строками инструментов в черновике. Общую для всех каналов структуру настройки см. в разделе Потоковая передача и разбиение на части.

Повествовательный статус

Когда для агента определяется вспомогательная модель — явно заданная utilityModel или объявленная основным провайдером малая модель по умолчанию (OpenAI → gpt-5.6-luna, Anthropic → claude-haiku-4-5) — черновик прогресса заменяет прокручиваемые строки инструментов кратким описанием действий агента обычным языком, которое создаётся этой более дешёвой моделью и обновляется по мере выполнения работы:

text
Обновление модели по умолчанию в вашей конфигурации, затем перезапуск gateway для примененияизменений. Один вызов получения списка агентов завершился ошибкой и выполняется повторно.

Повествование включено по умолчанию (streaming.progress.narration, значение по умолчанию true) и никогда не переключается на основную модель: оно работает только с явно заданной utilityModel или моделью по умолчанию, объявленной провайдером для основного провайдера агента. Задайте utilityModel: "", чтобы полностью отключить маршрутизацию через вспомогательную модель. Строки инструментов продолжают накапливаться в фоне и возвращаются, если повествование прекращается, а черновик редактируется только после прохождения обычного порога активности и только когда текст повествования действительно изменяется, что предотвращает кратковременные вспышки при быстрых ходах и сокращает число правок в активных каналах. Отключите эту функцию, чтобы оставить необработанные строки инструментов:

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