黄奕彬

外部精选

omp · v18.11.2

本文来自外部来源,不是黄奕彬的原创文章。本站提供原文入口,并在采集端生成 AI 结构化摘要、解读与中文翻译(如有),一切以原文为准。

阅读原文(github.com)
来源
oh-my-pi (omp) releases ↗
作者 / 署名
github-actions[bot]
来源更新时间
本站收录时间
原文域名
github.com

以上时间均为北京时间;来源更新时间由来源提供,不代表首次发布时间。

结构化摘要 AI 生成

背景与问题

这是 oh-my-pi(omp)项目在 GitHub 上发布的 v18.11.2 版本更新日志,来源日期为 2026-10-16(北京时间 2026-10-16 23:05:57)。omp 是一个 AI 编码代理命令行工具,面向使用其代理、模型网关、LSP、浏览器自动化与记忆系统的开发者用户。

该日志要回答的问题是:相对上一版本 v18.11.1,本版本在各个子包中做了哪些新增、变更、破坏性修改与修复。日志由 github-actions[bot] 自动发布,正文按 8 个 npm 子包组织。

方法或内容

发布内容按包分节列出:

  • @oh-my-pi/pi-agent-core:1 项新增、1 项修复
  • @oh-my-pi/pi-ai:1 项破坏性修改、2 项新增、8 项修复
  • @oh-my-pi/pi-catalog:2 项新增、1 项变更、1 项修复
  • @oh-my-pi/pi-coding-agent:2 项新增、6 项变更、40 余项修复
  • @oh-my-pi/pi-mnemopi:1 项修复
  • @oh-my-pi/pi-natives:2 项新增、3 项变更、3 项修复
  • @oh-my-pi/pi-tui:2 项变更、20 余项修复
  • @oh-my-pi/pi-utils:2 项新增、1 项修复

文末附完整 PR 清单(含贡献者)、8 位首次贡献者名单,以及从 v18.11.1 到 v18.11.2 的 Full Changelog 链接。

关键发现 / 结果

