nix fixes

This commit is contained in:
Ari Lotter 2026-04-11 15:58:22 -04:00
parent a1d2a0c0fd
commit 29721fcc58
3 changed files with 20 additions and 12 deletions

View file

@ -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

View file

@ -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

View file

@ -24,10 +24,10 @@ export class GatewayClient extends EventEmitter {
private pending = new Map<string, Pending>()
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']
})