黄奕彬

外部精选

omp · v18.14.2

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

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

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

结构化摘要 AI 生成

背景与问题

这是 oh-my-pi(omp)v18.14.2 的发布说明,面向该工具链的现有用户,回答“这个版本相对 v18.14.1 改了什么、为什么要升级”。覆盖 monorepo 内多个子包:@oh-my-pi/pi-agent-core、pi-ai、pi-catalog、pi-coding-agent、pi-mnemopi、pi-natives、omp-stats、pi-tui、pi-utils、pi-wire。

背景问题包括:thinking 循环误报、流式请求挂死、OAuth 令牌丢失、缓存读取回退模型上限、目录读取隐藏构建目录、MCP 连接失败不重连等一批实际缺陷。

方法或内容

发布内容按子包分节列出 Breaking Changes、Added、Changed、Fixed,末尾附 PR 级变更列表(含贡献者)、新贡献者(@metaphoric-dev)与完整 changelog 链接(v18.14.1...v18.14.2)。主要动作:

  1. 将循环防护重构为 catalog 轴并用 loopGuardLevel 替代 isLoopGuardedModel;
  2. 新增 task.perCallModel 系列、disableServerSideFallback、PI_TOOL_CALL_ID 等 API;
  3. 修复数十个跨模型提供方、网关、TUI、MCP/LSP 的问题;
  4. 新增简体中文 README(README.zh-CN.md)。

关键发现 / 结果

关键变更点:

  • 破坏性:pi-ai 用 loopGuardLevel(返回 "off"/"exact"/"semantic")替代 isLoopGuardedModel;pi-catalog 移除 compat 记录中的 thinkingLoopGuard,改为适用于所有 host 的 catalog 轴(Gemini/DeepSeek/Grok 为 "semantic",Claude 为 "off")。
  • 新增:disableServerSideFallback(Factory Droid 请求省略服务端拒绝回退链);task.perCallModel(off/eval/on)及 task.perCallModelAllow、task.maxEffort;Settings.reloadFromDisk({ includeParents: true });PI_TOOL_CALL_ID 环境变量;judgment.attemptTimeoutMs(默认 3 秒)。
  • 修复:Claude 因摘要重复进度行(如 "Still writing the parser...")误报 "Thinking loop detected";整行重复需约 1 KB 才计为循环;Anthropic 空内容 delta 不再续期流超时;OAuth 刷新令牌旋转不再丢失;Cursor "Other Models" 计量改显示百分比;GitHub Copilot Claude 5.x 缓存读取不再误报 1M 窗口;目录读取不再隐藏 dist/build/node_modules/.git;MCP 在 DNS/socket 错误后可重连。

结论与意义

原文未给出整体结论性表述;从结构看,本版本定位为补丁型发布,重心是修复与少量 API 调整。适用边界由变更本身界定:破坏性变更(loopGuardLevel、thinkingLoopGuard 移除)要求依赖这些 API 的下游代码迁移;其余修复仅影响所述具体场景。

来源日期 2026年11月1日 01:56(北京时间)(北京时间 2026-11-01 01:56:02),是 v18.14.1...v18.14.2 之间的增量。

AI 解读 AI 生成

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

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

