From b00d9238e52f2ddb6b036ea14fca1038aabbf32c Mon Sep 17 00:00:00 2001 From: banteg <4562643+banteg@users.noreply.github.com> Date: Sun, 28 Dec 2025 23:04:41 +0400 Subject: [PATCH] feat: gate command output behind verbose --- .../src/codex_telegram_bridge/exec_bridge.py | 14 +++++++++++--- .../src/codex_telegram_bridge/exec_render.py | 8 +++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py index c1c6688..932d0e4 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py @@ -149,6 +149,7 @@ class CodexExecRunner: prompt: str, session_id: Optional[str], on_event: Optional[Callable[[Dict[str, Any]], None]] = None, + show_output: bool = False, ) -> Tuple[str, str, bool]: """ Returns (session_id, final_agent_message_text) @@ -204,7 +205,7 @@ class CodexExecRunner: evt = json.loads(line) except json.JSONDecodeError: continue - for out in render_event_cli(evt, cli_state): + for out in render_event_cli(evt, cli_state, show_output=show_output): log(f"[codex] {out}") if on_event is not None: try: @@ -240,15 +241,16 @@ class CodexExecRunner: prompt: str, session_id: Optional[str], on_event: Optional[Callable[[Dict[str, Any]], None]] = None, + show_output: bool = False, ) -> Tuple[str, str, bool]: """ If resuming, serialize per-session. """ if not session_id: - return self.run(prompt, session_id=None, on_event=on_event) + return self.run(prompt, session_id=None, on_event=on_event, show_output=show_output) lock = self._lock_for(session_id) with lock: - return self.run(prompt, session_id=session_id, on_event=on_event) + return self.run(prompt, session_id=session_id, on_event=on_event, show_output=show_output) # -------------------- Telegram loop -------------------- @@ -276,6 +278,11 @@ def run( "--ignore-backlog/--process-backlog", help="Skip pending Telegram updates that arrived before startup.", ), + verbose: bool = typer.Option( + False, + "--verbose/--quiet", + help="Include command output in CLI logs.", + ), ) -> None: config = load_telegram_config() token = config_get(config, "bot_token") or "" @@ -418,6 +425,7 @@ def run( text, resume_session, on_event=on_event, + show_output=verbose, ) except Exception as e: _stop_background() diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/exec_render.py b/codex_telegram_bridge/src/codex_telegram_bridge/exec_render.py index 0f13bb6..ccf498a 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/exec_render.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/exec_render.py @@ -183,6 +183,7 @@ def render_event_cli( state: ExecRenderState, *, show_reasoning: bool = False, + show_output: bool = False, ) -> list[str]: etype = event.get("type") lines: list[str] = [] @@ -232,9 +233,10 @@ def render_event_cli( exit_code = item.get("exit_code") exit_part = f" (exit {exit_code})" if exit_code is not None else "" lines.append(f"{STATUS_DONE} ran: {command}{exit_part}") - output = _truncate_output(item.get("aggregated_output", "")) - if output: - lines.extend(indent(output, " ").splitlines()) + if show_output: + output = _truncate_output(item.get("aggregated_output", "")) + if output: + lines.extend(indent(output, " ").splitlines()) elif itype == "file_change" and etype == "item.completed": line = _format_file_change(item.get("changes", []))