From 3c13feed4c39ad6f577af50b10c0201a603084c7 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Mon, 2 Mar 2026 05:23:15 -0800 Subject: [PATCH] feat: show detailed tool call args in gateway based on config Issue #263: Telegram/Discord/WhatsApp/Slack now show tool call details based on display.tool_progress in config.yaml. Changes: - gateway/run.py: 'verbose' mode shows full args (keys + JSON, 200 char max). 'all' mode preview increased from 40 to 80 chars. Added missing tool emojis (execute_code, delegate_task, clarify, skill_manage, search_files). - agent/display.py: Added execute_code, delegate_task, clarify, skill_manage to primary_args. Added 'code' and 'goal' to fallback keys. - run_agent.py: Pass function_args dict to tool_progress_callback so gateway can format based on its own verbosity config. Config usage: display: tool_progress: verbose # off | new | all | verbose --- agent/display.py | 4 +++- gateway/run.py | 23 +++++++++++++++++++---- run_agent.py | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/agent/display.py b/agent/display.py index e7f074c4..17595ce2 100644 --- a/agent/display.py +++ b/agent/display.py @@ -31,6 +31,8 @@ def build_tool_preview(tool_name: str, args: dict, max_len: int = 40) -> str: "vision_analyze": "question", "mixture_of_agents": "user_prompt", "skill_view": "name", "skills_list": "category", "schedule_cronjob": "name", + "execute_code": "code", "delegate_task": "goal", + "clarify": "question", "skill_manage": "name", } if tool_name == "process": @@ -97,7 +99,7 @@ def build_tool_preview(tool_name: str, args: dict, max_len: int = 40) -> str: key = primary_args.get(tool_name) if not key: - for fallback_key in ("query", "text", "command", "path", "name", "prompt"): + for fallback_key in ("query", "text", "command", "path", "name", "prompt", "code", "goal"): if fallback_key in args: key = fallback_key break diff --git a/gateway/run.py b/gateway/run.py index 8154b76f..8db99487 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -1672,7 +1672,7 @@ class GatewayRunner: progress_queue = queue.Queue() if tool_progress_enabled else None last_tool = [None] # Mutable container for tracking in closure - def progress_callback(tool_name: str, preview: str = None): + def progress_callback(tool_name: str, preview: str = None, args: dict = None): """Callback invoked by agent when a tool is called.""" if not progress_queue: return @@ -1692,6 +1692,7 @@ class GatewayRunner: "write_file": "✍️", "patch": "🔧", "search": "🔎", + "search_files": "🔎", "list_directory": "📂", "image_generate": "🎨", "text_to_speech": "🔊", @@ -1717,14 +1718,28 @@ class GatewayRunner: "schedule_cronjob": "⏰", "list_cronjobs": "⏰", "remove_cronjob": "⏰", + "execute_code": "🐍", + "delegate_task": "🔀", + "clarify": "❓", + "skill_manage": "📝", } emoji = tool_emojis.get(tool_name, "⚙️") + # 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}" + progress_queue.put(msg) + return + if preview: # Truncate preview to keep messages clean - if len(preview) > 40: - preview = preview[:37] + "..." - msg = f"{emoji} {tool_name}... \"{preview}\"" + if len(preview) > 80: + preview = preview[:77] + "..." + msg = f"{emoji} {tool_name}: \"{preview}\"" else: msg = f"{emoji} {tool_name}..." diff --git a/run_agent.py b/run_agent.py index 0b12ce53..4c60b4bd 100644 --- a/run_agent.py +++ b/run_agent.py @@ -2442,7 +2442,7 @@ class AIAgent: if self.tool_progress_callback: try: preview = _build_tool_preview(function_name, function_args) - self.tool_progress_callback(function_name, preview) + self.tool_progress_callback(function_name, preview, function_args) except Exception as cb_err: logging.debug(f"Tool progress callback error: {cb_err}")