fix: 修复自动压缩机制的多个问题
- P0: 新增工具执行结果追踪(trackToolResult),防止后端重启丢失 - P1: 版本冲突检查改为从尾部扫描,与加载逻辑一致 - P1: projectPath为空时添加用户警告通知 - 追踪工具错误信息,保留失败记录
This commit is contained in:
@ -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) => {
|
||||||
|
|||||||
@ -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}`
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user