跳到主要内容

53 篇博文 含有标签「Oh My Pi」

查看所有标签

Oh My Pi v16.3.3 发布 —— 动态模型切换,Cursor Agent 修复,TUI CPU 降低

· 阅读需 2 分钟

Oh My Pi v16.3.3 封面

动态模型切换

Agent 现在支持 mid-run 无缝切换模型(#4344),运行中可以在不用重启的情况下切换模型。

Claude Fable 使用额度追踪

新增了对 Anthropic 分层和周级使用额度的追踪与凭据排名,包括 Claude Fable 周上限。一个模型用完额度不会阻塞整个 OAuth 凭据,基于 drain-rate 压力优化凭据选择。

Cursor Agent 修复

  • 原生工具调用在 replay 时不再重复执行(#4351)
  • 持久化的 transcript 在执行工具后保留工具调用结构
  • Cursor 代理隧道不再无限挂起,加入了超时和 abort 处理

SSH 超时加固

  • SSH 工具在不可达主机上不再挂死,30 秒超时后自动中止(#4286)
  • SSH 流式占位符不再在 TUI 中留下脏行(#4330)

TUI CPU 优化

多项渲染优化:跳过快渲染的预渲染循环、流式播放时原地迭代、实时工具旋转器渲染合并到字形推进速率(#4353),JIT CPU 使用显著降低。

其他亮点

  • 文件编辑修复:大文件结构摘要读取后,编辑不再被频繁拒绝(#4225)
  • Gemini 网页搜索:现在正确使用配置的搜索模型(#4313)
  • macOS SSHFS 检测:不再重复尝试挂载不可用的挂载点(#4320)
  • 插件安装/卸载超时:pipe-buffer 死锁修复(#4287)
  • DAP 客户端超时:writeMessage 超时 + 泄漏适配器清理(#4294)
  • GitHub PR 状态栏超时:不再因 gh pr lookup 挂死(#4293)
  • MCP OAuth 错误提示改进:客户端注册关闭时提示配置 client_credentials(#4308)

升级方式:

npm update -g oh-my-pi

完整更新日志:GitHub Release v16.3.3

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #v16.3.3 #AI编程工具 #LLM更新报告 #AI写代码的小任

Oh My Pi v16.2.5 发布 —— 本地模型上下文修复,子 Agent 路径优化,并发上限修复

· 阅读需 2 分钟

Oh My Pi v16.2.5 封面

Ollama/llama.cpp 上下文窗口修复

之前 Ollama 和 llama.cpp 的本地模型上下文窗口检测会读取模型训练元数据而不是运行时 num_ctx / n_ctx,导致上下文窗口被高估,压缩重试的 prompt 会被 llama.cpp 拒绝。现在改为使用运行时实际值(#3752)。

子 Agent 工作路径优化

隔离子 agent 的工作路径之前会嵌入长 task id 和 merged 字样,路径又长又丑。现在改用紧凑的哈希分段,挂载目录改为 m,路径短了很多(#3756)。

Provider 并发上限不再死锁

之前 provider 级别的 maxConcurrency 限制(如 providers.ollama-cloud.maxConcurrency)会包住整个子 agent 生命周期——父 agent 在所有子 agent 运行时持有所有并发槽位,如果子 agent 也调用同一个 provider 就会死锁。现在信号量只包住每个 HTTP 请求,父 agent 在工具调用之间释放槽位,子 agent 可以正常获取(#3749)。

grep 内置命令兼容 --color=auto

进程内 grep 内置命令之前会拒绝 GNU grep 的 --color/--colour 标志(有或没有 =WHEN),导致 bash 里常见的 alias grep='grep --color=auto' 在任何 pipeline 中直接失败。现在内置命令会接受并忽略 --color 参数(#3755)。

其他修复

  • Google/Cloud Code Assist 断流修复:流式响应中途断连(截断的响应)不再被视为 fatal 错误,改为 transient 让 coding agent 自动重试
  • 状态栏改进:git worktree 路径折叠为项目名 + worktree 图标
  • Ctrl+Q/Ctrl+Enter 粘贴修复:之前的 [Paste #N] 标记不会被展开(#3737)
  • 会话历史清理:可恢复的上下文溢出压缩不再保留失败的 assistant error 轮次在可见历史中(#3747)
  • 跨工作区编辑修复:编辑工作区外的文件(如 ~/.claude/settings.json)不再报 "File not found"
  • 结构化输出修复:子 agent 带 schema 的 taskschema_violation 修复

升级方式:

npm update -g oh-my-pi

完整更新日志:GitHub Release v16.2.5

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #v16.2.5 #MCP #LLM更新报告 #AI写代码的小任

Oh My Pi v16.1.23 发布 —— 中间压缩,手动 GC,uutils 内置命令,Qwen 推理修复

· 阅读需 2 分钟

Oh My Pi v16.1.23 封面

中间压缩

新增 compaction.midTurnEnabled,允许在工具循环中间自动触发阈值压缩,而不是非要等到回合结束,长工具链场景下可以有效控制上下文膨胀(#3525)。

手动 omp gc 存储维护

新增 omp gc 命令用于 blob 回收、冷会话归档和 SQLite WAL 检查点的手动维护,可配合 gc.* 配置使用(#3540)。

uutils 内置命令

在嵌入式 shell 中引入了基于 uutils 的进程内内置命令:catheadtailwcsortuniqlsfindgrepmkdirrmmv。这些命令直接在 shell 进程内执行(无需 fork/exec),路径解析和管道/重定向行为与系统命令一致。可以通过 PI_DISABLE_UUTILS_BUILTINS 关闭。

Qwen 本地推理缓存修复

修复了 llama.cpp 等本地服务器上 Qwen3.6+ 聊天模板的问题:每个新用户消息都会导致完整提示重新处理,即使 replayReasoningContent 已开启。现在通过 preserve_thinking: true 参数,确保 think 块不会因为"条数变旧"而被删掉,本地推理的 KV 缓存可以正常复用(#3541)。

其他主要修复

  • Snapcompact 迁移修复:从 snapcompact 切换到 context-full 策略时,旧的帧数据不再泄漏到新的压缩中(#3561)
  • Windows MCP 窗口修复:Windows 上 MCP 包装链不再弹出不可见的 cmd 窗口(#3544, #3567)
  • LSP 缓存失效修复reload * 后新增的 .omp/lsp.json 不再被忽略(#3546)
  • 模型角色修复:扩展注册的 provider 上的 modelRoles.default 在全新启动时不再被忽略(#3569)
  • 计划审批模型保留:计划审批使用所选角色的模型,不再莫名其妙被切换(#3554)

升级方式:

npm update -g oh-my-pi

完整更新日志:GitHub Release v16.1.23

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #v16.1.23 #MCP #LLM更新报告 #AI写代码的小任

Oh My Pi v16.1.17 发布 —— yield 门修复,Anthropic 代理修复,多项底层加固

· 阅读需 2 分钟

Oh My Pi v16.1.17 封面

Yield 门不再被时钟回拨卡死

yieldIfDue() 是 Agent 循环里让出事件循环的核心机制。如果系统时钟发生了向后跳变(NTP 调整或 mock 测试),旧的未来时间戳会让 yield 门永远卡住——Agent 不再让出,整个循环就卡死了。现在遇到向后时钟跳变会当作「已经到期」处理,并重新锚定时间(#3330)。

Anthropic 自定义代理认证修复

如果你用 Anthropic API 走自定义代理(比如自建反向代理),之前 model.headersANTHROPIC_CUSTOM_HEADERS 里设的 Authorization / X-Api-Key 会被静默丢弃,导致代理认证失败。现在非 OAuth 请求会优先使用调用者提供的认证头(#3391)。

OpenRouter 推理签名修复

OpenRouter 上的 Anthropic 模型有两个修复:

  • cache_control 不再被省略,prompt 缓存能正常工作了(#3397)
  • 多轮推理的 follow-up 请求不再因为携带了之前的 thinking 块签名而导致 400 错误——现在 replay 时会自动清理历史推理签名(#3399)

Ollama Cloud 输出 Token 上限修复

Ollama Cloud 的 num_predict 最大是 65536,但旧缓存里如果存了 maxTokens: 1048576,请求就会 400。现在在发送前会自动 clamp 到 65536(#3394)。

其他修复

  • GitHub Copilot 企业端点不再因为报告支持 vision 但实际拒绝图片而 400(#3387)
  • 韩文输入(Hangul Jamo)在 Ghostty 终端下不再渲染异常(#1800)
  • 桌面通知在 tmux 下不再被静默丢弃,改用 DCS 透传 + BEL 回退(#3396)
  • omp usage 不再重复显示 provider 级别的免责声明(#3312)
  • Snapcompact 上下文压缩在子 1M token 模型下不再无限循环警告(#3249)
  • Stats 统计不再因为 fork 会话而重复计数(#3382)
  • omp plugin install 安装的 marketplace 插件不再注册后不生效(#3245)

升级方式:

brew upgrade oh-my-pi
npm update -g oh-my-pi

完整更新日志:GitHub Release v16.1.17

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #v16.1.17 #Anthropic #MCP #LLM更新报告 #AI写代码的小任

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

· 阅读需 4 分钟

Oh My Pi v16.1.11 封面

图片和视觉的三处硬伤

OpenAI Responses API 的历史回放会把图像生成管线的 provider-only 字段带到下一轮请求里。如果中间挂了兼容代理,代理直接不认识多余的字段——报 Unknown parameter: input[1].action。排查到头以为是代理配置问题,结果是 pi 自己回放数据时没做过滤。修复就是把回放时多出来的 provider-only 字段清干净。

另一个视觉相关的:Umans 的 umans-glm-5.1 / umans-glm-5.2models/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 截胡


Oh My Pi v16.1.12 发布 —— 一个配置的 secrets 让 Codex 图片全挂,现在彻底修了

· 阅读需 3 分钟

Oh My Pi v16.1.12 封面

Secrets obfuscation 不再屠杀图片和签名

改动本身只有几行配置项的变化。之前的 obfuscator 是「拿到出站请求 JSON,深递归遍历所有字符串值,遇到包含配置 secret 子串的就替换为 #HASH#」。听起来挺通用——但图片 base64 里偶然包含配置 secret 的片段怎么办?Opaque provider 回放签名、加密推理字段里匹配了「response」怎么办?

Codex 在 oh-my-pi 上读取图片时,obfuscator 在 image_url 的 base64 里找到了 secret 子串,插入了 #HASH# 占位符,base64 解码失败,下一轮请求收到 Invalid 报错。

修复后的 obfuscation 是 opt-in 且 fully typed 的:

只走 user messages、tool-result messages、@file 提及的 developer messages——系统 prompt 和工具 schema 不碰

图片字节和签名/加密推理字段永不改写——不再误伤 base64 和 provider 专用字段

工具调用参数是唯一走 JSON 遍历的字段——其他字段类型不走 deep walk

纯文本 secret 和不足 8 字符的正则匹配被忽略——防止在「response」「key」等短单词上误触发

算下来「不做什么」比「做什么」多了好几倍规则。obfuscation 失败的损失比漏掩一个 secret 的风险更重。

RPC/ACP 启动不再怼掉显式配置

第二个波及面不小的修复:applyDefaultSettingOverrides 在设置加载完成后,会重新把 schema 默认值作为运行时 override 写回去——导致 embedder、project、--config 覆盖层、全局配置中显式设置的参数全部被清零。

受影响的配置项列表相当大:

task.isolation.{mode,merge,commits}

task.eagertask.batchtask.maxConcurrencytask.maxRecursionDepth

task.disabledAgentstask.agentModelOverrides

memory.backendmemories.enabled

advisor.{enabled,subagents,syncBacklog,immuneTurns}

• RPC-only async.{enabled,maxJobs}bash.autoBackground.{enabled,thresholdMs}

修复就是把 isConfigured() 守卫加回去——host 默认只在配置项未被显式设置时才生效。配过的不碰。

Julia 语法高亮

highlightCodesupportsLanguage 现在支持 jl / julia 别名。syntect 默认不内置 Julia 语法定义——oh-my-pi 自己 vendored 了一份 Julia.sublime-syntax 进去。写 Julia 的 agent 用户不用再看到纯黑白代码了。


Oh My Pi v16.1.13—15 三连发 —— Ruby/Julia 内核、Proxy、Share 服务端

· 阅读需 5 分钟

Oh My Pi v16.1.13-15 封面

Ruby 和 Julia 现在能在 Oh My Pi 里跑代码了

v16.1.14 给 eval 系统加了两个新后端——Ruby(language: "rb")和 Julia(language: "jl")。这俩不是简单的 shell 调用包装,是完整的持久式子进程内核,跟之前 Python eval 走同一套 NDJSON 协议——有独立的帧通道、stdout 通道、SIGINT 取消(不炸内核)、按 owner 清理的进程生命周期。

这意味着 agent 可以在一个 Ruby 或 Julia 会话里保持状态、变量、加载的库,跨多次调用不丢。两个后端默认关闭,通过 eval.rb / eval.jl 配置或 PI_RB / PI_JL 环境变量开启,还可以指定 ruby.interpreter / julia.interpreter 路径。

预置的工具桥接函数跟 Python 侧一样全——displayreadwriteappendtreediffenvoutput,以及 tool.<name> 桥接代理、completionagentparallelpipelinelogphasebudget。Julia 版本还带了结构化 schema 解析和 return_handle DAG 塑形。

你要是用 Oh My Pi 写数据处理脚本,Ruby 或 Julia 做后端比反复调 shell 顺手得多。

代理支持来了

PI_PROXYPI_PROXY_<PROVIDER> 环境变量现在可以给模型 provider 配 HTTP 代理了,还支持 NO_PROXY 跳过内网地址和云厂商 metadata 服务。公司网络得走代理才能连外网的场景终于能用了。

Share 不再走 GitHub Gist,不会被限速了

v16.1.15 改了 /share 的存储后端——默认上传到 Oh My Pi 自己的 share server,不再走 GitHub Gist。

原因是 Gist 的未认证 API 每个 IP 每小时只能请求 60 次。共享 NAT 环境或频繁刷新分享页面的用户会看到 Failed to load session: Gist fetch failed: HTTP 403。现在 viewer 从 share server 读,不走 GitHub API,限速问题不复存在。

如果想切回 Gist 托管,设置 share.store: "gist"

Shell 不再硬性禁止用「替代品」

v16.1.14 对系统 prompt 做了一处有意思的软化。以前 Oh My Pi 的 prompt 里明确禁止 agent 用 shell 做某些事——比如禁止 grep/rg 代替 search、禁止 sed -i 代替 edit、禁止 cat/head/tail 代替 read。出发点是好的(让 agent 用专用工具更可靠),但实际效果是 agent 有时候会绕一大圈去用专用工具,比直接一句 shell 慢得多。

现在那些 FORBIDDEN/NEVER 的措辞改成了"建议优先使用专用工具",不再是绝对禁令。如果你确实想要 agent 完全不碰这些命令,可以开 bashInterceptor(默认关闭)。

后台进程跨 Turn 存活

v16.1.15 修了一个隐蔽的问题:用 nohup& 在 bash turn 里启动的后台进程,在那个 turn 的 shell 被回收时会一起被干掉。现在 shell 会保留到后台进程退出才回收,后台命令可以跨 turn 运行,同时随着主进程一起终止,不会变成孤儿。

新 Provider:Devin 和 Sakana AI

v16.1.13 加了 Devin provider,v16.1.14 加了 Sakana AI(Fugu 模型)。Fugu 有完整的模型发现和 Responses API 元数据支持。

其他值得注意的修复

Fireworks 登录修复——之前 /login fireworks 会去查你的部署列表,没部署的账号直接 500。现在改走控制面版 catalog API,认证不再依赖部署状态

OpenAI Responses 图片回放修复——失败的图片生成请求的 ig_... 临时 ID 不会被留在回放里导致后续 404,现在正确丢弃了

Provider session 跨 /model 切换清理——从 openai-completions 切到别的 provider 时,旧 provider 的缓存状态(strict-tools 禁用作用域、reasoning-effort fallback)会一起清掉,不会残留

Windows MCP stdio 修复——Windows 上 npx / yarn 等 shim 找不到 .cmd/.bat 后缀导致启动即挂的问题,现在通过 cmd.exe /d /s /c 绕道解决了

Perplexity 搜索不抢路由了——只配了 OpenRouter key 的用户不会再被默认路由到 Perplexity 去计费

Bracketed paste 不再误认 .png——粘贴纯文字 .png 文件名不会再被当成图片附件

升级方式:

curl -fsSL https://omp.sh/install | sh
brew install can1357/tap/omp
bun install -g @oh-my-pi/pi-coding-agent

完整更新日志:v16.1.13 Release | v16.1.14 | v16.1.15

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #版本更新 #Ruby #Julia #代理 #Share #AI写代码的小任 #LLM更新报告

Oh My Pi v16.1.10 发布 —— JSON 解析器自研重写,流式输出丢失和 WebSocket 串帧全修了

· 阅读需 5 分钟

Oh My Pi v16.1.10 封面

自研 JSON 解析器:RelaxedJson 替换 partial-json

之前 pi-ai 用 partial-json 处理 LLM 返回的 JSON。问题是 LLM 输出的 JSON 几乎没有严格按照规范写过——单引号字符串、尾随逗号、Python 的 True/False/None、行内和块注释、原始控制字符、无效的 escape 序列,哪个模型都能偶尔吐一点。partial-json 处理不了就抛异常,用户除了重试别无选择。

v16.1.10 用自研的 RelaxedJson 完全替换了 partial-json。新解析器接受单引号字符串、未加引号的 object key、尾随和多余逗号、///* */ 注释、Python 布尔和 None 字面量、原始控制字符、无效 escape 和未转义的单引号——几乎覆盖了 LLM 会输出的所有 JSON 变体。最终解析仍在截断或乱码输入上正确报错,也拒绝 JS 独有的 NaN/Infinity。一句话:只要 LLM 吐的是人能看懂的东西,RelaxedJson 就能吃进去。partial-json 依赖已从项目中移除。

Tool-call ID 修复链——Anthropic 模型的工具调用 ID 规范化、Anthropic Messages 回放中工具调用 ID 的清洗、以及 transformMessages 把孤立工具结果拉到重用 ID 上的问题。三个修复贯穿了同一根根因:ID 的生成、传递和清洗链路上各有各的位置瑕疵,现在全链路对齐了。

Codex WebSocket 串帧:回连不再张冠李戴

Codex Responses WebSocket transport 藏了一个烦人的 bug:当你复用 WebSocket 连接发出新一轮请求时,服务端返回的数据帧可能被错误地分配到上一轮的输出里。终端上看到的就是"输出串了"——明明是新 prompt 的回答,显示的却是前一个问题的尾巴。

根因在于 WebSocket 连接上消息帧的归属判断逻辑不够严谨,复用连接时上下文切换标记丢失。修复后每一帧输出都能正确关联到当前轮的请求,连接复用不再是风险。

pi-coding-agent:ARIA 工具上线,write 和 find 不再隐身

编码 agent 包在这个版本拿到了两个新能力。

tab.ariaSnapshot(selector?) 按 Playwright 格式输出 ARIA 树 YAML——做浏览器自动化的场景下,你可以直接拿到页面的无障碍结构树,比翻 DOM 更直观。配合新增的 tab.ref("e5")aria-ref=e5 选择器,实现了基于 ARIA 引用的快速元素定位。写自动化脚本时不用再抠 CSS 选择器,标一个 ref 就能精准命中。

还有一个重要的行为变更:writefind 工具现在被标记为 essential,在 tools.discoveryMode === "all" 模式下不会被过滤掉。之前有些场景下这两个工具在发现模式中凭空消失,agent 想写文件却找不到 write 工具,现在这个问题不存在了。流式工具调用预览在工具完成后卡在占位符 body 上的问题也已修复。

pi-tui:流式输出不再消失在滚动缓冲区

pi-tui 的终端输出有一个隐蔽的 bug:当内容溢出视口后,commit-unstable "barrier" 区块之下的流式输出会被原生滚动缓冲区吞掉。你看到的景象是——能往回滚动看到之前的历史内容,但最新输出的"尾巴"凭空消失了。

修复后的行为:所有流式输出都正确保留在原生滚动缓冲区中,无论视口是否溢出、无论 barrier 块的位置在哪。对于重度终端用户来说,这是一个显著改善体验的修复——终于可以在 TUI 里放心滚回去查之前的输出了。

agent-core:Label 中断不再留下残损工具调用

Labelled user interrupts(带标签的用户中断)在触发时有一个边缘情况:如果当前正在流式接收工具调用,而流尚未发送 toolcall_end 标记,中断后的回放会残留一段不完整的工具调用 ID。这些残损 ID 在重放时导致匹配失败或解析异常。

修复逻辑很直接——中断发生时清除未完成的流式工具调用段,确保进入回放状态时所有工具调用都是完整可用的。

分级与细节修复

DashScope 429 限流分类修复:之前阿里云 DashScope 返回 429 限流错误时,被归类为凭据失败,导致客户端误认为 API Key 无效而将其标记为失效。现在 429 被正确识别为限流,不会触发 Key 失效逻辑。

OpenCode Go 401 配额错误分类修复:OpenCode Go 返回的 401 Insufficient balance 之前被当作未知错误处理。现在归类为 usage-limit 错误,余额不足时会触发合理的重试或降级策略。

升级方式

curl -fsSL https://omp.sh/install | sh # macOS/Linux
npm install -g @oh-my-pi/pi-coding-agent # or bun install -g @oh-my-pi/pi-coding-agent
brew install can1357/tap/omp # Homebrew

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #版本更新 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.1.8 发布 —— 思考脉冲升级,Prose Only Thinking 上线

· 阅读需 6 分钟

Oh My Pi v16.1.8 封面

🔦 Prose Only Thinking —— 思考中的代码终于可以隐身了

用 omp 写代码的人应该都有这个体验:模型在想问题的时候,思考轨迹里经常夹杂大量代码块的草稿、残缺片段、甚至完全跑偏的试错。在开发者眼里这是噪音,在你只想看推理脉络的时候尤其让人分心。

v16.1.8 的 Prose Only Thinking 设置干脆地解决了这件事——AI 思考轨迹渲染时把代码块全部隐藏,只保留纯文字的推理过程。这个开关一开,思考阶段的阅读压力直接降一个量级。

这个功能的价值不在于"隐藏"本身,而在于它承认了两种阅读模式的存在:debug 时需要看到所有代码草稿,但回顾意图脉络时只需要文字。一个设置解决两种场景,比手动过滤优雅得多。

⚡ 思考脉冲升级 —— 每秒 token 数实时可见

Oh My Pi 团队在 TUI(Terminal User Interface,终端用户界面)细节上一向愿意花心思。这次他们把思考脉冲动画改成了更快的星爆旋转,同时在脉冲旁边加了一个 tokens/秒 的实时速率显示

乍看是装饰性改动,实际用起来感受完全不同。之前你只知道"它在想",现在你能看到它想得有多快。习惯盯着 terminal 等结果的人,看到 50t/s 和 15t/s 时,对远端服务器负载的判断是完全不同的。这个数字让等待变成了另一种信息。

如果说 Prose Only Thinking 是用户体验层面的认真,那这个脉冲升级就是 omp 开发者趣味的外露。geek,但意外地实用。

🛠️ Auto-compaction 修复 —— 藏得最深也最痛的 bug

这次有一个修复值得所有用户关注。compactionContextTokens(…) 现在会取 provider 报告的 token 数和本地估算的 conversation 大小的较低值来做 compaction 决策。

翻译成白话:之前如果你用了 payload 变换(比如某些 provider 的请求压缩),provider 报告的 token 数会比真实历史小。系统基于这个缩小后的数字判断"还不到压缩时机",结果会话越长、越不做压缩、最终超限。这也是为什么有用户反馈"对话也没多长就爆了"。

这个 bug 沉默但致命——不影响单次推理,但会偷偷劣化长会话的稳定性。v16.1.8 修复后,不管 payload 怎么变换,compaction 决策都由本地的真实大小说了算。

🔧 其余值得关注的变化

协作协议升级(#3144)

协作者模块和通信层同步升到 COLLAB_PROTO=2,修复了大型协作 session 中 guest 端的假死问题。如果团队常用 /join 做多人协同,这个升级能明显减少掉线感。API(Application Programming Interface,应用程序接口)有 break,升级后所有参与者需要同步更新。

多 provider 修复集中落地

• Bedrock /btw 不再因之前遗留的工具调用失败(#3124)——这个 bug 影响所有在 Bedrock 上使用侧信道功能的用户

• Anthropic Messages 的 bad record MAC TLS 层间歇性故障被正确归入重试分类(#3134)——之前这些错误会在重试耗尽前直接冒出来,现在会等到预算用完才报错

• Fireworks 上托管 Qwen 模型因 enable_thinking 字段报 400 的问题已修复(#2864)——Fireworks/Qwen 用户之前根本没法用 thinking 模式

• openai-codex-responses 现在正确转发 sampling 控制参数到 Codex 请求体(#3117)——之前温度、top_p 等控制参数传不过去,Codex 用户等于一直在用默认采样

• MiMo 模型在 OpenAI 兼容网关只暴露被接受的 reasoning tiers(#2864)——避免选到一个不可用的 tier 然后跑不起来

TUI 细节打磨

slash 命令加了动态描述挂钩,自动补全时可以预览每个命令的实时状态。/btw 完成后出现复制按钮,已完成的问题可直接拷贝。部分 slash 命令支持上箭头召回之前输入过的文本。

临时模型选择器(Alt+P)的选型现在会标记为 session-only(#2952)。默认 advisor 中断冷却改为 3 turns,默认 auto-compaction 策略改为 snapcompact。

Mnemopi 稳定性加固

嵌入输入长度做了截断,修复了主动链接设置的溢出问题(#3126, #2440)。如果开了 mnemopi 的长记忆功能,这个修复直接影响 recall 的可靠性。自动前置链接也不会再撑爆 embedding 上下文窗口。

零散但值得注意的修复

read 命令对宽 SQLite 表的分列修复(#3107)——读宽表不再串列

internal://local://skill:// 等 URL 目录路由标记修复(#3116)

resume 选择器不再锁定到当前文件夹(#3099)——跨目录恢复会话方便了

/todo export 路径处理修复

/goal 连续 turn 跳过 compaction 的 bug(#3146)

• 首次 turn 的 recall 不再破坏 append-only 缓存(#3111)

• 侧信道 turn 正确混淆 secrets 和 tools,不再污染 prompt 缓存

• local tiny-model 推理失败修复(#3132)

破坏性变更提醒

三个子包将部分函数改为异步返回。pi-agent-coretransformProviderContextbuildSideRequestContext 变为 Promise 返回。pi-nativesrenderSnapcompactPngsnapcompactrender/renderMany 同样如此。如果自己的扩展或脚本依赖了这些函数,需要对应加上 await。

🚀 升级方式

macOS / Linux

curl -fsSL https://omp.sh/install | sh

Homebrew

brew install can1357/tap/omp

Bun(推荐)

bun install -g @oh-my-pi/pi-coding-agent

Windows(PowerShell)

irm https://omp.sh/install.ps1 | iex

Pinned versions(mise)

mise use -g github:can1357/oh-my-pi

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#OhMyPi #版本更新 #AI写代码的小任 #LLM更新报告

oh-my-pi v16.1.9 发布 —— Moonshot 回城、LSP 不再卡死

· 阅读需 3 分钟

oh-my-pi v16.1.9 封面

Moonshot 双通道打通

此前 oh-my-pi 的 Moonshot provider 硬编码了国际站 api.moonshot.ai,中国区用户没法走 Kimi 国内平台。现在新增 MOONSHOT_BASE_URL 环境变量覆盖,设成 api.moonshot.cn 就能走国内线路。KIMI_API_KEY 也作为 MOONSHOT_API_KEY 的 fallback 生效,手上有什么 key 都能直接用。对依赖 Kimi 模型的国内开发者来说,这是个不用折腾代理的省心更新。

LSP 懒加载不再假死

基于 pyright 等懒初始化 LSP 服务器的用户应该遇到过:第一次请求发出去就卡住不动了。原因是消息读取器先按 id 匹配响应,再检查 method——如果服务端主动发起的 workspace/configuration 请求的 id 恰好和当前 in-flight 请求撞上了,这条消息就被当作响应吞掉,订阅方永远等不到回复。现在消息路由逻辑改成优先按 method 派发,有 method 的先当服务端请求处理。gopls、rust-analyzer 等同样走懒加载的 LSP 都受益。这个 bug 藏得深,修得漂亮。

其他更新一览

🔴 llama.cpp 加入交互式 /login 提供商列表——API key 可选,默认走本地无认证模式

🔴 AI 工具 schema 优化——冗长的 anyOf 联合类型折叠为标准 enum,减少 token 消耗

🔴 修复 tool-call 参数校验中双层编码 key 的问题(比如 {""op"": "done"} 嵌套 JSON key)

🔴 移除 Wafer Pass 登录支持(Wafer Serverless 保留)

🔴 移除调试路径工具函数——PI_REQ_DEBUG 环境变量成为唯一录制机制

🔴 浏览器隐匿增强——抑制自动化标志、修补属性描述符、增强 WebGL/Worker/IFrame/Screen/Audio 隐匿

🔴 修复 omp list / omp remove 静默启动交互式会话的问题

🔴 修复 /mcp enable 和 /mcp disable 重连无关 MCP 服务器的问题

🔴 新增 /dump 导出 LLM 请求 JSON 功能

🔴 停止将本地 llama.cpp 无认证登录占位符作为 discovery bearer token 发送

升级方式

curl -fsSL https://omp.sh/install | sh # macOS/Linux
brew install can1357/tap/omp # Homebrew
bun install -g @oh-my-pi/pi-coding-agent # Bun

📢 关注我,获取最新开源更新日志和开发者工具动态。

#oh-my-pi #AI编程 #开发者工具 #AI写代码的小任 #LLM更新报告

完整更新日志:GitHub Release