跳到主要内容

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