Merge commit '6771fc2cdc34' into release/stage-5456

This commit is contained in:
nesquena-hermes 2026-07-04 07:45:19 +00:00
commit 7a8b5ef7cf
5 changed files with 1066 additions and 5 deletions

View file

@ -4219,6 +4219,7 @@ body.resizing .sidebar{transition:none!important;}
.transparent-event-row .thinking-card.open .thinking-card-body{ .transparent-event-row .thinking-card.open .thinking-card-body{
border-top-color:transparent; border-top-color:transparent;
padding:0 0 3px; padding:0 0 3px;
scrollbar-gutter:stable;
} }
.transparent-event-row .tool-card-detail > *, .transparent-event-row .tool-card-detail > *,
.transparent-event-row .thinking-card-body > *{min-height:0;} .transparent-event-row .thinking-card-body > *{min-height:0;}

View file

@ -11043,6 +11043,7 @@ function _renderLiveAnchorActivitySceneTransparent(streamId, scene, opts){
}); });
const liveFooter=blocks.querySelector('#liveRunStatus'); const liveFooter=blocks.querySelector('#liveRunStatus');
let wrote=false; let wrote=false;
const targetRenderedRows=[];
for(const row of rows){ for(const row of rows){
const node=_anchorSceneTransparentNodeForRow(row,{ const node=_anchorSceneTransparentNodeForRow(row,{
live:true, live:true,
@ -11058,10 +11059,25 @@ function _renderLiveAnchorActivitySceneTransparent(streamId, scene, opts){
: node; : node;
if(existing) preserveByKey.delete(key); if(existing) preserveByKey.delete(key);
if(!renderedNode) continue; if(!renderedNode) continue;
if(liveFooter&&liveFooter.parentElement===blocks) blocks.insertBefore(renderedNode,liveFooter); targetRenderedRows.push(renderedNode);
else blocks.appendChild(renderedNode);
wrote=true; wrote=true;
} }
const transparentLiveRowAlreadyPositioned=(node, expectedNextSibling)=>!!(
node &&
node.parentElement===blocks &&
node.nextSibling===expectedNextSibling
);
let expectedNextSibling=(liveFooter&&liveFooter.parentElement===blocks) ? liveFooter : null;
for(let i=targetRenderedRows.length-1;i>=0;i--){
const renderedNode=targetRenderedRows[i];
if(transparentLiveRowAlreadyPositioned(renderedNode,expectedNextSibling)){
expectedNextSibling=renderedNode;
continue;
}
if(expectedNextSibling&&expectedNextSibling.parentElement===blocks) blocks.insertBefore(renderedNode,expectedNextSibling);
else blocks.appendChild(renderedNode);
expectedNextSibling=renderedNode;
}
preserveByKey.forEach(stale=>stale.remove()); preserveByKey.forEach(stale=>stale.remove());
if(wrote) _syncTransparentEventControls(turn); if(wrote) _syncTransparentEventControls(turn);
if(typeof _moveLiveRunStatusToTurnEnd==='function') _moveLiveRunStatusToTurnEnd(); if(typeof _moveLiveRunStatusToTurnEnd==='function') _moveLiveRunStatusToTurnEnd();
@ -11127,6 +11143,7 @@ function _rehydrateTransparentLiveRow(existing, node, preservedState){
if(!existing) return; if(!existing) return;
if(node && Object.prototype.hasOwnProperty.call(node, '_tcData')) existing._tcData = node._tcData; if(node && Object.prototype.hasOwnProperty.call(node, '_tcData')) existing._tcData = node._tcData;
else if(Object.prototype.hasOwnProperty.call(existing, '_tcData')) delete existing._tcData; else if(Object.prototype.hasOwnProperty.call(existing, '_tcData')) delete existing._tcData;
try{ delete node._tcData; }catch(_){}
const header = existing.querySelector ? existing.querySelector('.tool-card-header,.thinking-card-header') : null; const header = existing.querySelector ? existing.querySelector('.tool-card-header,.thinking-card-header') : null;
if(header){ if(header){
if(typeof _wireTransparentHeaderToggle === 'function') _wireTransparentHeaderToggle(header); if(typeof _wireTransparentHeaderToggle === 'function') _wireTransparentHeaderToggle(header);
@ -11147,6 +11164,26 @@ function _rehydrateTransparentLiveRow(existing, node, preservedState){
} }
} }
function _refreshTransparentThinkingLiveRow(existing, node){
if(!existing || !node || !existing.querySelector || !node.querySelector) return false;
const existingType = String(existing.getAttribute('data-event-type') || '');
const nodeType = String(node.getAttribute('data-event-type') || '');
const existingIsThinking = existingType === 'thinking' || (existing.classList&&existing.classList.contains('transparent-thinking-event'));
const nodeIsThinking = nodeType === 'thinking' || (node.classList&&node.classList.contains('transparent-thinking-event'));
if(!existingIsThinking || !nodeIsThinking) return false;
const existingPre = existing.querySelector('.thinking-card-body pre');
const nodePre = node.querySelector('.thinking-card-body pre');
if(!existingPre || !nodePre) return false;
const nextText = String(nodePre.textContent || '');
if(existingPre.textContent !== nextText) existingPre.textContent = nextText;
const nodePreview = node.querySelector('.transparent-event-thinking-preview');
const previewText = nodePreview ? String(nodePreview.textContent || '') : nextText;
if(typeof _decorateTransparentEventRow === 'function'){
_decorateTransparentEventRow(existing,{type:'thinking',text:nextText,preview:previewText});
}
return true;
}
function _refreshTransparentLiveRow(existing, node){ function _refreshTransparentLiveRow(existing, node){
if(!existing || !node || !existing.getAttribute) return node; if(!existing || !node || !existing.getAttribute) return node;
if(existing===node) return existing; if(existing===node) return existing;
@ -11165,7 +11202,13 @@ function _refreshTransparentLiveRow(existing, node){
existing.setAttribute(name, value); existing.setAttribute(name, value);
} }
existing.className = node.className || ''; existing.className = node.className || '';
existing.innerHTML = node.innerHTML || ''; if(_refreshTransparentThinkingLiveRow(existing, node)){
_rehydrateTransparentLiveRow(existing, node, preservedState);
return existing;
}
const newHtml = node.innerHTML || '';
const htmlChanged = existing.innerHTML !== newHtml;
if(htmlChanged) existing.innerHTML = newHtml;
_rehydrateTransparentLiveRow(existing, node, preservedState); _rehydrateTransparentLiveRow(existing, node, preservedState);
return existing; return existing;
} }

View file

@ -286,7 +286,7 @@ def test_transparent_event_row_quiet_metadata_visual_rhythm():
assert "border-radius:0;" in STYLE_CSS assert "border-radius:0;" in STYLE_CSS
assert "margin-top:0;" in STYLE_CSS assert "margin-top:0;" in STYLE_CSS
assert "padding:0 8px 6px 27px;" in STYLE_CSS assert "padding:0 8px 6px 27px;" in STYLE_CSS
assert ".transparent-event-row .thinking-card.open .thinking-card-body{\n border-top-color:transparent;\n padding:0 0 3px;\n}" in STYLE_CSS assert ".transparent-event-row .thinking-card.open .thinking-card-body{\n border-top-color:transparent;\n padding:0 0 3px;\n scrollbar-gutter:stable;\n}" in STYLE_CSS
# Tabs: text-link style with an active underline (no pill background). # Tabs: text-link style with an active underline (no pill background).
assert ".transparent-detail-mode.active{color:var(--text);opacity:1;font-weight:600;box-shadow:inset 0 -1px 0 var(--accent);}" in STYLE_CSS assert ".transparent-detail-mode.active{color:var(--text);opacity:1;font-weight:600;box-shadow:inset 0 -1px 0 var(--accent);}" in STYLE_CSS

File diff suppressed because it is too large Load diff

View file

@ -1065,6 +1065,7 @@ global._syncToolCallGroupSummary=()=>{{}};
eval(extractFunc('_transparentLiveRowAttributePairs')); eval(extractFunc('_transparentLiveRowAttributePairs'));
eval(extractFunc('_transparentLiveRowInteractiveState')); eval(extractFunc('_transparentLiveRowInteractiveState'));
eval(extractFunc('_rehydrateTransparentLiveRow')); eval(extractFunc('_rehydrateTransparentLiveRow'));
eval(extractFunc('_refreshTransparentThinkingLiveRow'));
eval(extractFunc('_refreshTransparentLiveRow')); eval(extractFunc('_refreshTransparentLiveRow'));
eval(extractFunc('_renderLiveAnchorActivitySceneTransparent')); eval(extractFunc('_renderLiveAnchorActivitySceneTransparent'));