黄奕彬

外部精选

omp · v18.12.2

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

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

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

结构化摘要 AI 生成

背景与问题

这是开源项目 oh-my-pi(omp)v18.12.2 的版本发布说明,记录 v18.12.1...v18.12.2 之间合入的全部变更。面向 omp 使用者与开发者,按子包罗列 Added/Changed/Fixed,帮助判断升级影响。原文未说明项目整体定位与发布动机,仅为变更清单。

方法或内容

按 8 个包给出变更:

  • @oh-my-pi/pi-agent-core:DeepSeek 失败工具调用修正扩展到聊天模板 token 文本
  • @oh-my-pi/pi-ai:新增 nativeJudgmentImageBounds() 与 Box 判断问题;修复 Muse Code 用量、DeepSeek 工具调用
  • @oh-my-pi/browser-relay:修复中继标签页关闭失败、连接中断遗留标签、重启后旧 tab id 解析错乱
  • @oh-my-pi/pi-catalog:播种 TypeSafe jev-1.14.0 与 typesafe/jev-1.14 并设为 judge 角色默认与 TypeSafe 默认模型
  • @oh-my-pi/pi-coding-agent:新增 computer.backgroundFallback、web/deepseek 搜索引擎、macOS el.selectText()/el.type()/el.press()、菜单路径等;大量 Changed 与 Fixed
  • @oh-my-pi/pi-natives:macOS 后台输入/焦点系列新增、修复与性能优化
  • @oh-my-pi/pi-tui、@oh-my-pi/pi-utils:TUI 修复与 readSalvageableRows()

末尾附 PR 清单与 6 位首次贡献者。

