Commit Graph
2 Commits
Author SHA1 Message Date
thzxx e4d693c1c7 fix: v0.5.2 紧急修复 — 工具调用完全失效(引擎懒创建不带工具)+ DeepSeek 余额解析错误
CI / 全量测试 (Electron ABI) (push) Failing after 5m21s
CI / 产物编译验证 (push) Successful in 10m6s
CI / 类型检查 + Lint + 单元测试 (push) Failing after 5m42s
P0 工具调用失效(用户实测反馈:Agnes/DeepSeek 均无法调用工具):
- 根因:AgentEngineManager.createEngine 未调用 setTools。引擎是懒创建的
  (首次 sendMessage 时 getEngine),启动期的 setToolsAll 调用时 engines
  Map 为空(全是 no-op)→ 新引擎 this.tools=[] → LLM 请求不带 tools →
  模型无法发起 tool_call。症状与用户反馈完全吻合:模型口头说要调工具
  (模仿历史消息中的工具调用模式),实际不调,凭记忆瞎编结果。
- 引入点:v0.4.0 P2-10 每会话引擎重构(v0.3.x 全局单引擎时代 setTools
  直接作用于唯一引擎,无此问题)。
- 修复:createEngine 从 toolRegistry 拉取当前启用工具(registry 是启用
  状态的唯一事实源,MCP 后注册/工具开关场景均一致)。

P1 DeepSeek 余额显示错误(用户实测反馈:显示的不是真实余额):
- 根因:DeepSeek 官方 /user/balance 实际返回 balance_infos 数组格式,
  此前按扁平字段解析(data.total_balance)→ 恒为 undefined → 界面恒显示 0。
- 修复:优先解析 balance_infos[0],回退扁平格式(网关兼容);URL 规范化
  (剥离尾斜杠与 /v1 前缀 — 余额端点在根路径,chat 端点两种写法都合法)。

测试(215 → 224 用例):
- 新增 AgentEngineManager 回归测试 ×4:懒创建引擎的 LLM 请求必须携带
  registry 工具定义(本次事故的直接拦截测试)/ 禁用工具不出现 / setToolsAll
  热更新 / 无 registry 时行为不回归
- 新增 DeepSeek 余额解析测试 ×5:官方数组格式 / 扁平回退 / URL 规范化 /
  非 2xx / 网络异常
- 补强引擎链路测试:mock adapter 记录请求并断言 tools 契约 — 此前 mock
  无条件吐 tool_call 事件,掩盖了"请求未携带工具定义"的缺陷(复检盲区
  的直接教训:mock 必须断言请求契约,否则测试是道具)

验证: lint 0 / typecheck 双工程 0 / test:electron 224 全过 / build 成功
2026-08-21 22:11:11 +08:00
thzxx 49c9b25538 feat: v0.4.1 质量加固版 — 工程化基线 + 安全加固 + 测试补齐 + 体验升级
CI / 类型检查 + Lint + 单元测试 (push) Failing after 5m25s
CI / 全量测试 (Electron ABI, experimental) (push) Failing after 5m19s
CI / 产物编译验证 (push) Successful in 10m3s
工程化(从零到一):
- 新增 Gitea Actions CI(debian-latest):类型检查 + Lint + 单元测试 + 产物编译验证
- 新增 husky + lint-staged 预提交钩子(lint-staged + typecheck 门禁)
- 移除坏脚本 test:e2e(无 Playwright 配置必失败);prebuild 改用内置 fs.rmSync
- 依赖清理:移除死依赖 sql.js(2MB)/@playwright/test,@types/shell-quote 移至 devDependencies

安全加固:
- PolicyEngine 频率限制按会话隔离(多会话并发不再互抢配额)
- ConfirmationHook 拒绝记忆加 10 分钟 TTL + 恢复询问入口(新增 2 个 IPC 通道)
- Windows run_command 白名单工具(git/node/npm/npx/pnpm/yarn/tsc)改走 cmd.exe /c + 参数数组执行,收窄 shell 注入面
- web_search 四引擎 HTML 解析迁移 node-html-parser(结构化主层 + 正则降级)

缺陷修复(测试驱动发现):
- mapError 大小写缺陷:网络错误码永远落入 UNKNOWN 无法触发重试
- 搜狗解析器自我过滤:相对链接补全后又被 sogou.com 过滤导致结果全丢
- 百度复合类名重复收录:class="result c-container" 被双重匹配

测试补齐(113 → 194 用例):
- 新增 5 个测试文件:sse-stream / base-adapter / confirmation-hook / ipc-agent 编排链路 / web-search 解析器
- 覆盖 sendMessage 全分支、SSE 流解析、错误映射、确认钩子竞态/超时/批量审批

体验升级:
- OutputValidator 验证结果可见化(VALIDATION 流事件 → 聊天流提示卡)
- SettingsModal 巨型组件拆分(1503 行 → 10 个文件,可独立维护)
- MessageList 接入 react-virtuoso 真虚拟滚动(千条消息恒定开销)
- MCP 新增 streamable HTTP 传输支持(SDK 内置传输 + DB 迁移 6 + UI 双模式)
2026-08-21 13:58:48 +08:00