From b8eb7c5fedd248e189fe2bc22aa47cc721564d88 Mon Sep 17 00:00:00 2001 From: sai-samarth Date: Tue, 17 Mar 2026 15:11:28 +0000 Subject: [PATCH] fix(gateway): include resolved node path in systemd unit --- hermes_cli/gateway.py | 11 +++++++++-- tests/hermes_cli/test_gateway_service.py | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/hermes_cli/gateway.py b/hermes_cli/gateway.py index 2399436c4..256db01fb 100644 --- a/hermes_cli/gateway.py +++ b/hermes_cli/gateway.py @@ -6,6 +6,7 @@ Handles: hermes gateway [run|start|stop|restart|status|install|uninstall|setup] import asyncio import os +import shutil import signal import subprocess import sys @@ -377,8 +378,14 @@ def generate_systemd_unit(system: bool = False, run_as_user: str | None = None) venv_bin = str(PROJECT_ROOT / "venv" / "bin") node_bin = str(PROJECT_ROOT / "node_modules" / ".bin") - # Build a PATH that includes the venv, node_modules, and standard system dirs - sane_path = f"{venv_bin}:{node_bin}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + path_entries = [venv_bin, node_bin] + resolved_node = shutil.which("node") + if resolved_node: + resolved_node_dir = str(Path(resolved_node).resolve().parent) + if resolved_node_dir not in path_entries: + path_entries.append(resolved_node_dir) + path_entries.extend(["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin"]) + sane_path = ":".join(path_entries) hermes_home = str(Path(os.getenv("HERMES_HOME", Path.home() / ".hermes")).resolve()) diff --git a/tests/hermes_cli/test_gateway_service.py b/tests/hermes_cli/test_gateway_service.py index ffd381788..809587b86 100644 --- a/tests/hermes_cli/test_gateway_service.py +++ b/tests/hermes_cli/test_gateway_service.py @@ -61,6 +61,13 @@ class TestGeneratedSystemdUnits: assert "ExecStop=" not in unit assert "TimeoutStopSec=60" in unit + def test_user_unit_includes_resolved_node_directory_in_path(self, monkeypatch): + monkeypatch.setattr(gateway_cli.shutil, "which", lambda cmd: "/home/test/.nvm/versions/node/v24.14.0/bin/node" if cmd == "node" else None) + + unit = gateway_cli.generate_systemd_unit(system=False) + + assert "/home/test/.nvm/versions/node/v24.14.0/bin" in unit + def test_system_unit_avoids_recursive_execstop_and_uses_extended_stop_timeout(self): unit = gateway_cli.generate_systemd_unit(system=True)