feat:实现任务历史加载功能 - 完整还原对话样式

主要改进:
1. 实现selectConversation功能,支持点击任务历史列表加载会话
2. 优化会话存储格式,保存完整的segments信息(包括工具调用)
3. 添加旧格式到新格式的自动转换,兼容历史数据
4. 改进错误处理,自动清理无效的空任务目录
5. 优化路径编码逻辑,确保跨平台一致性
6. 前端支持clearChat、addUserMessage、addAiMessage命令

技术细节:
- 扩展AiMessage数据结构,添加segments字段
- 修改messageHandler保存逻辑,将完整segments保存到一条消息
- 实现loadTaskSession方法,加载指定任务的完整会话
- 添加自动清理机制,删除无效的空任务目录
This commit is contained in:
Roe-xin
2025-12-28 10:38:54 +08:00
parent 25a8ea5aa4
commit 9bdaf34471
7 changed files with 1276 additions and 53 deletions

View File

@ -170,35 +170,16 @@ async function handleUserMessageWithBackend(
});
console.log('[MessageHandler] postMessage 返回值:', result);
// 按照 segments 顺序保存AI响应到历史记录
// 保存完整的 segments 到历史记录
try {
// 遍历 segments,按顺序保存每个段落
for (const segment of segments) {
if (segment.type === 'text' && segment.content) {
// 保存文本消息
await historyManager.addAiMessage(segment.content);
} else if (segment.type === 'tool') {
// 保存工具调用请求作为AI消息的一部分
const toolRequest = {
id: segment.askId || `tool_${Date.now()}`,
name: segment.toolName || '',
arguments: ''
};
await historyManager.addAiMessage('', [toolRequest]);
// 将完整的 segments 保存到一条 AI 消息中
// 这样加载时可以完整还原对话样式
const textContent = segments
.filter(s => s.type === 'text' && s.content)
.map(s => s.content)
.join('\n');
// 如果有工具执行结果,保存工具执行结果
if (segment.toolResult) {
await historyManager.addToolExecutionResult(
toolRequest.id,
segment.toolName || '',
segment.toolResult
);
}
} else if (segment.type === 'question') {
// 保存问题作为AI消息
await historyManager.addAiMessage(segment.question || '');
}
}
await historyManager.addAiMessage(textContent, undefined, segments);
} catch (error) {
console.warn("保存AI响应历史失败:", error);
}