You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Clicking "Update" in the dashboard inside a Docker container now returns structured guidance instead of surfacing the CLI guard's SystemExit as a generic error. The endpoint detects Docker installs before spawning hermes update.
Salvage of #34831 by @donovan-yohan, cherry-picked onto current main with authorship preserved.
Changes
hermes_cli/web_server.py: POST /api/hermes/update calls detect_install_method(); on Docker it records a synthetic completed action (_ACTION_RESULTS) with the existing format_docker_update_message() guidance and returns {ok: false, error: "docker_update_unsupported", message, update_command} (HTTP 200) without spawning. Non-Docker installs spawn as before. /api/actions/hermes-update/status reads the synthetic result.
web/src/lib/api.ts: ActionResponse.pid is now number | null, plus optional error/message/update_command.
scripts/run_tests.sh tests/hermes_cli/test_web_server.py — 152 passed (incl. the 3 PtyWebSocket tests the original PR flagged as failing in its ad-hoc venv — env-only, pass here)
E2E through the real FastAPI endpoint with a TestClient: Docker install → 200, ok:false, docker_update_unsupported, no spawn, guidance carries docker pull nousresearch/hermes-agent:latest, action log records it, status exit_code:1; git install → spawns hermes update.
@benbarclay tagging you for the container/s6 surface — this seeds root gateway_state.json to running when PID 1's argv is the legacy gateway run and no state file exists, so tini→s6 upgrades auto-start the gateway again. Respects --no-supervise and HERMES_GATEWAY_NO_SUPERVISE; explicit stopped state is preserved.
teknium1
changed the title
fix(docker): seed s6 gateway state for legacy gateway run containers
fix(dashboard): guard update endpoint in Docker with structured guidance
May 30, 2026
@benbarclay courtesy ping for the Docker-detection behavior — the dashboard update endpoint now branches on detect_install_method() == docker to return structured guidance instead of spawning hermes update (which exits non-zero in a container and rendered as a raw error). No container/s6 boot changes here, just the install-method gate.
Superseded by #36263 (merged in c1a531d), a rebased salvage of the original #34831 (@donovan-yohan) with the merge conflict resolved. The dashboard Docker-update guard is now on main.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
area/dockerDocker image, Compose, packagingcomp/cliCLI entry point, hermes_cli/, setup wizardP2Medium — degraded but workaround existstype/bugSomething isn't working
4 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Clicking "Update" in the dashboard inside a Docker container now returns structured guidance instead of surfacing the CLI guard's
SystemExitas a generic error. The endpoint detects Docker installs before spawninghermes update.Salvage of #34831 by @donovan-yohan, cherry-picked onto current main with authorship preserved.
Changes
hermes_cli/web_server.py:POST /api/hermes/updatecallsdetect_install_method(); on Docker it records a synthetic completed action (_ACTION_RESULTS) with the existingformat_docker_update_message()guidance and returns{ok: false, error: "docker_update_unsupported", message, update_command}(HTTP 200) without spawning. Non-Docker installs spawn as before./api/actions/hermes-update/statusreads the synthetic result.web/src/lib/api.ts:ActionResponse.pidis nownumber | null, plus optionalerror/message/update_command.tests/hermes_cli/test_web_server.py: Docker-guidance-without-spawn + non-Docker-spawns regression coverage.Validation
scripts/run_tests.sh tests/hermes_cli/test_web_server.py— 152 passed (incl. the 3 PtyWebSocket tests the original PR flagged as failing in its ad-hoc venv — env-only, pass here)TestClient: Docker install → 200,ok:false,docker_update_unsupported, no spawn, guidance carriesdocker pull nousresearch/hermes-agent:latest, action log records it, statusexit_code:1; git install → spawnshermes update.Closes #34347
Infographic