关键发现 / 结果

  • DeepSeek 工具调用:写成聊天模板 token 文本(_ 代 ▁、缺 |、缺闭合,如 <|tool_calls_begin|>…<|tool_calls_end|>)此前从不运行,现作为工具调用执行;仍不可解析的移出历史并报为失败调用(#16216)
  • 默认 judge 改用 TypeSafe Jev 1.14(typesafe/jev-1.14.0,然后 openrouter/typesafe/jev-1.14);jev-latest 实际应答为 jev-1.13.0
  • 新增 Box 判断问题:按图像 index 命名,返回该图像边缘的 0–1 分数;text、OpenAI Decisions、Workers AI judges 拒绝
  • 新增 web/deepseek 搜索引擎(用现有 DEEPSEEK_API_KEY 或存储凭据)、computer.backgroundFallback、macOS el.selectText()/el.type()/el.press()、菜单路径、Escape 停止与 UserIntervened
  • 修复:Ollama 历史估算与 Ollama Cloud 压缩时机(#16164)、Muse Code 闲置窗口用量(#16193)、bash 持久 shell 丢状态(#16153)、损坏 history.db 抢救(#15751)、图像超出 Jev 280–1568 px 被降级到本地小模型(现先缩放/填充)
  • 1 小时 prompt cache 的空闲压缩改在最后请求约 54 分钟、过期前执行
  • 另有大量 macOS 后台输入/焦点修复与性能优化(Mermaid、Git 历史、AST、word-diff、文件搜索)

结论与意义

原文没有作者的总体结论段落,仅有变更清单。可归纳的意义:macOS computer use 的后台输入与焦点可靠性被大幅修复;DeepSeek 工具调用与 Ollama 上下文估算兼容性改善;judge 默认模型升级到 TypeSafe Jev 1.14。

适用边界:多数输入修复仅 macOS(部分涉及 Windows/X11/WSL);Box 问题需 TypeSafe Jev 1.14+ 且部分 judges 拒绝;一条 relay 变更需要重装中继扩展。

AI 解读 AI 生成

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

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

来源日期为 2026-10-19 05:03:22(北京时间,对应 UTC 2026年10月19日 05:03(北京时间))。内容描述 v18.12.1...v18.12.2 之间合入的 PR(编号约 #14838–#16216)。作为该版本的变更记录不随时间失效;这些行为是否仍存在于更新版本,原文未说明。

空间:谁的环境 / 场景

适用对象是 omp v18.12.2 用户,变更覆盖 pi-agent-core、pi-ai、browser-relay、pi-catalog、pi-coding-agent、pi-natives、pi-tui、pi-utils。平台:大量修复仅 macOS(部分依赖 Input Monitoring 权限),另有 Windows(grep --path-separator、ENOTDIR 会话路径)、X11、WSL 终端条目。

外部依赖:DeepSeek(含新 Search API)、Ollama/Ollama Cloud、Muse Code、TypeSafe Jev 1.14、OpenRouter、Anthropic 1 小时长保留缓存、Cursor、Codex、Chrome 中继扩展、iTerm2、Kitty 剪贴板协议(OSC 5522)。

变量:实际改变了什么

  • 默认 judge 从应答为 jev-1.13.0 的 jev-latest 改为 TypeSafe Jev 1.14
  • 省略 takeover 的窗口输入默认改为后台执行,不再激活目标 app 或移动用户指针;takeover: true 才前台
  • computer tool 与其错误不再建议模型用 takeover: true 重试,并禁止调用 raise()/apps.open(…, { activate: true })
  • bash:前台调用改在会话持久 shell 运行;set -e 下失败或 exit 不再重置 shell
  • DeepSeek 模板 token 形式的工具调用从“从不运行”变为“运行”;不可解析的移出历史并报失败
  • Muse Code 闲置 5 小时窗口报告为未用,周用量从最后活跃窗口结转至重置
  • 1 小时缓存的空闲压缩改在最后请求约 54 分钟后执行
  • 新增选项默认值:tui.completeScrollback 默认 false

区分:包含 ≠ 相关 ≠ 因果

有明确因果证据(修复条目写明问题与行为改变):DeepSeek 把调用写成模板 token 文本导致“从不运行”,修复后运行(#16216);Ollama 剥离/缺失的 thinking 计入估算导致压缩偏移(#16164);auto-background 开启导致 bash 丢变量/函数/选项(#16153);history.db 损坏导致 Up 箭头崩溃,改为抢救可读行(#15751)。

仅相关而非因果:同版本并列的各包变更之间无因果声明;judge 换为 Jev 1.14 与图像缩放修复同时出现,原文未说升级导致了该修复。

包含关系:Box questions 是 ChainJudge 的一部分扩展;nativeJudgmentImageBounds() 是 native judge bounds 被 catalog 模型 bounds 收紧后的结果。

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

结构化署名仅为 github-actions[bot](机器人发布账号);正文以 #PR by @handle 形式列出贡献者(如 @will-bogusz、@H4vC、@kyle-elliott 等),但按本页结构化作者字段,这些不是署名。关键技术(按原文描述):

  • DeepSeek 聊天模板工具调用 token:以文本写出(_ 代 ▁、缺 |、缺闭合),现被识别为工具调用;不可解析的移出历史并报告失败
  • nativeJudgmentImageBounds():native judge 强制的图像 bounds,其 wire 传输限制被 catalog 模型 bounds 收紧
  • macOS AX 输入:axType/axKeyChord 向单个 accessibility 元素发文本/按键;axSelectText 按 UTF-16 范围选中文本;UserIntervened 使代理未重读、用户又用过的 app 的输入直接失败不发送
  • 空闲压缩对齐缓存:1 小时缓存在过期前约 54 分钟压缩,summary 仍读缓存上下文;5 分钟缓存或未知寿命仍用 compaction.idleTimeoutSeconds
  • SQLite 抢救:readSalvageableRows() 跳过损坏页;损坏 history.db 移至 history.db.corrupt-* 并复制可读 prompt/标题/recap

元反空综合结论

元:这份内容在回答“v18.12.2 改了什么、为什么要升级”,本质是面向用户的变更透明化文档。

反:最可能有边界的部分——macOS 输入行为依赖系统辅助功能与 Input Monitoring 权限,系统更新可能改变表现;Box questions 依赖 TypeSafe Jev 1.14+ 且被 text、OpenAI Decisions、Workers AI judges 拒绝;web/deepseek 依赖 DeepSeek 新 Search API 的可用性;默认 judge 与压缩时机属可再调整的策略。

空:去掉叙事后剩下的事实是 8 个包的 Added/Changed/Fixed 清单、约 70 条 PR 记录、6 位首次贡献者,以及若干默认行为变更(judge 模型、takeover 语义、bash 持久 shell)。

综合:这是一次以 macOS computer use 后台输入/焦点可靠性与 DeepSeek 工具调用兼容为主的维护版本,同时把 judge 默认模型推进到 Jev 1.14;对非 macOS、不用相关模型的用户,影响主要是 bash shell 状态、TUI 与浏览器中继修复。原文未给出性能数字与总体结论。

中文译文 AI 生成

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

变更

  • 发送给 DeepSeek 模型的失败工具调用纠正,现在也涵盖以文本形式写出的聊天模板工具调用 token,而不仅限于格式错误的 DSML(#16216,由 @H4vC)

修复

  • 修复了 Ollama 聊天历史估算把已剥离的原生思考以及缺失后以文本重放的外来思考计入的问题,这曾导致模型切换后的压缩(compaction)失真(#16164)

@oh-my-pi/pi-ai

新增

  • 新增 nativeJudgmentImageBounds():原生 judge 强制执行的图像边界,其线路的传输限制会被目录的模型边界收紧
  • 新增 Box 判定问题(BoxQuestion/BoxAnswer,TypeSafe Jev 1.14+ 直连或通过 OpenRouter):每个问题按图像索引指明它搜索的请求图像,并以该图像边缘的 0–1 分数形式返回;text、OpenAI Decisions 与 Workers AI 的 judge 会拒绝它们

修复

  • 修复了 Muse Code 用量在其 5 小时窗口闲置时失效的问题:闲置窗口现在会报告为未使用,每周用量会从上一个活跃窗口延续,直至其重置(#16193,由 @eggpeat)
  • 修复了当模型以聊天模板 token 写出 DeepSeek 工具调用、以 _ 代替 ▁、缺少 | 或缺少每次调用的闭合(例如 <|tool_calls_begin|>…<|tool_calls_end|>)时这些调用从不执行的问题:它们现在会作为工具调用运行,仍无法解析的会从历史中移除,并作为失败调用报告给模型(#16216,由 @H4vC)

@oh-my-pi/browser-relay

修复

  • 修复了 Chrome 一时拒绝关闭 relay 标签页(标签页正被拖动)时关闭失败的问题;扩展会进行重试(#16119,由 @will-bogusz)
  • 修复了为 relay 请求创建的标签页在创建中途连接断开后仍保持打开、以及对这类请求的回答被发往之后连接的问题(#16119)
  • 修复了浏览器重启后 relay 将旧 tab id 解析到另一个标签页的问题;扩展现在会报告每次浏览器运行(#16119)

@oh-my-pi/pi-catalog

变更

  • 预置了 TypeSafe jev-1.14.0 与 OpenRouter typesafe/jev-1.14,并将它们设为 judge 角色的默认值以及 TypeSafe 的默认模型;TypeSafe 的发现功能会保留其仅别名的 /v1/models 列表所省略的预置 id

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

新增

  • 新增 computer.backgroundFallback(默认 takeover,或 refuse):当 computer 窗口输入调用没有后台路径时,工具会以接管方式重跑那一次调用,把焦点交还给你的应用并在结果中说明;refuse 则改为使调用失败,并且还会拒绝 agent 自身的前台请求(takeover: true、raise()、会激活的 apps.open、桌面输入,以及在 macOS 上的菜单和 AXOpen)(#15191,由 @will-bogusz)
  • 新增 DeepSeek 作为网页搜索引擎(web/deepseek),使用 DeepSeek 全新的 Search API,配合你现有的 DEEPSEEK_API_KEY 或已存储的 deepseek 凭据
  • 为 macOS computer 工具新增 el.selectText(text, { prefix?, suffix?, select? }):它在不获取焦点、不移动指针、不发送按键的情况下,在后台应用的文本字段中选择文本(或放置插入符),因此在该字段中输入即会替换所选内容(#15175,由 @will-bogusz)
  • 为 computer-use 的 win.move 新增 { takeover: true },使窗口在后台拒绝的悬停可以在前台重试(#15173,由 @will-bogusz)
  • 为 computer 工具的 win.click、el.click、el.press 与 el.perform 新增 menu 选项,因此在 macOS 上,打开菜单的那次调用还能选择其菜单项,例如 menu: ["Add to", "Fonts"](#15185,由 @will-bogusz)
  • 为 computer 工具新增 el.type(text) 与 el.press(chord),它们将文本和按键发送到该元素,而非发送到其窗口焦点所在处;在 macOS 和 Windows 上,若不接管你的焦点便无法定位该元素,则不会发送任何内容(#15563,由 @will-bogusz)
  • 新增:在接管输入期间按下 Escape 现在会在本轮剩余部分停止 computer 使用,该会话后续的 computer 调用会被拒绝且不发送,直到你的下一条消息(#15564,由 @will-bogusz)
  • 新增 computer 工具在 macOS 上的 UserIntervened 错误:对 agent 上次读取窗口以来你使用过的应用进行输入会失败且不发送,agent 会被告知重新读取窗口并保留你的编辑(#15562,由 @will-bogusz)
  • 新增 tui.completeScrollback:不断增大的 HUD 或对话框挤出屏幕的行会直接进入回滚区,而不是在它收缩之前一直缺失(#15692,由 @Ilm-Alan)

变更

  • computer 工具及其错误不再告诉模型用 takeover: true 重试,其指令告诉它永远不要为了使输入生效而调用 raise() 或 apps.open(…, { activate: true })(#15191,由 @will-bogusz)
  • 省略 takeover 的 computer-use 窗口输入在 computer.control.acquire 之后现在保持在后台,因此获取的授权不再激活目标应用或移动用户指针;如需前台输入请传入 takeover: true(#15173,由 @will-bogusz)
  • 在你自己的应用中按 Escape 不再停止 computer 工具的后台窗口输入,除非按住 task control;在 omp 中按 Escape 仍会中断它,物理 Escape 仍会停止接管输入(#15176,由 @will-bogusz)
  • 为 ChainJudge 新增 Box 问题:它们只会发给能回答它们的 Jev judge,且即使图像为了符合 Jev 的尺寸边界而被填充,框边缘测量的仍是你传入的图像
  • 不带 app.target 的 relay browser.open 现在会打开自己的后台标签页,而不是采用可见标签页(重新安装 relay 扩展后生效;较旧的扩展会选用可见标签页),并由 browser.close 关闭它;app.target 仍会借用已有标签页(#16119,由 @nnnnoel 和 @will-bogusz)
  • computer-use 的 win.menu.items 现在需要 exec 批准,且在 read_only 运行中会被拒绝,因为在 macOS 上它会在读取菜单前使该窗口在其所属应用程序中成为关键窗口(#15184,由 @will-bogusz)
  • computer 工具不再为 macOS 上对滑块、滚动条、分隔条和步进器的拖动与按住,以及带修饰键的点击、右键点击和滚动接管你的屏幕;这些操作在后台运行(#15185,由 @will-bogusz)
  • 默认 judge 角色现在使用 TypeSafe Jev 1.14(typesafe/jev-1.14.0,然后是 openrouter/typesafe/jev-1.14):jev-latest 是 TypeSafe 的稳定别名,其应答为 jev-1.13.0
  • 对 1 小时 prompt cache(Anthropic 长保留)执行的空闲压缩现在会在缓存条目过期前不久运行,即最后一次请求后约 54 分钟,因此摘要仍能读取到缓存的上下文;对于 5 分钟缓存或生命周期未知的情况,compaction.idleTimeoutSeconds 仍然适用(#16198、#16204,作者 @H4vC)
  • 工具调用意图现在会说明 agent 想从调用输出中获得什么、以及它已经知道什么(例如 "Find where the retry delay is computed and whether it honours Retry-After; the client is in http.py"),而不是像 "Reading config file" 这样的简短标签

修复

  • 修复了在原生终端中,当文本未变化时,例如 /goal show 这样的重复状态命令在最初几次之后不再显示任何内容的问题
  • 修复了浏览器在其扩展连接时已经打开的 relay 标签页在发生变化之前对 omp 一直不可见的问题;通过 app.target 打开此类标签页可能失败,报 "Selected tab did not become available before omp could attach"
  • 修复了 Ollama Cloud 会话在剥离 thinking 时压缩过早、或从其他模型切换后压缩过晚的问题(#16164)
  • 修复了 Google 登录拒绝 /login perplexity SSO 浏览器窗口并报 "This browser or app may not be secure" 的问题;登录浏览器不再以 automation 模式运行(#16141)
  • 修复了 task.softRequestBudget 从不停止 Cursor 子 agent 的问题(#16182,作者 @joseotaviorf)
  • 修复了图像判断(judge()/judge_batch() 搭配图像)在图像超出 Jev 的 280–1568 px 范围(大多数截图都如此)时弃用 TypeSafe Jev、转而使用本地 tiny 模型的问题:现在图像会先被调整到该范围内、条带会被补齐,然后才交给 Jev
  • 修复了在响应正在写入文本时发送消息导致 Codex 轮次以 "Request failed … unsupported_native_inflight_message" 停止的问题;会话现在会保留部分回复并继续处理你的消息
  • 修复了 bash 工具在 auto-background 开启(默认)时在调用之间丢失变量、函数和 shell 选项的问题:以前台开始的调用现在会在会话的持久 shell 中运行,set -e 下失败的命令或 exit 不再重置该 shell,与仍在运行的调用重叠的调用会说明它运行在临时 shell 中(#16153,作者 @alphastorm)
  • 修复了 macOS computer 工具对应用原地重建的元素(例如相邻项变更后的 Automator 规则弹窗)抛出 StaleRef、使 agent 只能重新读取窗口的问题:现在它会按读取该 ref 时所用的字段指明窗口中对应的那个元素,供 agent 在对其操作前核对(#15574,作者 @will-bogusz)
  • 修复了 eval 单元超时会中止被 await 的 tool.task(...) 或 tool.wait(...) 并丢失其子 agent 结果的问题:等待它们的时间不再计入该单元(与 agent() 句柄一致),而轮次取消仍会停止它们(#16154,作者 @alphastorm)
  • 修复了 history.db 损坏时 Up 方向键以 text.replace is not a function 使 omp 崩溃的问题;recall 会跳过无法读取的行,损坏的存储会被移至一旁成为 history.db.corrupt-*,所有可读的 prompt、会话标题和 recap 都会复制到替代它的新存储中(#15751,作者 @Shadorain)
  • 修复了浏览器 tab.screenshot() 将 Chrome 提升到你正在输入的应用之上并切换其可见标签页的问题;后台标签页和被其他应用遮挡的窗口现在会被原地截取,包括空闲时间足够长、Chrome 已停止绘制的窗口,以及用户已切换离开的 relay 或 app.cdp_url 标签页(#15174,作者 @will-bogusz)
  • 修复了 omp 通过被两个浏览器共享的 relay 打开的标签页落在最后重连的那个浏览器中的问题;这些标签页现在会在 omp 最后使用的标签页所在的浏览器中打开,否则在显示第一个被选中标签页的浏览器中打开(#16119,作者 @will-bogusz)
  • 修复了浏览器重启后 relay browser.close 在 Chrome 复用旧标签页 id 时关闭用户此后打开的标签页的问题;omp 在其浏览器 relay 扩展重连期间打开的标签页现在会等待重连完成而不是在另一个浏览器中打开,Chrome 在扩展连接断开后才创建完成的标签页则会被关闭(#16119)
  • 修复了 computer.run 和浏览器 tab.run 静默丢弃不是数组的 args(例如 { args: { path } })或与代码字符串一起给出的 args、导致函数在最初几步已执行后在没有这些参数的情况下继续运行的问题;两者现在都会在运行开始前抛出错误,而省略或为 null 的 args 仍然不传递任何参数(#16149,作者 @will-bogusz)
  • 修复了同时启动的 computer 辅助调用或浏览器 tab 调用(例如对 computer.window 使用 Promise.all)仅以 "Computer worker is busy" 或 "Tab … is busy" 失败的问题;该错误现在会提示在启动下一个调用前先 await 每个调用,或将这些步骤归入一个 computer.run 或 tab.run(#16149,作者 @will-bogusz)
  • bash 中的命令现在可以再次将 skill://、local:// 及其他由文件支持的 URL 交给外部程序(python skill://example-skill/tool.py "query"),并且可以在 cd 进入的可写 URL 目录(如 local://)中运行它们;provider 拒绝的 URL(例如未知的 skill)现在会使命令失败并附带 provider 的错误(#14838,作者 @koyzdev)
  • 修复了 computer.apps.open 在应用尚无窗口时就返回、或从不为隐藏的运行中应用返回窗口的问题;它现在会将应用最前方的窗口作为 window 返回,在 macOS 上最多等待 3 秒(#15184,作者 @will-bogusz)
  • 修复了 macOS 上 omp 在 computer use 之后退出时,你正在输入的按键会重复出现两次或更多次的问题(#15562,作者 @will-bogusz)
  • 修复了 omp --restore 和 /retry 在曾使用过 eval 的会话中,对被进程退出切断的轮次报告没有可重试内容的问题;被中断的轮次现在会继续(#16195)
  • 修复了 Windows 上的会话加载将路径中包含常规文件成分的会话路径视为缺失会话(空会话)而不是像 POSIX 那样以 ENOTDIR 拒绝的问题(#16145,作者 @jchanghong023)
  • 修复了来自扩展 provider、列在 enabledModels 或 --models 中的模型,在后台目录刷新完成之前不出现在 /model、Ctrl+P 循环和启动模型范围提示中的问题(#16096,作者 @skipper019)

@oh-my-pi/pi-natives

新增

  • 为 click、drag 和 holdMouse 新增了 refuseMenu 选项:在 macOS 上,后台左键点击菜单按钮或弹出按钮,或从其上开始的拖拽或按住,会在发送任何内容之前抛出 BackgroundUnavailable(#15191,作者 @will-bogusz)
  • 为带 takeover 的窗口输入新增了 returnFocus 选项:在 macOS 上,即使你在此期间点击过,takeover 也会把焦点交还给你的应用,只有你切换到的第三方应用会保持焦点(#15191,作者 @will-bogusz)
  • 新增 DesktopSession.axSelectText(macOS),按 UTF-16 范围在辅助功能元素的值中选择文本,拒绝缺失或歧义的匹配,并返回读回的选区(#15175,作者 @will-bogusz)
  • 为 click 选项和 axPerform 新增了菜单项路径:在 macOS 上,打开菜单的点击或动作会选择该项(包括子菜单中的项),并且不留任何打开的菜单(#15185,作者 @will-bogusz)
  • 新增 DesktopSession.axType 和 axKeyChord,用于向单个辅助功能元素内键入或按键;在 macOS 上,不报告键盘焦点的字段不会收到任何输入,且错误会指明当前持有焦点的是什么;在 Windows 上,后台输入直接发往该元素自身的控件窗口,并拒绝无窗口元素(#15563,作者 @will-bogusz)
  • 新增 DesktopSession.escapeStops 和 desktopEscapeStops(key),用于统计在 macOS、Windows 和 X11 上你用物理 Escape 停止的 takeover 输入,宿主取消不计入其中(#15564,作者 @will-bogusz)
  • 在 macOS 上新增 UserIntervened:按键和点击会在你于它们所发往的应用中的第一次按键或点击处停止;而发往某个自上次读取以来你曾使用过的应用的输入,会最多等待 5 秒让你停下来,然后在不发送的情况下失败(需要 Input Monitoring)(#15562,作者 @will-bogusz)

变更

  • 在保持图表颜色和布局的同时,降低了 Mermaid XY 图表的渲染开销(#16214,作者 @kyle-elliott)。
  • 在很长的 Git 历史中读取近期提交主题时,现在只读取所请求的提交,而不是遍历整个历史(#16210,作者 @kyle-elliott)。
  • 改进了在包含大量不支持文件的目录中的 AST 搜索与编辑性能(#16213,作者 @kyle-elliott)。
  • 为 hashline 读取提供了更快的带编号源码格式化(#16211,作者 @kyle-elliott)。
  • 改进了用于行内变更高亮的 word-diff 性能(#16212,作者 @kyle-elliott)。
  • 窗口输入调用(包括元素上的 axClick、axType 和 axKeyChord)在 macOS 上运行过 takeover 时解析为 DesktopFocusReturn(handedBack、previousPid、frontPid),否则解析为 null(#15191,作者 @will-bogusz)
  • BackgroundUnavailable 和部分投递错误不再告诉调用方用 takeover:true 重试;它们会说明是否已发送任何输入(#15191,作者 @will-bogusz)
  • 降低了大型目录树中未缓存且结果受限的文件搜索的分配开销(#16115,作者 @kyle-elliott)。
  • 省略 takeover 的桌面窗口输入现在在所有平台上均为后台输入,即使持有任务控制权时也是如此;只有 takeover: true 才会选择前台投递(#15173,作者 @will-bogusz)
  • Computer use 的物理 Escape 停止现在只在 takeover 输入期间监视键盘(takeover: true、持有控制权、桌面级输入、按键抬起);在未持有控制权时,用户在自己应用中按下的 Escape 不再取消后台窗口输入,而宿主中断仍会将其停止(#15176,作者 @will-bogusz)
  • 在 macOS 上,后台按键、键入、左键点击和菜单命令在指向你正在使用的应用的非关键窗口时,或一旦你已切到目标应用,会以 BackgroundUnavailable 拒绝,而不是把你的键入移到那里;当目标应用的另一个窗口变为关键窗口时发送的按键会以 InputFailed 停止(#15184,作者 @will-bogusz)
  • macOS 上的 win.menu.items 现在会在读取前使该窗口在其应用内成为关键窗口,因此它会获取输入锁,并在另一操作持有该锁时抛出 InputBusy(#15184,作者 @will-bogusz)
  • 在 macOS 上,对滑块、滚动条、分隔条和步进器的后台拖拽与按住、带修饰键的点击、右键点击、Electron 滚动以及 Tk 8.5 点击,现在无需将该应用带到前台即可运行;可能拾取文件或文本的拖拽仍会抛出 BackgroundUnavailable(#15185,作者 @will-bogusz)

修复

  • 修复了 macOS 上 UserIntervened 在元素写入(axSelectText、setValue、原生字段键入、AX 动作和弹出菜单)期间遗漏你的输入、被复用的打开/保存面板进程 ID 计入了另一个应用的输入,以及退出期间启动的 event tap 保持存活的问题(#15562)
  • 修复了 macOS 远程屏幕的 press/holdKeys 落入你在布局读取期间带到前台的 Screen Sharing 窗口、iPhone Mirroring 在一次释放后紧接着丢弃一次按下,以及两个字符共同需要的修饰键被按下两次的问题(#15193)
  • 修复了 macOS 焦点守卫在点击命中测试停滞期间遗漏切换,以及遗漏在其最后一次发送后 200–500 毫秒被该动作带到前台的应用的问题;后台动作现在在返回前会持续为该窗口保持守卫(#15195)
  • 修复了 macOS 按键重路由在你切换到第三方应用后把你的按键发送到你已离开的应用、让某个从先前动作起仍持有键盘的菜单拿走你的按键,以及在键盘焦点无法读取时丢弃 theft 的问题(#16140)
  • 修复了 macOS 上在 omp 被杀死或其原生输入代码在手势中途 panic 时按键和鼠标按钮保持按下的问题;你正物理按住的键或按钮会留给你释放(#15192,作者 @will-bogusz)
  • 修复了 macOS 和 X11 后台输入在调用的一部分已发送后抛出 BackgroundUnavailable("nothing was sent")的问题;现在会抛出 InputFailed,且在 macOS 上,因你来到目标应用而停止的调用会抛出 UserIntervened(#15191,作者 @will-bogusz)
  • 修复了 macOS 上 takeover 的 InputFailed 在另一窗口持有焦点时只指名目标窗口的问题;现在它会指名该应用持有焦点的窗口(例如警告框或 sheet),或保持在前台的应用(#15191,作者 @will-bogusz)
  • 修复了 macOS 上打开文档或关闭 sheet 或面板的 takeover: true 点击或按键会让其应用永久留在前台的问题;现在焦点会返回你的应用,除非你在 takeover 期间点击过或按过快捷键(#15191,作者 @will-bogusz)
  • 修复了进程内 cksum --check 在遇到以 ( 开头的带标签校验和行(例如 (file)= <hash>)时发生 panic、而不是将其报告为无效校验和行的问题(#16142,由 @jchanghong023 完成)
  • 修复了在 Windows 上 grep --path-separator 未替换已打印路径中 \ 分隔符的问题,现在显示的路径不再把 \ 与所配置的分隔符混在一起(#16143,由 @jchanghong023 完成)
  • 修复了当 Input Monitoring 已关闭、停止操作无法看到按键时,macOS computer use 仍报告物理 Escape 停止可用(globalEscape: true)的问题。现在 inputPermission 会报告事件发送(event-posting)权限,并且权限错误会指明需要授权的终端或 IDE(#15157,由 @will-bogusz 完成)
  • 修复了持久 Shell 会话在命令执行 exit 或在 set -e 下停止时丢弃其变量、函数和选项的问题;现在这些操作只会结束该命令,只有运行失败才会重置会话(#16153,由 @alphastorm 完成)
  • 修复了当应用销毁某个元素并在原处放置一个相同元素时,macOS element-ref 的 StaleRef 不给出任何线索的问题:错误现在会指明窗口中与该 ref 读取时所用字段一致的那个元素,将其注册为新 ref,并且不向其发送任何内容(#15574,由 @will-bogusz 完成)
  • 修复了 macOS takeover 输入的两个问题:输入结束时用户在 takeover 目标中点击会被送回之前的应用;用户仅在 takeover 持有目标期间继续输入时,目标会永久停留在最前。现在,点击、快捷键(任何与 Command 或 Control 组合的按键,例如 Command-Tab 或 Control-Up、功能键或 Globe 快捷键)或切换到另一个应用,都会把前台应用交还给用户。若这类操作发生在 takeover 自身输入之后,macOS 会拒绝交还;而在 Input Monitoring 让 omp 能够加以区分之后,单纯的普通输入不再触发交还(#15176,由 @will-bogusz 完成)
  • 修复了 macOS 后台输入从你的应用夺走键盘焦点、导致其在你再次点击前丢失粘贴和快捷键的问题;同时修复了焦点守护在你自己选好目标后立即把你的应用送回前台的问题(#15184,由 @will-bogusz 完成)
  • 修复了 macOS 后台输入在以下场景无效或落到错误位置的问题:Chrome 页面、拥有多个窗口的应用、Finder、sheet、popover、行内编辑器(例如 Finder 的重命名字段)以及系统打开/保存面板。现在,对位于其自身已聚焦 sheet 之后的窗口发送按键,会抛出 InvalidTarget 并指明该 sheet(#15184,由 @will-bogusz 完成)
  • 修复了 TextEdit 和 Script Editor 在后台 ⌘S 后冻结、以及应用停止响应时后台快捷键仍报告成功的问题;现在它们会抛出 InputFailed,说明结果未知(#15184,由 @will-bogusz 完成)
  • 修复了 macOS win.menu.items 和 win.menu.select 在应用处于后台或尚未跟上一次编辑时,把诸如 Font Book 的 File ▸ New Collection 这类命令当作已禁用的问题(#15184,由 @will-bogusz 完成)
  • 修复了 macOS openApplication 让一个隐藏运行的应用没有窗口、并把 Notes 或 Contacts 带到前台的问题;现在它会在你的应用后面显示该应用并返回其第一个窗口(#15184,由 @will-bogusz 完成)
  • 修复了当前台应用没有显示任何窗口时 macOS 后台和 takeover 输入被拒绝的问题,例如 Finder 在点击桌面后的状态(#15184,由 @will-bogusz 完成)
  • 修复了 macOS 后台 AX 操作失败却仍将其应用带到前台、使其停留在你的应用前面的问题,例如 Chrome 打开面板中的 AXOpen(#15184,由 @will-bogusz 完成)
  • 修复了 macOS 后台右键点击、菜单按钮按压和 popup setValue 在目标应用中留下打开的菜单、该菜单夺走你的键盘的问题;现在菜单会关闭,且打开了菜单的右键点击或按压会抛出 InputFailed(#15185,由 @will-bogusz 完成)
  • 修复了对打开或保存面板中的 popup 使用 macOS 菜单路径或后台 press() 时找不到其菜单的问题,例如 Automator 的 Where: popup(#15185,由 @will-bogusz 完成)
  • 修复了当后台操作的目标 macOS 应用在你输入时把自己带到前台、导致你的输入落入该应用的问题(#15195,由 @will-bogusz 完成)
  • 修复了在操作期间从 Spotlight 打开目标应用后,macOS 后台输入把你送回之前应用的问题(#15195,由 @will-bogusz 完成)
  • 修复了 macOS 后台操作在其中打开内容的应用停留在你的应用前面的问题,例如在 Finder 中后台 ⌘O 之后的 TextEdit;现在它会像目标一样被送回(#15195,由 @will-bogusz 完成)
  • 修复了当持有 computer-use 事件 tap 的进程退出时,你在 macOS 上按下的按键两次或多次到达你的应用的问题;closeDesktopEventTaps() 现在会先关闭这些 tap(#15562,由 @will-bogusz 完成)
  • 修复了向 Screen Sharing 和 iPhone Mirroring 输入时到达字符错误的问题:现在它会按照你的键盘布局的按键输入,在后台输入无修饰符的文本,并在你按住修饰键或 Caps Lock 开启时停止。iPhone Mirroring 的点击和滚动现在会落在瞄准的位置(#15193,由 @will-bogusz 完成)
  • 修复了当 macOS 后台操作在操作中途接管键盘时,你的按键落入该操作的目标应用或消失在它打开的菜单中的问题;现在按键会到达你的应用(#16140,由 @will-bogusz 完成)
  • 修复了已经发出的 computer use 输入(例如键入的文本、快捷键或点击)在你稍后停止它时被报告为 Cancelled 的问题;现在停止操作改为结束下一次调用(#16202,由 @will-bogusz 完成)

@oh-my-pi/pi-tui

新增

  • 新增 ComposerPreferences.completeScrollback(默认 false):不断增大的 HUD 或对话框挤出屏幕的行会直接进入 scrollback,而不是被扣留到它缩小为止(#15692,由 @Ilm-Alan 完成)

修复

  • 修复了当数字用空格分隔千位分组(1 988、17 083)时,表格图表选错标签列和度量列的问题;现在它们会显示为 1,988 这样的形式(#16175)
  • 修复了通过 win32-input-mode 中继的终端能力应答在 WSL 终端中显示为键入输入的问题(#16137)
  • 修复了当 working-row 加载器在回合中途停止时,状态栏活动 spinner 和回合计时器冻结直到下一次按键的问题;现在打开的回合窗口会按自身的计时器重绘状态行(#16109,由 @tommymorgan 完成)。

修复了在通过 Kitty 剪贴板协议(OSC 5522)传递粘贴内容的终端中,粘贴有时会插入一段 base64 文本而非所粘贴文本的问题,最常见于替你执行粘贴的听写应用;现在较慢的粘贴会完整到达,且在某个粘贴始终无法完成期间输入的按键会被归还而不是丢失(#16170,由 @H4vC 完成)

修复了流式表格在其最后一个单元格仍在写入时,使其下方所有内容上下跳动的问题(#16116,由 @galtamam-cmyk 完成)

修复了 iTerm2 中内联图像按错误的单元格形状计算尺寸、导致图表被涂抹或偏移的问题(#16118,由 @galtamam-cmyk 完成)

@oh-my-pi/pi-utils

新增

  • 新增 readSalvageableRows(),用于读取受损 SQLite 表中仍可读的行,仅跳过受损页面(#15751,由 @Shadorain 完成)

变更内容

  • perf(walker):减少排序文件查找的分配(@kyle-elliott,#16115)
  • fix(natives):如实报告 macOS Escape 停止(@will-bogusz,#15157)
  • fix(natives,coding-agent):指明替换了过期 macOS computer 引用的元素(@will-bogusz,#15574)
  • fix(coding-agent):抢救受损的 history.db,而不是在历史召回时崩溃(@Shadorain,#15751)
  • fix(natives,coding-agent):在 computer 控制被持有期间,将省略的 takeover 保持在后台(@will-bogusz,#15173)
  • feat(computer):通过 accessibility 在 macOS 后台元素中选择文本(@will-bogusz,#15175)
  • feat(web-search):新增 DeepSeek Search API 引擎(web/deepseek)(@H4vC,#16136)
  • fix(coding-agent):就地捕获浏览器标签页,而不是将 Chrome 提到前台(@will-bogusz,#15174)
  • fix(natives):在 macOS 后台输入期间保持用户的应用处于焦点(@will-bogusz,#15184)
  • fix(shell):将 URL 别名背后的文件交给外部命令(@koyzdev,#14838)
  • fix(natives):仅在 takeover 输入期间因物理 Escape 键停止 computer use(@will-bogusz,#15176)
  • feat(computer):当用户按下 Escape 时,在本轮剩余时间停止 computer use(@will-bogusz,#15564)
  • feat(computer):使用 el.type 和 el.press 向单个元素输入,若其不接受焦点则不发送任何内容(@will-bogusz,#15563)
  • fix(natives):当 macOS 后台目标在用户输入时自行激活,保持用户的应用在前台(@will-bogusz,#15195)
  • feat(natives):当 macOS 后台目标未经许可占用键盘时,将用户的按键送回其应用(@will-bogusz,#16140)
  • fix(natives):使用键盘布局的按键向 macOS Screen Sharing 和 iPhone Mirroring 输入(@will-bogusz,#15193)
  • feat(computer):当用户在 agent 的 macOS 应用中输入时,停止输入并重新读取(@will-bogusz,#15562)
  • fix(tui):用语法而非超时来解析停滞的 OSC/DCS/APC 字符串(@H4vC,#16170)
  • feat(natives):传递 macOS 后台的拖拽、按住、修饰键点击和右键点击(@will-bogusz,#15185)
  • fix(natives):当 omp 退出时,释放 macOS 输入请求仍按住的按键和按钮(@will-bogusz,#15192)
  • feat(computer):在 takeover 中重新运行被拒绝的 macOS 后台输入,由 computer.backgroundFallback 设置(@will-bogusz,#15191)
  • fix(eval):将委派工具的等待排除在单元格超时之外(@alphastorm,#16154)
  • fix(task):为 Cursor subagent 步骤设置预算(@joseotaviorf,#16182)
  • fix(tui):从 ReportCellSize 读取 iTerm2 的单元格尺寸(@galtamam-cmyk,#16118)
  • test(coding-agent):隔离 system prompt 发现环境(@C-W-Z,#16166)
  • fix(pi-builtins):拒绝以 ( 开头的带标签 cksum 行,而不是触发 panic(@jchanghong023,#16142)
  • test(natives):为每个 ast 测试树分配各自的临时目录(@will-bogusz,#16163)
  • test(natives):在 macOS 焦点守卫测试中,避免放置在用户应用中的点击被读取为一次新点击(@will-bogusz,#16187)
  • fix(tui):在流式表格的最后一个单元格增长时保持其高度不变(@galtamam-cmyk,#16116)
  • feat(coding-agent):将空闲压缩的时机对齐到 prompt cache TTL(@H4vC,#16198)
  • fix(coding-agent):仅将空闲压缩的时机对齐到 1 小时 prompt cache(@H4vC,#16204)
  • docs(coding-agent):注明冷 short-tier 空闲摘要的权衡(@H4vC,#16207)
  • fix(ai):在 5 小时窗口空闲期间保持 Muse Code 用量为最新(@eggpeat,#16193)
  • perf(diff):借用词 token 而不是复制它们(@kyle-elliott,#16212)
  • fix(tui):在某一轮运行期间,按状态行自己的计时器重绘状态行(@tommymorgan,#16109)
  • perf(edit):将带编号的行格式化到一个输出缓冲区(@kyle-elliott,#16211)
  • perf(ast):在过滤不支持的文件时避免产生被丢弃的错误(@kyle-elliott,#16213)
  • fix(coding-agent):在第一帧之前将扩展模型加入 enabledModels 作用域(@skipper019,#16096)
  • fix(natives):阻止 Linux clippy 对仅限 macOS 的文本范围辅助函数报错(@tommymorgan,#16158)
  • perf(vcs):限制为前缀查询保留的 commit ID 数量(@kyle-elliott,#16210)
  • perf(mermaid):在 XY 图表单元格中借用调色板颜色(@kyle-elliott,#16214)
  • test(natives):当用户在点击中途将 iPhone Mirroring 提到前台时,预期 UserIntervened(@will-bogusz,#16200)
  • fix(natives):无论 macOS 后台目标自行激活得多晚,都将其送回后台(@will-bogusz,#16185)
  • fix(natives):将不带 arm 的 takeover 点击类型计为用户的输入(@will-bogusz,#16188)
  • fix(natives):在 macOS UserIntervened 中说明不仅是按键,点击也会在用户输入处停止(@will-bogusz,#16206)
  • fix(coding-agent):对包含文件组件的会话路径保留 ENOTDIR 拒绝(@jchanghong023,#16145)
  • fix(pi-builtins):在 grep --path-separator 输出中改写原生路径分隔符(@jchanghong023,#16143)
  • fix(coding-agent):拒绝不可用的运行参数,并在 computer 和 browser 调用中解释忙错误(@will-bogusz,#16149)
  • feat(browser):在后台打开 omp 拥有的 relay 标签页(@will-bogusz,#16119)
  • fix(bash):在调用之间保持持久 shell 的状态(@alphastorm,#16153)
  • fix(ai):修复以重拼模板 token 写成的 DeepSeek 工具调用(@H4vC,#16216)
  • fix(coding-agent): 回合重试时跳过末尾的 eval 状态快照,由 @roboomp 在 #16197 完成
  • fix(coding-agent): 在自动化模式之外运行 perplexity sso 浏览器,由 @roboomp 在 #16147 完成
  • fix(agent): 将已剥离的 ollama thinking 排除在上下文估算之外,由 @roboomp 在 #16165 完成
  • fix(tui): 让中继的回复经由终端解析器处理,由 @roboomp 在 #16138 完成
  • fix(tui): 读取表格图表单元格中用空格分组的千位数字,由 @roboomp 在 #16177 完成
  • fix(skills): 从内置提示探测中移除失效的 IrcTool,由 @roboomp 在 #16168 完成
  • fix(natives): 避免已发出的 computer 输入被报告为 Cancelled,由 @will-bogusz 在 #16202 完成
  • fix(natives): 防止残留的 macOS 释放辅助程序截断后续按键,由 @will-bogusz 在 #16205 完成
  • feat(tui): 添加 tui.completeScrollback,使被移出的行进入 scrollback,由 @Ilm-Alan 在 #15692 完成

新贡献者

  • @kyle-elliott 在 #16115 完成了首次贡献
  • @koyzdev 在 #14838 完成了首次贡献
  • @galtamam-cmyk 在 #16118 完成了首次贡献
  • @C-W-Z 在 #16166 完成了首次贡献
  • @skipper019 在 #16096 完成了首次贡献
  • @Ilm-Alan 在 #15692 完成了首次贡献

完整变更日志:v18.12.1...v18.12.2

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

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

Changed

The failed-tool-call correction sent to DeepSeek models now also covers chat-template tool-call tokens written out as text, not only malformed DSML (#16216 by @H4vC)

Fixed

Fixed Ollama chat history estimates counting stripped native thinking and missing foreign thinking replayed as text, which skewed compaction after model switches (#16164)

@oh-my-pi/pi-ai

Added

Added nativeJudgmentImageBounds(): the image bounds a native judge enforces, its wire's transport limits tightened by the catalog's model bounds Added Box judgment questions (BoxQuestion/BoxAnswer, TypeSafe Jev 1.14+ direct or through OpenRouter): each names the request image it searches by image index, and comes back as that image's edges as 0–1 fractions; text, OpenAI Decisions, and Workers AI judges reject them

Fixed

Fixed Muse Code usage going stale whenever its 5-hour window sits idle: the idle window now reports as unused, and weekly usage carries over from the last active window until its reset (#16193 by @eggpeat) Fixed DeepSeek tool calls never running when the model writes them as chat-template tokens with _ in place of ▁, a missing |, or no per-call close (e.g. <|tool_calls_begin|>…<|tool_calls_end|>): they now run as tool calls, and any that still cannot be parsed are removed from history and reported to the model as a failed call (#16216 by @H4vC)

@oh-my-pi/browser-relay

Fixed

Fixed a relay tab close failing when Chrome refuses it for a moment (a tab being dragged); the extension retries it (#16119 by @will-bogusz) Fixed tabs created for a relay request whose connection dropped mid-create staying open, and answers to such requests going to a later connection (#16119) Fixed the relay resolving an old tab id to a different tab after a browser restart; the extension now reports each browser run (#16119)

@oh-my-pi/pi-catalog

Changed

Seeded TypeSafe jev-1.14.0 and OpenRouter typesafe/jev-1.14, and made them the judge role defaults and TypeSafe's default model; TypeSafe discovery keeps seeded ids its alias-only /v1/models listing omits

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

Added

Added computer.backgroundFallback (takeover by default, or refuse): when a computer window input call has no background route, the tool reruns that one call in takeover, hands focus back to your app and says so in its result; refuse fails the call instead and also refuses the agent's own foreground requests (takeover: true, raise(), an activating apps.open, desktop input, and on macOS menus and AXOpen) (#15191 by @will-bogusz) Added DeepSeek as a web search engine (web/deepseek), using DeepSeek's new Search API with your existing DEEPSEEK_API_KEY or stored deepseek credential Added el.selectText(text, { prefix?, suffix?, select? }) to the macOS computer tool: it selects text (or places a caret) in a background app's text field without taking focus, moving the pointer or sending keys, so typing into that field replaces it (#15175 by @will-bogusz) Added { takeover: true } to computer-use win.move, so a hover that a window refuses in the background can be retried in the foreground (#15173 by @will-bogusz) Added a menu option to the computer tool's win.click, el.click, el.press and el.perform, so on macOS the call that opens a menu also chooses its item, e.g. menu: ["Add to", "Fonts"] (#15185 by @will-bogusz) Added el.type(text) and el.press(chord) to the computer tool, which send text and keys to that element instead of wherever its window's focus is; on macOS and Windows nothing is sent when the element cannot be addressed without taking your focus (#15563 by @will-bogusz) Added: pressing Escape during takeover input now stops computer use for the rest of the turn, and that session's later computer calls are refused, unsent, until your next message (#15564 by @will-bogusz) Added the computer tool's UserIntervened error on macOS: input into an app you have used since the agent last read its window fails without sending, and the agent is told to read the window again and keep your edits (#15562 by @will-bogusz) Added tui.completeScrollback: rows a growing HUD or dialog pushes off screen go straight to scrollback instead of missing from it until it shrinks (#15692 by @Ilm-Alan)

Changed

The computer tool and its errors no longer tell the model to retry with takeover: true, and its instructions tell it never to call raise() or apps.open(…, { activate: true }) to make input work (#15191 by @will-bogusz) Computer-use window input with takeover omitted now stays in the background after computer.control.acquire, so an acquired grant no longer activates the target app or moves the user's pointer; pass takeover: true for foreground input (#15173 by @will-bogusz) Pressing Escape in your own app no longer stops the computer tool's background window input unless task control is held; Escape in omp still interrupts it, and physical Escape still stops takeover input (#15176 by @will-bogusz) Added Box questions to ChainJudge: they go only to Jev judges that answer them, and the box edges measure the image you passed even when it was padded to fit Jev's size bounds A relay browser.open without app.target now opens its own background tab instead of adopting the visible one (after reinstalling the relay extension; older ones select it), and browser.close closes it; app.target still borrows an existing tab (#16119 by @nnnnoel and @will-bogusz) Computer-use win.menu.items now needs exec approval and is rejected in read_only runs, since on macOS it makes the window key in its own application before reading its menus (#15184 by @will-bogusz) The computer tool no longer takes over your screen for macOS drags and holds on sliders, scroll bars, splitters and steppers, modified clicks, right-clicks and scrolls; they run in the background (#15185 by @will-bogusz) The default judge role now uses TypeSafe Jev 1.14 (typesafe/jev-1.14.0, then openrouter/typesafe/jev-1.14): jev-latest is TypeSafe's stable alias and answered as jev-1.13.0 Idle compaction on a 1-hour prompt cache (Anthropic long retention) now runs just before the cache entry expires, about 54 minutes after the last request, so the summary still reads the cached context; compaction.idleTimeoutSeconds still applies with a 5-minute cache or an unknown lifetime (#16198, #16204 by @H4vC) Tool-call intents now say what the agent wants from the call's output and what it already knows (e.g. "Find where the retry delay is computed and whether it honours Retry-After; the client is in http.py") instead of a short label like "Reading config file"

Fixed

Fixed repeated status commands such as /goal show showing nothing after the first few times in a native terminal when the text had not changed Fixed browser relay tabs that a browser already had open when its extension connected staying invisible to omp until they changed; opening such a tab by app.target could fail with "Selected tab did not become available before omp could attach" Fixed Ollama Cloud sessions compacting too early on stripped thinking or too late after switching from another model (#16164) Fixed Google sign-in rejecting the /login perplexity SSO browser window with "This browser or app may not be secure"; the sign-in browser no longer runs in automation mode (#16141) Fixed task.softRequestBudget never stopping Cursor subagents (#16182 by @joseotaviorf) Fixed image judgments (judge()/judge_batch() with images) leaving TypeSafe Jev for the local tiny model whenever an image fell outside Jev's 280–1568 px bounds, which most screenshots do: images are now resized into the bounds, and strips padded, before Jev sees them Fixed a Codex turn stopping on "Request failed … unsupported_native_inflight_message" when you sent a message while the response was writing text; the session now keeps the partial reply and continues with your message Fixed the bash tool dropping variables, functions, and shell options between calls whenever auto-background was on (the default): a call that starts in the foreground now runs in the session's persistent shell, a failing command under set -e or an exit no longer resets that shell, and a call that overlaps a still-running one says it ran in a temporary shell (#16153 by @alphastorm) Fixed the macOS computer tool's StaleRef for an element the app rebuilt in place, such as an Automator rule popup after its neighbour changed, leaving the agent to re-read the window: it now names the one element of the window with the fields the ref was read with, for the agent to check before acting on it (#15574 by @will-bogusz) Fixed an eval cell's timeout aborting an awaited tool.task(...) or tool.wait(...) and losing its subagents' results: time spent waiting on them no longer counts against the cell, as with agent() handles, while a turn cancel still stops them (#16154 by @alphastorm) Fixed the Up arrow crashing omp with text.replace is not a function when history.db was damaged; recall skips unreadable rows, and a damaged store is moved aside to history.db.corrupt-* with every readable prompt, session title, and recap copied into its replacement (#15751 by @Shadorain) Fixed browser tab.screenshot() raising Chrome over the app you were typing in and switching its visible tab; background tabs and windows behind other apps are now captured in place, including ones idle long enough that Chrome stopped drawing them, as is a relay or app.cdp_url tab the user switched away from (#15174 by @will-bogusz) Fixed tabs omp opens through a relay shared by two browsers landing in whichever browser reconnected last; they open in the browser of the tab omp used last, else the one showing the first selected tab (#16119 by @will-bogusz) Fixed a relay browser.close after a browser restart closing a tab the user had opened since, when Chrome reused the old tab's id; a tab omp opens while its browser's relay extension reconnects now waits for it instead of opening in another browser, and one Chrome finishes creating after the extension's connection dropped is closed (#16119) Fixed computer.run and browser tab.run silently dropping args that were not an array (such as { args: { path } }) or were given with a code string, so the function ran without them after its first steps had already acted; both now throw before the run starts, while omitted or null args still pass none (#16149 by @will-bogusz) Fixed computer helpers or browser tab calls started together (such as Promise.all over computer.window) failing with a bare "Computer worker is busy" or "Tab … is busy"; the error now says to await each call before starting the next, or group the steps in one computer.run or tab.run (#16149 by @will-bogusz) Commands in bash can hand skill://, local://, and other file-backed URLs to external programs again (python skill://example-skill/tool.py "query"), and can run them from a cd'd writable URL directory such as local://; a URL the provider rejects, such as an unknown skill, now fails the command with the provider's error (#14838 by @koyzdev) Fixed computer.apps.open returning before the app had a window, or never giving a hidden running app one; it now returns the app's frontmost window as window, waiting up to 3 s on macOS (#15184 by @will-bogusz) Fixed a key you were typing on macOS arriving twice or more when omp exited after computer use (#15562 by @will-bogusz) Fixed omp --restore and /retry reporting nothing to retry for a turn cut off by a process exit in a session that had used eval; the interrupted turn now continues (#16195) Fixed session loading on Windows treating a session path with a regular-file component as a missing session (an empty session) instead of rejecting it with ENOTDIR like POSIX does (#16145 by @jchanghong023) Fixed models from extension providers listed in enabledModels or --models missing from /model, the Ctrl+P cycle and the startup model scope notice until the background catalog refresh finished (#16096 by @skipper019)

@oh-my-pi/pi-natives

Added

Added a refuseMenu option to click, drag and holdMouse: a macOS background left click on a menu button or popup button, or a drag or hold starting on one, throws BackgroundUnavailable before anything is sent (#15191 by @will-bogusz) Added a returnFocus option for window input with takeover: on macOS the takeover hands focus back to your app even if you clicked meanwhile, and only a third app you switched to keeps focus (#15191 by @will-bogusz) Added DesktopSession.axSelectText (macOS) to select text in an accessibility element's value by UTF-16 range, refusing missing or ambiguous matches and returning the selection read back (#15175 by @will-bogusz) Added a menu item path to click options and axPerform: a macOS click or action that opens a menu chooses that item, submenus included, and leaves no menu open (#15185 by @will-bogusz) Added DesktopSession.axType and axKeyChord, which type into or press keys in one accessibility element; on macOS a field that does not report keyboard focus gets nothing and the error names what has focus; on Windows background input goes straight to the element's own control window and refuses a windowless element (#15563 by @will-bogusz) Added DesktopSession.escapeStops and desktopEscapeStops(key), counting takeover input you stopped with physical Escape on macOS, Windows and X11, apart from host cancels (#15564 by @will-bogusz) Added UserIntervened on macOS: keys and clicks stop at your first key or click in the app they go to, and input to an app you used since it was last read waits up to 5 s for you to pause, then fails without sending (needs Input Monitoring) (#15562 by @will-bogusz)

Changed

Reduced Mermaid XY-chart rendering overhead while preserving chart colors and layout (#16214 by @kyle-elliott). Reading recent commit subjects in a long Git history now reads only the commits requested instead of walking the whole history (#16210 by @kyle-elliott). Improved AST search and edit performance in directories containing many unsupported files (#16213 by @kyle-elliott). Faster numbered source formatting for hashline reads (#16211 by @kyle-elliott). Improved word-diff performance for inline change highlighting (#16212 by @kyle-elliott). Window input calls, element axClick, axType and axKeyChord included, resolve to a DesktopFocusReturn (handedBack, previousPid, frontPid) when a macOS takeover ran, and to null otherwise (#15191 by @will-bogusz) BackgroundUnavailable and partial-delivery errors no longer tell the caller to retry with takeover:true; they say whether any input was sent (#15191 by @will-bogusz) Reduced allocation overhead for uncached, result-limited file searches in large directory trees (#16115 by @kyle-elliott). Desktop window input with takeover omitted is now background on every platform even while task control is held; only takeover: true selects foreground delivery (#15173 by @will-bogusz) Computer use's physical Escape stop now watches the keyboard only during takeover input (takeover: true, held control, desktop-level input, raises); without held control, an Escape the user presses in their own app no longer cancels background window input, which the host interrupt still stops (#15176 by @will-bogusz) macOS background keys, typing, left clicks and menu commands now refuse with BackgroundUnavailable when aimed at a non-key window of the app you are using, or once you have come to the target app, instead of moving your typing there; keys sent while another window of the target app becomes key stop with InputFailed (#15184 by @will-bogusz) macOS win.menu.items now makes the window key within its app before reading, so it takes the input lock and throws InputBusy while another operation holds it (#15184 by @will-bogusz) macOS background drags and holds on sliders, scroll bars, splitters and steppers, modified clicks, right-clicks, Electron scrolls and Tk 8.5 clicks now run without bringing the app forward; drags that could pick up files or text still throw BackgroundUnavailable (#15185 by @will-bogusz)

Fixed

Fixed macOS UserIntervened missing your input during element writes (axSelectText, setValue, native-field typing, AX actions and popups), a reused Open/Save panel process id counting another app's input, and an event tap started during exit staying live (#15562) Fixed macOS remote-screen press/holdKeys landing in a Screen Sharing window you brought forward during the layout read, iPhone Mirroring dropping a press right after a release, and a modifier two characters need being pressed twice (#15193) Fixed the macOS focus guard missing switches while a click hit-test stalled and missing an app the action brought forward 200–500 ms after its last send; background actions now keep guarding for that window before returning (#15195) Fixed macOS key rerouting sending your keys to the app you had left after you switched to a third app, letting a menu that still held the keyboard from an earlier action take your keys, and dropping a theft when key focus could not be read (#16140) Fixed macOS keys and mouse buttons staying down when omp is killed or its native input code panics mid-gesture; a key or button you are physically holding is left for you to release (#15192 by @will-bogusz) Fixed macOS and X11 background input throwing BackgroundUnavailable ("nothing was sent") after part of the call was already sent; it now throws InputFailed, and on macOS a call stopped because you came to the target app throws UserIntervened (#15191 by @will-bogusz) Fixed macOS takeover InputFailed naming only the target window when another held focus; it now names the app's focused window, such as an alert or sheet, or the app that stayed in front (#15191 by @will-bogusz) Fixed a macOS takeover: true click or key that opened a document or closed a sheet or panel leaving its app in front for good; focus now returns to your app unless you clicked or pressed a shortcut during the takeover (#15191 by @will-bogusz) Fixed the in-process cksum --check panicking on a tagged checksum line that starts with ( (for example (file)= <hash>) instead of reporting it as an invalid checksum line (#16142 by @jchanghong023) Fixed grep --path-separator leaving \ separators untouched in printed paths on Windows, so displayed paths no longer mix \ with the configured separator (#16143 by @jchanghong023) Fixed macOS computer use reporting a working physical Escape stop (globalEscape: true) when Input Monitoring was turned off and the stop could not see keys; inputPermission now reports event-posting access, and permission errors name the terminal or IDE to grant (#15157 by @will-bogusz) Fixed a persistent Shell session discarding its variables, functions, and options when a command ran exit or stopped under set -e; those now end only the command, and only a failed run resets the session (#16153 by @alphastorm) Fixed a macOS element-ref StaleRef giving no lead when the app destroyed the element and put an identical one in its place: the error now names the one element of the window with the fields the ref was read with, registered as a new ref, and sends nothing to it (#15574 by @will-bogusz) Fixed macOS takeover input sending the user back to their previous app when they clicked in the takeover target as the input ended, and keeping the target in front for good when they merely kept typing while takeover held it: a click, a shortcut (any key with Command or Control, such as Command-Tab or Control-Up, a function key or a Globe shortcut), or a switch to another app now leaves the front app to the user, and macOS refuses the hand-back if one came after the takeover's own input; plain typing alone no longer does, once Input Monitoring lets omp tell it apart (#15176 by @will-bogusz) Fixed macOS background input taking keyboard focus from your app, which then dropped pastes and shortcuts until clicked again, and the focus guard sending your app back to the front just after you picked the target yourself (#15184 by @will-bogusz) Fixed macOS background input doing nothing or landing in the wrong place for Chrome pages, apps with several windows, Finder, sheets, popovers, inline editors such as Finder's rename field, and system Open/Save panels; keys for a window behind its own focused sheet now throw InvalidTarget naming the sheet (#15184 by @will-bogusz) Fixed TextEdit and Script Editor freezing after a background ⌘S, and background shortcuts reporting success when the app stopped answering; they now throw InputFailed saying the outcome is unknown (#15184 by @will-bogusz) Fixed macOS win.menu.items and win.menu.select treating commands such as Font Book's File ▸ New Collection as disabled while the app was in the background or had not yet caught up with an edit (#15184 by @will-bogusz) Fixed macOS openApplication leaving a hidden running app without a window and bringing Notes or Contacts to the front; it now shows the app behind yours and returns its first window (#15184 by @will-bogusz) Fixed macOS background and takeover input refusing while your front app showed no window, as Finder does after a click on the desktop (#15184 by @will-bogusz) Fixed a macOS background AX action that failed yet brought its app forward, such as AXOpen in Chrome's Open panel, leaving that app in front of yours (#15184 by @will-bogusz) Fixed macOS background right-clicks, menu button presses and popup setValue leaving a menu open in the target app, which took your keyboard; the menu now closes, and a right-click or press that opened one throws InputFailed (#15185 by @will-bogusz) Fixed a macOS menu path or background press() on a popup in an Open or Save panel, such as Automator's Where: popup, failing to find its menu (#15185 by @will-bogusz) Fixed your typing landing in the macOS app a background action targets when that app brings itself to the front while you type (#15195 by @will-bogusz) Fixed macOS background input sending you back to your previous app after you opened the target app from Spotlight during the action (#15195 by @will-bogusz) Fixed an app that a macOS background action opens something in, such as TextEdit after a background ⌘O in Finder, staying in front of your app; it is sent back like the target (#15195 by @will-bogusz) Fixed a key you typed on macOS reaching your app twice or more when a process holding a computer-use event tap exited; closeDesktopEventTaps() closes them first (#15562 by @will-bogusz) Fixed macOS typing into Screen Sharing and iPhone Mirroring arriving as the wrong characters: it now presses your keyboard layout's keys, types unmodified text in the background and stops while you hold a modifier or Caps Lock is on, and iPhone Mirroring taps and scrolls land where aimed (#15193 by @will-bogusz) Fixed your keystrokes landing in the app a macOS background action targets, or vanishing into a menu it opened, when it takes the keyboard mid-action; they now reach your app (#16140 by @will-bogusz) Fixed computer use input that had already gone out, such as typed text, a shortcut or a click, reporting Cancelled when you stopped it moments later; the stop now ends the next call instead (#16202 by @will-bogusz)

@oh-my-pi/pi-tui

Added

Added ComposerPreferences.completeScrollback (default false): rows a growing HUD or dialog pushes off screen go straight to scrollback instead of being held back until it shrinks (#15692 by @Ilm-Alan)

Fixed

Fixed table charts picking the wrong label and measure columns when numbers group thousands with spaces (1 988, 17 083); they now read like 1,988 (#16175) Fixed terminal capability replies relayed through win32-input-mode appearing as typed input in WSL terminals (#16137) Fixed the status-bar activity spinner and turn timer freezing until the next keypress when the working-row loader is stopped mid-turn; an open turn window now repaints the status line on its own timer (#16109 by @tommymorgan). Fixed pasting sometimes inserting a block of base64 text instead of the pasted text in terminals that deliver pastes through the Kitty clipboard protocol (OSC 5522), most often with dictation apps that paste for you; a slow paste now arrives whole, and keys typed while a paste never finishes are given back instead of lost (#16170 by @H4vC) Fixed a streaming table bouncing everything below it up and down while its last cell was still being written (#16116 by @galtamam-cmyk) Fixed inline images in iTerm2 being sized for the wrong cell shape, which left charts smeared or offset (#16118 by @galtamam-cmyk)

@oh-my-pi/pi-utils

Added

Added readSalvageableRows() to read the rows of a damaged SQLite table that are still readable, skipping only the damaged pages (#15751 by @Shadorain)

What's Changed

  • perf(walker): reduce allocations for ranked file finding by @kyle-elliott in #16115
  • fix(natives): report the macOS Escape stop honestly by @will-bogusz in #15157
  • fix(natives,coding-agent): name the element that replaced a stale macOS computer ref by @will-bogusz in #15574
  • fix(coding-agent): salvaged damaged history.db instead of crashing on history recall by @Shadorain in #15751
  • fix(natives,coding-agent): keep omitted takeover in the background while computer control is held by @will-bogusz in #15173
  • feat(computer): select text in a background macOS element by accessibility by @will-bogusz in #15175
  • feat(web-search): add DeepSeek Search API engine (web/deepseek) by @H4vC in #16136
  • fix(coding-agent): capture browser tabs in place instead of raising Chrome by @will-bogusz in #15174
  • fix(natives): keep the user's app focused during macOS background input by @will-bogusz in #15184
  • fix(shell): hand external commands the files that backed URLs alias by @koyzdev in #14838
  • fix(natives): stop computer use on physical Escape only during takeover input by @will-bogusz in #15176
  • feat(computer): stop computer use for the rest of the turn when the user presses Escape by @will-bogusz in #15564
  • feat(computer): type into one element with el.type and el.press, sending nothing if it won't take focus by @will-bogusz in #15563
  • fix(natives): keep the user's app in front when a macOS background target activates itself while they type by @will-bogusz in #15195
  • feat(natives): send the user's keys back to their app while a macOS background target holds the keyboard uninvited by @will-bogusz in #16140
  • fix(natives): type into macOS Screen Sharing and iPhone Mirroring with the keyboard layout's keys by @will-bogusz in #15193
  • feat(computer): stop typing and re-read when the user types in the agent's macOS app by @will-bogusz in #15562
  • fix(tui): resolve stalled OSC/DCS/APC strings by grammar instead of timeouts by @H4vC in #16170
  • feat(natives): deliver macOS background drags, holds, modified and right-clicks by @will-bogusz in #15185
  • fix(natives): release keys and buttons a macOS input request still holds when omp dies by @will-bogusz in #15192
  • feat(computer): rerun refused macOS background input in takeover, set by computer.backgroundFallback by @will-bogusz in #15191
  • fix(eval): exclude delegated tool waits from cell timeouts by @alphastorm in #16154
  • fix(task): budget Cursor subagent steps by @joseotaviorf in #16182
  • fix(tui): read iTerm2's cell size from ReportCellSize by @galtamam-cmyk in #16118
  • test(coding-agent): isolate system prompt discovery environment by @C-W-Z in #16166
  • fix(pi-builtins): reject a tagged cksum line starting with ( instead of panicking by @jchanghong023 in #16142
  • test(natives): gave each ast test tree its own temp directory by @will-bogusz in #16163
  • test(natives): keep a click placed in the user's app from reading as a new click in the macOS focus guard test by @will-bogusz in #16187
  • fix(tui): hold a streaming table's height while its last cell grows by @galtamam-cmyk in #16116
  • feat(coding-agent): time idle compaction to prompt cache TTL by @H4vC in #16198
  • fix(coding-agent): time idle compaction only to the 1h prompt cache by @H4vC in #16204
  • docs(coding-agent): note cold short-tier idle summary trade-off by @H4vC in #16207
  • fix(ai): keep Muse Code usage current while the 5-hour window is idle by @eggpeat in #16193
  • perf(diff): borrow word tokens instead of copying them by @kyle-elliott in #16212
  • fix(tui): repaint the status line on its own timer while a turn runs by @tommymorgan in #16109
  • perf(edit): format numbered lines into one output buffer by @kyle-elliott in #16211
  • perf(ast): avoid discarded errors when filtering unsupported files by @kyle-elliott in #16213
  • fix(coding-agent): add extension models to the enabledModels scope before the first frame by @skipper019 in #16096
  • fix(natives): stop Linux clippy flagging macOS-only text-range helpers by @tommymorgan in #16158
  • perf(vcs): bound retained commit IDs for prefix queries by @kyle-elliott in #16210
  • perf(mermaid): borrow palette colors in XY chart cells by @kyle-elliott in #16214
  • test(natives): expect UserIntervened when the user brings iPhone Mirroring forward mid-tap by @will-bogusz in #16200
  • fix(natives): send a macOS background target back however late it activates itself by @will-bogusz in #16185
  • fix(natives): count a takeover tap kind without an arm as the user's input by @will-bogusz in #16188
  • fix(natives): say that clicks, not only keys, stop at the user's input in macOS UserIntervened by @will-bogusz in #16206
  • fix(coding-agent): keep the ENOTDIR rejection for session paths with a file component by @jchanghong023 in #16145
  • fix(pi-builtins): rewrite the native path separator in grep --path-separator output by @jchanghong023 in #16143
  • fix(coding-agent): reject unusable run args and explain busy errors in computer and browser calls by @will-bogusz in #16149
  • feat(browser): open relay tabs omp owns in the background by @will-bogusz in #16119
  • fix(bash): keep the persistent shell's state between calls by @alphastorm in #16153
  • fix(ai): heal DeepSeek tool calls written in re-spelled template tokens by @H4vC in #16216
  • fix(coding-agent): skipped trailing eval state snapshot in turn retry by @roboomp in #16197
  • fix(coding-agent): ran perplexity sso browser outside automation mode by @roboomp in #16147
  • fix(agent): excluded stripped ollama thinking from context estimates by @roboomp in #16165
  • fix(tui): routed relayed replies through terminal parser by @roboomp in #16138
  • fix(tui): read space-grouped thousands in table chart cells by @roboomp in #16177
  • fix(skills): dropped stale IrcTool from builtin prompt probe by @roboomp in #16168
  • fix(natives): keep computer input that already went out from reporting Cancelled by @will-bogusz in #16202
  • fix(natives): keep a lingering macOS release helper from cutting short a later press by @will-bogusz in #16205
  • feat(tui): add tui.completeScrollback so displaced rows reach scrollback by @Ilm-Alan in #15692

New Contributors

@kyle-elliott made their first contribution in #16115 @koyzdev made their first contribution in #14838 @galtamam-cmyk made their first contribution in #16118 @C-W-Z made their first contribution in #16166 @skipper019 made their first contribution in #16096 @Ilm-Alan made their first contribution in #15692

Full Changelog: v18.12.1...v18.12.2

原文入口

阅读原文(github.com)

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

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

了解来源批准与收录规则