Messages and delivery
Wersje robocze postępów
Wersje robocze postępu przekształcają jedną wiadomość kanału w dynamiczny wiersz stanu podczas
pracy agenta, zamiast stosu tymczasowych odpowiedzi „praca nadal trwa”. Ustaw
channels.<channel>.streaming.mode: "progress", a OpenClaw utworzy
wiadomość po rozpoczęciu rzeczywistej pracy, będzie ją edytować, gdy agent czyta, planuje, wywołuje
narzędzia lub czeka na zatwierdzenie, a następnie przekształci ją w odpowiedź końcową.
Praca w toku...📖 z docs/concepts/progress-drafts.md🔎 Wyszukiwanie w sieci: „discord edit message”🛠️ Bash: uruchamianie testówSzybki start
{ channels: { discord: { streaming: { mode: "progress", }, }, },}Od tego miejsca wartości domyślne to: opóźnienie rozpoczęcia wynoszące 5 sekund, zwarte wiersze postępu podczas wykonywania użytecznej pracy oraz pomijanie starszych, samodzielnych komunikatów o postępie dla tej tury. Wersje robocze surowych wierszy narzędzi używają automatycznej jednowyrazowej etykiety; nagłówek stanu pomija ten zbędny tytuł, chyba że zostanie on jawnie skonfigurowany.
Ta strona opisuje działanie wersji roboczych postępu oraz ich opcje konfiguracji. Pełną macierz trybów strumieniowania, uwagi dotyczące środowiska wykonawczego poszczególnych kanałów oraz migrację starszych kluczy zawiera sekcja Strumieniowanie i dzielenie na fragmenty.
Co widzą użytkownicy
| Część | Przeznaczenie |
|---|---|
| Nagłówek stanu | W Discord i Telegram: wstęp modelu; Discord dodaje pomocniczy tekst zastępczy. |
| Etykieta | Opcjonalny wiersz początkowy/stanu, taki jak Working. |
| Wiersze postępu | Zwarte aktualizacje przebiegu używające tych samych ikon narzędzi i formatera szczegółów co /verbose. |
W przypadku surowego postępu narzędzi etykieta pojawia się, gdy agent rozpocznie istotną pracę
i pozostaje zajęty przez początkowy czas opóźnienia.
Znajduje się na górze przewijanej listy wierszy postępu, więc znika po pojawieniu się
wystarczającej liczby konkretnych wierszy pracy. Nagłówek stanu wyświetla tylko opis stanu agenta
w zwykłym języku, chyba że etykieta zostanie jawnie skonfigurowana. Odpowiedzi zawierające wyłącznie
zwykły tekst nigdy nie wyświetlają wersji roboczej postępu; wiersz pojawia się tylko przy rzeczywistych aktualizacjach pracy,
na przykład 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message"
lub ✍️ Write: to /tmp/file.
Odpowiedź końcowa zastępuje wersję roboczą w miejscu, gdy kanał może to bezpiecznie zrobić; w przeciwnym razie OpenClaw wysyła odpowiedź końcową standardowym mechanizmem dostarczania oraz usuwa wersję roboczą lub przestaje ją aktualizować (zobacz Finalizacja).
Wybór trybu
channels.<channel>.streaming.mode steruje widocznym zachowaniem podczas pracy:
| Tryb | Najlepsze zastosowanie | Co pojawia się na czacie |
|---|---|---|
off |
Ciche kanały | Tylko odpowiedź końcowa. |
partial |
Obserwowanie pojawiania się tekstu odpowiedzi | Jedna wersja robocza edytowana najnowszym tekstem odpowiedzi. |
block |
Większe fragmenty podglądu odpowiedzi | Jeden podgląd aktualizowany lub rozszerzany większymi fragmentami. |
progress |
Tury intensywnie korzystające z narzędzi lub trwające długo | Jedna wersja robocza stanu, a następnie odpowiedź końcowa. |
Wybierz progress, gdy użytkownikom bardziej zależy na tym, „co się dzieje”, niż na obserwowaniu
strumieniowania tekstu odpowiedzi token po tokenie; partial, gdy sam tekst odpowiedzi jest
sygnałem postępu; block w przypadku większych fragmentów podglądu. W Discord i
Telegram streaming.mode: "block" nadal oznacza strumieniowanie podglądu, a nie standardowe
dostarczanie odpowiedzi blokami — do tego celu użyj streaming.block.enabled.
Konfigurowanie etykiet
Etykiety postępu znajdują się w channels.<channel>.streaming.progress. Domyślna
etykieta surowego wiersza narzędzia to "auto", która używa zwykłej wbudowanej etykiety Working.
Nagłówek stanu ukrywa tę niejawną etykietę; ustaw jawnie
label: "auto", jeśli etykieta ma być również wyświetlana nad nim:
Praca w tokuUżycie stałej etykiety:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "Analizowanie", }, }, }, },}Użycie własnej puli etykiet (nadal wybieranych losowo/na podstawie ziarna, gdy label: "auto"):
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "auto", labels: ["Sprawdzanie", "Czytanie", "Testowanie", "Kończenie"], }, }, }, },}Ukrycie etykiety i wyświetlanie tylko wierszy postępu:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: false, }, }, }, },}Sterowanie wierszami postępu
Wiersze postępu pochodzą z rzeczywistych zdarzeń przebiegu: uruchomień narzędzi, aktualizacji elementów, planów
zadań, zatwierdzeń, danych wyjściowych poleceń, podsumowań poprawek i podobnej aktywności agenta.
Są domyślnie włączone (progress.toolProgress, wartość domyślna true).
Narzędzia mogą również emitować typowane informacje o postępie, gdy pojedyncze wywołanie nadal trwa. Dzięki temu powolne pobieranie lub wyszukiwanie aktualizuje widoczną wersję roboczą, zanim narzędzie zwróci wynik końcowy. Aktualizacja postępu jest częściowym wynikiem narzędzia z pustą zawartością modelu i jawnymi publicznymi metadanymi kanału:
{ "content": [], "progress": { "text": "Pobieranie zawartości strony...", "visibility": "channel", "privacy": "public", "id": "web_fetch:fetching" }}OpenClaw renderuje w interfejsie postępu kanału tylko progress.text. Standardowy
wynik narzędzia nadal pojawia się później jako content/details i jest jedyną częścią
zwracaną do modelu.
Dodając postęp do narzędzia, należy emitować krótki, ogólny komunikat i opóźnić go,
aż operacja będzie oczekiwać wystarczająco długo, by komunikat był użyteczny. web_fetch
robi dokładnie to z opóźnieniem 5 sekund:
const clearProgressTimer = scheduleToolProgress( onUpdate, { text: "Pobieranie zawartości strony...", id: "web_fetch:fetching" }, 5_000, { signal },); try { return await runToolWork();} finally { clearProgressTimer();}Szybkie wywołania nie wyświetlają wiersza postępu; długie wywołania wyświetlają go podczas oczekiwania; anulowane wywołania czyszczą licznik czasu, zanim pojawi się nieaktualna informacja o postępie. Tekst postępu jest publicznym kanałem pobocznym interfejsu, dlatego nigdy nie może zawierać danych poufnych, surowych argumentów, pobranej zawartości, danych wyjściowych poleceń ani tekstu strony.
Tryb szczegółów
OpenClaw używa tego samego formatera dla wersji roboczych postępu i /verbose:
{ agents: { defaults: { toolProgressDetail: "explain", // explain | raw }, },}"explain" jest wartością domyślną i zachowuje stabilność wersji roboczych dzięki zwięzłym etykietom.
"raw" dołącza bazowe polecenie, gdy jest dostępne, co przydaje się podczas
debugowania, ale zwiększa ilość informacji na czacie. Na przykład wywołanie node --check /tmp/app.js
jest renderowane inaczej w zależności od trybu:
| Tryb | Wiersz postępu |
|---|---|
explain |
🛠️ check js syntax for /tmp/app.js |
raw |
🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js |
Tekst polecenia/exec
streaming.progress.commandText (wartość domyślna "raw") steruje ilością szczegółów polecenia
wyświetlanych obok wierszy postępu exec/bash, niezależnie od powyższego trybu szczegółów.
Ustaw wartość "status", aby zachować widoczny wiersz postępu narzędzia, jednocześnie całkowicie ukrywając
tekst polecenia:
{ channels: { discord: { streaming: { mode: "progress", progress: { commandText: "status", }, }, }, },}Warstwa komentarza
streaming.progress.commentary (wartość domyślna false) przeplata narrację komentarza/wstępu modelu
sprzed użycia narzędzia (💬, na przykład „Sprawdzę... a następnie
...”) z wierszami narzędzi w wersji roboczej. Wspólny kształt konfiguracji dla wszystkich kanałów opisano w sekcji
Strumieniowanie i dzielenie na fragmenty.
Gdy warstwa komentarza jest włączona, wstępy są renderowane tylko jako te przeplatane wiersze 💬; poniższy nagłówek stanu pozostaje ukryty, dzięki czemu warstwa zachowuje swój udokumentowany kształt.
Nagłówek stanu
W Discord i Telegram w trybie postępu typowany wstęp modelu sprzed użycia narzędzia
staje się nagłówkiem stanu wersji roboczej, gdy tylko jest dostępny. Inne
kanały w trybie postępu zachowują dotychczasowe działanie stanu. Nagłówek jest
domyślnie włączony i nie omija standardowej bramki aktywności dla krótkich tur;
włączenie streaming.progress.commentary przekazuje wstępy do przeplatanej
warstwy komentarza.
W Discord, gdy dla agenta zostanie wybrany model pomocniczy — jawny
utilityModel albo zadeklarowany domyślny mały model
głównego dostawcy (OpenAI → gpt-5.6-luna,
Anthropic → claude-haiku-4-5) — dostarcza on krótki tekst zastępczy w zwykłym języku,
gdy model nie emituje wstępu lub milczy od około 20 sekund
(nagłówek Telegram obecnie korzysta wyłącznie ze wstępu):
Aktualizowanie domyślnego modelu w konfiguracji, a następnie ponowne uruchamianie Gateway,aby zastosować zmianę. Jedno wywołanie listy agentów nie powiodło się i jest ponawiane.Narracja pomocnicza jest domyślnie włączona (streaming.progress.narration, wartość domyślna
true) i nigdy nie korzysta awaryjnie z modelu głównego: działa tylko z jawnym
utilityModel lub domyślnym modelem zadeklarowanym przez dostawcę dla głównego
dostawcy agenta. Ustaw utilityModel: "", aby całkowicie wyłączyć kierowanie do modelu pomocniczego. Wiersze narzędzi
nadal gromadzą się poniżej i pojawiają się ponownie, jeśli oba źródła stanu przestaną działać. Edycje
wersji roboczej nadal czekają na standardową bramkę aktywności i rzeczywistą
zmianę tekstu, co zapobiega krótkim mignięciom przy szybkich turach i ogranicza częstotliwość edycji w aktywnych
kanałach. Ustaw narration: false, aby wyłączyć tylko tekst zastępczy modelu pomocniczego; nagłówki
wstępu modelu pozostaną włączone:
{ channels: { discord: { streaming: { mode: "progress", progress: { narration: false, }, }, }, },}Dane wejściowe narracji są ograniczane i redagowane: model pomocniczy otrzymuje
tekst przychodzącego żądania oraz te same zwarte, zredagowane podsumowania narzędzi, które renderowałaby wersja robocza
— nigdy surowe dane wyjściowe poleceń ani wyniki narzędzi. Przy ustawieniu
commandText: "status" dane wejściowe narracji pomijają również tekst poleceń exec/bash,
zgodnie z zawartością wersji roboczej.
Limity wierszy
Ograniczenie liczby widocznych wierszy (domyślnie 8):
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLines: 4, }, }, }, },}Wiersze postępu są automatycznie zagęszczane, aby ograniczyć zmianę układu dymka czatu podczas edytowania wersji roboczej, a OpenClaw skraca długie wiersze, aby wielokrotne edycje wersji roboczej nie powodowały innego zawijania przy każdej aktualizacji. Domyślny limit na wiersz wynosi 120 znaków; tekst prozatorski jest ucinany na granicy słowa, natomiast długie szczegóły, takie jak ścieżki lub surowe polecenia, są skracane wielokropkiem pośrodku, aby końcówka pozostała widoczna.
Dostosowanie limitu na wiersz:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLineChars: 160, }, }, }, },}Rozszerzone renderowanie (Slack)
Slack może renderować wiersze postępu jako strukturalne pola Block Kit zamiast zwykłego tekstu:
{ channels: { slack: { streaming: { mode: "progress", progress: { render: "rich", }, }, }, },}Rozszerzone renderowanie zawsze wysyła ten sam tekst zwykły wraz z polami Block Kit, dzięki czemu klienty, które nie mogą renderować bogatszej postaci, nadal wyświetlają zwarty tekst postępu.
Ukrywanie wierszy narzędzi/zadań
Zachowanie pojedynczej wersji roboczej postępu przy jednoczesnym ukryciu wierszy narzędzi i zadań:
{ channels: { discord: { streaming: { mode: "progress", progress: { toolProgress: false, }, }, }, },}Z toolProgress: false OpenClaw nadal pomija starsze, samodzielne
komunikaty o postępie narzędzi w tej turze — kanał pozostaje wizualnie nieaktywny aż do
ostatecznej odpowiedzi, z wyjątkiem etykiety, jeśli została skonfigurowana.
Zachowanie kanałów
| Kanał | Transport postępu | Uwagi |
|---|---|---|
| Discord | Wysłanie jednej wiadomości, a następnie jej edycja. | Domyślnie używa trybu progress; ostateczna odpowiedź zawiera potwierdzenie aktywności -#, a wersja robocza statusu jest usuwana po dostarczeniu odpowiedzi. |
| Matrix | Wysłanie jednego zdarzenia, a następnie jego edycja. | Konfiguracja strumieniowania na poziomie konta steruje wersjami roboczymi na poziomie konta. |
| Microsoft Teams | Natywny strumień Teams w czatach osobistych. | streaming.mode: "block" jest zamiast tego mapowane na dostarczanie bloków Teams. |
| Slack | Natywny strumień lub edytowalny wpis roboczy. | Wymaga docelowego wątku odpowiedzi; wiadomości prywatne najwyższego poziomu bez takiego wątku nadal otrzymują wpisy z podglądem wersji roboczej i ich aktualizacje. |
| Telegram | Wysłanie jednej wiadomości, a następnie jej edycja. | Jeśli między wersją roboczą postępu a odpowiedzią pojawi się wiadomość, wersja robocza zostanie opublikowana ponownie pod nią (najpierw publikacja nowej, potem usunięcie starej), zamiast przewijać klienta skokowo. |
| Mattermost | Edytowalny wpis roboczy. | Tryb block przełącza się między ukończonym tekstem a wpisami aktywności narzędzi; inne tryby łączą aktywność narzędzi w tym samym wpisie w stylu wersji roboczej. |
Kanały bez bezpiecznej obsługi edycji używają zastępczo wskaźników pisania lub dostarczają wyłącznie ostateczną odpowiedź. Pełne zestawienie zachowania środowiska wykonawczego dla poszczególnych kanałów znajduje się w sekcji Strumieniowanie i dzielenie na fragmenty.
Finalizacja
Gdy ostateczna odpowiedź jest gotowa, OpenClaw próbuje zachować porządek na czacie:
- W trybie
progressna Discordzie ostateczna odpowiedź jest wysyłana jako nowa wiadomość z dołączonym niewielkim potwierdzeniem aktywności-#(na przykład-# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s), a wersja robocza statusu jest usuwana po dostarczeniu tej odpowiedzi. W aktywnych kanałach nad odpowiedzią nie pozostaje osierocony dziennik narzędzi; w przypadku ostatecznych odpowiedzi o błędzie wersja robocza pozostaje widocznym zapisem nieudanej tury. - Jeśli wersję roboczą można bezpiecznie przekształcić w ostateczną odpowiedź (tryby
partial/block), OpenClaw edytuje ją w miejscu. - Jeśli kanał korzysta z natywnego strumieniowania postępu, OpenClaw finalizuje ten strumień, gdy natywny transport zaakceptuje ostateczny tekst.
- W przeciwnym razie (multimedia, prośba o zatwierdzenie, jawny cel odpowiedzi, zbyt wiele fragmentów albo nieudana edycja lub wysyłka) OpenClaw wysyła ostateczną odpowiedź zwykłą ścieżką dostarczania kanału, zamiast nadpisywać wersję roboczą.
To zachowanie zastępcze jest celowe: wysłanie nowej ostatecznej odpowiedzi jest lepsze niż utrata tekstu, umieszczenie odpowiedzi w niewłaściwym wątku lub nadpisanie wersji roboczej ładunkiem, którego kanał nie może bezpiecznie przedstawić.
Rozwiązywanie problemów
Widoczna jest tylko ostateczna odpowiedź.
Należy sprawdzić, czy channels.<channel>.streaming.mode ma wartość progress dla konta
lub kanału, który obsłużył wiadomość. Niektóre ścieżki grupowe lub odpowiedzi z cytatem wyłączają
podglądy wersji roboczych w danej turze, gdy kanał nie może bezpiecznie edytować właściwej
wiadomości.
Widoczna jest etykieta, ale nie ma wierszy narzędzi.
Należy sprawdzić streaming.progress.toolProgress. Jeśli ma wartość false, OpenClaw zachowuje
działanie pojedynczej wersji roboczej, ale ukrywa wiersze postępu narzędzi i zadań.
Zamiast edytowanej wersji roboczej widoczna jest nowa ostateczna wiadomość.
Jest to bezpieczne zachowanie zastępcze opisane w sekcji Finalizacja. Może wystąpić w przypadku odpowiedzi multimedialnych, długich odpowiedzi, jawnych celów odpowiedzi, starych wersji roboczych Telegrama, brakujących docelowych wątków Slacka, usuniętych wiadomości podglądu lub nieudanej finalizacji natywnego strumienia.
Nadal widoczne są samodzielne komunikaty o postępie.
Tryb postępu pomija domyślne, samodzielne komunikaty o postępie narzędzi, gdy aktywna jest
wersja robocza. Jeśli samodzielne komunikaty nadal się pojawiają, należy potwierdzić, że tura
rzeczywiście korzysta z trybu progress, a nie streaming.mode: "off" ani ze ścieżki
kanału, która nie może utworzyć wersji roboczej dla tej wiadomości.
Teams działa inaczej niż Discord lub Telegram.
Microsoft Teams używa natywnego strumienia w czatach osobistych zamiast ogólnego
transportu podglądu opartego na wysyłaniu i edycji oraz mapuje streaming.mode: "block" na
dostarczanie bloków Teams, ponieważ nie ma trybu blokowego podglądu wersji roboczej, takiego jak Discord i
Telegram.