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 - #2214
Merged
Conversation
Identify cron jobs with mode=agent (no_agent=false) in the cron list by displaying a robot emoji badge next to the job name.
Preserve literal thinking tags in assistant messages (franksong2702, fixes #2152)
Fix MCP tools list overflow with pagination/search (Jordan-SkyLF)
Tune Activity sweep animation (dobby-d-elf, follow-up to #2203)
feat: add per-target update summaries with separate WebUI/Agent What's-new links (Jordan-SkyLF, fixes #1579)
feat: show 🤖 badge and provider/model for agent-mode cron jobs (vcavichini)
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.
…released for 6-PR stage-351
SysAdminDoc
pushed a commit
to SysAdminDoc/hermes-webui
that referenced
this pull request
Jun 26, 2026
stage-351: net-positive ready batch — perf CLI scan cache nesquena#2149 + thinking-tag leading-only nesquena#2213 + MCP tools pagination nesquena#2210 + per-target update summaries nesquena#2207 + sweep animation tune nesquena#2212 + agent-mode cron badge nesquena#2206
bernyforce
pushed a commit
to bernyforce/hermes-webui
that referenced
this pull request
Jul 29, 2026
stage-351: net-positive ready batch — perf CLI scan cache nesquena#2149 + thinking-tag leading-only nesquena#2213 + MCP tools pagination nesquena#2210 + per-target update summaries nesquena#2207 + sweep animation tune nesquena#2212 + agent-mode cron badge nesquena#2206
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
stage-351 — net-positive ready batch (v0.51.58)
Per Nathan's "next round of PRs requiring a little work but otherwise net positive — anything that's less than medium risk would also be included alongside up to medium risk" directive. This batch mixes 5 clean PRs (low/very-low-risk net-positive) with 1 medium-risk rebase (#2149).
Composition (6 PRs)
docs/pr-media/2210/)_strip_thinking_markup()leading-only (fixes #2152)/api/sessionloadsStage-351 maintainer fix — #2149 conflict resolution
Two conflict blocks in
api/routes.py:Block 1 (line 1669-1716): Master grew a new helper
_messages_include_tool_metadata()(unrelated function — detects whether returned messages contain tool metadata). pr-2149 added a new helper_session_requires_cli_metadata_lookup()(broader replacement for master's_needs_cli_session_metadata()gate).Resolution: kept both functions — they're unrelated and both needed.
Block 2 (line 3287-3291): Master uses
_needs_cli_session_metadata(); pr-2149 renamed it to_session_requires_cli_metadata_lookup()AND broadened the predicate. Master's gate returns True only foris_cli_sessionOR is-messaging-record. pr-2149's gate is strictly more inclusive — also coversread_only=True,session_source in {messaging, external_agent}, and thesource_tag/raw_source/source/source_label/platformmarkers.Resolution: adopted pr-2149's broader renamed gate. Removed the now-orphaned
_needs_cli_session_metadata()definition from the master side (only consumer migrated to the new name; checked the rest of the repo — no other callers).Verification rationale: pr-2149's gate is a strict superset of master's gate, so any session that previously took the slow CLI-metadata path still does, plus a few legacy shapes (sidecars with
read_only=Falsefrom before that field existed) now correctly trigger the slow path when they need it. The performance win comes only on ordinary WebUI-native sessions, which neither gate accepted.Opus reviewer verified by grep that
read_only=Trueis exclusively set on Session records in CLI/import paths (api/models.py:1528Claude Code import,api/routes.py:9451CLI import payload). No legitimate WebUI-native session hasread_only=True. Safe.Verification
test_session_cli_scan_fast_path+ 9 others)run-browser-tests.sh: 20/20 QA + 11/11 API checks PASSED in 103sread_only=True→ no false-slow-path^\s*with no MULTILINE correctly distinguishes whitespace-prefix (strip) from text-prefix (keep)_summary_cacheunbounded dict (small cardinality in practice) + pre-existingre.MULTILINE"the user is asking" pattern atapi/streaming.py:698Stats
Closes
Closes #2152(via Preserve literal thinking tags in assistant messages #2213)Closes #1579(via feat: add per-target update summaries #2207)Refs PR #2203 (#2212 is a CSS-only follow-up tune to its Activity sweep animation).