Hermes Agent and ai-ag2026
01c1239fc9
refactor(sessions): simplify attention indicator to a color-coded dot
...
Per maintainer UX direction: drop the text badge pill ("APPROVAL" /
"N QUESTIONS") in favor of color-coding the existing right-side status dot
plus the colored left rail. Red dot (--error) for pending approvals, amber
dot (--warning) for pending clarifies; theme-driven, visible even when the
session is not streaming/unread. Approval dot gently pulses (disabled under
prefers-reduced-motion). Quieter and consistent with the existing pin/unread
dot family — the row no longer needs to truncate its title to fit a pill.
Updated test_session_attention_badges to assert the dot classes
(is-attention-approval/clarify) instead of the removed badge element/styles.
Co-authored-by: ai-ag2026 <261867348+ai-ag2026@users.noreply.github.com >
2026-05-30 19:54:51 +00:00
Hermes Agent and wind-chant
06842f6e9f
fix(insights): exclude source='webui' from CLI session pass + add tests
...
The new CLI/gateway insights pass counted ALL state.db sessions, but
WebUI-native sessions are persisted to state.db with source='webui' AND
already counted from the sidecar _index.json first pass — double-counting
them in totals, model breakdown, and daily charts. Add
`AND COALESCE(source, '') != 'webui'` so only CLI/gateway/cron/tui rows are
added by the second pass.
Adds regression tests proving (a) CLI + Telegram sessions appear in totals
and (b) a webui-source state.db row is not double-counted against its
_index.json entry.
Co-authored-by: wind-chant <wind-chant@users.noreply.github.com >
2026-05-30 18:58:20 +00:00
Hermes Agent
9d10390852
Stamp CHANGELOG for v0.51.107 (Release CE / stage-400 / 8-PR batch)
2026-05-21 23:13:31 +00:00
Hermes Agent and ai-ag2026
0718770fe1
Stage 400: PR #2719 — fix: apply release update target (clear sessionStorage check-once stamp + force banner re-evaluation on user click)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:56 +00:00
Hermes Agent and ai-ag2026
b14aae4ee5
Stage 400: PR #2717 — fix: surface update check fetch errors instead of failing silently
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:54 +00:00
Hermes Agent and victorwhale
d1f09a9e9b
Stage 400: PR #2722 — i18n: complete French (fr) locale (+93 missing keys, 88.8% → 96.7% coverage)
...
Co-authored-by: victorwhale <victorwhale@users.noreply.github.com >
2026-05-21 22:59:51 +00:00
Hermes Agent and starship-s
80356c3a47
Stage 400: PR #2709 — fix(model): prefer profile default model on fresh boot when localStorage has no persisted pick
...
Co-authored-by: starship-s <starship-s@users.noreply.github.com >
2026-05-21 22:59:48 +00:00
Hermes Agent and Michaelyklam
cc36711b9f
Stage 400: PR #2710 — fix: render streamed math incrementally (no flash when delta completes a KaTeX expression)
...
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 22:59:46 +00:00
Hermes Agent and ai-ag2026
654f62e0bd
Stage 400: PR #2721 — fix(session): treat active runs as live during repair (skip restart-stale prune for sessions with live streams)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:43 +00:00
Hermes Agent and ai-ag2026
0fae9cbdf1
Stage 400: PR #2723 — fix(chat): dedupe uploaded-file optimistic user turns
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:40 +00:00
Hermes Agent and eslicarrillo
4f3eb9f7f8
Stage 400: PR #2718 — fix: rename _pinnedSessionsLimit() to _getPinnedSessionsLimit() (follow-up to v0.51.105 #2700 , matches sessions.js getter convention)
...
Co-authored-by: eslicarrillo <eslicarrillo@users.noreply.github.com >
2026-05-21 22:59:37 +00:00
Hermes Agent
af76e3ec0b
Stamp CHANGELOG for v0.51.106 (Release CD / stage-399 / 3-PR batch)
2026-05-21 17:57:22 +00:00
Hermes Agent and wirtsi
3874781a57
Stage 399: PR #2704 — fix(streaming): prevent exponential empty _partial accumulation across reasoning-only cancellations
...
Co-authored-by: wirtsi <wirtsi@users.noreply.github.com >
2026-05-21 17:56:46 +00:00
Hermes Agent and AlexeyDsov
7152da2756
Stage 399: PR #2705 — fix(api): dedupe replayed context_messages so the agent doesn't see duplicates (follow-up to v0.51.96 #2620 )
...
Co-authored-by: AlexeyDsov <AlexeyDsov@users.noreply.github.com >
2026-05-21 17:56:43 +00:00
Hermes Agent and ai-ag2026
4db8df5e29
Stage 399: PR #2686 — fix(session): dedupe restamped state.db replay rows in /api/session display merge
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:56:40 +00:00
Hermes Agent
37bc59c99a
Stamp CHANGELOG for v0.51.105 (Release CC / stage-398 / 4-PR batch)
2026-05-21 17:49:34 +00:00
Hermes Agent and ai-ag2026
905b3eba5e
Stage 398: PR #2700 — feat: make pinned session limit configurable (builds on shipped #2614 3-cap)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:43:56 +00:00
Hermes Agent and Michaelyklam
f563d37244
Stage 398: PR #2696 — feat(runtime): add runner-local adapter selection (RuntimeAdapter slice 4c, feature-flagged)
...
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:54 +00:00
Hermes Agent and Michaelyklam
6864739e55
Stage 398: PR #2703 — fix: detect agent version from copied source (Docker two-container System panel) ( closes #2691 )
...
Closes #2691
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:51 +00:00
Hermes Agent and Michaelyklam
7d3013245a
Stage 398: PR #2687 — feat: hide suggestions preference ( closes #2679 )
...
Closes #2679
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:48 +00:00
Hermes Agent
e6d51c2c48
Stamp CHANGELOG for v0.51.104 (Release CB / stage-397 / 9-PR batch)
2026-05-21 17:37:47 +00:00
Hermes Agent and ai-ag2026
8e1ac89baa
Stage 397: PR #2692 — fix(ui): invalidate transcript cache on same-count content changes
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:37 +00:00
Hermes Agent and ai-ag2026
e2338f696f
Stage 397: PR #2688 — fix: resync virtualized sidebar after scroll clamp
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:36 +00:00
Hermes Agent and AJV20
d5dcd60981
Stage 397: PR #2674 — fix: new-chat default model provider sync when model id matches but provider differs
...
Co-authored-by: AJV20 <AJV20@users.noreply.github.com >
2026-05-21 17:14:34 +00:00
Hermes Agent and ai-ag2026
3dd2ace4e1
Stage 397: PR #2689 — fix(chat): preserve inflight send state during start race
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:33 +00:00
Hermes Agent and AJV20
12a92dd50a
Stage 397: PR #2671 — fix: SSE reconnect jitter + cron run row inline expansion
...
Closes #2629
Closes #2661
Co-authored-by: AJV20 <AJV20@users.noreply.github.com >
2026-05-21 17:13:59 +00:00
Hermes Agent and ai-ag2026
92f1896754
Stage 397: PR #2684 — fix: repair stale Codex OpenAI slash-qualified model state
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:13:56 +00:00
Hermes Agent and dobby-d-elf
345762cf70
Stage 397: PR #2706 — fix: tablet hardware keyboard Enter sends (treat iPad with attached keyboard like desktop)
...
Co-authored-by: dobby-d-elf <dobby-d-elf@users.noreply.github.com >
2026-05-21 17:13:52 +00:00
Hermes Agent and jasonjcwu
958762bcfe
Stage 397: PR #2701 — fix: geist-contrast skin composer UI improvements (light-mode text, scrollbar, send button color)
...
Co-authored-by: jasonjcwu <jasonjcwu@users.noreply.github.com >
2026-05-21 17:13:49 +00:00
Hermes Agent and laiaman
2752e23b84
Stage 397: PR #2690 — i18n: correct zh-CN/zh-TW cron_status_active translations (运行中→已启用 / 活躍中→已啟用)
...
Co-authored-by: laiaman <laiaman@users.noreply.github.com >
2026-05-21 17:13:46 +00:00
Hermes Agent and ai-ag2026
a39ec45b9f
fix(kanban): protect dispatcher contract — reject raw status='running' PATCH
...
The PATCH /api/kanban/tasks/:id endpoint allowed any status-to-any-status
transition for the non-claim/complete/block/archive set via raw
`UPDATE tasks SET status = ?`. This let UI users (or any client) flip a
task to 'running' without going through kb.claim_task(), bypassing
claim_lock + claim_expires + started_at + worker_pid. The dispatcher
treats such a phantom-claimed task as orphaned and may reclaim, hide, or
double-dispatch it.
Match the agent dashboard plugin's contract
(plugins/kanban/dashboard/plugin_api.py update_task):
- status='running' via PATCH → ValueError (HTTP 400)
- status='ready' from currently-blocked → kb.unblock_task() (fires
'unblocked' event)
- status='ready' from anything else, plus status in {'todo', 'triage'}
→ new _set_status_direct() helper that nulls claim fields when leaving
'running', closes any active run with outcome='reclaimed', and
appends a 'status' event row to task_events
- status='done', 'blocked', 'archived' → unchanged (already structured)
Frontend changes:
- Drop 'running' from the .kanban-status-actions button row in the task
detail pane (clicking it would always 400 anyway).
- allowKanbanDrop() refuses the 'running' column as a drop target with
dropEffect='none' so users see immediate visual feedback that the
dispatcher/claim path owns running.
Tests added (3, all passing):
- test_patch_status_running_is_rejected_to_protect_dispatcher_contract
- test_patch_status_done_to_running_is_rejected
- test_patch_status_blocked_to_ready_routes_through_unblock_task
Existing 12 tests still pass.
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-04 23:06:42 +00:00
Hermes Agent
3005bfc491
chore(release): stamp v0.50.297 — 3-PR batch + Opus pass + 2 follow-ups absorbed
...
Constituent PRs:
#1659 by @bergeouss — Docker readonly false-positive (closes #1658 , fixes v0.50.295 regression)
#1653 by @nesquena — OAuth cancel race fix (follow-up to v0.50.296 #1652 )
#1657 by @Michaelyklam — health diagnostics + watchdog hardening (refs #1458 Bug #3 )
Opus advisor SHIP verdict on stage-297. Two follow-ups absorbed in-release:
- _deep_health_checks(stream_check=...) reuses pre-computed lock probe
- _handle_request_noblock docstring documents single-thread safety
PR #1656 closed as superseded by #1657 (same author, both target #1458 ,
#1657 is functional superset).
4284 → 4288 tests passing (+4).
2026-05-04 22:50:57 +00:00
Hermes Agent
db54dc594e
chore(release): stamp v0.50.296 — 3-PR batch + Opus pass + 2 follow-ups absorbed
...
Constituent PRs (all by @Michaelyklam):
#1640 — show TPS in assistant message headers (closes #1617 ) — Aaron UX APPROVED
#1648 — session save mode config (closes #1406 )
#1650 — Codex OAuth onboarding flow (refs #1362 )
Opus advisor SHIP verdict on stage-296. 14-question audit passed including
focused OAuth security review on #1650 . Two minor follow-ups absorbed:
- _get_active_hermes_home() exception fallback now logs warning
- Codex credential pool find-loop accepts both legacy and current source values
#1640 has @aronprins UX gate APPROVED (default-off TPS toggle in Preferences).
#1650 ships first in-app OAuth flow — server-owned device-code lifecycle,
profile-scoped credential storage, atomic chmod-before-rename writes.
4255 → 4284 tests passing (+29).
2026-05-04 21:38:26 +00:00
Hermes Agent
9aad249e5a
chore(release): stamp v0.50.295 — 3-PR batch + Opus pass
...
Constituent PRs:
#1637 by @Michaelyklam — protect raw pre from glued-bold lift (closes #1451 )
#1639 by @bergeouss — macOS auto-scroll race + custom:* provider list (closes #1360 , #1619 )
#1642 by @nesquena-hermes — YAML/JSON/diff code block newlines (closes #1618 , #1463 )
Opus advisor SHIP verdict on stage-295. One observation absorbed:
- api/config.py:2533 dead-code comment per Opus (defensive belt-and-braces
for #1619 fallback; load-bearing fix is in routes.py /api/models/live)
PR #1641 (Michaelyklam parallel-discovery duplicate of #1642 ) closed as
superseded; UI media adopted with co-author trailer.
4245 → 4255 tests passing (+10).
2026-05-04 18:37:52 +00:00
Hermes Agent and Michael Lam
87f7b76984
docs(pr-media): add before/after PNGs for #1618 fix (from @Michaelyklam #1641 )
...
Adopt the UI media from @Michaelyklam's parallel-discovery PR #1641 which
shipped the same one-character regex relax fix for #1618 . PR #1641 is
being closed as superseded by #1642 (which carries nesquena APPROVED +
322 LOC test suite); preserving Michael's UI evidence here so the visual
proof of the fix lives in-tree alongside the canonical PR.
Co-authored-by: Michael Lam <Michaelyklam1@gmail.com >
2026-05-04 18:25:46 +00:00
Hermes Agent
326c7d0daf
chore(release): stamp v0.50.294 — 3-PR batch + Opus pass
...
Constituent PRs:
#1631 by @nesquena-hermes — streaming stability trio (closes #1623 , #1624 , #1625 )
#1635 by @bergeouss — session list race + readonly fs guard (closes #1430 , #1470 )
#1636 by @nesquena-hermes — models cache version stamp (closes #1633 )
Opus advisor SHIP verdict on stage-294 (combined diff). All 9 verification
questions cleared. Two #1636 minor observations absorbed in-release:
- DEBUG logger calls in _is_loadable_disk_cache when rejecting
- Docstring clarification on string-vs-semver and schema-version axis
#1631 in-PR Opus pass already absorbed: rate-limited telemetry,
expanded _LOCAL_SERVER_PROVIDERS, RFC1918 CHANGELOG callout.
4180 → 4245 tests passing (+65).
2026-05-04 17:23:32 +00:00
Hermes Agent
f3e066b53c
chore(release): stamp v0.50.293 — 3-PR batch + 2 Opus follow-ups absorbed
...
Constituent PRs:
#1627 by @franksong2702 — show Hermes Agent version (closes #1606 )
#1629 by @nesquena-hermes — profile isolation trio (closes #1611 , #1612 , #1614 )
#1630 by @Michaelyklam — provider config cleanup regression test (#1597 follow-up)
Opus advisor SHIP verdict + 2 SHOULD-FIX absorbed in-release:
- load_projects() re-reads from disk inside lock to close migration startup race
- _detect_agent_version() uses --dirty for symmetry with _detect_webui_version()
4142 → 4180 tests passing.
2026-05-04 16:33:57 +00:00
Hermes Agent
1549a10510
chore(release): stamp v0.50.292 — 12-PR batch + Opus follow-ups absorbed
...
Constituent PRs:
#1597 by @Michaelyklam — pytest config-path isolation
#1598 by @Michaelyklam — multi-tab SSE broadcast (closes #1584 )
#1599 by @Sanjays2402 — _pending_started_at truthy-check (closes #1595 )
#1600 by @Michaelyklam — streaming markdown subpath/fallback
#1601 by @Michaelyklam — subpath frontend routes
#1602 by @ai-ag2026 — cross-source continuation
#1603 by @ai-ag2026 — git remote name preservation
#1605 by @ai-ag2026 — update banner branch labels
#1608 by @franksong2702 — cron broad-except removal (closes #1578 )
#1609 by @franksong2702 — server.py socket cleanup (closes #1583 )
#1621 by @franksong2702 — fork indicator polish (fixes #1613 )
#1622 by @s905060 — paste text-with-image (closes #1620 )
Opus advisor SHIP verdict + 2 SHOULD-FIX absorbed in-release:
• #1598 ordering race fixed (offline-buffer replay moved inside lock)
• #1601 sessions.js:1440 gateway SSE probe baseURI parity fix
4117 → 4142 tests passing.
2026-05-04 15:45:41 +00:00
Hermes Release Agent
1636ab9ef9
release: stamp v0.50.290 — 5-PR batch (#1586+#1590+#1591+#1592+#1464) — 4094→4111 tests
...
- #1586 (Michaelyklam): login asset SW cache exemption
- #1590 (Michaelyklam): hot-apply compact tool activity setting
- #1591 (Michaelyklam): first-turn sidebar visibility (optimistic upserts)
- #1592 (Michaelyklam): turn duration display (Done in 1m 12s) + Opus follow-up (truthy-check on _pending_started_at)
- #1464 (JKJameson, maintainer-augmented): workspace dropdown sort+search+chip-sync (rebased + ternary fix + regression test)
Maintainer-side test fixes in stage:
- tests/test_465_session_branching.py: widen compact() search window 1500→3000
- tests/test_regressions.py: anchor on api('/api/chat/start' instead of comment line
Browser API sanity: 11/11 passed. Live UX verification: vision-confirmed dropdown sort+search+empty-state on test server. Opus advisor: SHIP AS-IS.
2026-05-04 05:10:29 +00:00
Hermes Release Agent
59a6c6bc15
release: stamp v0.50.289 — TCP keepalive on accepted connections ( #1581 ) — 4094 tests
2026-05-03 23:50:09 +00:00