feat: v0.8.3 工作空间切换链路根治 · 思考强度扩档 — 启动TDZ连锁/继承丢数/回显滞后三修复 · xhigh+true档位单源 · 安全防线ready后注册 · 2217 用例全量回归 + 生产模式E2E
CI / 类型检查 + Lint + 单元测试 (push) Failing after 9m37s
CI / 全量测试 (Electron ABI) (push) Failing after 6m1s
CI / 产物编译验证 (push) Successful in 10m54s

This commit is contained in:
2026-09-08 21:14:59 +08:00
parent 4cd6e997b5
commit 9329df68af
18 changed files with 250 additions and 114 deletions
+7 -12
View File
@@ -10,7 +10,7 @@
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-0.8.2-blue?style=flat-square" alt="Version" />
<img src="https://img.shields.io/badge/version-0.8.3-blue?style=flat-square" alt="Version" />
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License" />
<img src="https://img.shields.io/badge/Electron-35-47848F?style=flat-square&logo=electron" alt="Electron" />
<img src="https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react" alt="React" />
@@ -54,19 +54,14 @@
---
## 🆕 v0.8.2 更新亮点
## 🆕 v0.8.3 更新亮点
| 特性 | 说明 |
|:---|:---|
| 🛡 **适配器图片下载 SSRF 收口** | Anthropic/Ollama 的图片 URL 下载统一走 DNS Pinning 安全通道(逐跳重定向复检 + 10MB 上限 + 类型白名单),根治"诱导模型回读内网数据"的可回读外泄通道 |
| 🔐 **根 MEMORY.md 保护根治** | 闸门从工具名单枚举反转为"任意工具的路径形参数统一精确匹配"—— delete_file / file_move / MCP 文件类工具全部纳入保护 |
| 🔌 **Anthropic 协议保真** | extended thinking 块(含签名)在工具循环多轮回传;pause_turn 长回复自动续传(预算耗尽按截断语义收尾,不再静默丢失 |
| 📦 **上下文压缩正确性** | 压缩时机移至本轮消息入列后、估算纳入 System Prompt、摘要调用重试 + 纯截断兜底、故障转移后预算校正值重置 |
| 💾 **全局配置原子写 + 自愈** | global-config.json 改为 tmp+rename 原子落盘并维护备份 —— 崩溃不再丢失全部全局配置(含 LLM 凭据) |
| 🧠 **向量记忆召回修复** | 向量检索与重要度预过滤解耦(独立召回 200 条池)、embedding 模型指纹(更换模型后惰性重算自愈)、语义记忆 access_count 更新后不再归零 |
| 🎨 **工具结果富媒体渲染** | view_image / 浏览器截图在聊天流内联预览;diff_viewer / file_editor dry_run 渲染为增删着色的 unified diff 视图 |
| ⌨️ **交互断链修复** | 引用回复 / Ctrl+L 聚焦输入框(受控输入桥根治)、IPC 桥缺失兜底、根级 ErrorBoundary 逐区隔离、/export 全量导出、会话列表实时刷新、Onboarding 首帧闪烁消除 |
| 🌐 **i18n 与行为对齐** | 托盘菜单/系统对话框/剩余 8 处文案出层;MiMo 思考未配置默认关闭(尊重用户意图)、MiMo 联网搜索引用回填正文、OpenAI 推理模型 stop 参数前置拦截 |
| 🔄 **工作空间切换保存修复** | 根治"确认切换报错、重启后仍回旧空间":CSP 注入遗留模块顶层导致生产环境每次启动抛 "Session can only be received when app is ready",主进程模块求值中断,连锁令 `workspace.path` 保存链路的动态 `import('../main')` 抛 TDZ 死区错误。现安全防线(权限白名单 + CSP)统一在 ready 后、窗口创建前注册并首次真正生效,工作空间路径持久化抽离为独立模块(`utils/workspace-path.ts`)消除循环依赖;启动时再以 workspace-config.json(权威源)回写对齐当前空间 DB —— 修复继承复制滞后导致的"切换重启后设置页回显旧路径/空路径" |
| 💾 **继承数据库静默丢数修复** | `workspace:inheritFiles` 的 SQLite `backup()` 返回 Promise 未 await,源库被提前 `close()` 掐断备份 —— 目标 agent.db 仅剩空壳单页(切换后历史会话/记忆/Trace 静默丢失,重启后全量重建空表),且备份失败 rejection 无人接住(unhandledRejection)。现等待备份完成再关闭源库,失败仍回退 `copyFileSync` |
| 🧠 **思考强度新增 xhigh / true 档** | `agent.thinkingEffort` 扩展为 6 档:low / medium / high / **xhigh** / max / **true**。xhigh 原样下发 Ollama(Qwen3 等新思考模板的原生最高档,旧版只发 high 会触发模板 500 "Unexpected reasoning effort");`true` 不指定档位,交由模型思考模板用自身默认档。仅支持固定档位的 Provider 就近降档映射(OpenAI/DeepSeek → highAnthropic → 24576/16384 token 预算 |
| 🎛 **思考参数档位单源** | `MetonaThinkingEffort` 类型收敛至 IR 层单一来源(引擎/引擎配置注入/UI 共用),消除四处内联 union 的漂移风险 |
---
@@ -670,7 +665,7 @@ OLLAMA_BASE_URL=http://localhost:11434
| `agent.totalTimeoutMs` | `600000` | Agent 总超时 (ms) |
| `agent.toolExecutionTimeoutMs` | `120000` | 单个工具执行超时 (ms) |
| `agent.thinkingEnabled` | `true` | 启用 Thinking 推理模式 |
| `agent.thinkingEffort` | `high` | 推理强度 (low / medium / high / max) |
| `agent.thinkingEffort` | `high` | 推理强度 (low / medium / high / xhigh / max / true —— xhigh 为 Qwen3 等模板原生档,true 交由模型默认档,v0.8.3) |
| `agent.confirmationTimeoutMs` | `120000` | 确认弹窗超时 (30s ~ 600s) |
| `agent.enableReflection` | `false` | 反思阶段开关 — 开启后每轮工具执行经过 REFLECTING 状态(失败结果告警,不阻断) |
| `memory.consolidationEnabled` | `true` | 会话结束记忆固化总开关(v0.7.3 节流策略) |