跳到主要内容

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

查看所有标签

Oh My Pi v16.1.5 发布 —— 工具参数不泄露 Schema 了,旧方法清理掉

· 阅读需 2 分钟

Oh My Pi v16.1.5 封面

工具参数不再偷渡 Schema 对象

v16.1.5 修了一个不容易注意但传出去就很尴尬的 bug:normalizeTools 的参数在 wire-encode 时没有统一处理。当工具的 intent 解析为 "omit" 时(比如内置的 evalresolve 工具),raw arktype/zod schema 对象会泄露到参数里

如果你在自己调 agent 的 tool 调试信息里看到过一堆奇怪的 schema 类型定义而不是干净的 JSON schema——就是这个 bug 导致的。修法就是把 normalizeTools 的所有分支统一 wire-encode,不挑工具类型下菜碟。

删了 nextToolChoice 旧入口

AgentSession 上之前有一个 nextToolChoice() 和一个 nextToolChoiceDirective() 两个方法,做的事情高度重叠。区别是 nextToolChoiceDirective() 会走完整的 hard-choice 出队 + active-tool 过滤流程,而 nextToolChoice() 只出队,跳过过滤。

v16.1.5 删了后者。per-turn tool-choice 指令全部走 nextToolChoiceDirective() 一条路径,不再给调用者留两个入口。这个清理本身不影响功能,但开发者如果直接调用 nextToolChoice() 做集成,需要改为 nextToolChoiceDirective()

升级

Oh My Pi 安装方式:

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

mise:

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

Windows(PowerShell):

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

完整更新日志:GitHub Release

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

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

Oh My Pi v16.1.7 发布 —— 斜杠命令修了空格,技能不再沉底

· 阅读需 2 分钟

Oh My Pi v16.1.7 封面

斜杠命令前面有空格?之前补全不了

