From 23bca0d95554a96a7b6ecf7977dd03aa6456d256 Mon Sep 17 00:00:00 2001 From: Nathan Esquenazi Date: Tue, 5 May 2026 22:09:08 +0000 Subject: [PATCH] =?UTF-8?q?chore(release):=20stamp=20v0.51.6=20=E2=80=94?= =?UTF-8?q?=205-PR=20full-sweep=20batch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 PRs (1 surface addition, 4 fixes): - #1717 preserve imported session lineage (@ai-ag2026) - #1718 preserve Activity count across focus changes (@Michaelyklam, closes #1715) - #1719 elapsed timer in compact activity (@Michaelyklam, closes #1716) - #1720 backend tool snippet cap raised to 4000 (@Michaelyklam, closes #1714) - #1722 suppress stale preserved task lists (@ai-ag2026) Tests: 4527 → 4537 (+10). Opus: SHIP, 6/6 verification clean. Co-authored-by: ai-ag2026 Co-authored-by: Michael Lam --- CHANGELOG.md | 36 ++++++++++++++++++++++++++++++++++++ ROADMAP.md | 2 +- TESTING.md | 4 ++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 083760a5..916b0d29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # Hermes Web UI -- Changelog +## [v0.51.6] — 2026-05-05 — 5-PR full-sweep batch + +### Added + +- **PR #1719** by @Michaelyklam — Show active elapsed time in compact activity (closes #1716). Adds an in-progress elapsed counter while the agent is still working, complementing the already-shipped post-completion duration. Backend `/api/chat/start` now returns `pending_started_at` timestamp; UI uses that as the durable source of truth (instead of a browser-local timer that resets on rerender/reconnect). The compact Activity-row timer settles back to the existing post-completion duration display when the turn finishes. Cleanup timer paths attached to `setBusy(false)`, `clearLiveToolCards()`, `removeThinking()` so the counter stops on every terminal path (turn ends, session switch, error). + +### Fixed + +- **PR #1717** by @ai-ag2026 — Preserve imported session lineage visibility. Three independent fixes for the CLI/messaging session import path: (a) preserve `parent_session_id` when importing CLI/messaging sessions into WebUI sidecars (lineage was being dropped); (b) avoid shrinking sidebar `message_count` when CLI metadata has fewer messages than a repaired/aggregate sidecar (the sidebar was reverting to the shorter count); (c) prefer the longer WebUI sidecar transcript for messaging `/api/session` responses when it contains recovered visible history. 4 new regression tests cover lineage import, read-only imports, sidebar counts, and the recovered-sidecar transcript-selection path. +- **PR #1718** by @Michaelyklam — Preserve Activity count across chat focus changes (closes #1715). Root cause: `loadSession()` restored `S.toolCalls` from the per-session `INFLIGHT` cache, then replayed those tools through `appendLiveToolCard()` BEFORE restoring `S.activeStreamId`. `appendLiveToolCard()` intentionally no-ops without `S.activeStreamId`, so the replayed tools were dropped from the compact Activity group after focus changed. Fix: restore `S.activeStreamId` BEFORE the tool replay loop. Source-level regression assertion pins the new ordering. +- **PR #1720** by @Michaelyklam — Fix backend tool snippet cap for "Show more" (closes #1714). Frontend already had logic to preview long tool snippets at ~800 chars and reveal the rest with "Show more", but the backend was truncating persisted tool snippets to 200 chars — so the frontend threshold could never be reached. Raises the persisted snippet cap from 200 → 4000 chars (conservative; medium tool outputs can use the existing affordance, huge outputs are still bounded so session JSON doesn't balloon). Per-issue maintainer-confirmed direction. +- **PR #1722** by @ai-ag2026 — Suppress stale preserved task lists. After context compaction or reload, the UI was re-rendering the most recent preserved compression task-list card from history even after the actual todo state had moved on (all items completed/cancelled). Stale tasks reappeared as if still pending. Fix: only treat `pending` and `in_progress` todos as "active" when deciding whether to keep the preserved task list visible. Regression test covers the stale-preserved-task-list suppression path. Handles the `latestTodos === null` fallback correctly (no fresh todo tool message found → keep showing the preserved card, original behavior). + +### Tests + +4527 → **4537 passing** (+10 regression tests across the 5 PRs). 0 regressions. Full suite ~149s. + +### Pre-release verification + +- Stage-303: 5 PRs merged with zero conflicts (each rebased clean against current master). Zero stage-applied edits. +- All JS files syntax-clean (`node -c static/{messages,sessions,ui}.js`). +- All Python files syntax-clean (py_compile on every changed file). +- Live browser walkthrough on port 8789: + - PR #1718 ordering fix: `S.activeStreamId` is set BEFORE `appendLiveToolCard()` replay (CORRECT-ORDER verified in source). + - PR #1719 `pending_started_at` flows through to messages/UI; elapsed timer code present. + - PR #1722 todo state filter present in source. + - PR #1717 sidebar module helpers present. + - Sidebar scroll holds at 200 (carry-over fix from v0.51.2 preserved). + - System health card from v0.51.5 still working in Insights (CPU 15%, RAM 48.3%, disk 33.9%). +- Opus advisor: SHIP, 6/6 verification clean, 0 MUST-FIX, 0 SHOULD-FIX. Two non-blocking observations: + - #1717 "longer sidecar wins" heuristic won't honor explicit CLI-side message deletions (low likelihood for messaging sessions; documented). + - #1719 elapsed timer is client-clock-relative; gross browser clock drift will distort live counter (cosmetic; follow-up could send server-clock anchor). + +Closes #1714, #1715, #1716. + + ## [v0.51.5] — 2026-05-05 — 4-PR full-sweep batch ### Added diff --git a/ROADMAP.md b/ROADMAP.md index a3b09304..82f00296 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ > Web companion to the Hermes Agent CLI. Same workflows, browser-native. > -> Last updated: v0.51.5 (May 5, 2026) — 4527 tests collected +> Last updated: v0.51.6 (May 5, 2026) — 4537 tests collected > Test source: `pytest tests/ --collect-only -q` > Per-version detail: see [CHANGELOG.md](./CHANGELOG.md) diff --git a/TESTING.md b/TESTING.md index ad3affc9..c13172d6 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1835,8 +1835,8 @@ Bridged CLI sessions: --- -*Last updated: v0.51.5, May 5, 2026* -*Total automated tests collected: 4527* +*Last updated: v0.51.6, May 5, 2026* +*Total automated tests collected: 4537* *Regression gate: tests/test_regressions.py* *Run: pytest tests/ -v --timeout=60* *Source: /*