Commit Graph

3362 Commits

Author SHA1 Message Date
AJV20 b53bc1a2ea fix: harden webui passive performance paths 2026-05-30 01:39:54 +00:00
nesquena-hermes e90ebd2394 Merge pull request #3149 from nesquena/release/stage-batch45
Release v0.51.163 — Release EI (stage-batch45: session duplicate/branch field propagation)
v0.51.163
2026-05-29 18:37:35 -07:00
nesquena-hermes 315cca2ec7 stage-batch45: CHANGELOG for v0.51.163 (Release EI) 2026-05-30 01:26:21 +00:00
nesquena-hermes 71d0b1cb5e Merge PR #3101 (session duplicate/branch field propagation) into stage-batch45 2026-05-30 01:26:00 +00:00
AlexeyDsov da9211bf43 fix(session): copy all critical fields on duplicate and branch to prevent state loss 2026-05-30 01:19:50 +00:00
nesquena-hermes 24a266841a Merge pull request #3148 from nesquena/release/stage-batch44
Release v0.51.162 — Release EH (stage-batch44: conversation-filter clear button + title-lang regression coverage)
v0.51.162
2026-05-29 18:13:04 -07:00
nesquena-hermes ed12948301 stage-batch44: CHANGELOG for v0.51.162 (Release EH) 2026-05-30 01:06:24 +00:00
ai-ag2026 e0c27174b3 test: cover code-only title language fallback 2026-05-30 01:06:04 +00:00
nesquena-hermes 01c63be969 Merge PR #3026 (clear button on conversation filter) into stage-batch44 2026-05-30 01:05:58 +00:00
george-andraws 28498aa988 fix: scope conversation filter clear search CSS 2026-05-30 00:52:29 +00:00
george-andraws 317d828cff Add clear button to conversation filter 2026-05-30 00:52:29 +00:00
nesquena-hermes cbc74e33b8 Merge pull request #3147 from nesquena/release/stage-batch43
Release v0.51.161 — Release EG (stage-batch43: 3-PR live-display fixes)
v0.51.161
2026-05-29 17:50:01 -07:00
nesquena-hermes 3119ea8200 test: update rotate-url-sync completion_marker for #3018 _finishDone carry-forward 2026-05-30 00:43:37 +00:00
nesquena-hermes 7edd43549d stage-batch43: extend #3018 carry-forward to _finishDone completion path (Opus review — most-frequent reproducer) 2026-05-30 00:39:54 +00:00
nesquena-hermes 49a16e5fc3 stage-batch43: CHANGELOG for v0.51.161 (Release EG) 2026-05-30 00:21:35 +00:00
nesquena-hermes 9059b8f5c3 Merge PR #3116 (stale unread + compression timer + tool-card dedup) into stage-batch43 2026-05-30 00:21:04 +00:00
nesquena-hermes 86d5d63593 Merge PR #3131 (preserve per-turn ephemeral fields) into stage-batch43 2026-05-30 00:20:58 +00:00
nesquena-hermes 02e8a6ca8d Merge PR #3127 (jump-to-question on intermediate assistant msgs) into stage-batch43 2026-05-30 00:20:58 +00:00
mysoul12138 5b3771012a Fix tool card duplication: skip detail when snippet equals preview
When tc.snippet === tc.preview (common for no-progress tools where
both are set to the same result_snippet), the detail block would show
identical content as the header. Skip the detail block in this case.

