diff --git a/CHANGELOG.md b/CHANGELOG.md index ea324a36f..583d8de2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ## [Unreleased] +## [v0.51.258] — 2026-06-04 — Release HZ (stage-r6 — update banner from any panel + inline thinking on settlement) + +### Fixed +- The "update available" banner now appears from **any panel** (Settings → System "Check now", etc.), not just the Chat view — the banner element was positioned so it only rendered visibly on the Chat surface. (#3597, @rodboev) +- Under Simplified Tool Calling, an assistant turn that produced **thinking but no tool calls** now renders that thinking inline on settlement instead of burying it in an empty collapsed activity group. (#3592, @rodboev) + ## [v0.51.257] — 2026-06-04 — Release HY (stage-r5 — provider refresh route + SessionDB self-heal) ### Fixed diff --git a/static/index.html b/static/index.html index 57000e624..799d0f71d 100644 --- a/static/index.html +++ b/static/index.html @@ -371,6 +371,22 @@
+
+
+ + + + +
+
+ + + +
+
@@ -407,22 +423,6 @@
-
-
- - - - -
-
- - - -
-
A response may have been in progress when you last left. Reload messages?
diff --git a/static/style.css b/static/style.css index 3e4ea8171..53012913c 100644 --- a/static/style.css +++ b/static/style.css @@ -3305,12 +3305,12 @@ main.main > #mainPlugin{display:none;} .settings-section-title{font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--text);line-height:1.3;margin-bottom:4px;} .settings-section-meta{font-size:13px;color:var(--muted);line-height:1.55;} .settings-version-badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:var(--surface);color:var(--muted);font-size:11px;font-weight:600;font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;flex-shrink:0;align-self:flex-start;letter-spacing:.02em;} -#checkUpdatesBlock{display:inline-flex;align-items:center;gap:6px;font-size:12px;flex-shrink:0;align-self:flex-start;} +#checkUpdatesBlock{display:inline-flex;align-items:center;gap:0.5em;font-size:12px;flex-shrink:0;align-self:flex-start;flex-wrap:wrap;} #checkUpdatesBlock .btn-tiny{padding:4px 10px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:11px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:border-color .15s,color .15s;} #checkUpdatesBlock .btn-tiny:hover{border-color:var(--accent);color:var(--accent);} #checkUpdatesBlock .btn-tiny:disabled{opacity:.5;cursor:default;} #checkUpdatesBlock .btn-tiny .spinner-xs{width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--text);border-radius:50%;animation:spin .6s linear infinite;display:none;} -#checkUpdatesStatus{font-size:11px;font-weight:500;white-space:nowrap;} +#checkUpdatesStatus{font-size:11px;font-weight:500;white-space:nowrap;flex-basis:100%;margin-top:0.25em;} /* Each logical form row is a card surface. Stack with comfortable gap. */ #mainSettings .settings-field{margin-bottom:12px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--sidebar);} diff --git a/static/ui.js b/static/ui.js index ac64191ce..937dad7a1 100644 --- a/static/ui.js +++ b/static/ui.js @@ -7213,6 +7213,13 @@ function renderMessages(options){ const activityIdxs=[...new Set([...Object.keys(byAssistant).map(k=>parseInt(k)), ...assistantThinking.keys()])].sort((a,b)=>a-b); for(const aIdx of activityIdxs){ const cards=byAssistant[aIdx]||[]; + if(!cards.length&&assistantThinking.has(aIdx)){ + const anchorRow=assistantSegments.get(aIdx); + if(anchorRow&&window._showThinking!==false){ + anchorRow.insertAdjacentHTML('beforeend',_thinkingCardHtml(assistantThinking.get(aIdx))); + } + continue; + } let anchorRow=assistantSegments.get(aIdx)||null; if(!anchorRow&&assistantIdxs.length){ if(aIdx
') + banner_pos = src.find('id="updateBanner"') + assert main_pos != -1, "
not found" + assert main_end != -1, "
not found" + assert main_pos < banner_pos < main_end, ( + "#updateBanner must be inside
, " + "not before it or after the closing
" + )