From f1c0847145a6faffe2bbb632f938672af062e3a1 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Fri, 3 Apr 2026 20:32:01 -0700 Subject: [PATCH] fix(gateway): restore short preview truncation for all/new tool progress modes (#4935) The tool_preview_length: 0 (unlimited) config change from e314833c removed truncation from gateway progress messages in all/new modes. This caused full terminal commands, code blocks, and file paths to appear as permanent messages in Telegram -- the old 40-char truncation was the correct behavior for messaging platforms. Now: - all/new modes: always truncate previews to 40 chars (old behavior) - verbose mode: respects tool_preview_length config for JSON args cap Reported by Paulclgro and socialsurfer on Discord. --- gateway/run.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/gateway/run.py b/gateway/run.py index c069553aa..198d23f61 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -4359,9 +4359,9 @@ class GatewayRunner: cycle = ["off", "new", "all", "verbose"] descriptions = { "off": "⚙️ Tool progress: **OFF** — no tool activity shown.", - "new": "⚙️ Tool progress: **NEW** — shown when tool changes.", - "all": "⚙️ Tool progress: **ALL** — every tool call shown.", - "verbose": "⚙️ Tool progress: **VERBOSE** — full args and results.", + "new": "⚙️ Tool progress: **NEW** — shown when tool changes (short previews).", + "all": "⚙️ Tool progress: **ALL** — every tool call shown (short previews).", + "verbose": "⚙️ Tool progress: **VERBOSE** — every tool call with full arguments.", } raw_progress = user_config.get("display", {}).get("tool_progress", "all") @@ -5419,22 +5419,28 @@ class GatewayRunner: from agent.display import get_tool_emoji emoji = get_tool_emoji(tool_name, default="⚙️") - # Verbose mode: show detailed arguments - if progress_mode == "verbose" and args: - import json as _json - args_str = _json.dumps(args, ensure_ascii=False, default=str) - if len(args_str) > 200: - args_str = args_str[:197] + "..." - msg = f"{emoji} {tool_name}({list(args.keys())})\n{args_str}" + # Verbose mode: show detailed arguments, respects tool_preview_length + if progress_mode == "verbose": + if args: + from agent.display import get_tool_preview_max_len + _pl = get_tool_preview_max_len() + import json as _json + args_str = _json.dumps(args, ensure_ascii=False, default=str) + _cap = _pl if _pl > 0 else 200 + if len(args_str) > _cap: + args_str = args_str[:_cap - 3] + "..." + msg = f"{emoji} {tool_name}({list(args.keys())})\n{args_str}" + elif preview: + msg = f"{emoji} {tool_name}: \"{preview}\"" + else: + msg = f"{emoji} {tool_name}..." progress_queue.put(msg) return + # "all" / "new" modes: short preview, always truncated (40 chars) if preview: - # Truncate preview unless config says unlimited - from agent.display import get_tool_preview_max_len - _pl = get_tool_preview_max_len() - if _pl > 0 and len(preview) > _pl: - preview = preview[:_pl - 3] + "..." + if len(preview) > 40: + preview = preview[:37] + "..." msg = f"{emoji} {tool_name}: \"{preview}\"" else: msg = f"{emoji} {tool_name}..."