Oh My Pi v16.1.11 发布 —— 20 个修复覆盖七个包,从推理泄露到本地模型计费边界全清了

图片和视觉的三处硬伤
OpenAI Responses API 的历史回放会把图像生成管线的 provider-only 字段带到下一轮请求里。如果中间挂了兼容代理,代理直接不认识多余的字段——报 Unknown parameter: input[1].action。排查到头以为是代理配置问题,结果是 pi 自己回放数据时没做过滤。修复就是把回放时多出来的 provider-only 字段清干净。
另一个视觉相关的:Umans 的 umans-glm-5.1 / umans-glm-5.2 在 models/info 上报了 supports_vision: "via-handoff",意思是视觉走独立 handoff 预处理,不接受原始 image block。但代码 umansSupportsVision 把非空字符串当成原生视觉支持——图片 prompt 直接发给 GLM,返回 400。修复把判断收紧到 supports_vision === true 才算数。
Codex 那边也有个图片问题:图片读取走了 WebP 重编码,下一轮拿到 input_image.image_url 直接报错——Codex 只认 PNG 和 JPEG。现在不碰编码器,保持原生格式。
Gemini 3.5 Flash 的推理 JSON 终于被截住了
gemini-3.5-flash 的流式输出里,模型内部推理 JSON 会泄露到用户可见文本中。修复的实现挺有意思——流解析器用一个花括号平衡计数算法来精准切掉前导的 thought JSON 块,双引号未转义和工具名动态推导都做了兜底,后续文本 delta 不会丢失也不触发空响应重试。不是简单的 strip,是能读懂 JSON 边界的解析。
配置和模式的三个隐蔽问题
本地 tinyModel 不再偷偷走线上计费。 之前 generateSessionTitle 在用户配了本地 providers.tinyModel 时,仍开了一个 10s 超时竞争——本地 worker 返回 null 就立刻发线上请求。OpenRouter 用户会发现被收了一笔标题生成的费用。现在本地失败直接留空标题走 logger.warn,不再秒切线上。
Plan mode 里 write 凭空消失。 进入 plan mode 时 tools.discoveryMode: "all" 把 write 工具过滤掉了,agent 只能用 edit 来凑。修复在 plan mode 入口强制激活了 write。
Auto thinking 模式在会话恢复后不会变成死值了。 --continue / --resume 之后之前设的 auto 思维模式冻结在最后一次解析值上。现在 log 会同时记录选择器(auto vs 具体值)和解析后的 effort,恢复后仍然是 auto。
顺手修了的
• edit/patch/replace 走 ACP client bridge——Zed 等编辑器写文件后立刻更新 diagnostics,不用等 workspace reload
• OpenCode MCP 发现——数组命令规范化为 stdio 可执行文件加参数
• Ctrl+Q 提交——Windows Terminal 没有 Ctrl+Enter,hook editor 现在 Ctrl+Q 也认
• pi.sendMessage({ display: true }) 不再渲染两次
• 纯 Jujutsu 工作区保护——只有 .jj/repo/ 没有 .git/ 时抛明确错误
• Hindsight 保留过滤标点填充的 assistant turn——纯 . 或空内容的 turn 不再污染 retain bank
• /resume 子 session 显示 fork 标签
• 流式输出滚动缓冲稳定性改进
• 代码块中的 # 注释 不再被 extractTitle 截胡
安装了 npm 版本或 bun 版本的用户 bun update -g @oh-my-pi/pi-coding-agent 即可更新。Homebrew 用户 brew upgrade can1357/tap/omp。curl 安装的重新跑一遍 curl -fsSL https://omp.sh/install | sh。
📢 关注我,获取最新开源更新日志和开发者工具动态。
#Oh My Pi #版本更新 #agent 工具 #修复 #AI写代码的小任 #LLM更新报告