发布时间:来源日期 2026年11月1日 01:56(北京时间),即北京时间 2026-11-01 01:56:02。变更范围明确为 v18.14.1...v18.14.2 的增量,属于特定时点的补丁版本。其中引用的 issue/PR 编号(如 #12229、#17537)表明部分工作可能跨越更早时间。

是否仍成立取决于后续版本;行为性修复(如超时、令牌处理)可能随版本演进再调整,原文未说明后续计划。

空间:谁的环境 / 场景

适用对象为 oh-my-pi v18.14.2 的用户与下游开发者,涉及多个使用形态:

  1. CLI/TUI 编码代理(含 Tern 面板、IRC 协调、ACP 会话、MCP 工具、LSP 集成);
  2. omp auth-gateway(Responses 与 chat-completions 端点);
  3. 多模型提供方:Anthropic/Claude、Gemini、DeepSeek、Grok(含 Amazon Bedrock 上的 DeepSeek/Grok)、Factory Droid、Cursor、GitHub Copilot(Claude 5.x 系列:claude-opus-5、claude-opus-5.5、claude-sonnet-5、claude-sonnet-5.5)。

部署形态原文未说明。

变量:实际改变了什么

相对 v18.14.1 的实际改变:

  1. 结构:thinkingLoopGuard 从 compat 记录移除,isLoopGuardedModel 被替换;model 进入每个 task schema,不允许的 model 会被拒绝。
  2. 行为:Claude 模型不再运行 loop guard;整行重复约 1 KB 起才算循环;任务 schema 拒绝未授权模型;原生判定 3 秒超时后切换 fallback;/usage 对 Cursor "Other Models" 显示百分比而非夸大的美元数。
  3. 新数据/接口:PI_TOOL_CALL_ID、task.perCallModel 等、oklabDistance、TspButtonProps、nums code prop。

价格类变化原文未说明(仅显示方式修正)。

区分:包含 ≠ 相关 ≠ 因果

有明确因果证据的(修复声明本身即因果链):Anthropic 空 delta 被当作流进度 → 超时不触发(修复后可超时);缓存读取回退到捆绑值 → Copilot Claude 5.x 误报 1M 窗口(修复后发现的限制在缓存读取中保留);刷新仍在进行时关闭 store → 旋转后的 refresh token 丢失(修复后 store 保持打开直到保存)。

属于配置/包含关系而非因果:loop guard 级别与模型的对应(Gemini/DeepSeek/Grok 为 "semantic"、Claude 为 "off")是 catalog 轴的取值设定,原文未解释为何如此。README.zh-CN.md 与本版本其他变更是同版并列关系,无因果关联。原文未对“任务/评估模型选择更安全”给出量化验证数据。

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

结构化署名字段:github-actions[bot](自动化发布账号),即本发布说明由发布机器人署名;正文各变更条目附有 GitHub 贡献者用户名(如 @Xytronix、@jchanghong023、@will-bogusz、@JustasMasiulis、@roboomp、@dannyboy-ai 等),但按约定不作为本文署名,仅是正文中的变更归属信息。关键技术及原文描述的原理:

  1. thinking 循环防护:检测推理摘要中的近重复循环,现按 catalog 轴分 "off"/"exact"/"semantic" 三级,整行重复需覆盖约 1 KB 才计入;
  2. steering signal:工具经 toolCall.steeringSignal 看到的软转向信号,现以排队消息来源("user"、"irc" 等)作为 reason 中止;
  3. 摘要完整性:stopReason: "length" 的压缩/交接摘要被视为不完整而拒绝,不作为完整上下文;
  4. OAuth 刷新:store 在 in-flight 刷新令牌保存前保持打开并拒绝新刷新。

元反空综合结论

元:这份内容本质是 monorepo 补丁版本的变更账目,回答“升级到 v18.14.2 会得到什么、需要改什么”,其价值密度在破坏性 API 变更清单与可对照 issue 编号的修复列表。

反:最可能有边界或会失效的主张——loop guard 的约 1 KB 阈值与三级分类是启发式规则,误报/漏报边界随模型行为漂移;task.perCallModel 的权限收紧依赖“项目设置只能收窄”这一策略,其安全性原文未给出验证数据;各项对第三方服务(Cursor、Copilot、Bedrock)行为的修复依赖对方接口现状,可能随对方变更失效。

空:去掉发布叙事后剩下的必要事实是:两个破坏性 API 变更(loopGuardLevel 替代 isLoopGuardedModel、thinkingLoopGuard 移出 compat 记录)、一批带编号的缺陷修复(跨流式超时、令牌旋转、缓存上限、目录列举、MCP 重连、LSP CRLF 等)、若干新 API(task.perCallModel 系列、disableServerSideFallback、PI_TOOL_CALL_ID)与中文 README。

综合结论:这是一份信息完整、可追溯(PR 编号齐全)的例行发布说明,可信度取决于条目所述可复现的缺陷场景;对下游用户,迁移点是循环防护 API,其余为即装即得的修复;无夸大宣传语,但“更安全/更正确”类效果均未附量化数据,应按“已修复的具体场景”而非“整体保证”理解。

中文译文 AI 生成

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

新增

  • 工具以 toolCall.steeringSignal 形式看到的软转向信号,现在中止时会以排队消息的来源("user"、"irc" 等)作为原因,因此工具可以只让位于它应当让位的来源(#17537)

修复

  • 拒绝以 stopReason: "length" 结尾的不完整的本地压缩(compaction)、turn 前缀、handoff 和分支摘要,而不是将截断文本当作完整上下文使用。省略不完整的、仅用于显示的短摘要,同时不丢弃已完成的完整摘要(#17499,由 @Xytronix 贡献)。

@oh-my-pi/pi-ai

破坏性变更

  • 用 loopGuardLevel 取代了 isLoopGuardedModel,后者根据模型的 thinking-loop-guard 目录规则返回 "off"、"exact" 或 "semantic"

新增

  • 为 FactoryDroidOptions 和 SimpleStreamOptions 新增 disableServerSideFallback:Factory Droid 请求会省略服务端拒绝回退链,并且如果由另一个模型应答,则在其任何内容被流式传输之前失败(#12229,由 @Xytronix 贡献)

变更

  • Amazon Bedrock 上的 DeepSeek 和 Grok 模型现在会获得与其他主机相同的近似重复推理循环检查

修复

  • 修复了当被摘要的思考重复某条进度行(例如 "Still writing the parser...")时,Claude 轮次以 "Thinking loop detected" 失败的问题;Claude 模型不再运行循环防护
  • 修复了循环防护丢弃其他模型轮次的问题——这些轮次的推理摘要将某条状态行重复了几次;现在整行重复必须达到约 1 KB 才算作循环
  • 修复了按请求设置的 OpenAI 兼容请求头与大小写不同的模型请求头被合并而非覆盖的问题(#17513,由 @jchanghong023 贡献)
  • 修复了持续发送空内容增量的停滞 Anthropic 流永不超时的问题,原因是这些增量被视为流进度(#17484,由 @jchanghong023 贡献)
  • 修复了 Anthropic 兼容端点在流式内容块上放置的 thinking signature 丢失的问题,使重放的推理保留其已签名的块(#17483,由 @jchanghong023 贡献)
  • 修复了当某次刷新仍在进行中时 AuthStorage.close() 和 replaceStore() 丢失已轮换的 OAuth refresh token 的问题(无论有无持久刷新租约);存储现在会保持打开直到该 token 保存完毕,并拒绝新的刷新(#17518)
  • 修复了 /usage 将 Cursor 的 "Other Models" 计量显示为虚高美元金额的问题;现在它像 Cursor Models 一样显示 Cursor 报告的百分比(#17462,由 @eggpeat 贡献)
  • 修复了 omp auth-gateway 的 Responses 端点拒绝 temperature、top_p、输出上限、reasoning 和 reasoning summaries 的已记录 null 值的问题(#17466,由 @Xytronix 贡献)。
  • 修复了当抛出的错误已携带响应体时,提供方 HTTP 错误将响应体打印两次的问题,包括带重试头的响应(#17503,由 @metaphoric-dev 贡献)
  • 修复了通过 omp auth-gateway chat-completions 端点的 Gemini 工具调用在下一轮失败的问题:网关现在会在 extra_content 中返回每个调用的 thought signature,并重放客户端回传的那一个(#17509,由 @justdoGIT 贡献)

@oh-my-pi/pi-catalog

破坏性变更

  • 从 compat 记录中移除了 thinkingLoopGuard;thinking-loop-guard 现在是一个适用于每个主机的目录轴(catalog axis),Gemini、DeepSeek 和 Grok 对应 "semantic",Claude 对应 "off"

修复

  • 修复了 GitHub Copilot 的 Claude 5.x 基础模型(claude-opus-5、claude-opus-5.5、claude-sonnet-5、claude-sonnet-5.5)在模型列表从缓存读取后报告其 -1m 变体的 1M 窗口的问题;现在已发现的限制在缓存读取后仍会保留,而不是回退到捆绑值(#17481)

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

新增

  • 新增 task.perCallModel(默认 off,另有 eval、on),使任务项或 eval 的 agent()/workpool() 调用可以运行在操作者已指定的某个确切模型上:来自你自己(非项目)设置的聊天角色、所选 agent 自身的模型,或父级的当前模型。Glob 值(anthropic/*)永远不会批准模型。

task.perCallModelAllow 收窄该列表,task.maxEffort 限制 worker 的 effort 上限,且 worker 永远不会切换到另一个模型。项目设置只能收窄此配置:它们永远不会开启它或批准某个模型(#12229,由 @Xytronix 贡献)

  • 新增 Settings.reloadFromDisk({ includeParents: true }),它会重新加载 overlay 背后的持久化设置,同时保留 overlay 自身的覆盖项(#12229,由 @Xytronix 贡献)

变更

  • model 现在在每个 task schema 中都有声明:任务调用、eval 的 agent() 或 workpool() 若传入操作者配置不允许的模型,将以错误拒绝(#12229,由 @Xytronix 贡献)
  • 查看子 agent 或返回主会话时不再发布 "Viewing agent …" / "Returned to main session" 状态(Tern 中的一个弹窗);状态行和 Tern 的 composer 已经显示当前查看的是哪个 agent
  • 在 Tern 面板中,omp stats 会以仪表板取代它运行所在的块,带有一个 Close 按钮(或 Esc、Ctrl+C)可停止它并恢复终端;/stats 则会在 omp 旁边的浏览器块中打开它,而不是系统浏览器
  • bash 工具命令现在可以看到 PI_TOOL_CALL_ID,即运行它们的调用的 id,因此 agent 运行的脚本可以在会话转录中指向该调用(#17489,由 @will-bogusz 贡献)
  • 配置了回退(fallback)的原生判定现在会在 3 秒的候选截止时限后转入回退(可通过 judgment.attemptTimeoutMs 配置),并短暂跳过已超时的路径;未配置回退时,缓慢的判定器永远不会被切断或替换(#17465,由 @Xytronix 贡献)。

修复

  • 修复了 agent 工作期间运行的 ! 或 $ 命令在 Tern 中悬浮于 composer 上方的问题,展开其输出会遮挡对话;现在它位于对话末尾
  • 修复了从 eval 单元格发送的 out:// 回复(tool.write 写入 out://,或 tool.bash 使用 > out://)始终不显示的问题,即使该写入报告了 "Shown to the user.";这些回复现在会绘制为 eval 卡片之后的回复,并且在没有任何地方能显示它们时(后台单元格、浏览器标签页脚本)会被拒绝
  • 修复了写入 out://(例如 out://baselines.md)被绘制为带行号的 Write 卡片、而不是以流式文本形式呈现的回复的问题

修复了表格图表将 ratio 或 speedup 列作为其计算所依据耗时旁边的一个系列绘制的问题,该系列相对基线读作 "719× less"

  • 修复了目录读取隐藏已有 dist、build、node_modules、.git 及其他依赖/构建/缓存子目录的问题,这使它们看起来不存在 (#17539)
  • 修复了 artifact 写入报告暂存文件清理错误而非最初的短写入或发布失败的问题 (#17485 由 @jchanghong023)
  • 修复了 MCP 工具调用在 DNS 或 socket 打开错误后失败且未重连的问题 (#17461 由 @Xytronix)。
  • 修复了 MCP 连接超时和取消操作允许 stdio 服务器在连接尝试已经失败之后启动的问题。(#17512 由 @jchanghong023)
  • 修复了 ACP 更新和扩展对话框在会话重置后切换到未通告的 session handle,以及客户端在重启后重新打开延续会话时落在原始会话上的问题 (#17517 由 @jchanghong023)
  • 修复了启用 Hide Tool Activity 后 IRC 协调卡片仍可见的问题,包括实时消息和回放 (#17498 由 @dannyboy-ai)。
  • 修复了在 agent 等待 ask 时你排队的消息停留在未应答对话框之后的问题;现在该对话框会在不取消该轮次的情况下关闭,而 IRC 消息和后台完成会使其保持打开 (#17537)。
  • 修复了 JS eval 的 output() 忽略其文档记载的 offset、limit、query 和 format 选项并返回原始 read 工具结果的问题;它现在像 Python 的 output() 一样返回选定的文本(或 format: "json" 元数据)(#17455)
  • 修复了当无关的项目文件夹不可读时会话查找丢失可读项目会话的问题 (#17467 由 @Xytronix)。
  • 修复了当评审不包含可剥离的 primary reasoning 时,advisor 在尝试其模型回退之前重发与被拒评审字节相同内容的问题 (#17473)
  • 修复了当页面首行超过 50 KB 输出预算时读取整个 URL 不返回内容的问题,如使用 :raw 读取的压缩页面;现在会显示该行的前 50 KB (#17500 由 @will-bogusz)
  • 修复了 advisor 因其用量受限账户持续被报告为可切换而将同一个受限账户重试数千次的问题;现在每次失败的评审中每个 provider 下的每个同级账户最多尝试一次,然后回退、等待或因配额暂停 (#17472)
  • 修复了来自 Windows (CRLF) 行尾文件的 LSP definition、type definition、implementation 和 reference 结果中每个源码上下文行都带有多余回车符的问题 (#17549 由 @JustasMasiulis)

@oh-my-pi/pi-mnemopi

修复

  • 修复了启发式情景事实存储单词片段(Drafting is active. → ctive)、被截断的多词对象、或对 has an … 句子什么都不存储的问题 (#17511)

@oh-my-pi/pi-natives

新增

  • 新增 listWorkspace({ pruneExcludedDirs: false }) 以停止修剪标准的依赖/构建目录名称;如 .git 这样的隐藏目录还需要 hidden: true (#17539)

@oh-my-pi/omp-stats

新增

  • 新增 setStatsCloseHandler:当宿主设置了处理器时,仪表盘会在其顶栏显示一个 Close 按钮,并在按下 Esc 或 Ctrl+C(未选中文本时)时关闭,供用该仪表盘替代终端显示的宿主使用

修复

  • 修复了工具错误率计入被显式标记为未执行的跳过工具调用的问题 (#17463 由 @Xytronix)。

@oh-my-pi/pi-tui

新增

  • 新增 assertModelSupportsEffortCeiling(),当模型在 task.maxEffort 上限或以下没有受支持的思考力度时抛出异常 (#12229 由 @Xytronix)
  • 向 native/overlay 新增 iconButton()、quietButton() 和 segmentedTabs(),并向 actionButton() 新增 disabled、busy 和 icon 选项
  • 向 Composer.setRuntimeChildren 选项新增 nativeTail:此类容器的子项会在 transcript 之后继续进入原生表面的主体区域,而不是搭载在 dock 中
  • 新增 isHighlightLanguage 和 createCodeFrameStyler,供以文件自身语言高亮源码行的渲染器使用 (#17550 由 @JustasMasiulis)

变更

  • 行区间之间存在间隔的 Grep 和 read 结果现在在 Tern 中渲染为一个整体横向滚动的代码块,"…" 间隔行在行号栏中对齐
  • 绘制按钮类型的 Tern 构建中,omp 的按钮会成为真正的按钮(指针光标、可访问的按下/禁用状态、禁用按钮的工具提示会说明原因),分段控件则成为 tabs 变体 "segmented";较旧的 Tern 构建保留按角色设定样式的行
  • Grep、AST Grep 和 Find 结果中的源码行以及 LSP 符号名称现在以其文件所属语言进行语法高亮,而不是以单一颜色绘制;连续的行一起高亮,因此多行字符串和注释保持其颜色 (#17550 由 @JustasMasiulis)

修复

  • 修复了表格图表将 ratio 列与其所除的耗时并列绘制的问题(C++ (ms) 旁的 ratio 0.997 被绘制为 "719× less"):analyzeTable 会把等于另外两列之商的列(无论以裸值还是以 × 形式书写)视为对这两列的重述
  • 修复了启用 Hide Tool Activity 后 IRC 协调卡片仍可见的问题,包括实时与回放 transcript 中的传入消息、自动回复、转发和 workpool 消息 (#17498 由 @dannyboy-ai)。
  • 修复了嵌套颜色之后的文本丢失外层颜色的问题,例如 /mcp 和 /ssh 提示中高亮命令(Run /mcp list to see all configured servers.)之后的其余文本回退到默认文本颜色而不是保持暗淡 (#17521 由 @JustasMasiulis)
  • 修复了 LSP definition、type definition 和 implementation 结果显示原始 "Found 1 definition(s):" 文本的问题;响应现在会对其进行计数(1 definition),并将每个位置显示在其源码行上方,其自身所在行像 grep 匹配一样被标记 (#17549 由 @JustasMasiulis)
  • 修复了路径以空白字符开头的 LSP definition、type definition 或 implementation 位置被丢弃、其源码行被显示在上一位置下方的问题

修复了在 accent 与 success 颜色相同或相近的主题(dark-terminal、dark-poimandres、light-poimandres)中,会话树的用户轮次与助手轮次外观一致的问题:用户行现在加粗显示,assistant: 标签切换为 path 颜色,custom 与 advisor 消息以 muted 弱化样式显示(#17520,由 @wolfiesch 完成)。

@oh-my-pi/pi-utils

新增

  • 新增 oklabDistance,即两个 hex 颜色之间的感知距离(#17520)

@oh-my-pi/pi-wire

新增

  • 为 code props(TspCodeProps)新增 nums:每一行的编号,这样一个代码块可以展示不连续的行,并在编号跳变处使用 … 间隔行。
  • 新增 TSP 按钮类型(TspButtonProps:label、icon、keycaps、default/primary/quiet/danger 变体、sm/md 尺寸、pressed、带原因的 disabled、busy)以及 tabs 变体:"segmented"。

更新内容

  • fix(tui):让会话树的用户轮次与助手轮次在 hue 之外也能区分,由 @wolfiesch 提交于 #17520
  • chore(coding-agent):移除随 RPC 测试夹具一并提交的 SQLite 文件,由 @will-bogusz 提交于 #17501
  • fix(ai):接受可为 null 的 Responses 请求控制项,由 @Xytronix 提交于 #17466
  • fix(advisor):限制配额反复失败时的凭据切换次数,由 @roboomp 提交于 #17476
  • fix(catalog):在缓存的 additive-catalog 读取中保留已发现的行,由 @roboomp 提交于 #17482
  • fix(ai):阻止空的 Anthropic delta 为流超时续期,由 @jchanghong023 提交于 #17484
  • fix(coding-agent):在清理失败时保留 artifact 写入错误,由 @jchanghong023 提交于 #17485
  • feat(coding-agent):将 PI_TOOL_CALL_ID 暴露给 bash 命令,由 @will-bogusz 提交于 #17489
  • fix(compaction):拒绝因长度被截断的摘要与 handoff,由 @Xytronix 提交于 #17499
  • fix(coding-agent):在 whole-URL 读取时显示超出预算首行的开头,由 @will-bogusz 提交于 #17500
  • fix(ai):只打印一次 provider 的错误响应体,由 @metaphoric-dev 提交于 #17503
  • fix(mcp):连接结束时取消待处理的 stdio 创建,由 @jchanghong023 提交于 #17512
  • fix(ai):遵循大小写不敏感的按请求 header 覆盖,由 @jchanghong023 提交于 #17513
  • fix(mnemopi):在 episodic 事实对象中保留完整的单词与短语,由 @roboomp 提交于 #17516
  • fix(acp):在多次重置之间保持协议会话句柄稳定,由 @jchanghong023 提交于 #17517
  • fix(ai):在关闭 auth store 前排空进行中的 oauth 刷新,由 @roboomp 提交于 #17519
  • fix(tui):在内层样式结束后保持已应用于带样式文本上的颜色,由 @JustasMasiulis 提交于 #17521
  • test(coding-agent):使三个测试不再依赖 HOME 与内联图片预算的具体数值,由 @sjawhar 提交于 #17527
  • fix(ask):为已排队的 steering 中断待处理的对话框,由 @roboomp 提交于 #17541
  • fix(coding-agent):在读取目录的输出中列出 build 与依赖目录,由 @roboomp 提交于 #17543
  • fix(lsp):将 definition 结果渲染为位于其源码之上的 location,由 @JustasMasiulis 提交于 #17549
  • feat(tui):以所在文件的语言高亮搜索结果与 LSP 符号,由 @JustasMasiulis 提交于 #17550
  • fix(coding-agent):遵守 js eval output() 的 offset/limit/query/format,由 @roboomp 提交于 #17460
  • fix(mcp):对 DNS 与 socket 打开失败进行重试,由 @Xytronix 提交于 #17461
  • fix(ai):将 Cursor 的 Other Models 用量以百分比显示,由 @eggpeat 提交于 #17462
  • fix(stats):将合成的非执行排除出工具错误,由 @Xytronix 提交于 #17463
  • fix(judgment):对停滞的 native 尝试设置上限并执行故障转移,由 @Xytronix 提交于 #17465
  • fix(coding-agent):隔离不可用的会话 bucket,由 @Xytronix 提交于 #17467
  • fix(advisor):在 refusal 时跳过无实际作用的 reasoning 剥离,由 @roboomp 提交于 #17475
  • fix(ai):保留在 content_block_start 上送达的 thinking signature,由 @jchanghong023 提交于 #17483
  • fix(tui):使 IRC 卡片遵循 Hide Tool Activity,由 @dannyboy-ai 提交于 #17498
  • fix(ai):在 gateway 中保留 Google 的 thought signature,由 @justdoGIT 提交于 #17509
  • feat(task,eval):按次调用的模型选择器,限定为操作员配置的模型,由 @Xytronix 提交于 #12229
  • docs:添加简体中文 README(README.zh-CN.md),由 @bigHippoZz 提交于 #17480

新贡献者

  • @metaphoric-dev 在 #17503 中完成了首次贡献

完整变更日志:v18.14.1...v18.14.2

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

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

Added

The soft steering signal a tool sees as toolCall.steeringSignal now aborts with the source of the queued message ("user", "irc", …) as its reason, so a tool can yield only to the sources it should (#17537)

Fixed

Reject incomplete local compaction, turn-prefix, handoff, and branch summaries ending with stopReason: "length" instead of using truncated text as complete context. Omit incomplete display-only short summaries without discarding a completed full summary (#17499 by @Xytronix).

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

Replaced isLoopGuardedModel with loopGuardLevel, which returns "off", "exact", or "semantic" from the model's thinking-loop-guard catalog rule

Added

Added disableServerSideFallback to FactoryDroidOptions and SimpleStreamOptions: a Factory Droid request leaves out the server-side refusal fallback chain and fails, before any of its content is streamed, if another model answers it (#12229 by @Xytronix)

Changed

DeepSeek and Grok models on Amazon Bedrock now get the same near-duplicate reasoning-loop checks as on other hosts

Fixed

Fixed Claude turns failing with "Thinking loop detected" when summarized thinking repeated a progress line such as "Still writing the parser..."; Claude models no longer run the loop guard Fixed the loop guard discarding turns from other models whose reasoning summary repeats one status line a few times; whole-line repetition now has to cover about 1 KB before it counts as a loop Fixed per-request OpenAI-compatible headers being combined with differently cased model headers instead of overriding them (#17513 by @jchanghong023) Fixed a stalled Anthropic stream that keeps sending empty content deltas never timing out, because those deltas were treated as stream progress (#17484 by @jchanghong023) Fixed Anthropic-compatible endpoints that put a thinking signature on the streamed content block losing it, so replayed reasoning keeps its signed block (#17483 by @jchanghong023) Fixed AuthStorage.close() and replaceStore() losing a rotated OAuth refresh token when a refresh was still in flight, with or without durable refresh leases; the store now stays open until that token is saved, and new refreshes are refused (#17518) Fixed /usage showing Cursor's "Other Models" meter as an inflated dollar amount; it now shows the percentage Cursor reports, like Cursor Models (#17462 by @eggpeat) Fixed the omp auth-gateway Responses endpoint rejecting documented null values for temperature, top_p, output limits, reasoning, and reasoning summaries (#17466 by @Xytronix). Fixed provider HTTP errors printing the response body twice when the thrown error already carried it, including responses with a retry header (#17503 by @metaphoric-dev) Fixed Gemini tool calls through the omp auth-gateway chat-completions endpoint failing on the next turn: the gateway now returns each call's thought signature in extra_content and replays the one a client sends back (#17509 by @justdoGIT)

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

Removed thinkingLoopGuard from compat records; thinking-loop-guard is now a catalog axis that applies on every host, with "semantic" for Gemini, DeepSeek, and Grok and "off" for Claude

Fixed

Fixed GitHub Copilot Claude 5.x base models (claude-opus-5, claude-opus-5.5, claude-sonnet-5, claude-sonnet-5.5) reporting the 1M window of their -1m variants once the model list was read from cache; discovered limits now survive cached reads instead of reverting to bundled values (#17481)

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

Added

Added task.perCallModel (off by default, eval, on) so a task item or an eval agent()/workpool() call can run on one exact model the operator already names: a chat role from your own (non-project) settings, the selected agent's own model, or the parent's current model. Glob values (anthropic/*) never approve a model. task.perCallModelAllow narrows that list, task.maxEffort caps the worker's effort, and the worker never switches to another model. Project settings can only narrow this: they never turn it on or approve a model (#12229 by @Xytronix) Added Settings.reloadFromDisk({ includeParents: true }), which reloads the persisted settings behind an overlay while keeping the overlay's own overrides (#12229 by @Xytronix)

Changed

model is now declared in every task schema: a task call, eval agent() or workpool() that passes a model the operator's configuration does not allow is refused with an error (#12229 by @Xytronix) Viewing a subagent or returning to the main session no longer posts a "Viewing agent …" / "Returned to main session" status (a popup in Tern); the status line and Tern's composer already show which agent is in view In a Tern pane, omp stats shows the dashboard in place of the block it runs in, with a Close button (or Esc, or Ctrl+C) that stops it and brings the terminal back, and /stats opens it in a browser block beside omp, instead of the system browser bash tool commands now see PI_TOOL_CALL_ID, the id of the call running them, so a script the agent runs can point at that call in the session transcript (#17489 by @will-bogusz) Native judgments with a configured fallback now move to it after a 3-second candidate deadline (configurable with judgment.attemptTimeoutMs) and briefly skip the timed-out route; without a configured fallback a slow judge is never cut off or replaced (#17465 by @Xytronix).

Fixed

Fixed a ! or $ command run while the agent works floating over the composer in Tern, where expanding its output covered the conversation; it now sits at the end of the conversation Fixed out:// replies sent from an eval cell (tool.write to out://, or tool.bash with > out://) never appearing even though the write reported "Shown to the user."; they now draw as replies after the eval card, and are refused where nothing would show them (a backgrounded cell, a browser tab script) Fixed a write to out:// (such as out://baselines.md) drawing as a Write card with line numbers instead of a reply streaming as prose Fixed table charts drawing a ratio or speedup column as a series beside the timings it was computed from, which read as "719× less" against the baseline Fixed read of a directory hiding existing dist, build, node_modules, .git, and other dependency/build/cache subdirectories, which made them look absent (#17539) Fixed artifact writes reporting the staging-file cleanup error instead of the original short-write or publication failure (#17485 by @jchanghong023) Fixed MCP tool calls failing without reconnecting after DNS or socket-open errors (#17461 by @Xytronix). Fixed MCP connection timeouts and cancellation allowing a stdio server to start after the connection attempt had already failed. (#17512 by @jchanghong023) Fixed ACP updates and extension dialogs switching to an unadvertised session handle after a session reset, and a client reopening a continued conversation after a restart landing on the original session (#17517 by @jchanghong023) Fixed IRC coordination cards remaining visible when Hide Tool Activity is enabled, including live messages and replay (#17498 by @dannyboy-ai). Fixed a message you queue while the agent waits on ask sitting behind the unanswered dialog; the dialog now closes without cancelling the turn, while IRC messages and background completions leave it open (#17537). Fixed JS eval output() ignoring its documented offset, limit, query and format options and returning the raw read tool result; it now returns the selected text (or the format: "json" metadata) like Python's output() (#17455) Fixed session lookup losing readable project sessions when an unrelated project folder is unreadable (#17467 by @Xytronix). Fixed the advisor resending a byte-identical refused review before trying its model fallback when the review contained no primary reasoning to strip (#17473) Fixed read of a whole URL returning no content when the page's first line is over the 50 KB output budget, as on minified pages read with :raw; it now shows that line's first 50 KB (#17500 by @will-bogusz) Fixed an advisor whose usage-limited account kept being reported as switchable retrying the same capped account thousands of times; it now tries each sibling account at most once per provider per failing review, then falls back, waits, or pauses on the quota (#17472) Fixed LSP definition, type definition, implementation and reference results carrying a stray carriage return on every source context line from files with Windows (CRLF) line endings (#17549 by @JustasMasiulis)

@oh-my-pi/pi-mnemopi

Fixed

Fixed heuristic episodic facts storing word fragments (Drafting is active. → ctive), truncated multiword objects, or nothing for has an … sentences (#17511)

@oh-my-pi/pi-natives

Added

Added listWorkspace({ pruneExcludedDirs: false }) to stop pruning standard dependency/build directory names; hidden directories such as .git also require hidden: true (#17539)

@oh-my-pi/omp-stats

Added

Added setStatsCloseHandler: while a host sets one, the dashboard shows a Close button in its top bar and closes on Esc or Ctrl+C (with no text selected), for hosts that show it in place of their terminal

Fixed

Fixed tool error rates counting skipped tool calls that were explicitly marked as not executed (#17463 by @Xytronix).

@oh-my-pi/pi-tui

Added

Added assertModelSupportsEffortCeiling(), which throws when a model has no supported thinking effort at or below a task.maxEffort ceiling (#12229 by @Xytronix) Added iconButton(), quietButton() and segmentedTabs() to native/overlay, and disabled, busy and icon options to actionButton() Added nativeTail to Composer.setRuntimeChildren options: containers whose children continue the native surface's main after the transcript instead of riding in the dock Added isHighlightLanguage and createCodeFrameStyler for renderers that highlight source lines in their file's language (#17550 by @JustasMasiulis)

Changed

Grep and read results with gaps between line runs now render in Tern as one code block that scrolls sideways as a whole, with … gap rows aligned in the line-number gutter Tern builds that draw the button kind get omp's buttons as real buttons (pointer cursor, accessible pressed/disabled state, a disabled button's tooltip says why) and segmented controls as tabs variant: "segmented"; older Tern builds keep the role-styled rows Source lines in Grep, AST Grep and Find results and LSP symbol names are syntax-highlighted in their file's language instead of drawn in one color; consecutive lines highlight together, so multi-line strings and comments keep their colors (#17550 by @JustasMasiulis)

Fixed

Fixed table charts plotting a ratio column against the timings it divides (ratio 0.997 beside C++ (ms) drew as "719× less"): analyzeTable reads a column equal to the quotient of two others as restating them, written bare or as × Fixed IRC coordination cards remaining visible when Hide Tool Activity is enabled, including incoming messages, automatic replies, relays, and workpool messages in live and replayed transcripts (#17498 by @dannyboy-ai). Fixed text after a nested color losing the outer color, such as the rest of the /mcp and /ssh hints after the highlighted command (Run /mcp list to see all configured servers.) falling back to the default text color instead of staying muted (#17521 by @JustasMasiulis) Fixed LSP definition, type definition and implementation results showing the raw Found 1 definition(s): text; the response now counts them (1 definition) and shows each location over its source lines, its own line marked like a grep match (#17549 by @JustasMasiulis) Fixed an LSP definition, type definition or implementation location whose path starts with whitespace being dropped, with its source lines shown under the previous location Fixed session tree user and assistant turns looking identical in themes whose accent and success colors match or nearly match (dark-terminal, dark-poimandres, light-poimandres): user rows are now bold, the assistant: label switches to the path color, and custom and advisor messages are muted (#17520 by @wolfiesch)

@oh-my-pi/pi-utils

Added

Added oklabDistance, the perceptual distance between two hex colors (#17520)

@oh-my-pi/pi-wire

Added

Added nums to code props (TspCodeProps): each line's number, so one block can show non-contiguous lines with … gap rows where the numbers jump. Added the TSP button kind (TspButtonProps: label, icon, keycaps, default/primary/quiet/danger variants, sm/md sizes, pressed, disabled with a reason, busy) and tabs variant: "segmented".

What's Changed

  • fix(tui): tell session tree user turns from assistant turns beyond hue by @wolfiesch in #17520
  • chore(coding-agent): remove SQLite files committed with the RPC test fixture by @will-bogusz in #17501
  • fix(ai): accept nullable Responses request controls by @Xytronix in #17466
  • fix(advisor): bounded credential switches on repeated quota failures by @roboomp in #17476
  • fix(catalog): kept discovered rows on cached additive-catalog reads by @roboomp in #17482
  • fix(ai): stop empty Anthropic deltas from renewing stream timeouts by @jchanghong023 in #17484
  • fix(coding-agent): preserve artifact write errors when cleanup fails by @jchanghong023 in #17485
  • feat(coding-agent): expose PI_TOOL_CALL_ID to bash commands by @will-bogusz in #17489
  • fix(compaction): reject length-truncated summaries and handoffs by @Xytronix in #17499
  • fix(coding-agent): show the head of an over-budget first line on whole-URL reads by @will-bogusz in #17500
  • fix(ai): print provider error bodies once by @metaphoric-dev in #17503
  • fix(mcp): cancel pending stdio creation when connection ends by @jchanghong023 in #17512
  • fix(ai): honor case-insensitive per-request header overrides by @jchanghong023 in #17513
  • fix(mnemopi): kept whole words and phrases in episodic fact objects by @roboomp in #17516
  • fix(acp): keep protocol session handles stable across resets by @jchanghong023 in #17517
  • fix(ai): drained in-flight oauth refresh before closing auth store by @roboomp in #17519
  • fix(tui): keep a color applied over styled text after the inner styling ends by @JustasMasiulis in #17521
  • test(coding-agent): make three tests independent of HOME and the inline image budget's value by @sjawhar in #17527
  • fix(ask): interrupted pending dialogs for queued steering by @roboomp in #17541
  • fix(coding-agent): listed build and dependency dirs in read directory output by @roboomp in #17543
  • fix(lsp): render definition results as locations over their source by @JustasMasiulis in #17549
  • feat(tui): highlight search results and LSP symbols in their file's language by @JustasMasiulis in #17550
  • fix(coding-agent): honoured js eval output() offset/limit/query/format by @roboomp in #17460
  • fix(mcp): retry DNS and socket-open failures by @Xytronix in #17461
  • fix(ai): show Cursor's Other Models meter as a percentage by @eggpeat in #17462
  • fix(stats): exclude synthetic non-executions from tool errors by @Xytronix in #17463
  • fix(judgment): bound stalled native attempts and fail over by @Xytronix in #17465
  • fix(coding-agent): isolate unavailable session buckets by @Xytronix in #17467
  • fix(advisor): skipped the no-op reasoning strip on refusals by @roboomp in #17475
  • fix(ai): keep a thinking signature delivered on content_block_start by @jchanghong023 in #17483
  • fix(tui): make IRC cards respect Hide Tool Activity by @dannyboy-ai in #17498
  • fix(ai): keep Google thought signature in gateway by @justdoGIT in #17509
  • feat(task,eval): per-call model selector limited to operator-configured models by @Xytronix in #12229
  • docs: add Simplified Chinese README (README.zh-CN.md) by @bigHippoZz in #17480

New Contributors

@metaphoric-dev made their first contribution in #17503

Full Changelog: v18.14.1...v18.14.2

原文入口

阅读原文(github.com)

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

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

了解来源批准与收录规则