Commit Graph

2131 Commits

Author SHA1 Message Date
Hermes Agent bfb62abe35 Merge pull request #2225 into stage-353
Add extra-large Appearance font size option (franksong2702)
2026-05-14 03:43:52 +00:00
Hermes Agent 5a447604b6 Merge pull request #2227 into stage-353
fix: preserve session history during compression rotation (theh4v0c, closes #2223 — critical data-loss)
+ duplicate Appearance label-markup fix overlapping with #2222

Conflict resolution:

(1) static/index.html line ~896 — PR #2222 and PR #2227 both fix the same
    endless-scroll checkbox label issue with different structures.
    - #2222 (HEAD): wraps the input+span in an in-place <label> inside the
      shared session-jump settings-field div.
    - #2227 (incoming): closes the existing settings-field, opens a NEW
      settings-field for endless-scroll, then wraps in <label>. Strictly
      better — each preference owns its own settings-field, matching the
      rest of the Settings → Appearance layout.

    Adopted #2227's structural variant. Regression test
    test_session_endless_scroll.py was updated by #2222 to match the new
    structure and passes against the resolved markup.

(2) CHANGELOG.md — both PRs added a Fixed entry. Merged both attributions,
    leading with the critical #2223 data-loss fix from #2227 (immutable
    pre-compression archive + parent_session_id lineage stamping) and
    noting that the maintainer chose #2227's structural variant for the
    label-markup overlap.

