fix(dashboard): surface Docker update guidance instead of generic failure (#34347)#37085
Merged
Merged
Conversation
…lure (#34347) The dashboard Update button's backend guard (#36263) already returns a structured {ok:false, error:"docker_update_unsupported", message, update_command} envelope (HTTP 200) when running in a Docker install, instead of surfacing a raw SystemExit. But the frontend ignored that envelope: runAction() only branched on a thrown error, so the 200 fell through to the action-status poll, which reported a generic "Action failed (exit 1)" toast and never showed the actual guidance. Now runAction() inspects the update response and, on the docker_update_unsupported case, surfaces the backend's guidance message plus the recommended re-pull command directly (success-styled, since it's actionable guidance — not a crash) without starting the poll. Closes #34347.
agogo233
added a commit
to agogo233/hermes-agent
that referenced
this pull request
Jun 2, 2026
* upstream/main: (30 commits) fix(dashboard): surface Docker update guidance instead of generic failure (NousResearch#34347) (NousResearch#37085) chore(release): map caojiguang@gmail.com in AUTHOR_MAP test(weixin): regression suite for _api_post/_api_get timeout migration fix(weixin): replace aiohttp ClientTimeout with asyncio.wait_for in _api_post/_api_get fix(gateway): recover extract-stripped tool responses on all platforms (NousResearch#29346) fix(gateway): scope final-delivery flags to turn-final segment (NousResearch#29346) docs: add 25 new community user stories to the collage (NousResearch#37048) feat(cli): ranked fuzzy search in the curses model picker feat(cli): add fuzzy search helpers for curses pickers feat: fuzzy search for the model picker (WebUI + TUI) docs: expand quickstart Skills section (NousResearch#37047) test(tools): characterize tool-surface TERMINAL_CWD contract (NousResearch#29265) test(agent): pin whitespace-strip and OSError-propagation in runtime_cwd docs(test): correct None-semantics comment in test_runtime_cwd (discovery not skipped) docs(agent): correct resolve_context_cwd comment (None → caller getcwd fallback, not skip) refactor(prompt): route context-file cwd through runtime_cwd resolver test(prompt): place cwd regression tests in TestEnvironmentHints (drop redundant docker case) fix(prompt): show configured working directory in system prompt (closes NousResearch#24882, NousResearch#24969, NousResearch#27383, NousResearch#29265) test(agent): pin context_cwd isdir-skip asymmetry and tilde expansion feat(agent): add runtime_cwd resolver (single source of truth for working dir) ...
changman
pushed a commit
to changman/hermes-agent
that referenced
this pull request
Jun 10, 2026
…lure (NousResearch#34347) (NousResearch#37085) The dashboard Update button's backend guard (NousResearch#36263) already returns a structured {ok:false, error:"docker_update_unsupported", message, update_command} envelope (HTTP 200) when running in a Docker install, instead of surfacing a raw SystemExit. But the frontend ignored that envelope: runAction() only branched on a thrown error, so the 200 fell through to the action-status poll, which reported a generic "Action failed (exit 1)" toast and never showed the actual guidance. Now runAction() inspects the update response and, on the docker_update_unsupported case, surfaces the backend's guidance message plus the recommended re-pull command directly (success-styled, since it's actionable guidance — not a crash) without starting the poll. Closes NousResearch#34347.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Closes #34347 — the dashboard "Update" button's frontend half.
The backend guard for this landed in #36263:
/api/hermes/updatedetects a Docker install and returns a structured{ok:false, error:"docker_update_unsupported", message, update_command}envelope (HTTP 200) instead of surfacing a rawSystemExit. That fixed the crash, but the frontend never consumed the envelope:runAction()inSystemActions.tsxonly branched on a thrown error, so the 200 response fell through to the action-status poll, which reported a generic"Action failed (exit 1)"toast — the guidance message and re-pull command were only visible if the user dug into the action log.This wires the frontend to inspect the update response: on the
docker_update_unsupportedcase it surfaces the backend's guidancemessageplus the recommendedupdate_commanddirectly (success-styled, since it's actionable guidance rather than a failure) and skips the poll.Verification
tsc --noEmitclean.eslint src/contexts/SystemActions.tsxclean.ok/error/message/update_command) confirmed againsthermes_cli/web_server.py.No new i18n key or UI-library change required: the backend always supplies
messageon this path (a literal fallback covers the defensive??), and the existingsuccess-typed toast is reused.Closes #34347.