diff --git a/static/src/components/chat/ChatArea.vue b/static/src/components/chat/ChatArea.vue index 895d187..f0281ad 100644 --- a/static/src/components/chat/ChatArea.vue +++ b/static/src/components/chat/ChatArea.vue @@ -117,6 +117,8 @@ class="stacked-blocks-wrapper" :actions="group.actions" :expanded-blocks="expandedBlocks" + :conversation-running="streamingMessage" + :is-latest-message="index === latestMessageIndex" :icon-style="iconStyleSafe" :toggle-block="toggleBlock" :register-thinking-ref="registerThinkingRef" @@ -1535,20 +1537,15 @@ const splitActionGroups = (actions: any[] = [], messageIndex = 0) => { } const flushBuffer = () => { - if (buffer.length >= 2) { + // 单个可堆叠块(thinking/tool)也走 stack 路径,避免 1↔2 块时在 single/stack + // 两套渲染路径之间整体切换导致 StackedBlocks 重新挂载(表现为外框瞬间塌成最扁再展开)。 + // 单块时 StackedBlocks 内部 moreVisible=false,不显示「更多」头,外观由 CSS 对齐 single。 + if (buffer.length >= 1) { result.push({ kind: 'stack', actions: buffer.slice(), key: `stack-${messageIndex}-${result.length}` }); - } else if (buffer.length === 1) { - const single = buffer[0]; - result.push({ - kind: 'single', - action: single, - actionIndex: actions.indexOf(single), - key: single.id || `single-${messageIndex}-${result.length}` - }); } buffer = []; }; diff --git a/static/src/components/chat/StackedBlocks.vue b/static/src/components/chat/StackedBlocks.vue index 8912eb7..8d04f29 100644 --- a/static/src/components/chat/StackedBlocks.vue +++ b/static/src/components/chat/StackedBlocks.vue @@ -1,6 +1,7 @@