diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d531217..cf5cba77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ### Fixed +- **"Copy conversation link" now copies an openable URL instead of a `session://` reference.** The copy action produced the internal `session://` reference (not openable in a browser); it now copies an absolute `origin + /session/` URL — the same shape used elsewhere in the app, with tracking query params stripped. Thanks @djsavvy. (#5478) + - **The model picker now marks the active model with a "Selected" badge.** The currently-selected conversation model shows a distinct **Selected** pill (separate from the "Configured" state), and the picker opens with that model's provider group expanded and scrolled into view — so it's obvious at a glance which model is in use. Thanks @rodboev. (#5757, #5748) - **Transparent Stream no longer briefly renders a duplicate of the answer.** A live-token prose snapshot that was a strict prefix of the final answer escaped the existing dedupe guards (which only fired on near-complete matches) and rendered as a visible duplicate. A new provenance-gated guard suppresses only the ephemeral live-token accumulator row (role `prose` / kind `process_prose` / `token` source / `live-prose:*` id) when it's a strict shorter prefix of the settled answer and sits after the last tool row — so genuine intermediate narration is never suppressed. Thanks @rodboev. (#5758, #5749) diff --git a/static/sessions.js b/static/sessions.js index c0fafcb4..a4b0ba20 100644 --- a/static/sessions.js +++ b/static/sessions.js @@ -3976,7 +3976,7 @@ async function _copyTextToClipboard(text){ async function _copySessionLink(session){ const sid=session&&session.session_id; if(!sid) return; - const ref=_sessionInternalReferenceForSession(session); + const ref=(window.location.origin||'')+_sessionUrlForSid(sid); try{ await _copyTextToClipboard(ref); showToast(t('session_link_copied'));