style: AI 回复中工具卡片移至文字上方,增加视觉层次

- 工具卡片渲染位置从文字下方移至文字上方
- 工具卡片与文字之间用虚线分隔,形成视觉层次
- 逻辑顺序:思考过程 → 工具执行 → 最终回答
This commit is contained in:
Metona Build
2026-04-19 18:17:30 +08:00
parent 71bd6e19ea
commit 212f14adf5
2 changed files with 24 additions and 9 deletions
+16 -8
View File
@@ -157,6 +157,22 @@ export function appendMessageDOM(msg: ChatMessage, index: number): void {
contentHtml = contentHtml.replace('<div class="msg-content"></div>', '');
}
// v5.1.2 工具卡片移至文字上方(先展示工具执行过程,再展示最终回答)
if (msg.role === 'assistant' && msg.toolCalls && msg.toolCalls.length > 0) {
let toolHtml = '<div class="tool-calls-container">';
for (const tc of msg.toolCalls) {
toolHtml += renderToolCallCard(tc);
}
toolHtml += '</div>';
// 插入到 msg-content 之前
const contentIdx = contentHtml.indexOf('<div class="msg-content">');
if (contentIdx >= 0) {
contentHtml = contentHtml.slice(0, contentIdx) + toolHtml + contentHtml.slice(contentIdx);
} else {
contentHtml = toolHtml + contentHtml;
}
}
const stats: string[] = [];
const statClasses: string[] = [];
if (msg.timestamp) { stats.push(formatTime(msg.timestamp)); statClasses.push(''); }
@@ -166,14 +182,6 @@ export function appendMessageDOM(msg: ChatMessage, index: number): void {
contentHtml += `<div class="msg-stats">${stats.map((s, i) => `<span${statClasses[i] ? ` class="${statClasses[i]}"` : ''}>${s}</span>`).join(' · ')}</div>`;
}
if (msg.role === 'assistant' && msg.toolCalls && msg.toolCalls.length > 0) {
contentHtml += '<div class="tool-calls-container">';
for (const tc of msg.toolCalls) {
contentHtml += renderToolCallCard(tc);
}
contentHtml += '</div>';
}
div.innerHTML = `
<div class="msg-avatar">${avatar}</div>
<div class="msg-body">