From a1e88d473bb8160a0c4c18a15772521ee7742d84 Mon Sep 17 00:00:00 2001 From: XiaoFeng <117837368+Fzhiyu1@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:29:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E6=9C=BA=E5=88=B6=E7=9A=84=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - P0: 新增工具执行结果追踪(trackToolResult),防止后端重启丢失 - P1: 版本冲突检查改为从尾部扫描,与加载逻辑一致 - P1: projectPath为空时添加用户警告通知 - 追踪工具错误信息,保留失败记录 --- src/services/dialogService.ts | 4 ++++ src/utils/chatHistoryManager.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/services/dialogService.ts b/src/services/dialogService.ts index 8fb1414..fab077f 100644 --- a/src/services/dialogService.ts +++ b/src/services/dialogService.ts @@ -460,6 +460,8 @@ export class DialogSession { callbacks.onToolComplete?.(data.tool_name, data.result); // 实时发送段落更新 callbacks.onSegmentUpdate?.(this.segments); + // 追踪工具执行结果(用于后端重启后恢复) + historyManager.trackToolResult(data.tool_name, data.result); }, onToolError: (data) => { @@ -467,6 +469,8 @@ export class DialogSession { callbacks.onToolError?.(data.tool_name, data.error); // 实时发送段落更新 callbacks.onSegmentUpdate?.(this.segments); + // 追踪工具执行错误(用于后端重启后恢复) + historyManager.trackToolResult(data.tool_name, `[错误] ${data.error}`); }, onToolConfirm: async (data: ToolConfirmEvent) => { diff --git a/src/utils/chatHistoryManager.ts b/src/utils/chatHistoryManager.ts index 9f702d4..f36ce07 100644 --- a/src/utils/chatHistoryManager.ts +++ b/src/utils/chatHistoryManager.ts @@ -715,6 +715,10 @@ export class ChatHistoryManager { if (!projectPath) { console.error('[ChatHistoryManager] 无法保存压缩数据:projectPath 为空'); + // 通知用户压缩数据保存失败 + vscode.window.showWarningMessage( + '对话历史压缩数据保存失败:无法确定项目路径。后端重启后可能无法恢复完整对话历史。' + ); return; } @@ -731,6 +735,19 @@ export class ChatHistoryManager { // 文件不存在,使用空数组 } + // 版本检查:防止旧版本覆盖新版本(从尾部扫描,与加载逻辑一致) + let existingSummary: CompactionSummaryMessage | null = null; + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].type === MessageType.COMPACTION_SUMMARY) { + existingSummary = messages[i] as CompactionSummaryMessage; + break; + } + } + if (existingSummary && existingSummary.version >= compacted.version) { + console.log(`[ChatHistoryManager] 跳过旧版本压缩数据: 现有版本=${existingSummary.version}, 新版本=${compacted.version}`); + return; + } + // 创建压缩摘要消息 const summaryMessage: CompactionSummaryMessage = { type: MessageType.COMPACTION_SUMMARY, @@ -893,4 +910,14 @@ export class ChatHistoryManager { content: text }); } + + /** + * 追踪新消息(工具执行结果) + */ + public trackToolResult(toolName: string, result: string): void { + this.newMessagesSinceCompaction.push({ + type: 'TOOL_RESULT', + content: `[${toolName}] ${result}` + }); + } }