From 423c9ddb0ef51415c143aeb8dcf444c108662ebc Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Sat, 24 Jan 2026 17:34:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9DAI=E5=93=8D=E5=BA=94=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=88=B0=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=9D=A2=E6=9D=BF=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/messageHandler.ts | 50 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/utils/messageHandler.ts b/src/utils/messageHandler.ts index 3f18e03..1438853 100644 --- a/src/utils/messageHandler.ts +++ b/src/utils/messageHandler.ts @@ -213,14 +213,23 @@ async function handleUserMessageWithBackend( }, onComplete: async (segments) => { - // 隐藏状态栏 - panel.webview.postMessage({ - command: "hideStatus", - }); - - // 最后一次发送完整的段落 console.log("[MessageHandler] 对话完成, 段落数:", segments.length); + // 先保存到历史记录(优先级最高,确保数据不丢失) + try { + // 将完整的 segments 保存到一条 AI 消息中 + // 这样加载时可以完整还原对话样式 + const textContent = segments + .filter((s) => s.type === "text" && s.content) + .map((s) => s.content) + .join("\n"); + + await historyManager.addAiMessage(textContent, undefined, segments); + console.log("[MessageHandler] AI响应已保存到历史记录"); + } catch (error) { + console.error("[MessageHandler] 保存AI响应历史失败:", error); + } + // 对话完成后重新获取余额(因为已经消耗了 Credits) try { console.log("[MessageHandler] 对话完成,重新获取余额..."); @@ -232,25 +241,22 @@ async function handleUserMessageWithBackend( console.error("[MessageHandler] 获取余额失败:", error); } - const result = await panel.webview.postMessage({ - command: "updateSegments", - segments: segments, - isComplete: true, - }); - console.log("[MessageHandler] postMessage 返回值:", result); - - // 保存完整的 segments 到历史记录 + // 尝试更新面板(如果面板已关闭,这些操作会失败,但不影响数据保存) try { - // 将完整的 segments 保存到一条 AI 消息中 - // 这样加载时可以完整还原对话样式 - const textContent = segments - .filter((s) => s.type === "text" && s.content) - .map((s) => s.content) - .join("\n"); + // 隐藏状态栏 + panel.webview.postMessage({ + command: "hideStatus", + }); - await historyManager.addAiMessage(textContent, undefined, segments); + // 最后一次发送完整的段落 + const result = await panel.webview.postMessage({ + command: "updateSegments", + segments: segments, + isComplete: true, + }); + console.log("[MessageHandler] postMessage 返回值:", result); } catch (error) { - console.warn("保存AI响应历史失败:", error); + console.warn("[MessageHandler] 更新面板失败(面板可能已关闭):", error); } resolve();