Skip to content

fix(dashboard): surface Docker update guidance instead of generic failure (#34347)#37085

Merged
benbarclay merged 1 commit into
mainfrom
fix/dashboard-docker-update-guidance-34347
Jun 2, 2026
Merged

fix(dashboard): surface Docker update guidance instead of generic failure (#34347)#37085
benbarclay merged 1 commit into
mainfrom
fix/dashboard-docker-update-guidance-34347

Conversation

@benbarclay

Copy link
Copy Markdown
Collaborator

Summary

Closes #34347 — the dashboard "Update" button's frontend half.

The backend guard for this landed in #36263: /api/hermes/update detects a Docker install and returns a structured {ok:false, error:"docker_update_unsupported", message, update_command} envelope (HTTP 200) instead of surfacing a raw SystemExit. That fixed the crash, but the frontend never consumed the envelope: runAction() in SystemActions.tsx only 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_unsupported case it surfaces the backend's guidance message plus the recommended update_command directly (success-styled, since it's actionable guidance rather than a failure) and skips the poll.

Verification

  • tsc --noEmit clean.
  • eslint src/contexts/SystemActions.tsx clean.
  • Frontend matches the backend contract (ok / error / message / update_command) confirmed against hermes_cli/web_server.py.

No new i18n key or UI-library change required: the backend always supplies message on this path (a literal fallback covers the defensive ??), and the existing success-typed toast is reused.

Closes #34347.

…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.
@benbarclay benbarclay merged commit 4f7fe9b into main Jun 2, 2026
27 of 28 checks passed
@benbarclay benbarclay deleted the fix/dashboard-docker-update-guidance-34347 branch June 2, 2026 00:36
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WebUI "Update" button surfaces raw SystemExit when run in Docker context

1 participant