From e3664f88437f06c02f52758e410e5dd02dc70952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A6=E9=98=B3?= Date: Wed, 29 Apr 2026 19:32:06 +0800 Subject: [PATCH] Avoid duplicate final output in GUI --- src/gui/static/app.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/static/app.js b/src/gui/static/app.js index cb47e59..44db2e0 100644 --- a/src/gui/static/app.js +++ b/src/gui/static/app.js @@ -548,12 +548,14 @@ function renderRunResult(data) { } const tail = transcript.slice(lastUserIndex + 1); renderTranscriptEntries(tail); - // Always show the canonical final output if it isn't already present. - const lastMsg = els.chat.querySelector(".message.assistant:last-of-type .body"); - if (!lastMsg || lastMsg.textContent.trim() !== (data.final_output || "").trim()) { - if (data.final_output && data.final_output.trim()) { - appendMessage({ role: "assistant", content: data.final_output }); - } + // transcript 通常已经包含最终 assistant 消息;只有缺失时才用 final_output 兜底。 + const finalOutput = (data.final_output || "").trim(); + const lastAssistant = [...tail] + .reverse() + .find((entry) => entry?.role === "assistant" && (entry.content || "").trim()); + const lastAssistantContent = (lastAssistant?.content || "").trim(); + if (finalOutput && finalOutput !== lastAssistantContent) { + appendMessage({ role: "assistant", content: data.final_output }); } }