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:
@@ -38,7 +38,12 @@ export function buildOpenAICompatibleMessages(
|
||||
const nonSystemMessages = request.messages
|
||||
.filter((m) => m.role !== 'system')
|
||||
.map((m) => {
|
||||
const msg: Record<string, unknown> = { role: m.role, content: m.content };
|
||||
// v0.3.0 修复: assistant 消息有 tool_calls 但 content 为空时,content 设为 null
|
||||
// DeepSeek/OpenAI API 要求有 tool_calls 的 assistant 消息 content 必须为 null 而非空字符串
|
||||
const msg: Record<string, unknown> = {
|
||||
role: m.role,
|
||||
content: m.content,
|
||||
};
|
||||
|
||||
// === Assistant 消息 ===
|
||||
if (m.role === 'assistant') {
|
||||
@@ -49,6 +54,8 @@ export function buildOpenAICompatibleMessages(
|
||||
type: 'function',
|
||||
function: { name: tc.name, arguments: JSON.stringify(tc.args) },
|
||||
}));
|
||||
// 有 tool_calls 时 content 必须为 null(API 规范)
|
||||
if (!m.content) msg.content = null;
|
||||
}
|
||||
// 推理内容(无论是否有工具调用,都保留 reasoning_content)
|
||||
if (m.reasoningContent) {
|
||||
|
||||
Reference in New Issue
Block a user