From 3d20f106ca69f02af6a207ab7ddc8891a3b7c303 Mon Sep 17 00:00:00 2001 From: Zeheng Huang <153708448+hunjaiboy@users.noreply.github.com> Date: Wed, 3 Jun 2026 01:34:48 -0700 Subject: [PATCH] perf(cli): fast-path global version startup (cherry picked from commit f7005276381e4c1fa8332c37bfc0adc2e0ab9b19) --- hermes_cli/main.py | 97 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 89 insertions(+), 8 deletions(-) diff --git a/hermes_cli/main.py b/hermes_cli/main.py index e3b8986c670cb..20d5dd5f42d73 100644 --- a/hermes_cli/main.py +++ b/hermes_cli/main.py @@ -212,6 +212,22 @@ def _run_and_exit_oneshot( _exit_after_oneshot(rc) +def _project_root_str_fast() -> str: + return os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir)) + + +def _ensure_project_root_on_path_fast() -> None: + project_root = _project_root_str_fast() + normalized_root = os.path.normcase(os.path.realpath(project_root)) + sys.path[:] = [ + entry + for entry in sys.path + if not entry + or os.path.normcase(os.path.realpath(entry)) != normalized_root + ] + sys.path.insert(0, project_root) + + def _set_process_title() -> None: """Set the process title to 'hermes' so tools like 'ps', 'top', and 'htop' show the app name instead of 'python3.xx'. @@ -368,6 +384,55 @@ def _is_termux_fast_version_argv(argv: list[str]) -> bool: return argv in (["--version"], ["-V"], ["version"]) +def _is_global_fast_version_argv(argv: list[str]) -> bool: + return argv in (["--version"], ["-V"]) + + +def _is_container_startup_environment_fast() -> bool: + if os.path.exists("/.dockerenv") or os.path.exists("/run/.containerenv"): + return True + try: + with open("/proc/1/cgroup", encoding="utf-8") as handle: + cgroup = handle.read() + except OSError: + return False + return "docker" in cgroup or "podman" in cgroup or "/lxc/" in cgroup + + +def _active_profile_may_override_home_fast(hermes_root: str) -> bool: + active_profile = os.path.join(hermes_root, "active_profile") + try: + if os.path.exists(active_profile): + with open(active_profile, encoding="utf-8") as handle: + active = handle.read().strip() + return bool(active and active != "default") + except (OSError, UnicodeDecodeError): + pass + return False + + +def _container_mode_may_be_active_fast() -> bool: + if os.environ.get("HERMES_DEV") == "1": + return False + if _is_container_startup_environment_fast(): + return False + + hermes_home = os.environ.get("HERMES_HOME", "").strip() + if hermes_home: + if os.path.exists(os.path.join(hermes_home, ".container-mode")): + return True + parent_name = os.path.basename(os.path.dirname(os.path.normpath(hermes_home))) + return ( + parent_name != "profiles" + and _active_profile_may_override_home_fast(hermes_home) + ) + + default_home = os.path.join(os.path.expanduser("~"), ".hermes") + if _active_profile_may_override_home_fast(default_home): + return True + return os.path.exists(os.path.join(default_home, ".container-mode")) + + def _read_openai_version_fast() -> str | None: """Read OpenAI SDK version without importing ``importlib.metadata``.""" for base in sys.path: @@ -400,20 +465,36 @@ def _print_fast_version_info() -> None: print(f"OpenAI SDK: {openai_version}" if openai_version else "OpenAI SDK: Not installed") -def _try_termux_ultrafast_version() -> bool: - """Handle ``hermes --version`` before config/logging imports on Termux.""" - if os.environ.get("HERMES_TERMUX_DISABLE_FAST_CLI") == "1": +def _try_ultrafast_version() -> bool: + """Handle ``hermes --version`` before config/logging imports.""" + is_termux = _is_termux_startup_environment_fast() + if ( + is_termux + and os.environ.get("HERMES_TERMUX_DISABLE_FAST_CLI") == "1" + ): return False - if not _is_termux_startup_environment_fast(): + if is_termux: + if not _is_termux_fast_version_argv(sys.argv[1:]): + return False + elif not _is_global_fast_version_argv(sys.argv[1:]): return False - if not _is_termux_fast_version_argv(sys.argv[1:]): + elif _container_mode_may_be_active_fast(): return False _print_fast_version_info() return True -if _try_termux_ultrafast_version(): +def _try_termux_ultrafast_version() -> bool: + """Backward-compatible test hook for the Termux startup fast path.""" + if not _is_termux_startup_environment_fast(): + return False + return _try_ultrafast_version() + + +_ensure_project_root_on_path_fast() + +if _try_ultrafast_version(): raise SystemExit(0) import argparse @@ -495,8 +576,8 @@ def _require_tty(command_name: str) -> None: # Add project root to path -PROJECT_ROOT = Path(__file__).parent.parent.resolve() -sys.path.insert(0, str(PROJECT_ROOT)) +PROJECT_ROOT = Path(_project_root_str_fast()) +_ensure_project_root_on_path_fast() # ---------------------------------------------------------------------------