feat:优化后端消息处理逻辑,确保AI响应保存到历史记录并更新面板状态

This commit is contained in:
Roe-xin
2026-01-24 17:34:28 +08:00
parent 50eacdafde
commit 423c9ddb0e

View File

@ -213,14 +213,23 @@ async function handleUserMessageWithBackend(
}, },
onComplete: async (segments) => { onComplete: async (segments) => {
// 隐藏状态栏
panel.webview.postMessage({
command: "hideStatus",
});
// 最后一次发送完整的段落
console.log("[MessageHandler] 对话完成, 段落数:", segments.length); 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 // 对话完成后重新获取余额(因为已经消耗了 Credits
try { try {
console.log("[MessageHandler] 对话完成,重新获取余额..."); console.log("[MessageHandler] 对话完成,重新获取余额...");
@ -232,25 +241,22 @@ async function handleUserMessageWithBackend(
console.error("[MessageHandler] 获取余额失败:", error); console.error("[MessageHandler] 获取余额失败:", error);
} }
// 尝试更新面板(如果面板已关闭,这些操作会失败,但不影响数据保存)
try {
// 隐藏状态栏
panel.webview.postMessage({
command: "hideStatus",
});
// 最后一次发送完整的段落
const result = await panel.webview.postMessage({ const result = await panel.webview.postMessage({
command: "updateSegments", command: "updateSegments",
segments: segments, segments: segments,
isComplete: true, isComplete: true,
}); });
console.log("[MessageHandler] postMessage 返回值:", result); 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");
await historyManager.addAiMessage(textContent, undefined, segments);
} catch (error) { } catch (error) {
console.warn("保存AI响应历史失败:", error); console.warn("[MessageHandler] 更新面板失败(面板可能已关闭):", error);
} }
resolve(); resolve();