fix: 修复多轮对话400/Provider通知反复弹出/浏览器环境隔离三大缺陷

1. 多轮对话第二次发消息 AI 不响应 (CRITICAL)

handlers.ts: 保存 tool 结果消息到数据库,DeepSeek API 要求 assistant 有 tool_calls 时后续必须有对应 tool 结果消息

openai-format.ts: assistant 有 tool_calls 时 content 设为 null (API 规范,空字符串会导致 400)

agent-store.ts: 前端加载历史时过滤 tool 消息,避免冗余卡片

2. Provider 切换通知每次发消息都弹出

main.ts: reloadAdapter 添加配置签名比较 (lastConfigSig),配置未变化时幂等返回 true,不再重建 adapter 或发 toast

3. 浏览器工具无环境隔离

browser-window-manager.ts: 独立 partition 隔离 Cookie/存储; 恢复 webSecurity,CORS 通过 webRequest 处理; setWindowOpenHandler 拦截 window.open; 并发互斥锁串行化 open 调用; destroy() 改用 win.destroy() + clearStorageData 清理残留
This commit is contained in:
thzxx
2026-07-12 21:21:55 +08:00
parent d39f390be4
commit 4f5f570ac8
6 changed files with 141 additions and 51 deletions
+18
View File
@@ -267,6 +267,24 @@ export function registerAllIPCHandlers(
iteration: step.iteration,
});
}
// v0.3.0 修复: 保存 tool 结果消息到数据库
// DeepSeek/OpenAI API 要求 assistant 消息有 tool_calls 时,后续必须有对应的 tool 结果消息
// 缺失会导致第二次发消息时 API 返回 400 Bad Request
if (step.toolResults) {
for (const result of step.toolResults) {
const resultContent = typeof result.result === 'string'
? result.result
: JSON.stringify(result.result);
sessionService.saveMessage({
sessionId,
role: 'tool',
content: result.error ?? resultContent,
toolResult: result,
iteration: step.iteration,
});
}
}
}
// 更新 Token 统计