11/11 tests pass across test_session_endless_scroll.py +
test_issue2223_compression_no_rename.py after resolution.
2026-05-14 03:43:45 +00:00
Hermes Agent 0635623f97 Merge pull request #2222 into stage-353
Fix Appearance endless-scroll label markup (franksong2702)
2026-05-14 03:42:10 +00:00
Frank Song e2f319d730 Add extra large font size option 2026-05-14 11:09:21 +08:00
RØG3R L!M4 16d307061e fix: wrap endless-scroll checkbox in its own label (refs #2222)
The settingsSessionEndlessScroll checkbox and label were nested inside
the session-jump description div with a stray </label> closing tag,
causing browser markup recovery to shift the control layout.

Fix: properly close the session-jump settings-field div, create a new
settings-field div with margin-top:8px, and wrap the endless-scroll
checkbox in its own <label> element consistent with other Appearance
checkboxes.
2026-05-14 03:03:48 +00:00
RØG3R L!M4 5bbf18324c fix: preserve session history during compression rotation (#2223)
The previous implementation renamed old_sid.json → new_sid.json during
context compression, destroying the only persistent copy of the full
conversation history. If the summarisation LLM call also failed, the
user was left with zero recoverable messages.

Fix:
- Remove the destructive old_path.rename(new_path) call
- Preserve old_sid.json as an immutable pre-compression archive
- Create new_sid.json as a fresh file via s.save()
- Set parent_session_id on the continuation session for lineage
- Save in-memory messages to old_sid.json if they're newer than disk

Test: test_issue2223_compression_no_rename.py (6 tests, all passing)
2026-05-14 03:02:44 +00:00
Frank Song 3d2f9cf699 Fix Appearance endless scroll label markup 2026-05-14 10:44:16 +08:00
nesquena-hermes 3f4e82b4d1 Merge pull request #2221 from nesquena/stage-352
stage-352: 4-PR clean batch — _summary_cache LRU cap #2216 + re.MULTILINE strip fix #2217 + Compact sidebar lineage hide #2219 + CONTRIBUTORS/README refresh #2220
v0.51.59
2026-05-13 19:38:36 -07:00
Hermes Agent 079697ac12 docs: CHANGELOG stage-352 — close v0.51.58 (stage-351), open Unreleased for 4-PR stage-352 2026-05-14 02:23:15 +00:00
Hermes Agent 6b2e6a2d98 Merge pull request #2220 into stage-352
docs: refresh CONTRIBUTORS.md and README to v0.51.58 (nesquena-hermes)
2026-05-14 02:22:11 +00:00
Hermes Agent 426cf7115e Merge pull request #2219 into stage-352
Hide prior-turn lineage metadata in compact sidebar (franksong2702, closes #2218)
2026-05-14 02:22:10 +00:00
Hermes Agent 549140df31 Merge pull request #2216 into stage-352
fix: cap _summary_cache with LRU (max 16 entries) (franksong2702, closes #2215 Fix A — closes #2215)
2026-05-14 02:22:08 +00:00
Hermes Agent f92630445b Merge pull request #2217 into stage-352
fix: drop re.MULTILINE from 'the user is asking' strip pattern (franksong2702, refs #2215 Fix B)
2026-05-14 02:22:07 +00:00
nesquena-hermes 7192d856af docs: refresh CONTRIBUTORS.md and README to v0.51.58
Last refresh was at v0.51.44 (130 contributors / 568 PR credits). Since then,
14 releases shipped (v0.51.45 through v0.51.58) with 78 attributed PRs from
20 distinct contributors, adding 7 first-time contributors:

- @lucasrc — auth-hardening trilogy (#2191/#2192/#2193) → sustained 3-PR bucket
- @LumenYoung — stale-stream guard + 3 streaming-correctness fixes → sustained 4-PR bucket
- @MrFant — 2 PRs (reasoning_content whitelist, message preservation)
- @xz-dev — 2 PRs (thinking-card state, session-scoped metering)
- @legeantbleu — French (fr) locale (#2142)
- @ayushere — ctl.sh bash 3.2 macOS compat (#2117)
- @plerohellec — single PR

Bucket promotions (existing contributors who moved up):

- @dobby-d-elf: 2 → 6 PRs (jumps from two-PR list into top contributors)
- @samuelgudi: 1 → 2
- @michael-dg: 1 → 2
- @vcavichini: 1 → 2
- @hualong1009: 1 → 2

Top contributor PR-count updates (top 7 changed materially):

| Contributor       | Before | After | Delta | Latest release |
|-------------------|-------:|------:|------:|---------------|
| @franksong2702    |     92 |   117 |   +25 | Unreleased    |
| @Michaelyklam     |     81 |    92 |   +11 | v0.51.57      |
| @bergeouss        |     61 |    62 |    +1 | v0.51.46      |
| @ai-ag2026        |     49 |    55 |    +6 | v0.51.47      |
| @dso2ng           |     21 |    23 |    +2 | v0.51.51      |
| @jasonjcwu        |     13 |    16 |    +3 | v0.51.55      |
| @Jordan-SkyLF     |      6 |    12 |    +6 | Unreleased    |

Header refreshed: 130 → 137 contributors, 568 → 646 PR credits, refresh
tag bumped to v0.51.58. Notable contributions paragraphs in both files
updated with the new work (manual /compress async pair, worktree status +
guarded remove, fork-from-here, opencode-go resolver, the LumenYoung +
lucasrc + dobby-d-elf entries).

Source of truth: CHANGELOG.md attribution lines `**PR #N** by @user` between
the v0.51.44 header and the Unreleased section, plus baseline buckets in
the previous CONTRIBUTORS.md. Cross-bucket sanity check passes (no handle
appears in multiple buckets; 21 + 13 + 19 + 84 = 137 unique handles).
2026-05-14 02:18:57 +00:00
Frank Song 996d4f9a8c Hide session lineage metadata in compact sidebar 2026-05-14 10:14:15 +08:00
Frank Song 9681761cdf fix: cap _summary_cache with OrderedDict LRU
Refs #2215 Fix A: replace plain dict _summary_cache with OrderedDict-based LRU capped at 16 entries to prevent unbounded memory growth from long-running update summary generations.

Add regression coverage for the bounded LRU behavior: cache hits refresh recency, a new entry at capacity evicts the least-recently used key, and cache size never exceeds the cap.
2026-05-14 09:14:28 +08:00
Frank Song 28ec3af697 fix: strip only leading user-asking wrapper line
Refs #2215 Fix B: remove the mid-response stripping hazard without losing leading multi-line wrapper cleanup.

The pattern now strips only a leading 'the user is asking' wrapper line and preserves the visible answer that follows. Add regression coverage for both the leading-wrapper and mid-response prose cases.
2026-05-14 09:14:28 +08:00
nesquena-hermes d8798ab355 Merge pull request #2214 from nesquena/stage-351
stage-351: net-positive ready batch — perf CLI scan cache #2149 + thinking-tag leading-only #2213 + MCP tools pagination #2210 + per-target update summaries #2207 + sweep animation tune #2212 + agent-mode cron badge #2206
v0.51.58
2026-05-13 17:16:30 -07:00
Hermes Agent 6af22791ce docs: CHANGELOG stage-351 — close v0.51.57 (stage-350 batch), open Unreleased for 6-PR stage-351 2026-05-13 23:55:35 +00:00
Hermes Agent 2accf6335c Merge pull request #2149 into stage-351
perf(sessions): cache CLI session scans (starship-s)

Conflict resolution on api/routes.py:
  (1) Master grew a new helper '_messages_include_tool_metadata()' that
      pr-2149 doesn't have. Kept it (unrelated function — detects whether
      returned messages contain tool metadata, used elsewhere).
  (2) pr-2149 renames the CLI-metadata gate from '_needs_cli_session_metadata'
      to '_session_requires_cli_metadata_lookup' AND broadens it to cover
      legacy-imported sidecars with 'read_only=False' but persisted 'is_cli_session'
      or session_source markers. The new gate is strictly more inclusive than
      the master version — covers (a) is_cli_session, (b) read_only=True,
      (c) session_source in {messaging, external_agent}, AND (d) source_tag,
      raw_source, source, source_label, platform markers. All sessions that
      previously took the slow path still do, plus a few more legacy shapes
      that needed CLI metadata for correct display.
  (3) Removed the obsolete '_needs_cli_session_metadata()' definition from
      master (only consumer migrated to the new name).

29/29 tests pass across test_session_cli_scan_fast_path (new), claude_code
session import, session_index, and session_lineage_full_transcript.
2026-05-13 23:54:15 +00:00
Hermes Agent 89bf659b01 Merge pull request #2206 into stage-351
feat: show 🤖 badge and provider/model for agent-mode cron jobs (vcavichini)
2026-05-13 23:51:29 +00:00
Hermes Agent 70f09aaeb6 Merge pull request #2207 into stage-351
feat: add per-target update summaries with separate WebUI/Agent What's-new links (Jordan-SkyLF, fixes #1579)
2026-05-13 23:51:28 +00:00
Hermes Agent f038c43d85 Merge pull request #2212 into stage-351
Tune Activity sweep animation (dobby-d-elf, follow-up to #2203)
2026-05-13 23:51:26 +00:00
Hermes Agent f1fee3aea8 Merge pull request #2210 into stage-351
Fix MCP tools list overflow with pagination/search (Jordan-SkyLF)
2026-05-13 23:51:25 +00:00
Hermes Agent 78c08ee1b7 Merge pull request #2213 into stage-351
Preserve literal thinking tags in assistant messages (franksong2702, fixes #2152)
2026-05-13 23:51:23 +00:00
ubuntu 97564c2b01 feat: show 🤖 badge for cron jobs in agent mode
Identify cron jobs with mode=agent (no_agent=false) in the cron list
by displaying a robot emoji badge next to the job name.
2026-05-13 20:48:09 -03:00
Jordan SkyLF 25ce490e24 docs: add update banner summary mode screenshots 2026-05-13 16:27:06 -07:00
Frank Song dc213d47b8 fix: preserve literal thinking tags 2026-05-14 07:13:34 +08:00
Jordan SkyLF 7d0a2c3621 docs: refresh update banner screenshots 2026-05-13 16:12:29 -07:00
Jordan SkyLF 1ad5fe9c14 fix: keep boot settings regression close 2026-05-13 16:00:46 -07:00
Jordan SkyLF f0d2ebccd9 Persist generated summary button state 2026-05-13 15:53:01 -07:00
Jordan SkyLF 7925a15211 Clarify generated summary button states 2026-05-13 15:53:01 -07:00
Jordan SkyLF 90c2ee7e04 Split What's New summaries by target 2026-05-13 15:53:01 -07:00
Jordan SkyLF cae007b069 Refine What's New summary sections 2026-05-13 15:53:01 -07:00
Jordan SkyLF 623dfef499 Stabilize What's New summaries 2026-05-13 15:53:01 -07:00
Jordan SkyLF bec21eafa0 Add What's New summary toggle 2026-05-13 15:53:01 -07:00
Jordan SkyLF cfc0f68d23 fix: show update whats-new links for webui and agent 2026-05-13 15:53:01 -07:00
Jordan SkyLF 9b2c402253 Add MCP tools overflow PR screenshots 2026-05-13 15:50:48 -07:00
dobby-d-elf 23cc22d048 Tune Activity sweep duration 2026-05-13 16:48:10 -06:00
dobby-d-elf eead48fc56 Tune version B Activity highlight sweep: widen band to ~20%, slow to 3.5s 2026-05-13 16:34:02 -06:00
Jordan SkyLF 4b455822cb Fix MCP tools list overflow 2026-05-13 15:33:54 -07:00
nesquena-hermes 6aedb7e0cd Merge pull request #2209 from nesquena/stage-350
stage-350: medium-risk batch — auth trilogy (#2191/2/3) + cancel-status #2151 with conflict resolution + #2178 ollama guard + #2204 provider precedence + #2203 activity animation
v0.51.57
2026-05-13 14:14:14 -07:00
Hermes Agent 7209e89ef4 stage-350: apply Opus SHOULD-FIX — tighten _partial_already_present dedup scope
Opus flagged that PR #2151's cancel-handler partial-dedup loop used a
substring check that was too broad: any short prior assistant reply
('OK', 'Here is the answer:') would dedup a longer new partial containing
it, silently dropping the partial and resurrecting the #893 data-loss bug.

Tightened to only dedup against actual prior _partial=True markers with
exact (whitespace-stripped) content match. Three new regression tests
added (short-non-partial-prefix-does-not-dedup, exact-partial-match-still-
dedups, same-content-non-partial-does-not-dedup).

10/10 partial-cancel tests pass after the fix. Also updated CHANGELOG with
the conflict-resolution notes for #2151 vs #2136 and the #2178 test-fix.
2026-05-13 21:11:01 +00:00
Hermes Agent 66ffc7d44b docs: CHANGELOG stage-350 — close v0.51.56, open Unreleased for 7-PR medium-risk batch 2026-05-13 20:46:45 +00:00
Hermes Agent 43f86d038e stage-350: fix #2178 CI — update Ollama test assertion to match new allowOllamaFormat guard
PR #2178 added an 'allowOllamaFormat' guard (resolves to false for non-ollama
@-provider prefixes like '@custom:ai_gateway') to stop the ollama label
formatter from reformatting custom-provider model IDs with dashes. The
existing test asserted on the pre-PR code shape and didn't pick up the new
guard.

Updated the assertion to match the actual post-PR code at static/ui.js:2202,
with an extended docstring explaining the bug class the guard fixes (bare
custom-provider model IDs like 'Qwen3.6-35B-A3B' had hyphens stripped to
spaces + last letter lowercased by the formatter).
2026-05-13 20:45:44 +00:00
Hermes Agent 1f9520d3f9 Merge pull request #2178 into stage-350
fix(ui): custom models not displayed in model configuration list (hualong1009)
2026-05-13 20:44:55 +00:00
Hermes Agent 3f851051cf Merge pull request #2151 into stage-350
fix: clarify cancelled chat turn status (Jordan-SkyLF)

Conflict resolution on api/streaming.py:4549-4567 (the cancel-handler
ownership guard). Both this PR and the already-shipped PR #2136 add a
guard at the same site against stale stream writebacks, from different
angles:

  - PR #2136 (HEAD): _stream_writeback_is_current(_cs, stream_id) — strictly
    dominates by checking the active_stream_id token equality.
  - PR #2151: 'worker won the race' check via (active_stream_id != stream_id
    and not pending_user_message), with _emit_cancel_event = False to suppress
    the terminal cancel event.

Resolution merges both: keep #2136's strictly-stronger condition for skip
detection, and adopt #2151's _emit_cancel_event = False semantic so the
cancel event isn't emitted in addition to skipping the writeback (when
client may have already received the successful done payload).

55/55 tests pass across cancelled-turn-status + stale-stream-writeback +
the four cancel/data-loss sibling test files.
2026-05-13 20:44:44 +00:00
Hermes Agent df3352eae3 Merge pull request #2192 into stage-350
fix(auth) 2/3: invalidate password hash cache when password changes via Settings panel (lucasrc, depends on #2191)
2026-05-13 20:42:52 +00:00
Hermes Agent 5f8b834833 Merge pull request #2193 into stage-350
fix(auth) 3/3: full HMAC digest with upgrade migration bridge + restore Secure cookie heuristic (lucasrc)
2026-05-13 20:41:38 +00:00
Hermes Agent ca82f60144 Merge pull request #2191 into stage-350
fix(auth) 1/3: thread-safe login rate limiter + PBKDF2 key separation + transparent migration (lucasrc)
2026-05-13 20:41:36 +00:00