github nesquena/hermes-webui v0.50.290
v0.50.290 — 5-PR batch (login cache + sidebar UX + workspace dropdown polish)

latest release: v0.50.291
6 hours ago

v0.50.290 — 5-PR batch (login cache + sidebar UX + workspace dropdown polish)

5 PRs. 4 from @Michaelyklam (login SW cache, compact hot-apply, first-turn visibility, turn duration display) + maintainer-pickup of @JKJameson's workspace dropdown PR.

What's fixed

#1586 by @Michaelyklam — Login asset SW cache exemption

Service worker now bypasses /login and /static/login.js (network-only); navigation requests are network-first; cache-first scoped to explicit SHELL_ASSETS allowlist. static/login.js versioned via ?v=<WEBUI_VERSION>. Closes the auth-stuck-in-cache class — a stale cached login.js was making valid passwords fail until manual cache clear (especially confusing for PWA installs). Two new test files lock the SW behavior including a fetch_idx < cache_idx ordering check.

#1590 by @Michaelyklam — Hot-apply compact tool activity (6 LOC)

Toggling Compact tool activity in Settings now hot-applies: updates window._simplifiedToolCalling, clears render cache, re-renders messages. No browser refresh needed.

#1591 by @Michaelyklam — First-turn sidebar visibility

First user message now promotes the session into the sidebar immediately, before the model produces an assistant response. Three optimistic-upsert passes through send() plus Session.compact() exposing has_pending_user_message: bool so the empty-Untitled filter respects pending sessions. Users can switch into a just-started conversation and inspect live tool calls before the agent has even responded.

#1592 by @Michaelyklam — Turn duration display ("Done in 1m 12s")

Backend captures pending_started_at, calculates duration, persists as _turnDuration on the assistant message dict (so reloads keep the display), includes in streaming done SSE payload. Frontend renders as compact Activity row chip and expanded-mode footer chip.

#1464 by @JKJameson — Workspace dropdown sort+search+chip-sync (MAINTAINER-AUGMENTED)

Workspace chip syncs immediately on chat switch via syncTopbar() after S.session = data.session (mirrors model-chip handling). Search input filters dropdown by name or path in real-time. Alphabetical sort frontend-only via localeCompare — backend load_workspaces() preserves user-defined order so drag-to-reorder #492 keeps working. Class-based CSS, 9-locale i18n parity for ws_search_placeholder + ws_no_results.

Maintainer in-stage actions: rebased onto current master (was 124 commits behind v0.50.275); flipped inverted ternary on panels.js:1683 (visible?'':'none'visible?'none':'') — contributor's own PR-thread screenshot demonstrated the bug live (rendered "No workspaces found" alongside valid filtered results); added tests/test_issue1464_workspace_dropdown_filter.py to lock the visibility relationship.

Maintainer-side test fixes in stage (auto-rebase + auto-fix policy)

Two stale source-string assertions broken by #1591's structural changes — both real test-side fixes, no production code modified:

  • tests/test_465_session_branching.py::test_session_compact_includes_parent — widened search window 1500→3000 chars after def compact(self,.
  • tests/test_regressions.py::test_send_uses_session_model_as_authoritative_source — anchored on api('/api/chat/start' instead of /api/chat/start.

Tests

4094 → 4111 passing (+17 net). 0 regressions. Full suite in 107s.

Pre-release verification

  • Browser API sanity: 11/11 endpoints verified.
  • All modified JS files pass node -c.
  • Stage diff scanned for merge-conflict markers: none.
  • Live UX verification on test server (#1464): seeded 10-workspace test environment, vision-confirmed dropdown sort + search filter + zero-match noResults rendering.
  • Opus advisor: SHIP AS-IS — no MUST-FIX. All 5 verification questions cleared.

Known follow-up (deferred, non-blocking)

  • #1464 mobile (390px) screenshot review — desktop verified live; mobile responsive verification deferred to maintainer @aronprins's hands-on review.
  • _pending_started_at == 0 falsy-guard tightening considered for in-release absorption but reverted — the contributor's regression test pins the explicit is not None form. Filed as follow-up for separate consideration.

Thanks to @Michaelyklam for the 4-PR contributor burst and to @JKJameson for the workspace dropdown design.

Full changelog: https://github.com/nesquena/hermes-webui/blob/master/CHANGELOG.md

Don't miss a new hermes-webui release

NewReleases is sending notifications on new releases.