+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -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')
+ main_end = src.find('')
+ 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 "
+ )