fix: 修复自动压缩机制的多个问题

- P0: 新增工具执行结果追踪(trackToolResult),防止后端重启丢失
- P1: 版本冲突检查改为从尾部扫描,与加载逻辑一致
- P1: projectPath为空时添加用户警告通知
- 追踪工具错误信息,保留失败记录
This commit is contained in:
XiaoFeng
2026-01-12 14:29:15 +08:00
parent a02027e7c9
commit a1e88d473b
2 changed files with 31 additions and 0 deletions

View File

@ -460,6 +460,8 @@ export class DialogSession {
callbacks.onToolComplete?.(data.tool_name, data.result); callbacks.onToolComplete?.(data.tool_name, data.result);
// 实时发送段落更新 // 实时发送段落更新
callbacks.onSegmentUpdate?.(this.segments); callbacks.onSegmentUpdate?.(this.segments);
// 追踪工具执行结果(用于后端重启后恢复)
historyManager.trackToolResult(data.tool_name, data.result);
}, },
onToolError: (data) => { onToolError: (data) => {
@ -467,6 +469,8 @@ export class DialogSession {
callbacks.onToolError?.(data.tool_name, data.error); callbacks.onToolError?.(data.tool_name, data.error);
// 实时发送段落更新 // 实时发送段落更新
callbacks.onSegmentUpdate?.(this.segments); callbacks.onSegmentUpdate?.(this.segments);
// 追踪工具执行错误(用于后端重启后恢复)
historyManager.trackToolResult(data.tool_name, `[错误] ${data.error}`);
}, },
onToolConfirm: async (data: ToolConfirmEvent) => { onToolConfirm: async (data: ToolConfirmEvent) => {

View File

@ -715,6 +715,10 @@ export class ChatHistoryManager {
if (!projectPath) { if (!projectPath) {
console.error('[ChatHistoryManager] 无法保存压缩数据projectPath 为空'); console.error('[ChatHistoryManager] 无法保存压缩数据projectPath 为空');
// 通知用户压缩数据保存失败
vscode.window.showWarningMessage(
'对话历史压缩数据保存失败:无法确定项目路径。后端重启后可能无法恢复完整对话历史。'
);
return; 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 = { const summaryMessage: CompactionSummaryMessage = {
type: MessageType.COMPACTION_SUMMARY, type: MessageType.COMPACTION_SUMMARY,
@ -893,4 +910,14 @@ export class ChatHistoryManager {
content: text content: text
}); });
} }
/**
* 追踪新消息(工具执行结果)
*/
public trackToolResult(toolName: string, result: string): void {
this.newMessagesSinceCompaction.push({
type: 'TOOL_RESULT',
content: `[${toolName}] ${result}`
});
}
} }