From 29721fcc589650f5f29b185d42ffb5bab90b2705 Mon Sep 17 00:00:00 2001 From: Ari Lotter Date: Sat, 11 Apr 2026 15:58:22 -0400 Subject: [PATCH] nix fixes --- hermes_cli/main.py | 16 ++++++++++------ nix/tui.nix | 12 ++++++++---- ui-tui/src/gatewayClient.ts | 4 ++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/hermes_cli/main.py b/hermes_cli/main.py index 48bbdbf0d..f147ed10b 100644 --- a/hermes_cli/main.py +++ b/hermes_cli/main.py @@ -665,6 +665,13 @@ def _make_tui_argv(tui_dir: Path, tui_dev: bool) -> tuple[list[str], Path]: sys.exit(1) return path + # pre-built dist (nix / HERMES_TUI_DIR) needs no npm at all. + if not tui_dev: + bundled = _find_bundled_tui(tui_dir) + if bundled: + node = _node_bin("node") + return [node, str(bundled / "dist" / "entry.js")], bundled + npm = _node_bin("npm") if not (tui_dir / "node_modules").exists(): print("Installing TUI dependencies…") @@ -703,11 +710,7 @@ def _make_tui_argv(tui_dir: Path, tui_dev: bool) -> tuple[list[str], Path]: return [str(tsx), "src/entry.tsx"], tui_dir return [npm, "start"], tui_dir - env_bundle = os.environ.get("HERMES_TUI_DIR") - uses_packaged_dist = bool( - env_bundle and (Path(env_bundle) / "dist" / "entry.js").exists() - ) - if not uses_packaged_dist and _tui_build_needed(tui_dir): + if _tui_build_needed(tui_dir): result = subprocess.run( [npm, "run", "build"], cwd=str(tui_dir), @@ -735,7 +738,8 @@ def _launch_tui(resume_session_id: Optional[str] = None, tui_dev: bool = False): tui_dir = PROJECT_ROOT / "ui-tui" env = os.environ.copy() - env["HERMES_ROOT"] = os.environ.get("HERMES_ROOT", str(PROJECT_ROOT)) + env["HERMES_PYTHON_SRC_ROOT"] = os.environ.get("HERMES_PYTHON_SRC_ROOT", str(PROJECT_ROOT)) + env.setdefault("HERMES_CWD", os.getcwd()) if resume_session_id: env["HERMES_TUI_RESUME"] = resume_session_id diff --git a/nix/tui.nix b/nix/tui.nix index a077dc2d4..93973019f 100644 --- a/nix/tui.nix +++ b/nix/tui.nix @@ -4,7 +4,7 @@ let src = ../ui-tui; npmDeps = pkgs.fetchNpmDeps { inherit src; - hash = "sha256-QQixyLmsn5+Y1daHifzDaNQbaoZjm+ezGrGoLXcc95U="; + hash = "sha256-+EhRRuvXi5hJupseHblF+MGxs84ijRMIH4qt5+2yYi8="; }; packageJson = builtins.fromJSON (builtins.readFile (src + "/package.json")); @@ -28,6 +28,10 @@ pkgs.buildNpmPackage { # runtime node_modules cp -r node_modules $out/lib/hermes-tui/node_modules + # @hermes/ink is a file: dependency, we need to copy it in fr + rm -f $out/lib/hermes-tui/node_modules/@hermes/ink + cp -r packages/hermes-ink $out/lib/hermes-tui/node_modules/@hermes/ink + # package.json needed for "type": "module" resolution cp package.json $out/lib/hermes-tui/ @@ -36,7 +40,7 @@ pkgs.buildNpmPackage { nativeBuildInputs = [ (pkgs.writeShellScriptBin "update_tui_lockfile" '' - set -euo pipefail + set -euox pipefail # get root of repo REPO_ROOT=$(git rev-parse --show-toplevel) @@ -45,7 +49,7 @@ pkgs.buildNpmPackage { cd "$REPO_ROOT/ui-tui" rm -rf node_modules/ npm cache clean --force - npm install + CI=true npm install # ci env var to suppress annoying unicode install banner lag ${pkgs.lib.getExe npm-lockfile-fix} ./package-lock.json NIX_FILE="$REPO_ROOT/nix/tui.nix" @@ -65,7 +69,7 @@ pkgs.buildNpmPackage { STAMP_VALUE="${npmLockHash}" if [ ! -f "$STAMP" ] || [ "$(cat "$STAMP")" != "$STAMP_VALUE" ]; then echo "hermes-tui: installing npm dependencies..." - cd ui-tui && npm install --silent --no-fund --no-audit 2>/dev/null && cd .. + cd ui-tui && CI=true npm install --silent --no-fund --no-audit 2>/dev/null && cd .. mkdir -p .nix-stamps echo "$STAMP_VALUE" > "$STAMP" fi diff --git a/ui-tui/src/gatewayClient.ts b/ui-tui/src/gatewayClient.ts index 5a3eac5e8..fb26d9b5e 100644 --- a/ui-tui/src/gatewayClient.ts +++ b/ui-tui/src/gatewayClient.ts @@ -24,10 +24,10 @@ export class GatewayClient extends EventEmitter { private pending = new Map() start() { - const root = process.env.HERMES_ROOT ?? resolve(import.meta.dirname, '../../') + const root = process.env.HERMES_PYTHON_SRC_ROOT ?? resolve(import.meta.dirname, '../../') this.proc = spawn(process.env.HERMES_PYTHON ?? resolve(root, 'venv/bin/python'), ['-m', 'tui_gateway.entry'], { - cwd: root, + cwd: process.env.HERMES_CWD || root, stdio: ['pipe', 'pipe', 'pipe'] })