From d47219ef6a094da4aa09318a2051d7262385c48e Mon Sep 17 00:00:00 2001 From: Re-bin Date: Mon, 9 Feb 2026 05:15:26 +0000 Subject: [PATCH] fix: unify exit cleanup, conditionally show spinner with --logs flag --- nanobot/cli/commands.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/nanobot/cli/commands.py b/nanobot/cli/commands.py index 875eb90..a1f426e 100644 --- a/nanobot/cli/commands.py +++ b/nanobot/cli/commands.py @@ -144,7 +144,7 @@ def _print_agent_response(response: str, render_markdown: bool) -> None: console.print( Panel( body, - title=f"{__logo__} Nanobot", + title=f"{__logo__} nanobot", title_align="left", border_style="cyan", padding=(0, 1), @@ -464,10 +464,17 @@ def agent( restrict_to_workspace=config.tools.restrict_to_workspace, ) + # Show spinner when logs are off (no output to miss); skip when logs are on + def _thinking_ctx(): + if logs: + from contextlib import nullcontext + return nullcontext() + return console.status("[dim]nanobot is thinking...[/dim]", spinner="dots") + if message: # Single message mode async def run_once(): - with console.status("[dim]Nanobot is thinking...[/dim]", spinner="dots"): + with _thinking_ctx(): response = await agent_loop.process_direct(message, session_id) _print_agent_response(response, render_markdown=markdown) @@ -475,7 +482,7 @@ def agent( else: # Interactive mode _enable_line_editing() - console.print(f"{__logo__} Interactive mode (Ctrl+C to exit)\n") + console.print(f"{__logo__} Interactive mode (type [bold]exit[/bold] or [bold]Ctrl+C[/bold] to quit)\n") # input() runs in a worker thread that can't be cancelled. # Without this handler, asyncio.run() would hang waiting for it. @@ -497,10 +504,12 @@ def agent( continue if _is_exit_command(command): + _save_history() + _restore_terminal() console.print("\nGoodbye!") break - with console.status("[dim]Nanobot is thinking...[/dim]", spinner="dots"): + with _thinking_ctx(): response = await agent_loop.process_direct(user_input, session_id) _print_agent_response(response, render_markdown=markdown) except KeyboardInterrupt: @@ -509,6 +518,8 @@ def agent( console.print("\nGoodbye!") break except EOFError: + _save_history() + _restore_terminal() console.print("\nGoodbye!") break