github nesquena/hermes-webui v0.51.43
v0.51.43 — Release S (fused sidebar collapse, stealth UX)

latest release: v0.51.44
3 hours ago

v0.51.43 — Release S

Fused community PR — desktop sidebar collapse, stealth UX.

Two community PRs (#1884 by @jasonjcwu, #1924 by @spektro33) targeted the same UX from different angles. This release fuses both into a single feature with no new visible UI affordance: clicking the already-active rail icon (or pressing Cmd/Ctrl+B) collapses the session-list sidebar to maximise the chat area. State persists across reloads, survives bfcache, and announces correctly through screen readers. Users who never click the active rail icon see zero UI change vs. master.

How it works

  • Click the already-active rail icon → collapse / expand.
  • Cmd/Ctrl+B → toggle from anywhere. Suppressed when typing in <input>/<textarea>/contenteditable so text editors keep their bold shortcut.
  • Cross-panel clicks behave exactly as before. No collapse, just panel switch. Programmatic switchPanel(name) calls (commands, deeplinks, internal state changes) preserve master semantics exactly.
  • Mobile (<641px) is unaffected. The sidebar overlay there continues to work as it did.
  • No paint flash on reload. Inline <script> in <head> reads localStorage and sets a root data-attribute before the stylesheet loads.
  • Smooth animation. Slide matches the workspace-panel collapse on the right (.24s cubic-bezier(.22,1,.36,1)).
  • Accessible. aria-expanded on the active rail button mirrors the open/collapsed state.

The behaviour is gated behind one new opts flag on switchPanel: collapse only triggers when opts.fromRailClick && _isDesktopWidth(). Every existing call-site that just calls switchPanel('chat') preserves master behaviour exactly.

Maintainer review caught a real defect

Pre-fix, the JS _isDesktopWidth() guard matched min-width:641px (where the rail itself becomes visible) but the .sidebar-collapsed CSS rules sat in @media(min-width:901px) (copied from the workspace-panel block without thinking). In the 641-900px band — tablet portrait, small laptop windows — clicking the active rail icon would:

  • write .sidebar-collapsed to the DOM
  • set aria-expanded='false'
  • persist localStorage='1'

…but the sidebar would visually stay open at 300px because CSS didn't match the breakpoint. Screen readers would announce "collapsed" for a still-visible sidebar, and a later viewport resize ≥901px would collapse by surprise.

Caught by @nesquena reviewing PR #2054, fixed by hoisting the rules into their own @media(min-width:641px) block, locked by a new regression test (test_css_breakpoint_matches_js_isdesktopwidth) that parses both files at every CI run and asserts the JS / CSS thresholds match.

Test infrastructure (separate commit on the same branch)

While running the suite I caught and fixed two unrelated test-infra issues:

  • AWS_EC2_METADATA_DISABLED=true at conftest module load. botocore's credential chain probes EC2 IMDS by default during agent imports; on VPS hosts where IMDS is rate-limited this turned a 161s run into 600+s. Matches the guard hermes_cli/doctor.py already uses.
  • Credential-strip allowlist expanded from 6 prefixes to 40+. The test_server fixture now strips MEM0, XAI, MISTRAL, OLLAMA, GROQ, AWS, Azure OpenAI, messaging bot tokens, search-engine keys, image-gen keys, GitHub tokens, etc. before spawning the test server.

Tests

5,120 → 5,166 collected, all passing on Python 3.11/3.12/3.13. +46 net new across the 35-test structural suite for sidebar collapse, the CSS-breakpoint regression guard, and small per-locale i18n additions in dependent suites.

Contributors

@jasonjcwu (×1) · @spektro33 (×1) · @nesquena (review fix)

Don't miss a new hermes-webui release

NewReleases is sending notifications on new releases.