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();