github nesquena/hermes-webui v0.51.27
v0.51.27 — Release E1: 4-PR batch

3 hours ago

v0.51.27 — Release E1: 4-PR contributor batch

Theme: Workspace-prefix sentinel hardening (closes the #1913 follow-up filed in v0.51.25) + custom named provider API key resolution + streaming chat scroll-pin retention + Kanban detail scrollable.

Constituent PRs

  • #1916 by @Michaelyklam — Make Kanban detail view scrollable (closes #1915)
  • #1914 by @ai-ag2026 — Keep streaming chat pinned after final render
  • #1918 by @franksong2702 — Fix workspace prefix sentinel handling — [Workspace::v1: ...] format with ] escaping (closes #1913, the follow-up filed in v0.51.25)
  • #1814 by @hualong1009 — Custom named provider API key resolution (resolve_custom_provider_connection() helper for custom:* provider IDs)

Pre-release verification

  • Full pytest under HERMES_HOME isolation: 4884 passed, 11 skipped, 1 xfailed, 2 xpassed, 8 subtests passed in 145.18s on Python 3.11.
  • Browser API harness (port 8789): all 11 endpoints + 20 QA tests PASS.
  • node -c on static/messages.js, static/ui.js: clean.
  • Stage diff: 14 files, +382/-31.
  • Opus advisor pass on stage-322: identified 2 BLOCKERS in PR #1918, both absorbed in-stage (per absorb-in-release default), then SHIP. No MUST-FIX remaining.
  • v0.51.26 fixes verified preserved across rebase.
  • Pre-stamp re-fetch of all 4 PR heads: no contributor force-pushes during the Opus window.

Opus-absorbed fixes

  1. #1918 missed second injection site at api/routes.py:_handle_chat_sync (POST /api/chat). Pre-fix, this sync chat path would inject legacy [Workspace: ...] while the streaming path injected [Workspace::v1: ...] — leaking the prefix in user bubbles on the sync surface. Fixed: routed through _workspace_context_prefix(...); updated surrounding system-prompt strings to v1 form.

  2. #1918 JS legacy fallback in static/ui.js:_stripWorkspaceDisplayPrefix. Pre-fix, existing on-disk transcripts saved before the v1 migration would render the literal [Workspace: /path] prefix in user bubbles after upgrade. Fixed: added legacy-regex fallthrough when v1 strip doesn't match, mirroring the Python include_legacy=True branch. Updated test that previously asserted "legacy regex absent" to assert it IS present.

Test count

4890 → 4898 collected, 4884 passing (+8 net new tests).

Closes

Closes #1814, #1914, #1916, #1918.

Don't miss a new hermes-webui release

NewReleases is sending notifications on new releases.