关键变更点:

  • 破坏性修改:resolveGatewayApiKey 与 buildGatewayApiKeyResolver(@oh-my-pi/pi-ai/auth-gateway)改为接收请求路由选项 { storage, client? } 而非 AuthStorage,回调改为接收已解析的凭据(#15900)
  • 新增 auth gateway 作用域客户端:startAuthGateway 的 clients, setClients 与 CLI omp auth-gateway serve --clients=<file>,每个客户端 bearer 仅限自身模型与 OAuth 账户、无回退(#5098、#15900)
  • 新增实验性 Jev 模型原生图像判定,覆盖 TypeSafe 与 OpenRouter 的 jev-latest、jev-preview、jev-1.13.0、jev-1.14.0 等模型(#15887)
  • 新增 lsp.requestTimeout、parseCodeStatus()、DesktopSession.holdDisplayUntilReleased()、sqliteFileIdentity()、slugify()、目录属性 keep-bundled-names
  • 行为变更:todo 更新随下一次工具调用发送、GPT Image 模型独立为 gpt-image 家族、GNU/Linux 空闲内存归还 OS、warmBlockParse 跳过超过 2 MiB 文件(原 4 MiB)
  • 修复覆盖浏览器上传系列(#15914–#15920、#15489)、会话稳定性、终端渲染、grep 大文件搜索(#15942)、macOS 显示保活(#15762)、多个模型网关兼容问题

性能改进的具体量化数据原文未说明。

结论与意义

结论层面:这是一个以缺陷修复为主的维护性版本,同时引入一项面向 API 使用者的破坏性变更(auth gateway 解析器签名)和少量功能增强。适用边界:

  • 破坏性修改仅影响调用 @oh-my-pi/pi-ai/auth-gateway 相关 API 的代码,需随版本迁移
  • Jev 图像判定被原文明确标注为 experimental(实验性),稳定性边界由原文自述
  • 各修复均绑定具体 issue 场景(如特定网关、特定终端、特定操作系统),超出这些场景是否受影响原文未说明

原文未提供迁移指南或升级步骤之外的总结性结论。

AI 解读 AI 生成

方法:按「时空变量」分析(时间 / 空间 / 变量,严格区分包含、相关与因果),对象包括原文作者、署名人员与关键技术及其实际原理;结论用「元反空」(元思考、反思考、空思考、综合)整理。

时间:何时发生,现在是否仍成立

内容发生时间:发布于来源日期 2026年10月16日 23:05(北京时间),即北京时间 2026-10-16 23:05:57,版本区间为 v18.11.1...v18.11.2。文中个别条目提及具体日期样例(如 #15914 提到输入 2026-10-12),属复现示例而非事件时间。

现在是否仍成立:作为该版本的变更记录,其历史事实不变;但所修复的缺陷在 v18.11.1 及更早版本存在、在 v18.11.2 中按原文描述已修复。后续版本是否再次变更这些行为,原文未说明。

空间:谁的环境 / 场景

适用环境:

  • 产品:oh-my-pi(omp)v18.11.2,涉及其 8 个子包(pi-agent-core、pi-ai、pi-catalog、pi-coding-agent、pi-mnemopi、pi-natives、pi-tui、pi-utils)
  • 部署形态:CLI 编码代理、auth gateway 服务端(omp auth-gateway serve)、TUI(含 Tern 原生视图与经典 CLI 渲染)、SQL/Redis 会话后端、浏览器自动化/relay 模式
  • 平台:多处修复绑定特定平台——Windows(ConPTY 行边界、文件删除阻塞)、macOS(拼写服务、显示保活、SSH 剪贴板)、GNU/Linux(无 D-Bus 容器、空闲内存归还)、devenv 2.x、Nushell 等
  • 第三方依赖:Ollama Cloud、OpenRouter、LiteLLM、GitHub Copilot、Claude marketplace 插件、Gemini、GPT Image、OpenAI Codex 等具体模型与网关

变量:实际改变了什么

相对此前实际改变的内容:

  • API 结构:resolveGatewayApiKey 等签名从 AuthStorage 改为 { storage, client? }(破坏性)
  • 行为:auth gateway 客户端 bearer 不再回退到其他账户或 API key;agent_start 携带 resumedToolCallIds;todo 更新不再单独占用模型回合;macOS 显示保活从固定 5 分钟改为按回合释放
  • 数据/内存:空闲时向 OS 归还本地堆页;解析缓存按语法树内存设上限、仅保留当前与上一次解析并增量重解析;warmBlockParse 阈值从 4 MiB 降为 2 MiB
  • 分类:GPT Image 模型(gpt-image-*、chatgpt-image-*)从 gpt/chatgpt 家族移至独立 gpt-image 家族
  • 计费显示:GitHub Copilot 用量按各计费项上报的单位显示,不再一律显示为 Premium Requests
  • 其余为约 80 项缺陷修复,逐条对应 issue 编号

区分:包含 ≠ 相关 ≠ 因果

因果证据明确的(修复前后行为对比):如取消 bash 作业此前在 TERM 清理前即被强杀,现在有最多 1 秒清理时间(#15709);grep 此前只搜直接指定文件的前 4 MB,现在搜索全文件(#15942)。

包含关系的:GPT Image 模型属于新的 gpt-image 家族(而非 gpt 或 chatgpt 家族),是分类调整,不涉及因果。相关而非因果的:每条修复附带的多个 issue 编号(如 #5098, #15900)表示相关议题,原文未逐一区分各自因果贡献。

不确定的:性能改进(CPU 开销、状态行刷新开销降低)未给出量化数据,改善幅度原文未说明,无法验证因果强度。

对象:作者/署名与关键技术原理

署名作者:仅 github-actions[bot](结构化作者字段),即该日志由自动化机器人发布。正文内出现的 @alphastorm、@jimhester、@will-bogusz、@F0Rextasy 等 handle 是各变更的贡献者(多数附 PR 编号),另有 8 位首次贡献者;他们不是本文署名作者。关键技术及原文描述的原理:

  • auth gateway:代理多上游模型与 OAuth 账户的网关,新作用域客户端机制使每个 bearer 仅能访问列出的模型与账户
  • LSP 集成:lsp.requestTimeout 控制语言服务器诊断与请求等待时长,支持逐调用覆盖
  • 浏览器自动化:uploadFile、tab.fill 等经 relay 或本机 Chrome 执行
  • Mnemopi:记忆召回系统,权重环境变量 MNEMOPI_<LABEL>_WEIGHT 修复后生效
  • 模型判定:Jev 图像判定为原生实现,超尺寸图像回退到 vision chat judge

原文未说明这些模块更底层的实现细节。

元反空综合结论

元——这条内容本质在解决的问题是:版本迭代中累积的缺陷修复与少量能力扩展的正式记录与交付,兼带向依赖方通报 API 破坏性变更。反——最可能失效或有边界的主张:

  1. Jev 图像判定为 experimental,行为与模型列表可能再变;
  2. 破坏性 API 变更使基于旧签名的集成代码在升级后失效;
  3. 作用域客户端“无回退”是严格限制,依赖回退行为的用户会受影响;
  4. 各修复绑定特定平台/网关/终端场景,泛化到未列出的场景无依据;
  5. 性能改进无量化数据,实际幅度不可验证。

空——去掉叙事后剩下的必要事实:版本号 v18.11.2、发布时间(北京时间 2026-10-16 23:05:57)、8 个子包的变更清单、约 80 项带 issue 编号的修复、1 项破坏性 API 变更、若干新增 API 与配置项、贡献者名单及 changelog 区间 v18.11.1...v18.11.2。

综合结论:这是一份可信度较高的工程变更记录,事实密度高、条目均可溯源到 issue/PR;读者应重点关注 auth gateway 的破坏性变更与实验性功能边界,其余修复按自身环境对照适用性,不宜假定普适。

中文译文 AI 生成

@oh-my-pi/pi-agent-core

新增

  • 当一次继续运行首次执行未配对 assistant 尾部的调用时,agent_start 会携带 resumedToolCallIds

修复

  • 在后台任务结束后取消 ask,现在会报告用户取消,而不是让模型重试被跳过的工具(#15985)

@oh-my-pi/pi-ai

破坏性变更

  • resolveGatewayApiKey 和 buildGatewayApiKeyResolver(@oh-my-pi/pi-ai/auth-gateway)现在接收请求的路由选项({ storage, client? })而非 AuthStorage,其 resolver 回调会接收已解析的凭据,且 resolveGatewayAccount 接收该凭据(#15900,作者 @alphastorm)

新增

  • 为 startAuthGateway 新增了带作用域的客户端(clients、setClients):每个客户端 bearer 仅限于其自身的模型和 OAuth 账号,不回退到其他账号或 API 密钥,且请求日志行会标明请求发起时所用的客户端与凭据(#5098、#15900,作者 @alphastorm)
  • 为 TypeSafe Jev 的 jev-latest、jev-preview、jev-1.13.0 和 jev-1.14.0,以及 OpenRouter 的 typesafe/jev-1.13、typesafe/jev-1.14 和 ~typesafe/jev-latest 模型新增了实验性原生图像判定;超出 Jev 文档所载尺寸范围的图像会转而交给一个 vision chat 判定器,而不是直接失败(#15887,作者 @anatoli-tsinovoy)

修复

  • 修复了来自非第一方提供商的错误结果会重新带回该提供商已丢弃的部分输出的问题;内容为空的错误现在保持为空(#14516、#14572,作者 @oleg494)
  • 修复了 auth gateway 的 POST /v1/audio/speech 对语音适配器拒绝的请求(不支持的格式、过长的输入)返回 502 的问题;这些请求现在会得到 400 invalid_request_error(#14508,作者 @F0Rextasy)
  • 修复了单字符串工具调用在存在两个及以上被错误标记的字符串字段时,会静默分发 JSON 中最先出现的字段的问题;此类含糊调用现在会校验失败,模型会看到自己传入的参数(#14414,作者 @F0Rextasy)
  • 修复了 GLM-5.2 在 Ollama Cloud 上跨轮次丢失推理的问题;对于已验证可接受 thinking 的模型,Ollama Cloud 现在会在历史中保留 assistant 的 thinking(#14440,作者 @Dante-dan)
  • 修复了 GPT Image 生成与编辑在会校验请求参数的网关(如 LiteLLM)上失败的问题;response_format 不再发送给 GPT Image 模型(#14619,作者 @jimhester)
  • 修复了 OpenRouter 的错误(如 "Access denied by security policy")会从 error.metadata.raw 中丢弃被路由上游自身解释的问题(#10906、#14435,作者 @F0Rextasy)
  • 修复了 GitHub Copilot 用量报告以请求为单位把 AI-credit 额度报告为 "Premium Requests" 的问题;现在会遵循每个计费项所报告的单位(#13849、#14501,作者 @F0Rextasy)
  • 修复了 OpenAI 兼容服务器的 finish_reason: "repetition" 或 stop_reason: "repetition_detected" 未被当作 thinking 循环、导致退化的部分推理被保留并重放到下一轮的问题(#12525、#14535,作者 @F0Rextasy)

@oh-my-pi/pi-catalog

新增

  • 新增 keep-bundled-names catalog 属性,用于在发现过程中保留静态的模型显示名称
  • 更新 openai-codex 提供商配置,以防止在实时发现期间出现模型名称回归

变更

  • GPT Image 模型(gpt-image-*、chatgpt-image-*)现在归入其独立的 gpt-image 家族,而不是 gpt 或 chatgpt,因此 GPT chat 模型规则不再适用于它们(#14619,作者 @jimhester)

修复

  • 修复了 OpenCode Zen Gemini 4 Argon 因不支持的协议而失败的问题;它现在使用原生 Gemini 端点(#15977)。

@oh-my-pi/pi-coding-agent

新增

  • 新增 lsp.requestTimeout 设置,用于配置语言服务器诊断与请求的等待时长
  • 新增 omp auth-gateway serve --clients=<file>:按客户端的 bearer 令牌,每个令牌仅限于列出的模型与所代理的 OAuth 账号,不回退到其他账号或 API 密钥,并在服务运行期间重新读取(#5098、#15900,作者 @alphastorm)

变更

  • lsp 工具现在使用 lsp.requestTimeout 动态调整调用截止时间与具备项目感知的诊断等待时间,并支持按调用覆盖
  • 降低了语法检查与自动编辑修复期间的 CPU 开销(#15904,作者 @iliaal)
  • 降低了子代理进行长对话时状态栏刷新的开销(#15874,作者 @iliaal)
  • 代理现在会在下一次工具调用的同时发送 todo 更新,而不是为此单独消耗一个模型轮次(#15402,作者 @will-bogusz)
  • “Shared Language Servers” 设置现在说明了它的实际作用:每个连接各自拥有一个服务器;当另一个 omp 实例仍在维持该项目的 mux 运行时,已释放的服务器会被复用(#14633,作者 @jorgoose)
  • 通过扩展 memory.save API 显式保存的记忆,现在会存储为 stated 而非 unknown,因此在 Mnemopi 召回中会被列为有意的记忆(#13824,作者 @sjawhar)

修复

  • 修复了当服务器将工具标记为只读时,prewalk 会在通过 write xd:// 进行的只读 MCP 查找期间切换模型的问题(#15994)
  • 修复了在 omp 仍在关闭会话时用第三次 Ctrl+C 强制退出后,shell 中会打印 9;5u 的问题
  • 修复了 Smart 意外停止恢复会继续已完成的回答、从而额外增加 "nothing more to add" 轮次的问题
  • 修复了 grep 对直接指名的文件只搜索前 4 MB、导致后续匹配被报告为不存在的问题;现在会搜索整个文件,而仍只读取前 4 MB 的多行模式会在其无匹配标题中说明这一点(#15942)
  • 修复了浏览器 uploadFile 通过 relay 或向另一台机器上的 Chrome 上传时以 "Not allowed" 失败、卡在 macOS 文件夹隐私提示之后、以及在大型拖放区文件上导致标签页出错的问题(#15489,作者 @will-bogusz)
  • 修复了浏览器 uploadFile 对被重写但大小或时间戳未变的文件发送过期副本、在包含 symlink 循环的文件夹上失败、以及在重复上传后删除仍打开的已附着页面可能读取的副本的问题
  • 修复了当扩展提供名为 write 的工具时,计划模式(plan mode,包括 plan-yolo)会在 write xd://propose 上无限循环的问题;由于只有内置的 write 才能提交计划,扩展的工具会被排除在计划模式之外并给出警告(#14030、#14438,作者 @F0Rextasy)
  • 修复了旧版 Mnemopi bank 数据库在 recall bank 探测后保持打开状态的问题,这可能导致在 Windows 上无法删除它们 (#14584 by @yshihao636)
  • 修复了启动时跳过某个已配置的默认回退项并改为选择一个无关模型的问题,该回退项的提供方仅通过另一个提供方的密钥进行认证(例如通过 XAI_API_KEY 使用 xai-oauth)(#15781)
  • 修复了当已配置的默认模型不可用且未配置回退链时启动变慢的问题 (#15781)
  • 修复了读取目录列表时打印目录的原始列表错误的问题,其中的制表符、换行符或控制字符可能破坏会话记录;[unreadable: …] 现在是单条有界行 (#15789)
  • 修复了在 agent 工作期间发送的 ^ 模型提及(steer、后续追问或排队的技能提示)从不向模型宣告其新 m<N> 别名的问题 (#14093, #14322 by @holny)
  • 修复了以截断记录结尾的大型会话文件在加载时不像小型文件那样被修复的问题 (#14582 by @yshihao636)
  • 修复了只读 subagent 的被拒绝写入被显示为死路的问题:当 yield 可用时,拒绝消息现在会将其指明为返回内容的方式 (#14308, #14470 by @F0Rextasy)
  • 修复了中断后执行 /retry 导致后续的 advisor 注记和扩展旁注在下一个输入提示之前无法唤醒 agent 的问题 (#14831 by @daandden)
  • 修复了损坏的 history.db 被隔离并重建后会话标题和空闲摘要消失的问题,以及存储短暂繁忙导致会话索引在会话剩余时间内被禁用的问题 (#13929, #14361 by @F0Rextasy)
  • 修复了在 Tern 或 kitty 中通过 SSH 运行 omp 时用 ⌘V 粘贴屏幕截图失败并报错 Clipboard is empty 或 Image not found 的问题 (#15369 by @LoneExile)
  • 修复了原生 hook 发现机制静默忽略通过符号链接链入 hooks/pre 或 hooks/post 的 hooks 的问题 (#14189, #14536 by @F0Rextasy)
  • 修复了没有系统 D-Bus 的 headless Linux 容器在每一轮都记录 Failed to acquire power assertion 警告的问题;缺失的后端现在仅在 debug 级别记录一次 (#14591 by @tahakotil)
  • 修复了项目的 daemon broker 在其运行时目录于运行期间被删除后一直不可达的问题(proc://、wait、共享 LSP 和共享浏览器均以 connect ENOENT …/broker.sock 失败);broker 现在会在失去其 socket 后数秒内释放项目,下一次请求会启动全新的 broker (#14466 by @nick-maderight)
  • 修复了重写与追加发生竞争后 SQL 和 Redis 会话停滞的问题;后续轮次现在会在后端恢复后重新发布 (#15612 by @sjawhar)
  • 修复了仅设置 OPENAI_CODEX_OAUTH_TOKEN 时 OpenAI Codex 网页搜索失败并报错 "No Codex OAuth credentials found" 的问题 (#12537, #14337 by @F0Rextasy)
  • 修复了当非严格的提供方还用占位符(如 unused 或 n/a)填充 error 时 yield 拒绝有效数据结果的问题;伴随数据的真实错误仍会被拒绝,但现在会附带确切的重发说明 (#15633 by @Komzpa)
  • 修复了 secret 脱敏在重写调用参数后仍以原始 thoughtSignature 重放 Gemini 工具调用的问题;重写后的调用现在会丢弃该签名,正如已重写的 thinking 此前所做的那样 (#14392 by @F0Rextasy)
  • 修复了声明亚秒级超时的 Claude marketplace 插件 MCP 服务器(例如 SAP 的 "timeout": 600)从不加载的问题;低于 Claude Code 1000 ms 下限的值现在会被忽略并给出警告,从而应用默认超时 (#12485, #14574 by @oleg494)
  • 修复了当主模型的冷却期在重试中途到期时自动重试无限循环的问题:重试仍在进行时,会话不再切换回主模型,而是在下一个提示时返回它 (#14611 by @MiloMMIN)
  • 修复了网页搜索提供方将非 UTF-8 响应处理为乱码的问题;现在会按照 Content-Type(或 <meta charset> 标签)中声明的字符集解码,与抓取页面的处理方式相同 (#15304 by @yuzu-octopus)
  • 修复了 openai-models-list 发现机制忽略 /v1/models 行上扁平 max_tokens 输出限制的问题,该问题曾将此类模型固定在 32K 默认值 (#13062, #14403 by @F0Rextasy)
  • 修复了当状态组件在一轮之后保持更高、或临时 HUD 关闭时,长回复从回滚区丢失行或以重复且乱序的方式重放的问题 (#15820 by @emmahyde)
  • 修复了聚焦的 subagent 完成后、主会话仍在运行时,其下方残留过期 Working… 行的问题 (#15820)
  • 修复了当 bunfig 的 minimumReleaseAge 或 npmrc 的 min-release-age 供应链冷却期拒绝刚发布的版本时 omp update 失败的问题;自更新现在会对其安装的固定版本覆盖该冷却期 (#14581 by @morri-son)
  • 修复了 agent://<id> 在 message-result subagent 完成父级请求的后续追问后仍返回其第一个结果的问题;读取现在会返回其最新已完成的结果 (#15707 by @mg-mg-mg)
  • 修复了松散编辑在一个 *** Find 后面跟着两个操作符(例如 *** Insert Before 和 *** Replace)时静默丢弃其中一个操作符的问题;此类 payload 现在会被拒绝并报错指明两者,且不应用任何内容 (#14357 by @F0Rextasy)
  • 修复了被取消的 Python 工具安装(例如 uv tool install)带着中止信号落入 pip 并使安装进度持续运行的问题 (#15750 by @harshaygadekar)
  • 修复了 auto-learn 捕获在学习工具调用后重写先前的 OpenAI Responses 历史记录、从而破坏 prompt-cache 复用的问题 (#14099 by @nanbloom001)
  • 修复了 /shake images 后上下文百分比保持不变的问题;被移除图像所释放的 token 现在会被报告并立即从上下文计量中扣除 (#5029, #14367 by @F0Rextasy)
  • 修复了 /fork pane|tab 和 Herdr 的 ctx.ui.openTerminal() 启动在 shell 非 POSIX(如 Nushell)的窗格中失败的问题;Herdr 启动现在仅输入一个自删除的 /bin/sh 脚本的路径,且不再请求 POSIX-shell 确认 (#15262 by @shgew)
  • 修复了 Eval 的 read("artifact://N") 在 JavaScript 和 Python 单元格中,对属于其他会话且超过 50 KB 的 artifact、或会话没有 artifacts 目录时,返回 "Unbounded raw read blocked" 提示而非文本的问题 (#15410 by @will-bogusz)

修复了取消 bash 任务时在其 TERM 清理处理器得以运行前就将其硬杀的问题;现在它会先获得最多一秒的清理时间,然后才被强制终止(#15709,作者 @mg-mg-mg)

修复了当较早一轮留下一个没有结果的工具调用时,在回合中途于 subagent 与主会话之间切换后,transcript 塌缩为每条记录一行的问题(#12247、#15466,作者 @shgew)

修复了重试的工具在视图重建(subagent 焦点切换、overlay 关闭)且工具仍在运行时丢失其 transcript 卡片的问题

修复了 Chrome 元素句柄的 uploadFile() 在 label、chooser 触发器和 drop zone 上报 "Node is not a file input element" 失败的问题;现在它会像 tab.uploadFile() 那样上传(#15918,作者 @will-bogusz)

浏览器 tab.fill 在 Chrome 中现在会将 colour、date、time 和 range 输入框设为给定值(此前它把 2026-10-12 输入成 61012-02-02,并让 colour 停留在 #000000),并对输入框不接受的值予以拒绝(#15914,作者 @will-bogusz)

修复了在会打开 showOpenFilePicker() 的控件上执行 browser uploadFile 导致单元格挂起、直到标签页被终止的问题;现在它会立即失败并给出具名错误(#15915,作者 @will-bogusz)

修复了在 browser uploadFile 点击过 chooser 触发器或 drop zone 之后,页面上后续所有文件选择器都毫无反应的问题,包括用户在 relay 标签页中自己的点击(#15915,作者 @will-bogusz)

修复了 Chrome 中当元素不打开文件选择器且页面上没有任何内容读取拖放文件时,browser uploadFile 在未附加任何文件的情况下报告成功的问题;现在它会失败并说明应针对什么目标(#15919,作者 @will-bogusz)

Relay 模式:当 Chrome 将 omp 从它驱动的标签页上分离时(密码管理器的内联菜单在页面中加载),该调用会立即失败并说明原因,omp 随后重新附加到同一标签页,而不是后续每个调用都超时、重新打开时报 No page targets available(#15920,作者 @will-bogusz)

修复了 macOS computer 工具在某回合超过 5 分钟没有桌面操作时允许显示器休眠并锁定的问题;现在它会让显示器保持唤醒,直到回合结束或要求你作答,然后才允许其休眠(#15762,作者 @will-bogusz)

@oh-my-pi/pi-mnemopi

修复

修复了 MNEMOPI_<LABEL>_WEIGHT 和 MNEMOPI_TIER<N>_WEIGHT 对 recall 排序不生效的问题(#13824,作者 @sjawhar)

@oh-my-pi/pi-natives

新增

新增 parseCodeStatus,用于检查代码语法及其解析出的语言而不生成摘要(#15904,作者 @iliaal)。

新增 DesktopSession.holdDisplayUntilReleased() 和 releaseDisplayAwake(),让显示器保持唤醒直到调用方释放,而不是在最后一次请求之后再保持 5 分钟(#15762,作者 @will-bogusz)

变更

降低了 GNU/Linux 上的空闲内存占用:一旦原生工作静默 5 秒,已释放的原生堆页面就会归还给操作系统,且不会逐出缓存(#15905,作者 @iliaal)

降低了缓存的代码结构解析所占用的内存:缓存现在以估算的语法树内存为上限而非源码大小,每个文件仅保留当前和上一次的解析,并对已编辑的文件进行增量重解析(#15886,作者 @H4vC)

将 warmBlockParse 改为跳过超过 2 MiB 的文件(原来是 4 MiB),超过该大小后典型解析便不再放得进缓存(#15886,作者 @H4vC)

修复

修复了 listWorkspace({ reportDirectoryErrors: true, maxDepth: 0 }) 在根目录不可读时返回空结果而非令扫描失败的问题(#15789)

精简模式下的 cargo 输出现在会保留一行 Blocking waiting for file lock on …,这样被另一个 cargo 进程卡住的构建能说明原因(#14631,作者 @jorgoose)

修复了 grep 在路径为单个文件时忽略 maxCountPerFile,以及单文件计数模式在 maxCount 内容上限处停止的问题(#14162、#14327,作者 @F0Rextasy)

@oh-my-pi/pi-tui

变更

改进了嵌套工具状态行的渲染:展开时将预览内容移入专用的可折叠代码块,并限制单行摘要中的字段宽度

对当前正在输入的单词关闭拼写错误高亮,以避免输入过程中出现分散注意力的行内标记

修复

修复了在 Tern 的 /extensions 中双击已关闭的扩展无法重新开启的问题

修复了 Tern 中排队消息徽章显示裸数字、会被读作第一条消息编号的问题;现在显示为 N queued

修复了 TSP 终端上的表格图表,使其使用 SVG fences 并遵循终端调色板

修复了当 omp 的浅色/深色检测与 Tern 不一致时,Tern 原生视图中的表格图表以另一种外观的颜色绘制(浅色页面上出现浅色标签)的问题;现在 Tern 会按它所显示的主题为它们着色,与其周围的正文一致

修复了在撰写后续问题时 /btw 历史回答卡在底部的问题:现在 Up/Down 和 Page Up/Down 可以滚动该回答而不离开草稿(#15902,作者 @H4vC)

修复了 macOS 编辑器拼写辅助在拼写服务停止响应时无声挂起的问题;现在它会报告并自行禁用(#12084、#14341,作者 @F0Rextasy)

修复了在多选设置已打开的子菜单中切换某个 chip 后,其所在行及其所在标签页的已更改徽章一直显示旧选择、直到子菜单关闭的问题(#14444,作者 @F0Rextasy)

修复了当项目包含指向超大目录树的 symlink 时 @ 文件自动补全冻结的问题;模糊遍历现在会在 1.5 秒后停止,弹窗回退为当前目录的列表(#12317、#14330,作者 @F0Rextasy)

修复了当 shell rc、dev shell 或 .env 将 TERM 设为 screen*/tmux* 值但没有多路复用器在运行时,Tern 面板中的 omp 显示经典 CLI 的问题;现在只有真正的 tmux/screen/zellij/herdr/cmux/wmux 会话才会让 Tern 的原生视图保持关闭

在 devenv 2.x 会重载的 devenv shell 中运行 omp 时,现在会以经典渲染器启动,而不是打开 Tern 的原生视图又将其弃置:devenv 的终端层会丢弃 Tern 的协议,因此原生视图需要 devenv shell --no-reload。调试日志现在会记录 Tern 面板停留在经典渲染器的原因

修复了 Windows 上大型终端绘制被从行中间拆分、导致其他输出落到某一行内部的问题;现在写入会在行边界处切分(#14187,作者 @mateusant13)

  • 修复了在 start() 之后添加的 TUI.addStartListener() 钩子直到下一个 stop/start 周期才会运行的问题;现在添加到运行中 TUI 的钩子会立即运行(#15369,作者 @LoneExile)
  • 修复了 git 查看器在显示干净树的 HEAD 提交时仍提示 stage、discard、select 和 commit 按键而这些按键均无作用的问题;页脚和侧边栏现在会描述提交视图(#14347、#14480,作者 @F0Rextasy)
  • 修复了状态行 pr 段在切换到默认分支、分离 HEAD 或无 PR 的分支后仍保留上一个分支 PR 的问题(#15455,作者 @ravshansbox)
  • 修复了状态行页脚合计遗漏任务子代理开销的问题;它现在读取会话的累计用量,即交互式状态行所使用的同一来源(#14393,作者 @F0Rextasy)
  • 修复了当一轮之后底部 chrome 保持更高、自清除的 HUD 关闭或 composer 形状变化时,转录行从回滚缓冲区消失或乱序重现的问题(#15820,作者 @emmahyde)

@oh-my-pi/pi-utils

新增

  • 导出了 sqliteFileIdentity(),使持有长期 SQLite 连接的调用方能够判断其路径何时已指向另一个文件(例如在损坏的存储被隔离并替换后)(#14361,作者 @F0Rextasy)
  • 新增了 slugify(),即共享的小写 ASCII kebab-case 辅助函数,带有可选的 maxLength(#14283,作者 @jaredlyon)

修复

  • 修复了在使用已中止的 signal 启动子进程时出现未处理 rejection 的问题(#15750,作者 @harshaygadekar)

变更内容

  • perf(tui): 为子代理成本更新使用持续维护的合计值(@iliaal 在 #15874)
  • perf(natives): 按树内存为解析缓存设定预算,并增量地重新解析编辑(@H4vC 在 #15886)
  • feat(coding-agent): 将 todo 更新随下一次工具调用一并发送(@will-bogusz 在 #15402)
  • docs(coding-agent): 将 lsp.shared 描述为带热复用的按连接服务器(@jorgoose 在 #14633)
  • tui: 限制 @ 模糊遍历,使符号链接的树无法冻结弹窗(@F0Rextasy 在 #14330)
  • fix(tui): 多选 chips 原地切换但该行仍保留旧值(@F0Rextasy 在 #14444)
  • 进入 plan 模式时停用造成遮蔽的扩展写入(@F0Rextasy 在 #14438)
  • fix(ai): 在 terminal 错误事件时保持被提供方丢弃的内容为空(@oleg494 在 #14572)
  • fix(coding-agent): finalize mnemopi 的 sqlite 语句(@yshihao636 在 #14584)
  • fix(ai): 将 xAI 语音输入错误归类为 400 而非 502(@F0Rextasy 在 #14508)
  • 单字符串工具参数按 JSON 键顺序解析(@F0Rextasy 在 #14414)
  • tui: 限制 macOS 拼写调用,使卡住的调用禁用该功能(@F0Rextasy 在 #14341)
  • fix(coding-agent): 为被引导的提及和后续提交通送 session-agent 通知(@holny 在 #14322)
  • fix(tui): 将 ConPTY 差异绘制切割在行边界而非行中间(@mateusant13 在 #14187)
  • fix(coding-agent): 统计输入末尾被截断的 JSONL 记录(@yshihao636 在 #14582)
  • fix(coding-agent): 在仅限设备的写入拒绝中指明 yield 回退(@F0Rextasy 在 #14470)
  • fix(coding-agent): 手动重试时解除对中断自动恢复的抑制(@daandden 在 #14831)
  • fix(ai): 将被降级的 DeepSeek thinking 重放为 reasoning_content(@yugasun 在 #15028)
  • 会话标题在 history.db 被隔离并重建后消失(@F0Rextasy 在 #14361)
  • fix(tui,coding-agent): 当 prepaint composer 先启动 TUI 时启用 kitty 增强粘贴(@LoneExile 在 #15369)
  • fix(discovery): 在原生 hooks 目录中发现符号链接的 hooks(@F0Rextasy 在 #14536)
  • fix(coding-agent): 将缺失的电源断言后端改为在 debug 级别记录一次,而非每轮都发出警告(@tahakotil 在 #14591)
  • fix(pi-shell): 在最小化输出中保留 cargo 的文件锁等待行(@jorgoose 在 #14631)
  • fix(coding-agent): 在其 socket 被删除时释放 broker 作用域(@nick-maderight 在 #14466)
  • fix(session): 在重写竞争后保持 SQL 和 Redis 会话可保存(@sjawhar 在 #15612)
  • coding-agent: 让 Codex 网络搜索使用环境变量中的 OAuth bearer(@F0Rextasy 在 #14337)
  • fix(coding-agent): 在出现占位符错误时保留已产出的数据(@Komzpa 在 #15633)
  • fix(ai): 在 Ollama Cloud 上保留 GLM-5.2 的 thinking(@Dante-dan 在 #14440)
  • fix(ai): 为 GPT Image 请求省略 response_format(@jimhester 在 #14619)
  • 当脱敏重写工具调用参数时清除 Gemini thought signature(@F0Rextasy 在 #14392)
  • OpenRouter 错误在 error.metadata.raw 中丢失上游详情(@F0Rextasy 在 #14435)
  • fix(tui): 在 git 提交视图中不再提示 stage 和 discard 按键(@F0Rextasy 在 #14480)
  • fix(coding-agent): 忽略来自 Claude 插件清单的低于 1000ms 的 MCP 超时(@oleg494 在 #14574)
  • natives: 对单个显式文件遵循 maxCountPerFile(@F0Rextasy 在 #14327)
  • fix(session): 通过冷却到期时回退到 primary 来防止无限重试循环(@MiloMMIN 在 #14611)
  • refactor(search): 为抓取器和搜索提供方使用单一设有上限的读取器(@yuzu-octopus 在 #15304)
  • openai-models-list 发现:遵循顶层的 max_tokens 输出上限(@F0Rextasy 在 #14403)
  • refactor(ai): 在各工具调用 id 规范化器之间共享 normalizeToolCallId(@jaredlyon 在 #14374)
  • fix(coding-agent): 自更新期间绕过环境性的发布时长门控(@morri-son 在 #14581)
  • fix(coding-agent): 发布最新的 message-result follow-up(@mg-mg-mg 在 #15707)
  • fix(mnemopi): 使用所配置的 veracity 与 tier 权重为召回打分(@sjawhar 在 #13824)
  • fix(ai): 对 GitHub Copilot 用量遵循所报告的计费单位(@F0Rextasy 在 #14501)
  • 拒绝在单个 *** Find 上带有两个运算符的草率载荷(@F0Rextasy 在 #14357)
  • fix(utils,coding-agent): 防止已中止进程上的未处理 rejection,并在取消安装时跳过 pip 回退(@harshaygadekar 在 #15750)
  • fix(coding-agent): 保留 auto-learn 捕获历史的前缀(@nanbloom001 在 #14099)
  • fix(ai): 将服务器声明的重复停止归类为 thinking 循环(@F0Rextasy 在 #14535)
  • shake images: 报告释放的 token 并修正上下文锚点(@F0Rextasy 在 #14367)
  • fix(coding-agent): 通过与 shell 无关的脚本路径启动 Herdr 命令(@shgew 在 #15262)
  • fix(tui): 分支切换后从状态行移除过期的 PR,由 @ravshansbox 在 #15455 中完成
  • refactor(utils): 为现有的 slug 辅助函数提供共享的 slugify,由 @jaredlyon 在 #14283 中完成
  • fix(coding-agent): 通过 Eval read() 返回位于会话 artifacts 目录之外的大型 artifacts 文本,由 @will-bogusz 在 #15410 中完成
  • fix(tui): 在 footer 中显示 task subagent 的总开销,由 @F0Rextasy 在 #14393 中完成
  • fix(shell): 在强杀已取消的任务之前允许清理 TERM,由 @mg-mg-mg 在 #15709 中完成
  • fix(coding-agent): 在回合中途重建 transcript 时仅保留仍在进行中的工具调用,由 @shgew 在 #15466 中完成
  • fix(tui): 进一步改进 btw 的 UX/UI,由 @H4vC 在 #15902 中完成
  • fix(tui): 当回合结束后底部界面(bottom chrome)仍保持较高时,保持 transcript 行可见,由 @emmahyde 在 #15820 中完成
  • perf(edit): 在不构建摘要的情况下检查解析状态,由 @iliaal 在 #15904 中完成
  • fix(coding-agent): 上传到 relay 及已连接的浏览器时发送文件内容,由 @will-bogusz 在 #15489 中完成
  • feat(ai,coding-agent): 将 auth-gateway 客户端令牌的作用范围限定为模型和账户,由 @alphastorm 在 #15900 中完成
  • perf(natives): 在原生工作空闲后修剪已释放的堆页面,由 @iliaal 在 #15905 中完成
  • feat(judgment): 在 TypeSafe 和 OpenRouter 上支持 Jev 图像,由 @anatoli-tsinovoy 在 #15887 中完成
  • fix(natives,coding-agent): 让 macOS 显示器仅在 agent 的回合期间保持唤醒,而不是在其最后一次操作之后再保持 5 分钟,由 @will-bogusz 在 #15762 中完成
  • fix(browser): 用对应的值填充颜色、日期、时间和范围输入框,而不是向其中键入,由 @will-bogusz 在 #15914 中完成
  • fix(coding-agent): 阻止浏览器 uploadFile 吞掉后续的文件选择器以及在 File System Access 选择器上挂起,由 @will-bogusz 在 #15915 中完成
  • fix(coding-agent): 允许浏览器元素句柄通过选择器触发点和拖放区进行上传,由 @will-bogusz 在 #15918 中完成
  • fix(coding-agent): 当页面上没有任何内容接收该文件时让浏览器 uploadFile 失败,由 @will-bogusz 在 #15919 中完成
  • fix(browser): 当 Chrome 将 omp 从 relay 标签页分离时快速失败并重新附加,由 @will-bogusz 在 #15920 中完成
  • fix(coding-agent): 在 power.sleepPrevention 下重新保持机器唤醒,由 @will-bogusz 在 #15941 中完成
  • fix(grep): 搜索了显式指定的大型文件的全部内容,由 @roboomp 在 #15943 中完成
  • fix(catalog): 将 zen argon 经由原生 gemini 路由,由 @roboomp 在 #15978 中完成
  • fix(coding-agent): 使浏览器上传和启动测试具备可移植性,由 @roboomp 在 #15984 中完成
  • fix(agent): 在任务完成后保留已取消的 ask 结果,由 @roboomp 在 #15992 中完成
  • fix(prewalk): 在交接期间遵循 MCP 的只读提示,由 @roboomp 在 #15995 中完成

新贡献者

  • @yshihao636 在 #14584 中完成了首次贡献
  • @yugasun 在 #15028 中完成了首次贡献
  • @LoneExile 在 #15369 中完成了首次贡献
  • @MiloMMIN 在 #14611 中完成了首次贡献
  • @morri-son 在 #14581 中完成了首次贡献
  • @nanbloom001 在 #14099 中完成了首次贡献
  • @shgew 在 #15262 中完成了首次贡献
  • @emmahyde 在 #15820 中完成了首次贡献

完整更新日志:v18.11.1...v18.11.2

展开原文提取正文(采集端自动提取,可能有缺失)

@oh-my-pi/pi-agent-core

Added

agent_start carries resumedToolCallIds when a continued run first executes the calls of an unpaired assistant tail

Fixed

Cancelling an ask after a background job finishes now reports the user cancellation instead of telling the model to retry a skipped tool (#15985)

@oh-my-pi/pi-ai Breaking Changes

resolveGatewayApiKey and buildGatewayApiKeyResolver (@oh-my-pi/pi-ai/auth-gateway) take the request's route options ({ storage, client? }) instead of an AuthStorage, their resolver callback receives the resolved credential, and resolveGatewayAccount takes that credential (#15900 by @alphastorm)

Added

Added scoped clients to startAuthGateway (clients, setClients): each client bearer is limited to its own models and OAuth accounts, with no fallback to other accounts or API keys, and request log lines name the client and the credential a request started on (#5098, #15900 by @alphastorm) Added experimental native image judgments for TypeSafe Jev's jev-latest, jev-preview, jev-1.13.0, and jev-1.14.0, plus OpenRouter's typesafe/jev-1.13, typesafe/jev-1.14, and ~typesafe/jev-latest models; images outside Jev's documented size bounds fall through to a vision chat judge instead of failing (#15887 by @anatoli-tsinovoy)

Fixed

Fixed error results from non-first-party providers regaining partial output the provider had discarded; an error with empty content now stays empty (#14516, #14572 by @oleg494) Fixed the auth gateway's POST /v1/audio/speech answering 502 for requests the speech adapter rejects (unsupported format, over-long input); they now get 400 invalid_request_error (#14508 by @F0Rextasy) Fixed a single-string tool call with two or more mislabelled string fields silently dispatching whichever field came first in the JSON; such ambiguous calls now fail validation and the model sees its own arguments back (#14414 by @F0Rextasy) Fixed GLM-5.2 on Ollama Cloud losing its reasoning between turns; Ollama Cloud now keeps assistant thinking in history for models verified to accept it (#14440 by @Dante-dan) Fixed GPT Image generation and edits failing on gateways that validate request parameters, such as LiteLLM; response_format is no longer sent to GPT Image models (#14619 by @jimhester) Fixed OpenRouter errors such as "Access denied by security policy" dropping the routed upstream's own explanation from error.metadata.raw (#10906, #14435 by @F0Rextasy) Fixed GitHub Copilot usage reporting an AI-credit allowance as "Premium Requests" in request units; the unit each billing item reports is now honoured (#13849, #14501 by @F0Rextasy) Fixed an OpenAI-compatible server's finish_reason: "repetition" or stop_reason: "repetition_detected" not being treated as a thinking loop, so the degenerate partial reasoning was kept and replayed into the next turn (#12525, #14535 by @F0Rextasy)

@oh-my-pi/pi-catalog

Added

Added keep-bundled-names catalog attribute to preserve static model display names during discovery Updated openai-codex provider configuration to prevent model name regressions during live discovery

Changed

GPT Image models (gpt-image-*, chatgpt-image-*) now classify as their own gpt-image family instead of gpt or chatgpt, so GPT chat-model rules no longer apply to them (#14619 by @jimhester)

Fixed

Fixed OpenCode Zen Gemini 4 Argon failing with an unsupported protocol; it now uses the native Gemini endpoint (#15977).

@oh-my-pi/pi-coding-agent

Added

Added lsp.requestTimeout setting to configure wait durations for language server diagnostics and requests Added omp auth-gateway serve --clients=<file>: per-client bearer tokens, each limited to listed models and broker OAuth accounts with no fallback to other accounts or API keys, re-read while serving (#5098, #15900 by @alphastorm)

Changed

The lsp tool now uses lsp.requestTimeout to dynamically adjust both call deadlines and project-aware diagnostic wait times, with support for per-call overrides Reduced CPU overhead during syntax checks and automatic edit repairs (#15904 by @iliaal). Reduced status-line refresh overhead while subagents have long conversations (#15874 by @iliaal). Agents now send todo updates alongside their next tool call instead of spending a separate model turn on them (#15402 by @will-bogusz) The Shared Language Servers setting now says what it does: each connection gets its own server, and a released one is reused while another omp instance keeps the project's mux running (#14633 by @jorgoose) Memories saved explicitly through the extension memory.save API are now stored as stated rather than unknown, so they rank as deliberate memories in Mnemopi recall (#13824 by @sjawhar)

Fixed

Fixed prewalk switching models during read-only MCP lookups through write xd:// when the server marks the tool read-only (#15994) Fixed Ctrl+C printing 9;5u in the shell after force-quitting omp with a third Ctrl+C while it was still closing the session Fixed Smart unexpected-stop recovery continuing finished answers, which added extra "nothing more to add" turns Fixed grep searching only the first 4 MB of a file named directly, so later matches were reported as absent; the whole file is now searched, and a multiline pattern, which still reads only the first 4 MB, says so in its no-match headline (#15942) Fixed browser uploadFile failing with "Not allowed" through the relay or into a Chrome on another machine, stalling behind macOS folder-privacy prompts, and breaking the tab on large drop-zone files (#15489 by @will-bogusz) Fixed browser uploadFile sending a stale copy of a file rewritten without changing its size or timestamp, failing on folders that contain a symlink loop, and deleting copies a still-open attached page could read after a repeat upload Fixed plan mode (including plan-yolo) looping on write xd://propose forever when an extension provides a tool named write; the extension tool is left out of plan mode with a warning, since only the built-in write can submit plans (#14030, #14438 by @F0Rextasy) Fixed legacy Mnemopi bank databases staying open after the recall bank probe, which could block deleting them on Windows (#14584 by @yshihao636) Fixed startup skipping a configured default fallback whose provider authenticates only through another provider's key (e.g. xai-oauth via XAI_API_KEY) and picking an unrelated model instead (#15781) Fixed slower startup when the configured default model is unavailable and no fallback chain is configured (#15781) Fixed read directory listings printing a directory's raw listing error, whose tabs, newlines, or control characters could break the transcript; [unreadable: …] is now a single bounded line (#15789) Fixed a ^ model mention sent while the agent is working (steer, follow-up, or queued skill prompt) never announcing its new m<N> alias to the model (#14093, #14322 by @holny) Fixed large session files ending in a truncated record not being repaired on load, unlike small ones (#14582 by @yshihao636) Fixed a read-only subagent's rejected write reading as a dead end: when yield is available, the rejection now names it as the way to return the content (#14308, #14470 by @F0Rextasy) Fixed /retry after an interrupt leaving later advisor notes and extension asides unable to wake the agent until the next typed prompt (#14831 by @daandden) Fixed session titles and idle recaps disappearing after a corrupt history.db was quarantined and recreated, and a briefly busy store disabling the session index for the rest of the session (#13929, #14361 by @F0Rextasy) Fixed pasting a screenshot with ⌘V into omp running over SSH from Tern or kitty failing with Clipboard is empty or Image not found (#15369 by @LoneExile) Fixed native hook discovery silently ignoring hooks symlinked into hooks/pre or hooks/post (#14189, #14536 by @F0Rextasy) Fixed headless Linux containers without a system D-Bus logging a Failed to acquire power assertion warning on every turn; the missing backend is now noted once at debug level (#14591 by @tahakotil) Fixed a project's daemon broker staying unreachable after its runtime directory was deleted while it ran (proc://, wait, shared LSP and the shared browser failed with connect ENOENT …/broker.sock); the broker now releases the project within seconds of losing its socket and the next request starts a fresh one (#14466 by @nick-maderight) Fixed SQL and Redis sessions stalling after a rewrite raced an append; later turns now republish after the backend recovers (#15612 by @sjawhar) Fixed OpenAI Codex web search failing with "No Codex OAuth credentials found" when only OPENAI_CODEX_OAUTH_TOKEN is set (#12537, #14337 by @F0Rextasy) Fixed yield rejecting a valid data result when a non-strict provider also filled error with a placeholder such as unused or n/a; a real error alongside data is still rejected, now with exact resend instructions (#15633 by @Komzpa) Fixed secret redaction replaying Gemini tool calls with their original thoughtSignature after rewriting the call arguments; a rewritten call now drops the signature, as rewritten thinking already did (#14392 by @F0Rextasy) Fixed Claude marketplace plugin MCP servers declaring a sub-second timeout (e.g. SAP's "timeout": 600) never loading; values below Claude Code's 1000 ms minimum are now ignored with a warning so the default timeout applies (#12485, #14574 by @oleg494) Fixed automatic retries looping without end when the primary model's cooldown expired mid-retry: the session no longer switches back to the primary while a retry is still in flight, and returns to it on the next prompt (#14611 by @MiloMMIN) Fixed web search providers garbling non-UTF-8 responses; they now decode with the charset declared in Content-Type (or a <meta charset> tag), the same way fetched pages are (#15304 by @yuzu-octopus) Fixed openai-models-list discovery ignoring a flat max_tokens output limit on /v1/models rows, which pinned such models to the 32K default (#13062, #14403 by @F0Rextasy) Fixed long replies dropping lines from scrollback or replaying them duplicated and out of order when status widgets stay taller after a turn or transient HUDs close (#15820 by @emmahyde) Fixed a stale "Working…" row staying under a focused subagent after it finished while the main session kept running (#15820) Fixed omp update failing when a bunfig minimumReleaseAge or npmrc min-release-age supply-chain cooldown rejects the just-published release; self-update now overrides the cooldown for the pinned version it installs (#14581 by @morri-son) Fixed agent://<id> returning a message-result subagent's first result after it completed a parent-requested follow-up; reads now return its latest completed result (#15707 by @mg-mg-mg) Fixed sloppy edits silently dropping an operator when one * Find was followed by two (e.g. * Insert Before and *** Replace); the payload is now rejected with an error naming both and nothing is applied (#14357 by @F0Rextasy) Fixed a cancelled Python tool install (e.g. uv tool install) falling through to pip with the aborted signal and leaving the install progress running (#15750 by @harshaygadekar) Fixed auto-learn captures rewriting earlier OpenAI Responses history after a learning tool call, which broke prompt-cache reuse (#14099 by @nanbloom001) Fixed /shake images leaving the context percentage unchanged; the tokens freed by the removed images are now reported and subtracted from the context meter right away (#5029, #14367 by @F0Rextasy) Fixed /fork pane|tab and Herdr ctx.ui.openTerminal() launches failing in panes whose shell is not POSIX (such as Nushell); Herdr launches now type only the path of a self-deleting /bin/sh script and no longer ask for POSIX-shell confirmation (#15262 by @shgew) Fixed Eval read("artifact://N") returning an "Unbounded raw read blocked" notice instead of the text for artifacts over 50 KB that belong to another session, or when the session has no artifacts directory, in JavaScript and Python cells (#15410 by @will-bogusz) Fixed cancelling a bash job hard-killing it before its TERM cleanup handlers could run; it now gets up to one second to clean up before termination is forced (#15709 by @mg-mg-mg) Fixed the transcript collapsing to one line per entry after switching between a subagent and the main session mid-turn when an earlier turn left a tool call without a result (#12247, #15466 by @shgew) Fixed a retried tool losing its transcript card when the view was rebuilt (subagent focus switch, overlay close) while the tool was still running Fixed Chrome element handles' uploadFile() failing "Node is not a file input element" on labels, chooser triggers and drop zones; it now uploads like tab.uploadFile() (#15918 by @will-bogusz) Browser tab.fill in Chrome sets colour, date, time and range inputs to the given value (it typed 2026-10-12 as 61012-02-02 and left a colour at #000000), and refuses a value the input rejects (#15914 by @will-bogusz) Fixed browser uploadFile on a control that opens showOpenFilePicker() hanging the cell until the tab was killed; it now fails at once with a named error (#15915 by @will-bogusz) Fixed every later file chooser on a page doing nothing, the user's own clicks in a relay tab included, after browser uploadFile clicked a chooser trigger or drop zone (#15915 by @will-bogusz) Fixed browser uploadFile in Chrome reporting success with no file attached when the element opens no file chooser and nothing on the page reads the dropped files; it now fails and says what to target (#15919 by @will-bogusz) Relay mode: when Chrome detaches omp from a tab it drives (a password manager's inline menu loading in the page), the call fails at once saying why and omp reattaches to the same tab, instead of every later call timing out and reopening failing with No page targets available (#15920 by @will-bogusz) Fixed the macOS computer tool letting the display sleep and lock in a turn that went 5 minutes without a desktop action; it now keeps the display awake until the turn ends or asks for your answer, then lets it sleep (#15762 by @will-bogusz)

@oh-my-pi/pi-mnemopi

Fixed

Fixed MNEMOPI_<LABEL>_WEIGHT and MNEMOPI_TIER<N>_WEIGHT having no effect on recall ranking (#13824 by @sjawhar)

@oh-my-pi/pi-natives

Added

Added parseCodeStatus to check code syntax and its resolved language without generating a summary (#15904 by @iliaal). Added DesktopSession.holdDisplayUntilReleased() and releaseDisplayAwake() to keep the display awake until the caller releases it, rather than for 5 minutes after the last request (#15762 by @will-bogusz)

Changed

Reduced idle memory on GNU/Linux: once native work has been quiet for 5 seconds, freed native heap pages are returned to the OS without evicting caches (#15905 by @iliaal) Reduced memory held by cached code-structure parses: the cache now caps estimated syntax-tree memory instead of source size, keeps only a file's current and previous parse, and reparses edited files incrementally (#15886 by @H4vC) Changed warmBlockParse to skip files over 2 MiB (was 4 MiB), the size above which a typical parse no longer fits the cache (#15886 by @H4vC)

Fixed

Fixed listWorkspace({ reportDirectoryErrors: true, maxDepth: 0 }) returning an empty result for an unreadable root instead of failing the scan (#15789) Minimized cargo output now keeps one "Blocking waiting for file lock on …" line, so a build stuck behind another cargo process says why (#14631 by @jorgoose) Fixed grep ignoring maxCountPerFile when the path is a single file, and single-file count mode stopping at the maxCount content cap (#14162, #14327 by @F0Rextasy)

@oh-my-pi/pi-tui

Changed

Improved nested tool status line rendering: moved preview content into a dedicated collapsible code block when expanded and limited field widths on the one-line summary Suppressed typo highlighting for the word currently being typed to avoid distracting inline markers while composing

Fixed

Fixed double-clicking an extension switched off in /extensions in Tern not switching it back on Fixed the queued-messages badge in Tern showing a bare count that read as the first message's number; it now reads N queued Fixed table charts on TSP terminals to use SVG fences and respect terminal palette Fixed table charts in Tern's native view drawing in the other appearance's colors (light labels on a light page) when omp's light/dark detection disagreed with Tern; Tern now colors them in the theme it shows, like the prose around them Fixed the /btw history answer being stuck at the bottom while a follow-up is being written: Up/Down and Page Up/Down now scroll the answer without leaving the draft (#15902 by @H4vC) Fixed macOS editor spelling assistance hanging silently when the spelling service stops responding; it now reports and disables itself instead (#12084, #14341 by @F0Rextasy) Fixed a chip toggled in a multi-select setting's open submenu leaving its row and its tab's changed badge showing the old selection until the submenu was closed (#14444 by @F0Rextasy) Fixed @ file autocomplete freezing when the project contains a symlink into a very large directory tree; the fuzzy walk now stops after 1.5 s and the popup falls back to the immediate-directory listing (#12317, #14330 by @F0Rextasy) Fixed omp in a Tern pane showing the classic CLI when a shell rc, dev shell or .env set TERM to a screen*/tmux* value with no multiplexer running; only a real tmux/screen/zellij/herdr/cmux/wmux session now keeps Tern's native view off omp inside devenv 2.x's reloading devenv shell now starts on the classic renderer instead of opening Tern's native view and abandoning it: devenv's terminal layer drops Tern's protocol, so the native view needs devenv shell --no-reload. The debug log now records why a Tern pane stays on the classic renderer Fixed large terminal paints on Windows being split mid-row, which let other output land inside a row; writes are now cut at row boundaries (#14187 by @mateusant13) Fixed TUI.addStartListener() hooks added after start() never running until the next stop/start cycle; a hook added to a running TUI now runs at once (#15369 by @LoneExile) Fixed the git viewer advertising stage, discard, select and commit keys while showing a clean tree's HEAD commit, where none of them do anything; the footer and sidebar now describe the commit view (#14347, #14480 by @F0Rextasy) Fixed the status line pr segment keeping the previous branch's PR after switching to the default branch, a detached HEAD, or a branch without a PR (#15455 by @ravshansbox) Fixed the status-line footer total leaving out task subagent spend; it now reads the session's cumulative usage, the same source the interactive status line uses (#14393 by @F0Rextasy) Fixed transcript rows disappearing from scrollback or reappearing out of order when bottom chrome stays taller after a turn, self-clearing HUDs close, or the composer shape changes (#15820 by @emmahyde)

@oh-my-pi/pi-utils

Added

Exported sqliteFileIdentity(), so a caller holding a long-lived SQLite connection can tell when its path now names a different file (e.g. after a corrupt store was quarantined and replaced) (#14361 by @F0Rextasy) Added slugify(), the shared lowercase ASCII kebab-case helper with an optional maxLength (#14283 by @jaredlyon)

Fixed

Fixed an unhandled rejection when a subprocess is spawned with an already-aborted signal (#15750 by @harshaygadekar)

What's Changed

  • perf(tui): use maintained totals for subagent cost updates by @iliaal in #15874
  • perf(natives): budget parse cache by tree memory and reparse edits incrementally by @H4vC in #15886
  • feat(coding-agent): send todo updates alongside the next tool call by @will-bogusz in #15402
  • docs(coding-agent): describe lsp.shared as per-connection servers with warm reuse by @jorgoose in #14633

tui: bound the @ fuzzy walk so a symlinked tree cannot freeze the popup by @F0Rextasy in #14330

fix(tui): multiselect chips toggle in place but the row keeps the old value by @F0Rextasy in #14444

Deactivate a shadowing extension write on plan-mode entry by @F0Rextasy in #14438

  • fix(ai): keep provider-discarded content empty on terminal error events by @oleg494 in #14572
  • fix(coding-agent): finalize mnemopi sqlite statements by @yshihao636 in #14584
  • fix(ai): classify xAI speech input errors as 400 rather than 502 by @F0Rextasy in #14508

Single-string tool args resolve by JSON key order by @F0Rextasy in #14414 tui: bound macOS spelling calls so a stuck one disables the feature by @F0Rextasy in #14341

  • fix(coding-agent): deliver the session-agent notice for steered and follow-up mentions by @holny in #14322
  • fix(tui): cut ConPTY diff paints at row boundaries, not mid-row by @mateusant13 in #14187
  • fix(coding-agent): count a truncated trailing JSONL record at end of input by @yshihao636 in #14582
  • fix(coding-agent): name the yield fallback in the device-only write rejection by @F0Rextasy in #14470
  • fix(coding-agent): lift interrupt auto-resume suppression on manual retry by @daandden in #14831
  • fix(ai): replay demoted DeepSeek thinking as reasoning_content by @yugasun in #15028

Session titles vanish after history.db is quarantined and recreated by @F0Rextasy in #14361

  • fix(tui,coding-agent): enable kitty enhanced paste when the prepaint composer starts the TUI first by @LoneExile in #15369
  • fix(discovery): discover symlinked hooks in the native hooks dirs by @F0Rextasy in #14536
  • fix(coding-agent): log missing power assertion backend once at debug instead of warning every turn by @tahakotil in #14591
  • fix(pi-shell): keep cargo's file-lock wait line in minimized output by @jorgoose in #14631
  • fix(coding-agent): release the broker scope when its socket is deleted by @nick-maderight in #14466
  • fix(session): keep SQL and Redis sessions saving after a rewrite race by @sjawhar in #15612

coding-agent: let Codex web search use an env OAuth bearer by @F0Rextasy in #14337

  • fix(coding-agent): keep yielded data with placeholder errors by @Komzpa in #15633
  • fix(ai): preserve GLM-5.2 thinking on Ollama Cloud by @Dante-dan in #14440
  • fix(ai): omit response_format for GPT Image requests by @jimhester in #14619

Clear the Gemini thought signature when redaction rewrites tool call args by @F0Rextasy in #14392 OpenRouter errors drop the upstream detail in error.metadata.raw by @F0Rextasy in #14435

  • fix(tui): stop advertising stage and discard keys in the git commit view by @F0Rextasy in #14480
  • fix(coding-agent): ignore sub-1000ms MCP timeouts from Claude plugin manifests by @oleg494 in #14574

natives: honour maxCountPerFile for a single explicit file by @F0Rextasy in #14327

  • fix(session): prevent infinite retry loop via cooldown-expiry primary revert by @MiloMMIN in #14611
  • refactor(search): one capped reader for scrapers and search providers by @yuzu-octopus in #15304

openai-models-list discovery: honor a top-level max_tokens output limit by @F0Rextasy in #14403

  • refactor(ai): share normalizeToolCallId across tool-call id normalizers by @jaredlyon in #14374
  • fix(coding-agent): bypass ambient release-age gates during self-update by @morri-son in #14581
  • fix(coding-agent): publish latest message-result follow-up by @mg-mg-mg in #15707
  • fix(mnemopi): score recall with the configured veracity and tier weights by @sjawhar in #13824
  • fix(ai): honour the reported billing unit for GitHub Copilot usage by @F0Rextasy in #14501

Reject sloppy payloads with two operators on one *** Find by @F0Rextasy in #14357

  • fix(utils,coding-agent): prevent unhandled rejection on aborted process and skip pip fallthrough on cancelled install by @harshaygadekar in #15750
  • fix(coding-agent): preserve auto-learn capture history prefixes by @nanbloom001 in #14099
  • fix(ai): classify a server-declared repetition stop as a thinking loop by @F0Rextasy in #14535

shake images: report freed tokens and correct the context anchor by @F0Rextasy in #14367

  • fix(coding-agent): launch Herdr commands through a shell-neutral script path by @shgew in #15262
  • fix(tui): dropped stale PR from status line after branch switch by @ravshansbox in #15455
  • refactor(utils): shared slugify for existing slug helpers by @jaredlyon in #14283
  • fix(coding-agent): return large artifacts' text from Eval read() outside the session's artifacts dir by @will-bogusz in #15410
  • fix(tui): total task subagent spend in the footer by @F0Rextasy in #14393
  • fix(shell): allow TERM cleanup before hard-killing cancelled jobs by @mg-mg-mg in #15709
  • fix(coding-agent): keep only in-flight tool calls in mid-turn transcript rebuilds by @shgew in #15466
  • fix(tui): further btw UX/UI enhancements by @H4vC in #15902
  • fix(tui): keep transcript rows visible when bottom chrome stays taller after a turn by @emmahyde in #15820
  • perf(edit): check parse status without building summaries by @iliaal in #15904
  • fix(coding-agent): send file contents when uploading into relay and connected browsers by @will-bogusz in #15489
  • feat(ai,coding-agent): scope auth-gateway client tokens to models and accounts by @alphastorm in #15900
  • perf(natives): trim freed heap pages once native work goes quiet by @iliaal in #15905
  • feat(judgment): support Jev images on TypeSafe and OpenRouter by @anatoli-tsinovoy in #15887
  • fix(natives,coding-agent): keep the macOS display awake for the agent's turn, not 5 minutes past its last action by @will-bogusz in #15762
  • fix(browser): fill colour, date, time and range inputs with their value instead of typing into them by @will-bogusz in #15914
  • fix(coding-agent): stop browser uploadFile swallowing later file choosers and hanging on File System Access pickers by @will-bogusz in #15915
  • fix(coding-agent): let browser element handles upload through chooser triggers and drop zones by @will-bogusz in #15918
  • fix(coding-agent): fail browser uploadFile when nothing on the page takes the file by @will-bogusz in #15919
  • fix(browser): fail fast and reattach when Chrome detaches omp from a relay tab by @will-bogusz in #15920
  • fix(coding-agent): keep the machine awake again under power.sleepPrevention by @will-bogusz in #15941
  • fix(grep): searched all of an explicitly named large file by @roboomp in #15943
  • fix(catalog): routed zen argon through native gemini by @roboomp in #15978
  • fix(coding-agent): made browser upload and launch tests portable by @roboomp in #15984
  • fix(agent): preserve cancelled ask results after job completions by @roboomp in #15992
  • fix(prewalk): honor MCP read-only hints during handoff by @roboomp in #15995

New Contributors

@yshihao636 made their first contribution in #14584 @yugasun made their first contribution in #15028 @LoneExile made their first contribution in #15369 @MiloMMIN made their first contribution in #14611 @morri-son made their first contribution in #14581 @nanbloom001 made their first contribution in #14099 @shgew made their first contribution in #15262 @emmahyde made their first contribution in #15820

Full Changelog: v18.11.1...v18.11.2

原文入口

阅读原文(github.com)

原文将在新窗口打开。收录时间不是内容更新时间;正文、译文与解读的版权归原作者/来源所有,本站仅作个人阅读辅助并保留原文入口;页面时间均为北京时间。

作者/署名来自原文结构化字段(Atom/RSS/HTML meta/JSON-LD;GitHub release 显示的是发布者账号),未经模型补充。

了解来源批准与收录规则