TUI 里输入 / 开始斜杠命令,大多数人不会在前面加空格。但如果你是在段落中间打的 /——前面带几个空格很正常——之前 autocomplete 直接罢工,按 Enter 也没反应。v16.1.7 修了:斜杠命令前的空格不再阻塞补全、inline hints、和 Enter 确认(#3095)。

技能命令在 / 弹窗里永远被压到最底下

这是新用户最困惑的问题之一。装了一堆 skill,但每次按 /,弹出来的全是内置命令(help、reset、dump…),自己装的技能要翻到底才看到。v16.1.7 把「技能列表排在末尾」改成了「按字母混排」——你装了什么 skill,按 / 马上就看到,不再被埋没(#2875)。

MiniMax-M3 的上下文显示不准

两个 provider 修了同一个问题。minimax-codeminimax-code-cn 这两个 Coding Plan 专用 provider,之前状态栏显示的是 512K 上下文。实际文档标的是 1M。之前的补丁只修了通用 minimax / minimax-cn,Coding Plan 那边漏了。现在全修了(#3097)。

自定义 models.yml 的图片 detail 兼容

用 Responses 兼容代理的时候,snapcompact 默认会上传原生分辨率——但某些代理不接受。之前 compat.supportsImageDetailOriginal 在 custom models.yml 里设了也不生效,因为 provider 加载路径把这个 override 跳过了。现在 custom provider 也能正确接管图片 detail 模式(#3092)。

升级方式:

#macOS / Linux
curl -fsSL https://omp.sh/install | sh
#Homebrew
brew install can1357/tap/omp
#Bun (recommended)
bun install -g @oh-my-pi/pi-coding-agent
#Windows (PowerShell)
powershell -c "irm https://omp.sh/install.ps1 | iex"

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

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

#OhMyPi #AI编程 #终端工具 #版本更新 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.0.10 发布 —— 全新工具调用方言,Token 省 46%

· 阅读需 2 分钟

Oh My Pi v16.0.10 封面

全新工具调用方言

之前 pi 用的工具调用格式类似 XML,开销大。v16.0.10 切换到 sigil 分隔格式——用 § 标注调用头和 key=value 参数、«…» 包裹正文参数、¤ 标注推理、‡‡ 标注工具结果。

优势很直接:典型调用省 46% Token。而且这些符号在源代码中几乎不会出现,不会误触发。

可通过 tools.formatPI_DIALECT=pi 切换。

Bedrock 推理配置 ARN 修复

如果你用 Amazon Bedrock 的推理配置(application inference profile)来路由模型,之前的请求会被发到默认 Bedrock 区域而不是 ARN 中指定的区域。现在修了,请求会正确路由到 ARN 指向的区域。

同时修复了 --provider=amazon-bedrock --model <ARN> 被认定为未知模型的问题。

重要修复

配置文件支持注释。之前的 settings.json、models.json 等文件不支持 JSON 注释,现在可以加注释了。

带空格的文件路径。macOS 默认截图路径 ~/Desktop/Screen Shot 2026-...png 这种带空格的文件路径,之前在文件引用和 @ 前缀参数中可能解析失败,现在支持了。

MCP 子进程孤儿修复AgentSession.dispose() 时 owned MCP manager 没有被正确断开,导致 stdio MCP 子进程在 /exit、print 模式、子 agent 销毁时变成孤儿进程留在后台。现在修了。

图片引用修复inspect_image 现在能正确解析粘贴的图片标签,如 Image #1[Image #1, WxH]attachment://1 等格式。

DeepSeek V4 Pro thinking 级别。接受 max 作为最高 thinking 级别 xhigh 的别名,方便用 DeepSeek V4 Pro 的最大 effort。

升级方式:

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

完整更新日志:GitHub Release

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

#OhMyPi #AI编程 #终端工具 #版本更新 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.0.11 发布 —— Shell 管道写错不乱报错了,一句最简单的痛

· 阅读需 4 分钟

不是语法有错,是 Oh My Pi 自己的输出精简器把你的合法管道拆碎了。

这个版本把这种「工具说我写错了,但我写的明明是对的」的憋屈情况,从好几个方向修了一遍。

Oh My Pi v16.0.11 封面

修得最狠的:Shell 管道报假错

根本原因:Oh My Pi 的输出精简器会把 &&/; 串联的命令拆成一段一段,分别执行来节约 token。

问题出在分段逻辑——它只检查了第一段的合法性。后面那段如果是 while/for/if/subshell 这种结构,会被重新序列化后丢失终止符,发送出残缺的 shell。

修复后,每一段都会重新解析,要求完全匹配原始管道的形状。如果有偏差,整条命令直接走未分段路径,不再硬拆。

关联修复也到了 pi-natives(原生 shell 层),同一个 bug 的双端覆盖。

协作者终于有自己可见的声音了

之前 Advisor 模型虽然在后台干活,但它的轨迹你看不到——没有自己的 transcript,omp stats 统计不到它的 token 消耗,Agent Hub 也看不见它的存在。

这个版本做了两件事:

  • Advisor 的每轮对话持久化到 <session>/__advisor.jsonlomp stats 能统计到它
  • Agent Hub 里可以只读查看 Advisor transcript

当然它仍然是「非对等参与者」——irc 列表、history://、peer 询盘都看不见它,也不能被复活或 kill。

/compact 的三个子命令

如果你之前觉得 omp/compact 只有一个策略,太不灵活——现在给了你三个选择:

  • /compact soft:本地摘要,不调远程
  • /compact remote:走远程 provider 的压缩
  • /compact snapcompact:直接把历史归档成位图,不经过 LLM

这三个可以同时带 focus 指令(snapcompact 除外),也可以在 ACP 客户端中以参数形式传递。

Ctrl+T 终于不只是「上面」的

之前 Ctrl+T(切换 thinking 块显隐)只对当前可视区域生效。如果 thinking 块已经滚进 native scrollback,翻上去看还是旧状态。

现在两个触发路径——Ctrl+T 和 /settings 里的开关——都会触发完整重置和重绘,保证每个 thinking 块都正确折叠或展开。

ACP 手机语音不再卡在设置上

移动端 ACP 之前调 speech.models.list 会触发 setup 流程。现在本地 STT/TTS 模型和语音目录直接暴露,不触发 download。

Tab 宽度配置被移除了

这是一个 breaking change:display.tabWidth 设置和 getIndentation/setDefaultTabWidth 等配套工具全部移除,tab 现在使用固定显示宽度。如果你有自定义缩进需求的配置,需要更新。

Snapcompact:不支持的中文符号不乱码了

normalize() 现在会做 NFKD 分解回退。全角字符、上下标、连字、圆圈数字、罗马数字、分数等不可绘制的 Unicode 符号,会折叠为接近的 ASCII 等效字符。

不再是直接输出 ?

其他修复

  • 内联参数预览截断:工具返回的较长值(如 note=)不再硬截断在 24 列,而是根据卡片实际宽度自适应
  • MCP 子进程孤儿:之前的修复在 v16.0.10 只覆盖了一部分,进一步加固
  • 视图缓存清除:transcript viewer 在底层 session 文件被删除后能正确清除缓存内容
  • 全屏 Agent Hub 渲染对齐:transcript 正文不再比标题多一列左边距

升级方式:

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

完整更新日志:GitHub Release

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

#OhMyPi #AI编程 #终端工具 #版本更新 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.0.9 发布 —— OAuth 多账号共存,Copilot 图片不再报错

· 阅读需 4 分钟

Oh My Pi v16.0.9 封面

同一个 provider,多个 OAuth 账号再也不打架

v16.0.9 最大的修复在 pi-ai 里:之前同一个 Provider(比如 GitHub、Google)的不同 OAuth 登录,后一个会直接替换前一个。修复后,同一 Provider 下的多个 OAuth 账号可以并存并用了。

多账号共存:OAuth 登录不再替换同 provider 的其他活跃账户,多个账号可以同时登录在线。 • 原子化升级:旧的 api_key 凭据在升级到 OAuth 时,替换/禁用是原子操作,不会出现中间态残留。 • 认证持久化:修复了 AuthStorage 在 CLI 重启后丢失 session 到 credential 关联的问题——这对服务端 prompt cache(KV cache)影响很大,之前冷启动会白白浪费 tokens。

这个修复对我这种「工作一个 GitHub、个人一个 GitHub」的双号党来说非常实在。之前每次切换账号都要重新 OAuth 登录一次,现在两个账号可以同时在线,想用哪个用哪个。KV cache 的冷启动修复也值得关注——同样的问题,重启 CLI 后不用重新算一遍 token,省时省 token。

Copilot Responses 图片不再报 HTTP 400

如果你在用 GitHub Copilot Responses API 并尝试发送图片,之前会被 HTTP 400 怼回来——问题出在 detail: "original" 这个 hint 参数上。

图片兼容性:Copilot Responses 拒绝 detail: "original" 图片 hint,自动降级为 "auto" 以兼容不支持的主机。 • 新兼容标志:pi-catalog 新增 supportsImageDetailOriginal 标志位,Copilot 设为 false,其他 provider 默认 true。

说人话就是:之前代码里硬编码了 detail: "original",Copilot 后端不认这个参数就直接报错。现在遇到不兼容的 host 会自动降级到 "auto",图片在 Copilot 上也能正常工作了。这个就是典型的「功能上线了,参数没对齐」的坑,修得挺及时。

Copilot 推理块不再被错误截断

pi-catalog 修了一个挺隐蔽的分类错误:GitHub Copilot 的 anthropic-messages 代理被误标成了「非签名推理端点」。

推理块修复:Copilot 的 anthropic-messages 代理被错误归类为非签名推理端点,修复后 Copilot 把无签名的 thinking blocks 降级为普通文本展示,而不是直接丢掉。

这个分类错误的影响是:Copilot 用户用 Anthropic 模型时,thinking 过程要么被截断要么显示异常。修完之后,即使没有签名,thinking blocks 也会以文本形式正常展示出来。对终端用户来说,就是推理过程终于能完整看到了。

pi-coding-agent 的打印模式改进

v16.0.9 给 pi-coding-agent 加了一个新 flag,同时修了一个 /goal 模式的坑。

--print-thoughts 参数:单次打印模式下可以包含消毒后的 thinking blocks;默认打印输出仍然只输出最终答案。 • /goal 模式修复:活跃的 /goal 模式不会被内部 compaction 和 session 切换生命周期打断。

--print-thoughts 这个 flag 对调试场景很实用——你想看模型想了什么又不想要完整交互界面,加这个参数就行。/goal 模式的修复则是那种「遇到了才知道多烦人」的 bug:你设了一个目标,系统内部做整理或者切 session 的时候直接给你清了,重新再设一遍很恼火。

TUI 全屏覆盖层的剪裁问题

pi-tui 修了一个 UI 上的小但扎眼的问题:

底部锚定修复:底部固定的全屏覆盖层在终端高度被钳制时,body 行保留但 footer 操作按钮被裁掉了——现在可以完整显示了。

这个修复有点「处女座专属」那意思——不影响功能,但全屏弹窗下面缺了一排按钮,怎么看怎么难受。修完之后,无论终端缩到多小,该有的按钮一个不少。

升级命令

#macOS / Linux
curl -fsSL https://omp.sh/install | sh

#Homebrew
brew install can1357/tap/omp

#npm (Bun)
bun install -g @oh-my-pi/pi-coding-agent

#Windows (PowerShell)
powershell -c "irm https://omp.sh/install.ps1 | iex"

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

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

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

Oh My Pi v16.1.0 发布 —— 缓存命中不再靠猜,软需求让 Agent 更聪明

· 阅读需 5 分钟

Oh My Pi v16.1.0 封面

💡 核心更新:缓存未命中标记、工具软需求机制、工具描述裁剪减少 token、macOS 电源设置统一为枚举、TUI 全面统一圆角风格、Snapcompact 焦点式归档布局。

以前:缓存命没命中,全靠猜

用大模型 provider 的时候,缓存命中率直接影响响应速度和费用。但之前你根本看不见:提示词缓存到底命没命中?冷启动多花了多少钱?

更头疼的是误报。v16.1.0 之前,缓存未标记会错误触发在所有 provider 上——包括 Google/Gemini、OpenAI、Fireworks 这些没有显式前缀缓存的平台。它们的 cacheRead: 0 是正常的传播噪声,下一轮就自愈了。但标记器不管,每次都发。

现在:⊘ cache miss 一目了然

v16.1.0 加了缓存未命中标记:一个淡灰色的 ⊘ cache miss · <n> tokens 分割线,出现在请求丢失了 provider 缓存的那一轮对话上方。标记只在你真正亏了的时候出现——只有 Anthropic/Bedrock 这类有显式 cache_control 前缀缓存的 provider 才触发。OpenAI/Gemini 这些隐式缓存的 cacheRead: 0 被正确忽略,不报假警。开关在 display.cacheMissMarker 设置(默认开)。

以前:工具说必须用就必须用

Oh My Pi 的 tool_choice 机制,之前只有「硬推」这个强度——要么强推,要么完全不推。如果模型本轮不调指定工具,那就下一轮再强推。代价是 provider 消息缓存每次都被破坏,反复冷启动。

现在:软需求,给模型一次机会

SoftToolRequirement 是 v16.1.0 加的新机制:host 可以要求一个工具,但分两步走——第一轮只注入一次提醒,tool_choice 保持 auto。如果模型没调,下一轮才强推一次,且跳过任何绕路的工具批次。这样既给了模型灵活性,又不至于次次刷新缓存。

以前:工具描述占 token,不想带也不行

每个工具都带一大段描述文本,对大部分场景是好的,但在 token 预算紧的时候(比如长上下文压缩场景),这些描述就是纯浪费。

现在:pruneToolDescriptions 一键裁剪

新增 pruneToolDescriptions 选项,从 provider 绑定的工具规约中剥离描述文本。同时改了 display.cacheMissMarker 默认关闭缓存未标记。和 inlineToolDescriptors 默认开启描述内联结合,控制权完全交给你。

以前:macOS 电源设置是一个布尔矩阵

四个 bool 设置——power.preventIdleSleeppower.preventSystemSleeppower.declareUserActivepower.preventDisplaySleep——每个单独开关,层级关系不清晰,组合起来容易遗忘。

现在:sleepPrevention 枚举,层级一目了然

这四个设置合并为一个 sleepPrevention 枚举:offidledisplaysystem。每层包含所有下层标志。现有的配置自动迁移,无需手动处理。

TUI 视觉统一:不再混搭圆角和直角

之前 Oh My Pi 的 TUI 风格像是两个设计师干了一半合并的——工具结果框用圆角,覆盖层用圆角,但 bash 框和 debug 帧用直角。v16.1.0 统一了:

边框圆角化:工具结果框、覆盖层、代码围栏、debug 帧、交互式 bash 框全部使用 ╭╮╰╯ 圆角。之前 roundsharp 混着来,现在一致了。Markdown 表格保留锐角框,只影响表格。 • 技能调用卡片化:技能调用显示为圆角卡片,带图标标记头部、Home-缩写路径、动态行数统计。之前是 [skill] 标签 + 原始 JSON dump 结构,现在清爽多了。 • 自定义消息统一渲染:扩展消息和 hook-role 消息统一用图标头部 + 圆角卡片。📦 扩展消息、🪝 hook-role 消息,各自有图标区分。 • 分支摘要改为横幅:分支摘要原来是一个 [branch] 盒子,现在改用 /compact 同款分割线横幅——⑂ branch · ctrl+o,摘要展开可见。

Snapcompact:从「压缩」到「有重点的压缩」

Snapcompact 之前的工作方式是相对简单的全量压缩。v16.1.0 把它升级成了焦点式归档布局

HQ 边缘、LQ 中间:上下文窗口的边缘(最新和历史最久)保留高清晰度,中间区域密集低质量。用同样的 token 预算,更多关键信息能保留下来。 • 文本先导排序:纯文本在最旧边缘、图像在中间、纯文本在最新边缘——保持时间顺序,provider 提示不再乱序。 • 复述摘要改为结构化阅读指南:复述提示从「请压缩」改成「按轮次标题、网格/双栏布局、墨迹笔记」的结构化指南。文件操作以内联的 FILES 段呈现,不再用 <files> 标签拼贴。 • 最大帧数提升到 80MAX_FRAMES_DEFAULT 从之前的值提升到 80。OpenRouter 使用标准 90 图像预算。 • 帧 token 估算上调到 5024:修复了之前上下文预算少算的问题。

修复小记

协调器选项隐藏修复:advisor 相关设置之前即使在 advisor.enabled 关闭时也保持可见,现在正确跟随开关隐藏了(#3027) • LSP 动态能力注册 hang 修复:动态注册 capabilities 的 LSP 服务器(包括 Expert)在 client/registerCapability 被拒绝后,语义请求不再 hang 死(#3029) • /dump 工具清单重复:启用 inlineToolDescriptors/dump 输出会重复两遍工具清单,修了 • Pi-Natives Shell 分段:关联 v16.1.1 的 shell 分段修复落地到 pi-natives 后端

升级方式:

#macOS / Linux
curl -fsSL https://omp.sh/install | sh
#Homebrew
brew install can1357/tap/omp
#Bun (recommended)
bun install -g @oh-my-pi/pi-coding-agent
#Windows (PowerShell)
powershell -c "irm https://omp.sh/install.ps1 | iex"

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

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

#OhMyPi #AI编程 #终端工具 #版本更新 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.0.6 发布 —— DeepSeek 也防递归了,OpenAI 全家桶大重构

· 阅读需 3 分钟

Oh My Pi v16.0.6 封面

思考循环守卫扩展到 DeepSeek

v16.0.5 引入了 Gemini 的思考循环守卫,这次覆盖到了 DeepSeek 模型。同时守卫的监控范围从 thinking logs 扩展到了 assistant response prose(text_delta 事件),响应正文开始流式后的循环也能被检测并中断。

还有一个重要的行为变更:如果循环发生在响应正文已开始流式之后,守卫不再抛可重试错误,而是发出一个包含已累积流式文本的不可重试 partial content block——防止 agent session 回滚导致丢失已有输出。

OpenAI 全家桶大重构

这次最大的改动藏在底层:pi-ai 内部对 OpenAI 兼容 provider 的代码做了一次系统性重构。

统一了 OpenAI 兼容路由:之前 Chat Completions 和 Responses 两条路径各有各的 shared 层,现在合并到 openai-shared。三个重复的 service_tier 请求块和每个 provider 的 wire model-id 转换被抽成了 applyOpenAIServiceTier / applyWireModelIdTransform 等共享 helper。

Provider 差异集中管理:DeepSeek 的特殊 token 剥离、Ollama 的空长度上下文错误、OpenAI 的 tool-call-id 上限、Fireworks 的 thinking drop、OpenRouter/OpenAI Responses 的请求字段——这些散布在各处的 provider 差异逻辑被统一搬到了 resolved compat fields 中。

新工具applyOpenAIExtraBodyapplyOpenAIGatewayRoutingresolveOpenAIOutputTokenParam 等 helper 成为新的标准入口。

对用户来说,这些重构几乎没有直接感知——但如果你在用多个 OpenAI 兼容 provider(DeepSeek、OpenRouter、Fireworks、Together AI),之前偶尔出现的「这个 provider 参数不生效」「那个 provider 报奇怪的错」应该会变少。代码合并意味着差异点被归拢了,边缘 case 的覆盖更完整。

ArkType schema 支持

工具参数除了已有的 Zod schema,现在也支持 ArkType schema 了。如果你的项目用 ArkType 做类型验证,配置 tool 参数时可以直接传 ArkType schema,不用额外转 Zod。

其他小改

从 Zod 到 ArkType 的迁移已经开始——auth-broker、Anthropic Messages 请求、OpenAI Chat/Responses 请求等内部 wire-schema 验证已从 Zod 切到 ArkType。xai-responses provider 被统一的 openai-responses 路径替代,xAI 的 reasoning effort 剥离逻辑改为动态处理。

完整更新日志:https://github.com/can1357/oh-my-pi/compare/v16.0.5...v16.0.6

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

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

Oh My Pi v16.0.5 发布 —— 从能用走向可靠,这是一次"扫尾"式大更新

· 阅读需 4 分钟

8 个包、超过 40 项变更。

Oh My Pi v16.0.5 封面

Gemini 思考循环守卫——再贵的 Token 也不打水漂

pi-ai 新增了"思考循环守卫",专门解决 Gemini 模型在深度推理时陷入死循环的问题——模型反复输出雷同的思考链,Token 被大量浪费,最终超时或卡死。

现在守卫会自动检测这种退化行为,终止循环并抛出可重试错误。已经被嵌入 streamSimple() 和 Gemini 原生流式调用,pi-catalog 层开放了开关。

这个守卫在用户层面几乎是透明的——你不会看到异常,只会发现"以前某个偶尔卡死的 prompt 突然能跑完了"。

omp-stats 重新设计——统计面板不再是凑数功能

@oh-my-pi/omp-stats 被彻底重写:

全新仪表盘——数据可视化和交互方式重做

项目视图——按项目维度聚合,方便看出哪个仓库消耗了最多 Token

系统感知主题切换——自动跟随系统亮/暗模式

项目视图尤其有用——如果你的团队用 Oh My Pi 管理多个代码库,按项目分析 Token 消耗几乎是刚需。

TUI 性能压榨:tight 布局 + SGR 合并

Tight 布局tui.tight,默认关闭):去除 TUI 中每个元素周围的 1 字符间距。小窗口下信息密度大幅提升。

SGR 合并:pi-tui 对终端转义序列做智能合并,减少 30%-40% 的 SGR 序列输出。滚动时闪烁感降低,绘制速度更快。

同时修复了图像缓存失效和内联图像重放 bug。

基础设施层面的重要修补

MiniMax M3 方言支持PI_DIALECT=minimax 被自有工具调用环境选择器忽略的问题修了,MiniMax M3 的带内工具调用不再用错包装格式。

GitHub Copilot Business OAuth:企业版 Copilot 的 OAuth 授权问题修了,Business 席位的用户可以正常登录。

LITELLM_BASE_URL 支持:pi-catalog 新增环境变量作为提供商发现的后备机制。自建 LiteLLM 代理网关的团队,不用再手动配置 provider 列表。

Gemini 使用层级映射:修复了 gemini-3.5-flashgemini-3.1-pro 在 Antigravity 端点上的使用层级映射。这类"映射不对,账单崩溃"的问题在多 tier 定价中尤其隐蔽。

会话截止期(Session Deadline):pi-agent-core 和 pi-coding-agent 双向推进了会话截止机制。底层支持 wall-clock 超时,顶层新增 --max-time <seconds> 参数,提供熔断保护。

完整变更速览

关键变更
pi-agent-core会话截止期、PI_DIALECT 修复、API Key 回调参数变更
pi-ai思考循环守卫、Antigravity 全链路修复、MiniMax/Copilot OAuth
pi-catalog守卫开关、LiteLLM 后备、模型版折叠映射
pi-coding-agenttight 布局、自动图片描述、会话熔断、Matplotlib 双输出
collab-web韩文/CJK 自动换行、对话记录渲染修复
pi-mnemopi睡眠合并字符上限、实体提取正则保护
omp-stats全新! 仪表盘、项目视图、主题切换
pi-tuitight 布局、SGR 合并、图像缓存修复

升级方式:

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

完整更新日志:GitHub Release

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

#OhMyPi #AI编程 #终端工具 #AI写代码的小任 #LLM更新报告

Oh My Pi v16.0.3 发布 —— LaTeX 数学渲染、Mermaid 主题色,以及几十项终端体验修复

· 阅读需 7 分钟

三个方向最值得细看:数学渲染能力大幅提升STT 和工具 schema 修复子 agent 和 advisor 的生态健壮性修复

Oh My Pi v16.0.3 封面

LaTeX 数学渲染的大幅更新——终端也能看分数和彩色公式了

这次 pi-tui 的变化在数学渲染上下了相当大的功夫。如果你用 Oh My Pi 做技术问答或阅读论文摘要,下面这些改进会直接改变你的阅读体验:

显示数学(display math)全面支持:之前 $$...$$\[...\] 包裹的独立行数学公式只能做简单的单行转 Unicode。现在支持了完整的分式布局——\frac\dfrac\cfrac 不再显示为 (a+b)/c 一横行,而是分子画在横线上方、分母在下方,align/equation 环境的多行也支持对齐到横线。如果你写的是 \tfrac,它也会显示为竖式分式,而不是退化成单行。

对数学环境如 \begin{equation},也做了支持——不再把 LaTeX 环境标签当正文显示。

彩色命令支持\textcolor\color\colorbox\fcolorbox 这些颜色命令现在会在终端中进行 ANSI 真彩色渲染。xcolor 色彩和 CSS 颜色名都支持。不是简单地丢弃颜色指令,而是映射到终端的 256 色/真彩色输出。

数学自动渲染:新增了 bare math 自动检测——如果一个段落本身就是数学形状的内容(没有 $ 包裹),或者是一个单独的 \begin 环境块,渲染器会自动识别并转成 Unicode。这降低了在 agent 输出中阅读数学的门槛:你不用等 agent 正确包裹 $$ 就能看到可读的数学内容。

Mermaid 图表的 ASCII 渲染改进:Mermaid 图表现在会根据终端主题自动配色。之前 Mermaid 输出的 ASCII 图形颜色固定,深色终端下看起来反差不大。现在它会读取活跃主题的色值来给 ASCII 图形着色。同时 ASCII 图表布局会自动适应终端宽度,不再超出边界。

推/按式语音输入(push-to-talk)的微妙改进

STT 功能在 v16.0.3 也有几项值得一提的修复。

语音模型切换:之前换 STT 的 modelName 后,依赖检查不会重新跑——你切了模型但缓存还是在用旧模型的 assets。现在切模型会重新校验依赖并下载新的 recorder 和 model assets。

暖启动优化:如果本地已缓存语音模型,启动时不在前台加载全部模型——而是后台预热,等真的开始转录时才加载。这样可以降低 push-to-talk 的启动延迟。

空格键触发机制改造:这是最有意思的一条。之前的长按空格触发录音的机制靠的是空格计数或速度阈值。但问题在于:正常的空格键打字和 PTT 的「长按」在计数上很难区分——经常出现编辑器被注入大量空格、或者故意长按但被误判为打字的场景。

这次换了一种思路:检测键盘自动重复的节律性。操作系统对长按按键的自动重复有着机械式的精准——两次 space delta 都很快(~120ms 内)且近乎一样。而正常敲空格虽然也可能快(比如双空格结尾),但每次按下的间隔会有微小的差异,不会像 auto-repeat 那样稳定。新逻辑检测连续两次符合 auto-repeat 特征的间隔后才触发录音,之前打出的空格会回退消掉。乱拍键盘(快但不稳定)和正常打字(稳定但不快)都不会触发。

Advisor 和子 agent 的生态修复

v16.0.3 在 sub-agent 和 advisor 层修复了几个靠前的 bug,值得单独说:

Agent Hub 不再泄漏滚动行:之前的 Agent Hub 是以半透明覆盖层(overlay)形式渲染在实时 transcript 上的。每次子 agent 进度更新时 Hub 重绘——但 terminal 的窗口滚动会将之前的 Hub 副本推进原生滚动缓冲(engine 无法重写这部分)。结果就是退出 Hub 后 scrollback 里残留了一堆垃圾行。现在 Hub 改为内联渲染在 editor slot 中,和 ask tool 走同一套渲染路径,不再溢出副本。

子 agent 不再以自己为 parent:这是个挺隐蔽的 bug——每个子 agent 在 agent registry 中把自己注册为自己的 parent(parentId === id),导致 Agent Hub 里每个 agent 都显示为 sub · of <itself>,←← 导航手势一直循环到同一个 agent。原因是 SDK 复用了 parentTaskPrefix 作为 registry 的 parent link。现在 spawns 会单独传一个 parentAgentId,registry 记录正确的 parent。

冷恢复子 agent 不再报 "cannot be revived":从磁盘恢复的子 agent(Agent Hub 扫描、重启 session)之前会报 cannot be revived (no reviver registered),因为 executor 的 live reviver closure 随着 spawning turn 的结束就死了。现在 AgentLifecycleManager.ensureLive 会通过持久子 agent reviver factory 重建子 agent。

advisor 建议不再憋到用户下次提问才爆发:有用户中断时,advisor 的 concern/blocker 建议被设为「不自动恢复」,但当非用户恢复(合成/自动继续、中断后的队列引流)发生时,advisor 的打断性建议被藏起来——agent 在运行时听不到 advisor 的建议,等到用户下次提问才一次性爆出来。现在打断的 advisor 建议在 agent 重新开始流式运行时会被实时注入。

修复与改进的其他亮点

还有几条值得一提:

  • OpenAI Responses/Codex tool schema 正则剥离(#2784):MCP 工具的 parameter schema 中如果包含 regex lookaround 断言(如 (?=...) 等不被 OpenAI 支持的 pattern),之前会被丢弃导致工具调用失败。现在 normalize 阶段会剥离这些 provider 不支持的模式。
  • IRC aside 修复:IRC 消息在中断后不再 pending——修复了几个 stranded IRC 场景,现在能够正确唤醒对话。
  • Esc 不再吞掉 agent 消息:按 Esc 中断时,之前会把 advisor 建议/IRC asides 等非用户消息的文本倒进用户的编辑器中。现在 clearQueue()getQueuedMessages() 只暴露真正由用户发起的消息。
  • 终端窗口标题泄漏修复:之前 bun test 运行时终端窗口标题的 OSC 转义序列会泄漏到开发者终端。现在 headless 模式默认跳过所有这些转义写入。
  • 魔法关键词通知修复ultrathinkorchestrateworkflow 等魔法关键词的 steering notices 改为前置到相关用户消息之前,确保影响的是同一轮对话而非下一轮。

升级

# 首次安装(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
irm https://omp.sh/install.ps1 | iex

完整更新日志:GitHub Release

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

#OhMyPi #终端工具 #LaTeX渲染 #STT

oh-my-pi v16.0.1 发布 —— Hook 还是 Tool?开发者不用再选了

· 阅读需 7 分钟

v16.0.1 虽然叫「patch」,但 changelog 比很多 minor release 还厚:有 Breaking Changes,有大量新功能,有几十项修复。从插件命名方案到 IRC 协作,从快捷键配置到图片粘贴,每个改动都在回答同一个问题:日常用 AI 编程代理的时候,到底哪些细节让你每次都顿一下?

oh-my-pi v16.0.1 封面

核心痛点:以前多痛苦

用过 oh-my-pi(简称 omp / Pi)的人都知道它的插件体系有个尴尬的设计问题。

你想要给 AI 加一个工具能力——比如让它能查数据库。你写了个模块,然后开始困惑:这是放 hooks/ 还是 tools/?注册用 --hook 还是 --tool?配置文件写 hooks: [] 还是 customTools: []

区别在哪里?从概念上说,hook 是「事件发生时触发副作用」,tool 是「暴露给 AI 调用的能力」。但在实际使用中,边界极其模糊:一个查数据库的模块,既可以是 AI 主动调用的 tool,也可以是某个事件后的 hook。用户不该思考这个架构分类。

然后还有 commands/ 目录——slash command 的 prompt 脚本(自定义斜杠命令的提示词文件)放这里。三个目录、两套 CLI flag、两套配置数组。每次写一个新模块,你都得回忆一遍这套命名规则。这个摩擦虽然小,但每天都在发生。

新功能怎么解决

v16.0.1 的做法干脆利落:全合并到 extensions 底下

  • hookscustomTools 两个配置数组合并成一个 extensions 数组
  • --hook--tool 两个 CLI flag 合并成 --extension / -e
  • hooks/tools/ 目录合并到 extensions/commands/ 改成 prompts/
  • 对应的文档也从 hooks.md + custom-tools.md 合并成一本 extensions.md

从开发者角度看,这不仅仅是改名。extensions 这个命名传递了一个清晰的信号:你不用操心一个模块是「钩子」还是「工具」还是「命令」,它就是一个扩展,你写好功能,注册进去,omp 自己知道什么时候该用、怎么用。

Breaking change 的同时也带了顺手清理:TUI(终端用户界面)里的键盘检测函数,之前有 isEnter()isEscape()isCtrlC() 等一系列独立方法,现在全部合并成一个 matchesKey(data, keyId)。调用方从「记得哪个函数名对应哪个键」变成「统一传一个 keyId 字符串」。这是同类问题、同类解法。

从一个角度看,v16.0.0 是给 omp 装上了审计大脑(Passive Advisor),v16.0.1 则给之前所有「不太对」的命名和接口做了外科手术——不改动核心能力,但让日常操作少了很多「顿一下」。

连带改善

插件命名的统一是这次最大的一刀,但围绕「减少操作摩擦」还有一堆补强:

可配置按键绑定~/.pi/agent/keybindings.json 现在用户可以自定义所有快捷键。以前你觉得 Ctrl+Enter 太远想换成别的,得去翻源码改——现在直接写配置。

Alt+Enter 排队后续提问。模型还在流式输出的时候,你就可以按 Alt+Enter 输入下一个问题,排进队列,等当前回复结束自动发送。这个功能看似小,但用过流式输出的都知道——模型在打字的时候你只能干等,想到的问题还得记在脑子里。现在你想到什么就打什么,它自己排队。

剪贴板图片粘贴(Ctrl+V)。以前粘贴图片会塞一个占位符,然后你得手动处理。现在粘贴直接生成文件路径,自动缩放图片尺寸。配合 Kitty 终端的 JPEG/GIF/WebP 显示修复,贴图体验终于没那层「夹生感」了。

slash command 和 hook command 现在在流式输出期间也能工作。之前 / 打头的命令会在流式输出时被吞掉,你得等模型说完再用。现在一边输出一边响应指令。

/quit/exit 两个 slash command 也补上了——之前退出会话只能关终端或者按 Ctrl+C。

这些改动单独看都不大,但拼在一起就是一个信号:团队在补齐日常体验的最后一公里。v16.0.0 加的是大的架构能力,v16.0.1 让这些能力用起来不硌手。

其他更新精选

GitHub Copilot 用户全局指令发现 — omp 现在能自动读取 Copilot 的 ~/.github/copilot-instructions.md,把全局指令纳入上下文。如果你同时用 Copilot 和 omp,不再需要手动同步两份规则。

Web 搜索 provider 排除web_search.excludedProviders 允许你指定哪些搜索供应商不用。支持多个 provider 的配置终于有了排除能力,不用为了规避某个引擎把整个搜索关掉。

IRC 工作感知协作 — 这是这次最有趣的新功能之一。omp 在 IRC 频道里不但能收发消息,还能维护一个「工作感知成员列表」——知道谁(其他 agent 或人类)在做什么任务,会主动建议协调。多 agent 协作场景下,这是从「各自为战」到「知道队友在干什么」的质变。

/review 支持显式 GitHub PR URL — 之前 /review 只接受本地尚未推送的分支,或者和当前分支关联的 PR。现在直接贴一个 https://github.com/xxx/yyy/pull/123 也能审。

plan.defaultOnStartup — 启动时自动进入 plan 模式(计划驱动模式)。适合那些「从来不想即兴起手」的用户:每次启动先规划,再干活。

Umans AI Coding Plan provider + Vertex AI(google-vertex) — 增加两个 provider。Umans AI 是新的规划模型 provider,Vertex AI 补上了 Google Cloud 这一端的企业用户场景。

子智能体 role 字段 — 创建 task subagent(任务子智能体)时现在可以指定 role,让子智能体的行为更贴合分工,不再是从主 agent 复制人格。

$ARGUMENTS 语法 — 自定义 slash command 里可以用 $ARGUMENTS 引用用户输入的全部剩余参数。之前只能通过命令行参数拼接来做,现在模板直接展开。

双 Escape 自定义 — 之前双击 Escape 键的行为是写死的,现在可以自定义。有用户的肌肉记忆是双击 Ctrl 或者双击其他键,现在能改了。

models.json 内置 provider override — 可以在 models.json 里面直接覆写 provider 的相关配置,不用去动全局 provider 定义。

修复方面值得提的:

  • Advisor 自动恢复不再忽略用户的中断——之前你手动中断后它还会自动拉回来,现在尊重你的意志
  • /advisor on|off 变成 session 局部生效——不干扰其他会话
  • web_search/move 之后不再使用旧的 provider 排除配置
  • 隔离子智能体的文件操作不再解析到父仓库路径——之前子 agent 以为自己在母仓库里
  • 大容量 write call 在 provider 超时后自动重试
  • issue://pr:// 读取不再返回过期内容
  • 重复版本边界警告消除
  • 版本检查 URL 拼写错误修正

升级

# 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
irm https://omp.sh/install.ps1 | iex

# Pinned via mise
mise use -g github:can1357/oh-my-pi

完整更新日志:GitHub Release

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

#oh-my-pi #AI编程 #开源 #AI代理 #开发工具