You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Flood control fallback** — when edit hits a rate limit, automatically switches to new messages
11
+
-**Content reset** — when `send_message` fires mid-run, progress bubble resets below the sent content
12
+
-**`tool_progress` config** — new independent config field with four modes:
13
+
-`"all"` (default) — single editable progress bubble with smart previews, throttling, dedup
14
+
-`"new"` — only updates when the tool name changes
15
+
-`"verbose"` — raw tool args in per-tool messages
16
+
-`"off"` — no per-tool progress (just thinking + final answer)
17
+
-**`tool_progress_cleanup` config** — whether to delete progress messages after the final answer (default: `true`)
18
+
-**`render.ToolPreview()`** — exported function extracts meaningful previews from tool call JSON args. Covers all 20+ native tools (read_file, shell, browser, memory, transcribe, send_message, etc.)
19
+
-**`render.ToolEmoji()`** — now exported for use by Telegram bot (was internal-only)
20
+
21
+
### Breaking Changes
22
+
-`narrate.Narrator` package is deprecated — all functionality absorbed into `telegram.go` + `render.go`. The package is kept for build compatibility but no longer used by Telegram bot
23
+
24
+
### Config
25
+
```json
26
+
{
27
+
"tool_progress": "all",
28
+
"tool_progress_cleanup": true
29
+
}
30
+
```
31
+
32
+
### Stats
33
+
- 120+ insertions across 3 files (telegram.go, render.go, loader.go)
Copy file name to clipboardExpand all lines: docs/TELEGRAM.md
+27Lines changed: 27 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -307,6 +307,33 @@ Voice message received → DownloadVoice (OGG Opus to disk)
307
307
308
308
**Fallback:** If auto-transcribe fails (ffmpeg unavailable, corrupt audio, whisper error), the agent receives the file path with a suggestion to use the `transcribe()` tool manually.
309
309
310
+
### Tool Progress (Narrator)
311
+
312
+
Tool progress shows what the agent is doing in real time. Controlled by the `tool_progress` config field (independent from `interaction_mode`):
313
+
314
+
| Mode | Behavior |
315
+
|------|----------|
316
+
|`all` (default) | Single editable progress bubble with smart previews — e.g. `📝 read_file: "main.go"`. With edit throttling (1.5s), dedup (`×N` counter), and flood-control fallback |
317
+
|`new`| Like `all` but only updates when the tool name changes — skips consecutive same-tool repeats |
318
+
|`verbose`| Raw tool arguments as separate messages — `📝 `read_file` {"path":"main.go"}` then `📝 `read_file` ✅ (2KB)` on completion |
319
+
|`off`| No per-tool progress messages — just the thinking preamble and final answer |
320
+
321
+
**Key features:**
322
+
-**Smart previews** — extracts meaningful context: filename for file tools, command for shell, URL for browser, query for memory, filename for transcribe
323
+
-**Edit throttling** — 1.5s minimum between edits prevents Telegram flood control (429 errors)
324
+
-**Tool dedup** — if the same tool runs N times in a row (common with parallel batches), shows `📝 read_file: "main.go" (×5)` instead of 5 identical lines
325
+
-**Flood fallback** — if an edit fails with "flood" or "retry after", automatically switches to sending new messages
326
+
-**Content reset** — when `send_message` fires mid-run, the progress bubble resets below the sent content
327
+
-**Cleanup** — progress message deleted after final answer (configurable via `tool_progress_cleanup: false`)
328
+
329
+
Config example:
330
+
```json
331
+
{
332
+
"tool_progress": "all",
333
+
"tool_progress_cleanup": true
334
+
}
335
+
```
336
+
310
337
## Types (`types.go`)
311
338
312
339
The package defines Telegram API types used throughout:
0 commit comments