This also handles the reload-path where derived entries get snippet
populated but no preview, so displaySnippet falls back to the snippet
content for the header — same deduplication applies.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 00:20:49 +00:00
mysoul12138 0002cda23d fix: stale unread dot, compression timer leak, tool card duplication (#3020, #2973)
#3020: Sync viewed-count in the polling path for actively-viewed sessions
so navigating away doesn't show a stale unread dot. Defensive clear of
completion-unread marker in _setSessionViewedCount.

#2973: Clear elapsed-timer attributes and interval when a live compression
card transitions from running to done, preventing the orphan timer from
overwriting the completed card state. Guarded by active-session check.

Tool card duplication: Route tool_complete result to tc.snippet (detail)
instead of tc.preview (header) to prevent identical content appearing in
both the card header and expanded detail section.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 00:20:49 +00:00
nesquena-hermes 6d56280e94 test: update session-rotate-url-sync marker for #3018 split assignment (behavior preserved) 2026-05-30 00:16:32 +00:00
Sanjays2402 01c27806d4 Fix #3018: preserve per-turn ephemeral fields across session refreshes
`_turnUsage` (and `_turnDuration`, `_turnTps`, `_gatewayRouting`,
`_statusCard`) are computed client-side in `_finishDone()` and attached
to the last assistant message in `S.messages`. Three code paths replace
`S.messages` wholesale with fresh API data that lacks these fields:

  1. `_restoreSettledSession()` after a late `stream_end` or SSE error.
  2. The late-restore branch after `done` (messages.js ~L2247).
  3. `loadSession()` for active-session external refresh / focus-change.

When any of these fire after `done`, the badge/duration/gateway-pill
flashes for ~1s and disappears, never returning until the next message
or page reload.

Add `_carryForwardEphemeralTurnFields(prev, next)` that matches messages
by `(role, timestamp, content prefix)` — the same identity the renderer
already uses — and copies forward the ephemeral fields when the server
payload is missing them. Wire it into all three replace sites. The fix
is conservative: it only fills slots that are `null` on the new message,
so an authoritative server-side value (if/when the API ever surfaces
per-turn usage) wins automatically.

Picked Option A from the bug report (preserve on the client side) over
Option B (synthesize from `S.lastUsage`) because `lastUsage` is a
session-level aggregate; reconstructing per-turn breakdowns from it is
lossy. Option C (set `_streamFinalized` earlier) would suppress legit
late-arriving server data on transient errors.
2026-05-30 00:11:50 +00:00
nesquena-hermes d45bc32c8d test: update #2246 question-jump assertions for #3114 (button on all assistant msgs with resolvable target) 2026-05-30 00:10:29 +00:00
Sanjays2402 24b175045f Fix #3114: keep jump-to-question button on intermediate assistant messages
In multi-step turns (assistant -> tool_call -> assistant -> tool_call ->
final assistant), only the turn-final assistant bubble was rendering the
'jump to question' navigation button because the gate keyed on
isTurnFinalAssistant. Intermediate assistant bubbles that *do* have a
resolvable question raw-index lost the affordance entirely.

Switch the gate to 'show whenever questionRawIdxByAssistantRawIdx has a
target for this rawIdx', which is the actual precondition for the button
being meaningful. Turn-finality was a proxy for 'has a question target'
that under-covered multi-step turns.

No template/CSS change needed; _questionJumpButtonHtml already handles
the rawIdx-or-undefined contract.
2026-05-30 00:09:13 +00:00
nesquena-hermes c8afb37ae7 Merge pull request #3146 from nesquena/release/stage-batch42
Release v0.51.160 — Release EF (stage-batch42: 3-PR low-risk cleanup)
v0.51.160
2026-05-29 16:55:24 -07:00
nesquena-hermes cb7360e11c stage-batch42: CHANGELOG for v0.51.160 (Release EF) + skills/session-index entries 2026-05-29 23:48:51 +00:00
nesquena-hermes bd0e915a5d Merge PR #3142 (session-index metadata refresh perf) into stage-batch42 2026-05-29 23:48:29 +00:00
nesquena-hermes 8933fe9dbe Merge PR #3112 (skills disabled read-path) into stage-batch42 2026-05-29 23:48:24 +00:00
nesquena-hermes dc2ed59aaa Merge PR #3136 (OpenCode shared key) into stage-batch42 2026-05-29 23:48:24 +00:00
nesquena-hermes 23f5ee15f7 review-3142: align load_metadata_only comment with sidecar-first logic 2026-05-29 23:46:51 +00:00
zapabob 1f51ef14d0 fix: detect shared OpenCode API key 2026-05-29 23:22:15 +00:00
Harlan Zhou 39f09a5b7a fix: read skills disabled state from active profile 2026-05-29 23:21:48 +00:00
ai-ag2026 017179b189 fix: speed up session index metadata refresh 2026-05-29 23:21:48 +00:00
nesquena-hermes 95cee09c31 Merge pull request #3144 from nesquena/release/stage-batch41
Release v0.51.159 — Release EE (stage-batch41: 5-PR low-risk cleanup)
v0.51.159
2026-05-29 15:28:50 -07:00
nesquena-hermes 6d61fbdd17 stage-batch41: CHANGELOG for v0.51.159 (Release EE) 2026-05-29 22:25:37 +00:00
nesquena-hermes 4e382e4f36 stage-batch41: update test_issue1824 snippet-limit assertion 200->4000 (follows #3117) 2026-05-29 22:22:05 +00:00
nesquena-hermes 11ba36beb9 Merge PR #3135 into stage-batch41
# Conflicts:
#	CHANGELOG.md
#	api/routes.py
2026-05-29 22:15:46 +00:00
nesquena-hermes 111e7a11b1 Merge PR #3118 into stage-batch41
# Conflicts:
#	CHANGELOG.md
#	static/boot.js
2026-05-29 22:14:16 +00:00
nesquena-hermes de90ca3abe Merge PR #3117 into stage-batch41 2026-05-29 22:13:08 +00:00
nesquena-hermes 5c96764e3d Merge PR #3099 into stage-batch41
# Conflicts:
#	CHANGELOG.md
2026-05-29 22:13:08 +00:00
nesquena-hermes 9ca0bdccc8 Merge PR #3098 into stage-batch41
# Conflicts:
#	CHANGELOG.md
2026-05-29 22:12:43 +00:00
nesquena-hermes 1ebd1601d6 Merge pull request #3143 from nesquena/release/stage-batch40
Release v0.51.158 — Release ED (stage-batch40: 5-PR low-risk cleanup)
v0.51.158
2026-05-29 15:11:11 -07:00
nesquena-hermes edd80751fc stage-batch40: CHANGELOG for v0.51.158 (Release ED) 2026-05-29 22:01:47 +00:00
nesquena-hermes ff78a422ca Merge PR #3139 into stage-batch40 2026-05-29 22:01:06 +00:00
nesquena-hermes 3206aec3f3 Merge PR #3138 into stage-batch40
# Conflicts:
#	CHANGELOG.md
2026-05-29 22:01:06 +00:00
nesquena-hermes 9aff2a16d4 Merge PR #3137 into stage-batch40 2026-05-29 21:59:24 +00:00
nesquena-hermes d072039237 Merge PR #3130 into stage-batch40 2026-05-29 21:59:24 +00:00
nesquena-hermes 649f64b374 Merge PR #3129 into stage-batch40 2026-05-29 21:59:24 +00:00
Philippe Le Rohellec e6aa9271c2 fix(models): preserve provider-qualified model selections in the picker
- Stop provider-qualified or slash-qualified model inputs from fuzzy-matching a
  sibling catalog entry when the exact requested model is missing from the
  curated picker list.
- Preserve the raw typed selection so uncatalogued provider-routed models
  fall through to a temporary custom option instead of silently snapping to a
  nearby curated model.
- Add generalized regression coverage for provider-qualified uncatalogued
  picker selections.
2026-05-29 10:24:44 -07:00
AJV20 3c2f98eb23 fix: polish WebUI assistant replies 2026-05-29 13:01:14 -04:00