From 6d39f797e6be7fc0a239249113ae30780c1430cf Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:43:04 -0700 Subject: [PATCH] fix(compat-fallout): repoint 3 live imports of dropped facade names (cli_stream_mixin is_table_divider/looks_like_table_row -> agent.markdown_tables; /bg AIAgent -> run_agent; code_execution_tool _ssh_config_from_config -> terminal_tool_backends); repoint approval-ui test patch target --- hermes_cli/cli_commands_mixin.py | 4 ++-- hermes_cli/cli_stream_mixin.py | 8 ++++---- tests/cli/test_cli_approval_ui.py | 2 +- tools/code_execution_tool.py | 3 +-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/hermes_cli/cli_commands_mixin.py b/hermes_cli/cli_commands_mixin.py index 830006ca32..84fe41b0a0 100644 --- a/hermes_cli/cli_commands_mixin.py +++ b/hermes_cli/cli_commands_mixin.py @@ -1900,8 +1900,8 @@ class CLICommandsMixin: def _handle_background_command(self, cmd: str): """Handle /bg — run a prompt in a separate background session (its own AIAgent on a thread); the result prints here without touching the active history.""" - from cli import ( - AIAgent, set_approval_callback, set_secret_capture_callback, set_sudo_password_callback) + from cli import set_approval_callback, set_secret_capture_callback, set_sudo_password_callback + from run_agent import AIAgent prompt = _command_arg(cmd) if not prompt: return _cp(" Usage: /bg ", " Example: /bg Summarize the top HN stories today", diff --git a/hermes_cli/cli_stream_mixin.py b/hermes_cli/cli_stream_mixin.py index 7d1075c8a9..0561ecffb6 100644 --- a/hermes_cli/cli_stream_mixin.py +++ b/hermes_cli/cli_stream_mixin.py @@ -377,9 +377,9 @@ class CLIStreamMixin: def _emit_stream_text(self, text: str) -> None: """Emit filtered text to the streaming display.""" + from agent.markdown_tables import is_table_divider, looks_like_table_row from cli import ( - HermesCLI, _ACCENT, _RST, _STREAM_PARTIAL_PREVIEW_LEN, _cprint, _strip_markdown_syntax, - datetime, is_table_divider, looks_like_table_row) + HermesCLI, _ACCENT, _RST, _STREAM_PARTIAL_PREVIEW_LEN, _cprint, _strip_markdown_syntax, datetime) if not text: return # Defer content while the reasoning box renders so reasoning always lands BEFORE it. @@ -451,8 +451,8 @@ class CLIStreamMixin: def _flush_stream(self) -> None: """Emit any remaining partial line from the stream buffer and close the box.""" - from cli import ( - _ACCENT, _RST, _cprint, _strip_markdown_syntax, is_table_divider, looks_like_table_row) + from agent.markdown_tables import is_table_divider, looks_like_table_row + from cli import _ACCENT, _RST, _cprint, _strip_markdown_syntax # Still inside a "reasoning block" at end-of-stream = false positive (the model # mentioned a tag in prose and never closed it): recover the buffer as regular text. if getattr(self, "_in_reasoning_block", False) and getattr(self, "_stream_prefilt", ""): diff --git a/tests/cli/test_cli_approval_ui.py b/tests/cli/test_cli_approval_ui.py index 3ba323c147..34d1a56095 100644 --- a/tests/cli/test_cli_approval_ui.py +++ b/tests/cli/test_cli_approval_ui.py @@ -245,7 +245,7 @@ class TestCliApprovalUi: "failed": False, } - with patch.object(cli_module, "AIAgent", FakeAgent), \ + with patch("run_agent.AIAgent", FakeAgent), \ patch.object(cli_module, "_cprint"), \ patch.object(cli_module, "ChatConsole") as chat_console: chat_console.return_value.print = MagicMock() diff --git a/tools/code_execution_tool.py b/tools/code_execution_tool.py index 32d23d5465..26f2ab680f 100644 --- a/tools/code_execution_tool.py +++ b/tools/code_execution_tool.py @@ -404,12 +404,11 @@ _CONTAINER_CONFIG_DEFAULTS = ( def _get_or_create_env(task_id: str): """``(env, env_type)`` — the environment the terminal/file tools share for *task_id*, created on first use (same double-checked per-task lock pattern as file_tools._get_file_ops).""" - from tools.terminal_tool_backends import _create_environment + from tools.terminal_tool_backends import _create_environment, _ssh_config_from_config from tools.terminal_tool import ( _active_environments, _env_lock, _get_env_config, _last_activity, _start_cleanup_thread, _creation_locks, _creation_locks_lock, _task_env_overrides, _resolve_container_task_id, _resolve_task_host_cwd, _is_container_backend, _select_image, - _ssh_config_from_config, ) effective_task_id = _resolve_container_task_id(task_id) def _cached():