Gemini CLI 修复 JSON 序列化 bug:共享引用被误判为循环引用
zero-dot7 · ghdev · 2026-10-04
google-gemini/gemini-cli 的一项 PR 修复了 safeJsonStringify 的长期缺陷:原先用全局 "seen" WeakSet 检测循环引用,导致被多处共享(但不成环)的对象——如 OTel 指标中的 endTime 对象——被错误替换为 [Circular]。
- 根因:同一对象出现在不同 DFS 分支上并非循环,但全局访问集无法区分「在别处访问过」与「在当前路径上」。
- 修法:改为只维护当前 DFS 路径——序列化子树前通过 this 加入对象键、子树完成后移除;真正的环仍在活动路径上,照常输出 [Circular],菱形共享引用则正常序列化。
- 验证:新增回归测试覆盖共享引用与真环两种情形,并做了「破坏性验证」(还原 bug 后测试失败);vitest 11/11、调用方测试 69/69 通过,eslint/prettier 干净。
对需要手写序列化/图遍历工具链的开发者是个可借鉴的经典案例。
「编程与Agent」频道最新
- eptwts:AI wrapper 拼价格没前途,该拼的是 harness 质量 — eptwts · 2026-10-04
- xAI 发布 Grok Bot:能登录你的工具、多 Agent 并行干完活的 AI 队友 — elonmusk · 2026-10-04
- BrowserPilot 开源:MCP 本地浏览器控制,逐次授权+站点白名单 — ZenovaStore · 2026-10-04
- Agent 时代坏接口的代价:从 UX 问题变成性能与成本问题 — realJessyLin · 2026-10-04
- Dimillian 用 Astra 写 Rust 游戏:布娃娃与断肢系统成形 — Dimillian · 2026-10-04
- Cursor 用 GPT-5.2 连跑一周造浏览器:300 万行 Rust 代码能渲染简单网页 — gnukeith · 2026-10-04