黄奕彬

外部精选

omp · v18.12.3

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

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

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

结构化摘要 AI 生成

背景与问题

背景与问题:这是 oh-my-pi(omp)v18.12.3 的发布说明,记录 v18.12.2...v18.12.3 之间的全部变更。该项目为多包 monorepo,涵盖 @oh-my-pi/pi-agent-core、pi-ai、pi-catalog、pi-coding-agent、pi-natives、pi-tui、pi-wire。面向已使用 omp 的开发者,核心诉求是修复上一版本遗留缺陷并补充少量功能。

方法或内容

方法或内容:按包分组发布变更清单:

  • pi-agent-core:AgentTool 新增 approvalCacheTargets 钩子;lenientArgValidation 工具改为接收未知根参数以便拒绝
  • pi-ai:新增 validateToolArguments 的 keepUnknownRootKeys 选项;修复 Claude 流、Gemini 配对、Factory Droid Gemini、PI_REQ_DEBUG 凭证落盘等
  • pi-catalog:MiniMax M3.1 Flash 与 Gemma 4 条目调整
  • pi-coding-agent:新增 Ask and remember 审批模式、/forget-approvals、proc://<id>/streams、后台作业 widget;数十项修复
  • pi-natives:htmlToMarkdown 的 hiddenContent、normalizePtyDimensions()、LineMatcher、PipeStreams
  • pi-tui/pi-wire:审批对话框 grants、作业瓦片与 sparkline 绘制、图表参考线

关键发现 / 结果

关键发现或结果:

  • 安全修复:PI_REQ_DEBUG=1 转储此前把 API key、bearer token、响应 cookies 明文写盘,现改为 [redacted]
  • 新增审批模式 tools.approvalMode: always-ask-cached(--approval-mode always-ask-cached):读文件前也询问,可记住文件夹/文件、本会话或跨会话,存于 approval-cache.db
  • 后台作业 widget:首次由一次请求写规则,此后更新本地计算,不再调用模型
  • Factory Droid Gemini:超 64 字符的工具名(多为 MCP 工具)现缩短至 64 字符;string 或 list 参数的 400 schema 错误修复
  • Gemma 4 on Google AI Studio 不再每请求报 Thinking budget 错误,改用 thinkingLevel
  • 被取消/超时的子代理现可从 transcript 恢复并继续接收消息
  • /compact、/new 或切换会话不再丢失运行中工具的结果
  • brew install/upgrade omp 在企业代理后的 403 修复

整体性能或统计数据:原文未说明。

结论与意义

结论与意义:本版本以缺陷修复为主,同时引入文件级审批缓存(Ask and remember)与后台作业可视化两条功能线。原文未给出总结性结论或量化指标,仅列变更清单。适用边界为 omp v18.12.3(自 v18.12.2 升级),其中模型目录类修复依赖外部服务的当期行为。

AI 解读 AI 生成

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

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

时间:发布时间为北京时间 2026-10-20 02:41:25(来源日期 2026年10月20日 02:41(北京时间)),变更范围为 v18.12.2...v18.12.3。

本地行为类修复(UI、编辑器、审批、终端)在升级后应持续成立;依赖外部模型服务(Google AI Studio、MiniMax、Factory Droid Gemini、Claude 网关)的条目可能随服务端变化过时。发布之后是否已有再变更,原文未说明。

空间:谁的环境 / 场景

空间:

  • 产品:omp(oh-my-pi)v18.12.3,自 v18.12.2 升级;含 Homebrew 安装与企业代理环境
  • 终端:Zellij、JetBrains terminal、SIXEL 渲染、原生 Windows(无 /bin/sh 场景)
  • 系统自动化:macOS computer tool、X11 快捷键与输入
  • 模型侧:Google AI Studio 的 Gemma 4、MiniMax M3.1 Flash、Factory Droid Gemini、经网关的 Claude 流
  • 扩展生态:legacy pi 扩展/插件、ui.approve() 宿主、MCP OAuth 授权

变量:实际改变了什么

变量:相对 v18.12.2 实际改变的内容:

  • 行为:审批新增 always-ask-cached;PI_REQ_DEBUG 转储的凭证头改为 [redacted]
  • 行为:lenientArgValidation 工具与 yield 改为显式拒绝未知/不支持字段,而非静默丢弃
  • 行为:超 64 字符工具名自动缩短;Gemma 4 改用 thinkingLevel 开关 thinking
  • 行为:find/glob/ast_grep 对 ssh:// 路径改为请求 exec 审批
  • 新增:/forget-approvals、proc://<id>/streams、作业 widget、LineMatcher、PipeStreams、normalizePtyDimensions()
  • 数据:snapcompact 归档源文本完整保存;运行中工具结果在 /compact、/new、切换会话后保留

区分:包含 ≠ 相关 ≠ 因果

区分:

  • 明确因果:各 Fixed 条目直接陈述缺陷与修复,如长工具名导致 Factory Droid Gemini 丢弃调用、PI_REQ_DEBUG 明文写入凭证、conflict://* 字面值写入误报成功
  • 明确机制:approvalCacheTargets 供 always-ask-cached 模式检查并记录按文件授权;widget 规则一次生成后更新本地计算、无模型调用
  • 仅限定/相关:Gemini 配对 bug 的「sessions from before 18.4.2, SDK-built contexts」是出现范围而非原因;New Contributors 与各变更只是同版本并列出现
  • 多数缺陷的底层根因(如网关为何切断 Claude 流):原文未说明

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

对象:署名(结构化作者字段)为 github-actions[bot],即 GitHub 自动化账号发布的 release 说明;正文按 PR 列出贡献者与首次贡献记录,但这些不构成署名。关键技术及原文描述的原理:

  • 审批缓存:approval-cache.db 记录按文件夹/文件、按会话或跨会话的授权,/forget-approvals 全部清除
  • PipeStreams 与 Shell.run 的 streams 选项:每条管道保留最新 1MB 可读副本,| tail 阻塞时仍可查看
  • 作业 widget:widget 模型角色一次写规则读取作业输出与管道,后续更新本地计算
  • htmlToMarkdown 的 hiddenContent:drop/reachable/all 控制折叠内容的保留程度
  • normalizePtyDimensions(cols, rows):让 screen emulator 与原生 PTY 有效尺寸一致
  • MCP OAuth 发现:仅使用 advertised 的授权服务器并报告 issuer 不匹配

元反空综合结论

元反空综合:

  • 元:本质是补丁版本的变更清单,回答「omp 这版改了什么、值不值得升级」,服务于升级决策与回归追踪,由自动化账号聚合生成。
  • 反:最可能失效或有边界的是模型目录类条目(MiniMax、Gemma 4、Factory Droid Gemini、Claude 网关),依赖外部服务当期行为;作业 widget 是全新机制,按作业由模型角色设计,其稳定性原文未说明;Homebrew 修复依赖 GitHub release 可用性。
  • 空:去掉叙事后剩下的必要事实:一项安全修复(debug 转储凭证脱敏)、两条功能线(Ask and remember 审批、作业可视化与子代理进度展示)、数十项带 PR 编号的具体修复、6 位首次贡献者、对比范围 v18.12.2...v18.12.3。
  • 综合:这是一份高事实密度、逐条可追溯(PR 编号)的补丁发布说明;对 v18.12.2 用户有直接升级参考价值,凭证脱敏对仍在旧版本的用户构成明确升级动机;外部服务相关修复时效性最弱,本地行为类修复可信度较高。

中文译文 AI 生成

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

新增

  • AgentTool 新增可选的 approvalCacheTargets 钩子,always-ask-cached 审批模式用它来检查并记录针对每个文件的授权(#16049,作者 @Peribunt)

变更

  • 启用了 lenientArgValidation 的工具现在会收到其 closed schema 本会丢弃的未知根参数,从而可以拒绝这些参数(#16317)

@oh-my-pi/pi-ai

新增

  • 新增 validateToolArguments(tool, call, { keepUnknownRootKeys: true }),用于在参数修复期间保留 closed schema 本会丢弃的未知根键(#16317)

修复

  • 修复了被网关在 message_delta 之前切断的 Claude 流导致该轮次失败而非被重试的问题(#16341,作者 @lz-lunzi)
  • 修复了当历史记录未按调用顺序存储并行同名工具结果时,Gemini 将其与错误调用配对的问题(18.4.2 之前的会话、SDK 构建的上下文)(#16259,作者 @will-bogusz)
  • 修复了 Factory Droid Gemini 丢弃对名称超过 64 个字符的工具(大多数 MCP 工具)的调用及其在后续请求中的结果、导致模型再次调用该工具的问题;此类名称现在会缩短至 64 个字符(#16283,作者 @will-bogusz)
  • 修复了当工具参数接受字符串或列表时(如默认 task 工具的 model 字段那样),Factory Droid Gemini 请求以 400 "For schema with items, schema type should be ARRAY" 失败的问题(#16249,作者 @will-bogusz)
  • 修复了 PI_REQ_DEBUG=1 请求转储将 API 密钥、bearer token 和响应 cookie 以明文写入磁盘的问题:凭证头部现在显示为 [redacted],与被拒绝请求的转储一致(#16293,作者 @will-bogusz)
  • 修复了在没有流式传输任何 delta 时,已定稿的签名推理从显示的 thinking 中消失的问题(#16227)

@oh-my-pi/pi-catalog

变更

  • MiniMax MiniMax-M3.1-Flash(发布 id)现在获得了随附的 MiniMax-M3.1-Flash-Preview 条目所具有的始终开启的 low–max thinking,并省略它拒绝的采样参数(temperature、top_p、top_k)(#16315,作者 @SaladDay)

修复

  • Google AI Studio 上的 Gemma 4 模型(google/gemma-4-31b-it、google/gemma-4-26b-a4b-it、…)不再在每次请求时以 "Thinking budget is not supported for this model" 失败;thinking 现在通过 thinkingLevel 切换(on = high、off = minimal)(#16350)

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

新增

  • 新增 Ask and remember 审批模式(tools.approvalMode: always-ask-cached、--approval-mode always-ask-cached):它也会在读取文件前询问;文件提示可以通过 approval-cache.db 记住该文件夹或该文件,可仅限本次会话或跨会话生效(#16049,作者 @Peribunt)
  • 新增 /forget-approvals,用于忘记 Ask and remember 已记录的所有文件和文件夹审批(#16049,作者 @Peribunt)
  • 扩展的 ui.approve() 宿主可以渲染新的 prompt.grants 选项并以 { grant, always } 作答;忽略这些选项的宿主继续以 once/session/deny 作答(#16049,作者 @Peribunt)
  • 扩展和自定义工具可以声明 approvalCacheTargets 来参与 Ask and remember 授权(#16049,作者 @Peribunt)
  • 为 bash 任务新增 proc://<id>/streams:它列出命令的管道,proc://<id>/streams/<n> 显示到目前为止流经管道 n 的内容,因此无需重新运行 cmd 即可实时跟踪 cmd | tail -5
  • 后台任务的小组件由新的 widget 模型角色逐任务设计(在你分配之前,它按 smol 解析):一次请求会写入读取任务输出及其管道(包括 cmd | tail)的规则,此后每次更新均在本地计算,不再有进一步的模型调用或发给代理的消息;子代理只有在其说明哪个输出展示自己的进度后才会获得小组件,没有值得绘图内容的任务则没有小组件;可通过 async.widgets: false 关闭它们
  • 运行中的子代理现在会在任务卡片上以自己的话显示当前步骤;定期完成检查还会询问子代理哪个输出展示其进度,以便任务小组件知道要绘制什么
  • 等待卡片将受监视的任务显示为一排磁贴,每块磁贴包含其状态、名称(子代理的显示全名)、正在做什么,以及它拥有的核心数字和实时小组件(带目标线的吞吐量图表、按模型的条形、CI 任务状态、trial 进度),还有子代理自身的完成预估,呈现为随填充从蓝色变为绿色的圆环(悬停磁贴可查看百分比);HUD 任务胶囊显示最新任务的核心数字和迷你图表,悬停它会打开一个以磁贴形式显示运行中任务的卡片;任务面板在所选任务的输出上方显示其小组件,终端状态行将核心数字追加到任务计数之后

变更

  • 当某个子代理处于焦点状态时,/model、/switch、/effort、Alt+P、Ctrl+P 和 Shift+Tab 会更改该子代理的模型和 thinking 级别(仅限本会话),而不是提示你返回主会话;/model 和 Alt+M 会在那里打开仅限本会话的选择器,因为角色分配配置的是主会话

修复

  • 修复了 omp skill list 遗漏来自以 ~ 开头的 skills.customDirectories 条目的技能的问题;此类条目现在会相对你的主目录解析,与 skill 加载器的行为一致(#16347,作者 @yuzu-octopus)
  • 修复了 grep 将以 ; 分隔的内部 URL 列表(例如 artifact://44;artifact://43)当作单个 URI 并拒绝搜索的问题;现在会搜索列出的每个资源(#14091)
  • 修复了 grep 在页面尚未抓取时拒绝带有 :raw(或 :conflicts)选择器的 web URL 的问题;该选择器现在会传达到抓取步骤,因此 :raw 搜索的是逐字的响应正文(#14092)
  • 修复了 Chromium 和 Tern 标签页中 browser role/<role>[name="…" exact] 选择器对许多从 observe() 复制来的名称匹配不到任何内容的问题;具有可见文本的按钮或链接不再按其 title 匹配(#16252,作者 @will-bogusz)
  • 修复了带 Mnemopi 自动召回的 /tan 克隆会将父级召回的记忆作为额外的 system-prompt 块重新发送的问题,这会导致这些记忆重复并错失父级的 prompt 缓存(#16337)
  • 修复了从 pi-ai 导入 contentText 或从 pi-coding-agent 导入 formatSkillsForPrompt 的旧式 pi 扩展(例如 pi-claude-bridge)无法加载的问题(#16313,作者 @Jerryx333)
  • 修复了旧版 Pi 插件(如 pi-ssh-remote)在会话启动时通过 SettingsManager 读取 shell 设置而崩溃的问题 (#16256)
  • 修复了登录后(包括 setup-wizard 登录)新完成认证的模型未出现在当前会话限定范围的 /model 选择器和模型循环中的问题,且不改变活动模型、不扩大已配置的范围 (#16234 by @lazy1523)
  • 修复了 computer 工具的 control.acquire 在无人可被询问(子代理或 headless 运行)时与你拒绝时返回相同的 { active: false } 的问题;现在它会报告 reason: "no-ui" 或 reason: "denied" (#16295 by @will-bogusz)
  • 修复了当 Chrome 打开 DevTools 会话较慢时浏览器截图等待超过截止时间的问题;现在它会在截止时间处停止 (#16230 by @will-bogusz)
  • 修复了驻留(parked)状态的子代理在被消息唤醒时会带上 todo 工具及其指令的问题,尽管子代理在生成时并不包含它们 (#16281 by @will-bogusz)
  • 修复了 wait 在其所等待的作业刚好完成时以 "Skipped due to a queued background completion" 报错失败的问题;现在它会返回该作业的结果,且同一时刻到达的 steer、peer 消息或 aside 不再把已完结的作业或等待中的 peer 消息变为该跳过 (#16301 by @will-bogusz)
  • 修复了两条扩展 aside(pi.sendMessage(…, { deliverAs: "aside" })一同发送到空闲会话时第二条丢失的问题;现在第二条会在第一条之后到达代理 (#16292 by @will-bogusz)
  • 修复了每个被 agent://all 广播唤醒的空闲代理都会自动回复发送者(大多是说明该消息不是发给它的)的问题;直接消息仍会让被唤醒的代理获得回合 (#16312 by @will-bogusz)
  • 修复了被 IRC 消息唤醒的子代理把该回合写下的每一行文本连成一串(Checking.Answer.)发送给唤醒者和父级、而非仅发送最终答案的问题 (#16302 by @will-bogusz)
  • 修复了在 peer 唤醒的子代理运行期间发送的父级后续消息导致已接受的 agent:// 结果保持不变并跳过父级完成的问题 (#16305)
  • 修复了 yield 在静默省略不支持的根字段时报告成功的问题;此类调用现在会被拒绝并报出指明这些字段的错误 (#16317)
  • 修复了在公司代理后 brew install 和 brew upgrade omp 以 403 失败的问题 (#16264 by @debanjanbasu)
  • 修复了发布版二进制文件中浏览器超时以原始错误形式出现(如 Og: Navigation timeout of 7000 ms exceeded)的问题;超时的 tab.goto 或 browser.open 现在会停止未完成的加载并保留标签页,与从源码运行时的行为一致 (#16266 by @will-bogusz)
  • 修复了 find、glob 和 ast_grep 总是以 "ssh:// access needs exec approval; this command was approved at read" 拒绝 ssh:// 路径的问题;它们现在会像 read 和 grep 那样请求 exec 审批 (#16285 by @will-bogusz)
  • 修复了以字面值(1: foo, 2: bar)按 id 逐行进行 conflict://* 写入时把所有行写入每个冲突块并报告成功的问题;现在它会失败且不改动文件,并指向按块的 conflict://<N> 写入 (#16267 by @will-bogusz)
  • 修复了 hashline 块编辑(PUT N*:、CUT N*)作用于 read 从未完整显示过的块行的问题,例如在列上限处被截断的行会静默丢弃该行的尾部;此类编辑现在会像等效的显式范围一样被拒绝 (#16209)
  • 修复了恢复会话的下一次 snapcompact 压缩在归档超过 500k 字符后丢失最新归档历史、并将 [Session persistence truncated large content] 绘制进其帧的问题;归档的源文本现在会被完整保存 (#16282 by @will-bogusz)
  • 修复了在工具运行期间执行 /compact、/new 或切换会话会把该工具的结果从会话文件中丢弃的问题,此前模型和恢复的会话会看到 "No result provided" 而非工具的返回内容 (#16241 by @will-bogusz)
  • 修复了 read 以中部省略方式把大文件页面写入 artifact 的问题;超过输出溢出(spill)阈值的页面现在会在行边界处停止,并带有精确的 :N 续读 (#16277)
  • 修复了重启后的编辑会替换 read 或 grep 显示为在列上限处截断的行并静默丢弃该行其余内容的问题;此类编辑现在会先请求对该行进行完整的 :raw 读取,而对上限以内行的编辑仍会正常应用 (#16171)
  • 修复了在未知斜杠命令(如 /not-a-command)上按 Enter 会运行描述恰好与之匹配的命令(例如 /loop,它随后会在每回合后重发之后的每条提示)的问题;现在按 Enter 会发送你输入的内容,包括作为待定工具审批的 deny-and-steer 消息,除非你先选中某个建议 (#16265)
  • 修复了 read 网页时丢弃折叠部分(如 accordion 和 expander 面板,例如商品页面的 "Item details" 表格)的问题;<template>、<noscript> 和脚本中的内容仍会排除在外 (#16246)
  • 修复了当 MCP 服务器在其 protected-resource 元数据中通告的授权服务器元数据无效时,/mcp reauth 和 /mcp add 会打开无关的 origin 根授权服务器登录页的问题;发现流程现在只使用通告的服务器,并报告指明该服务器名称的 issuer 不匹配 (#16339)
  • 修复了 auto thinking 提供当前模型不支持的 judge effort 级别、可能使 sparse-ladder 模型停留在错误级别的问题;在上限之下最多只有一个可用级别时,它现在会跳过 judge 调用 (#16327 by @savanne-kham)
  • 修复了已取消、中断、超时或被杀死的子代理以 "hard-aborted and cannot be messaged or revived" 拒绝消息的问题:现在一条消息(或 Agent Hub 的 revive/focus)可让其从自身 transcript 恢复并保留完整上下文
  • 修复了为向获得焦点的子代理发送排队消息(空 Enter)而中断它、有时会在其读取消息前就将该运行以已取消结束的问题;子代理现在会回复该消息并继续工作
  • 修复了首条回复以 todo 计划开头的会话所获标题缺少该计划的图标和代码的问题:计划的标题刷新不再替换仍在生成中的卡片标题
  • 修复了生成的标题在没有图标和代码时(子代理的标题、标题模型回退、格式错误的卡片回复)保持朴素外观的问题:它们现在会像 /rename 标题那样获得一张卡片
  • 修复了运行测试套件时把夹具标题(PLAN、renamed session、…)添加到你真实的 ~/.omp/agent/history.db 的问题

@oh-my-pi/pi-natives

新增

  • 为 htmlToMarkdown 新增了 hiddenContent 选项:drop(默认)省略隐藏内容,reachable 保留页面可以显示的内容(如折叠区块和非活动的标签页面板),all 还会保留 <template> 与 <noscript> 的内容;其他值会抛出错误(#16246)
  • 新增了 normalizePtyDimensions(cols, rows),用于以与原生 PTY 会话相同的有效尺寸来设定屏幕模拟器的大小(#16192,by @C-W-Z)
  • 新增了 LineMatcher,一个原生多模式行匹配器:matchLines 以类型化数组按列返回一批数据的匹配结果(行、模式,以及按 groupNames() 顺序排列的每个命名组的 UTF-16 区间)
  • 新增了 PipeStreams 以及 Shell.run 的 streams 选项:该次运行打开的每个管道都会保留其最新一兆字节的可读副本,因此即使后面的阶段(| tail)把输出压住,前一个阶段的输出依然可见

修复

  • 修复了输出精简器改变 bash 工具中 ssh 命令打印内容的问题:此前远程行被截断为 120 个字符、空行被丢弃;ssh 自身的登录与连接提示仍会被剥离(#16314,by @will-bogusz)
  • 修复了 X11 后台快捷键与输入在最后一个按键刚按下后就被你停止时报告 Cancelled 的问题:现在按键释放总会被发出,且调用成功(#16235,by @will-bogusz)
  • 修复了 wrapTextWithAnsi 在中文和日文文本中让行半空的问题:CJK 连续文本现在会在字符之间断行以填满每一行,收尾标点如 ,。!」 不会出现在行首,起始括号不会出现在行尾(#16219)
  • 修复了被取消或超时的 macOS computer 调用在停止并放行下一个请求之前,仍会完成对 sheet、popover 或菜单窗口(最多 5,000 个辅助功能元素)查找的问题(#16233,by @will-bogusz)

@oh-my-pi/pi-tui

新增

  • 新增了 IrcMessage.broadcast,它被设置在 agent://all 广播的每个副本上,使接收者能将其与直接消息区分开(#16312,by @will-bogusz)
  • AutocompleteItem.descriptionMatch 用于标记仅通过描述匹配到的斜杠命令;编辑器的 Enter 键不再应用这样的行,除非用户已把选择移动到它上面(#16265)
  • ApprovalDialogComponent 接受 grants 和 onGrant:即位于 Approve Once 上方的授权选项,由一个可跨会话保留这些选项的开关主导(#16049,by @Peribunt)
  • 新增了 describeJobWidget/renderJobWidgetLines,用于以原生方式和终端行的形式绘制后台作业的部件;describeJobTiles/renderJobTileLines 用于把作业绘制为图块(状态、标题、图形、部件);以及用于单行块状迷你图的 renderSparkline(配合 peakBuckets/fitSparkValues)

修复

  • 修复了顶部有空行的透明图片在 Zellij 内消失的问题(#16346,by @Bouska)
  • 修复了被输出精简器改写的 bash 输出跳过每行列数上限(tools.outputMaxColumns)的问题,此前超过上限宽度的行会完整地到达模型;原始输出仍保留在其工件中(#16314,by @will-bogusz)
  • 修复了在把 chip 图标绘制为宽 emoji 的终端(JetBrains terminal)中,composer 光标会随每个粘贴的图片或视频 chip 向左漂移一格的问题;unicode 预设现在使用 📷/🎬 chip 图标(#16270)
  • 修复了 Tern 把用 /skill:<name> 发送的用户文本隐藏在折叠技能卡片中的问题;只有已加载的技能提示词会被隐藏(#16311)
  • 修复了 SIXEL 图表和图片在其顶部行滚出视口时与后续内容重叠的问题(#16245,by @JustasMasiulis)

@oh-my-pi/pi-wire

新增

  • 为柱状/迷你图节点新增了 min、max 和虚线参考标记,为每个系列列提供一种色调,并新增了通用的 hovercard 属性:当指针停留在节点上时,Tern 会在该节点上方浮动一棵节点树

变更内容

  • fix(tui): 在视口顶部裁剪 SIXEL 光栅图(by @JustasMasiulis in #16245)
  • fix(tui): 阻止 Enter 运行仅通过描述匹配的斜杠命令(by @roboomp in #16268)
  • fix(ai): 保留缺少 deltas 的已定稿原生推理(by @roboomp in #16229)
  • fix(tui): 为图片和视频 chip 使用 emoji 呈现形式的字形(by @roboomp in #16276)
  • fix(tui): 在 Tern 转录中保持技能草稿可见(by @roboomp in #16320)
  • fix(read): 在溢出阈值处分页读取文件而不是省略(by @roboomp in #16280)
  • fix(tui-debug): 支持没有 /bin/sh 的原生 Windows(by @C-W-Z in #16192)
  • fix(ai): 在 PI_REQ_DEBUG 转储中涂抹凭据标头(by @will-bogusz in #16293)
  • fix(coding-agent): 在 /compact、/new 或会话切换中止正在运行的工具时保留其结果(by @will-bogusz in #16241)
  • fix(coding-agent): 完整持久化 snapcompact 归档的源文本(by @will-bogusz in #16282)
  • fix(edit): 在 hashline 的已见行守卫中检查块的每一行(by @roboomp in #16218)
  • fix(coding-agent): 拒绝带字面值的 conflict://* 各 id 块(by @will-bogusz in #16267)
  • fix(coding-agent): 对 find、glob 和 ast_grep 中的 ssh:// 路径请求执行审批(by @will-bogusz in #16285)
  • fix(natives): 绝不取消 X11 的 uinput 释放(by @will-bogusz in #16235)
  • fix(mcp): 将 oauth 发现限制为已通告的认证服务器(by @roboomp in #16340)
  • fix(ai): 当参数接受字符串或列表时保持 Factory Droid Gemini 工具 schema 有效(by @will-bogusz in #16249)
  • fix(ai): 在后续请求中保留 Factory Droid Gemini 对长名称工具的调用(by @will-bogusz in #16283)
  • fix(ai): 按调用顺序回传并行的 Gemini 工具结果(by @will-bogusz in #16259)
  • fix(catalog): 为 google ai studio 上的 gemma 4 发送 thinkingLevel(by @roboomp in #16354)
  • fix(browser): 在 release 构建中识别 Puppeteer 超时(by @will-bogusz in #16266)
  • fix(ci): 在 Homebrew formula 中回退到 GitHub release(by @debanjanbasu in #16264)
  • fix(coding-agent): 拒绝携带 data 之外字段的 yield 调用(by @roboomp in #16323)
  • fix(task): 发布父级注入的唤醒结果(by @roboomp in #16307)
  • fix(task): 转发被唤醒子代理的最终报告,而非其全部回合文本,由 @will-bogusz 在 #16302 中提交
  • fix: 处理 #16323、#16340、#16249、#16241 的评审后续事项,由 @H4vC 在 #16362 中提交
  • fix(coding-agent,tui): 阻止被唤醒的代理自动回复 agent://all 广播,由 @will-bogusz 在 #16312 中提交
  • fix(coding-agent): 将同时发送到空闲会话的两条 aside 都投递,由 @will-bogusz 在 #16292 中提交
  • fix(coding-agent): 从被完成通知提前打断的等待中返回刚完成的作业,由 @will-bogusz 在 #16301 中提交
  • fix(pi-shell,tui): 在最小化器中保持 ssh 远程输出完整,由 @will-bogusz 在 #16314 中提交
  • fix(natives): 在 wrapTextWithAnsi 中允许 CJK 连续文本在字符之间断行,由 @roboomp 在 #16228 中提交
  • fix(coding-agent): 确保热恢复(warm-revived)的子代理中 todo 仍被剥离,由 @will-bogusz 在 #16281 中提交
  • fix(natives): 在已取消的 macOS 过期引用(stale-ref)搜索查找窗口之前将其停止,由 @will-bogusz 在 #16233 中提交
  • fix(coding-agent): 阻止浏览器截图在超过截止时间后仍等待 DevTools 会话,由 @will-bogusz 在 #16230 中提交
  • fix(coding-agent): 向 computer.control.acquire 告知除拒绝外无人能应答,由 @will-bogusz 在 #16295 中提交
  • fix(ai): 将流中途的 message_delta 丢弃归类为可重试,由 @lz-lunzi 在 #16341 中提交
  • fix(coding-agent): 在 OAuth 登录后刷新作用域内的模型,由 @lazy1523 在 #16234 中提交
  • fix(coding-agent): 恢复旧版 shell 设置访问器,由 @roboomp 在 #16258 中提交
  • fix(coding-agent): 从旧版 pi 垫片导出 contentText 和 formatSkillsForPrompt,由 @Jerryx333 在 #16313 中提交
  • fix(mnemopi): 防止 /tan 克隆重复注入父级召回,由 @roboomp 在 #16338 中提交
  • fix(coding-agent): 使浏览器 role/ 精确名称与 observe() 显示的名称相匹配,由 @will-bogusz 在 #16252 中提交
  • fix(coding-agent): 让 grep 获取带有 :raw 选择器的 web URL,由 @yuzu-octopus 在 #16352 中提交
  • fix(coding-agent): 搜索分号分隔的内部 URL 列表中的每个资源,由 @yuzu-octopus 在 #16353 中提交
  • fix(coding-agent): 在技能列表自定义目录中展开波浪号,由 @yuzu-octopus 在 #16347 中提交
  • fix(tui): 在 Zellij 中保留透明 SIXEL 图像的宽度,由 @Bouska 在 #16346 中提交
  • fix(coding-agent): 添加旧版 skills 提示模板,由 @H4vC 在 #16364 中提交
  • fix: 处理第二轮评审后续事项,由 @H4vC 在 #16365 中提交
  • fix(coding-agent): 将 auto-thinking 选项限制为模型支持的 effort 值,由 @savanne-kham 在 #16327 中提交
  • fix(catalog): 将 MiniMax M3.1 Flash 规则移至启动 ID MiniMax-M3.1-Flash,由 @SaladDay 在 #16315 中提交
  • docs(changelog): 按其效果描述 auto-thinking 修复,由 @H4vC 在 #16367 中提交

新贡献者

  • @JustasMasiulis 在 #16245 中完成了首次贡献
  • @debanjanbasu 在 #16264 中完成了首次贡献
  • @lz-lunzi 在 #16341 中完成了首次贡献
  • @lazy1523 在 #16234 中完成了首次贡献
  • @Jerryx333 在 #16313 中完成了首次贡献
  • @SaladDay 在 #16315 中完成了首次贡献

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

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

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

Added

AgentTool gained the optional approvalCacheTargets hook, which the always-ask-cached approval mode uses to check and record per-file grants (#16049 by @Peribunt)

Changed

Tools with lenientArgValidation now receive unknown root arguments that their closed schema would otherwise drop, so they can reject them (#16317)

@oh-my-pi/pi-ai

Added

Added validateToolArguments(tool, call, { keepUnknownRootKeys: true }) to keep unknown root keys that a closed schema would otherwise drop during argument repair (#16317)

Fixed

Fixed Claude streams that a gateway cut off before message_delta failing the turn instead of being retried (#16341 by @lz-lunzi) Fixed Gemini pairing parallel same-name tool results with the wrong call when history stores them out of call order (sessions from before 18.4.2, SDK-built contexts) (#16259 by @will-bogusz) Fixed Factory Droid Gemini dropping calls to tools with names over 64 characters (most MCP tools) and their results from later requests, so the model called the tool again; such names now shorten to 64 characters (#16283 by @will-bogusz) Fixed Factory Droid Gemini requests failing with 400 "For schema with items, schema type should be ARRAY" when a tool parameter accepts a string or a list, as the default task tool's model field does (#16249 by @will-bogusz) Fixed PI_REQ_DEBUG=1 request dumps writing your API key, bearer token and response cookies to disk in plain text: credential headers now read [redacted], as in rejected-request dumps (#16293 by @will-bogusz) Fixed finalized signed reasoning disappearing from displayed thinking when no deltas streamed (#16227)

@oh-my-pi/pi-catalog

Changed

MiniMax MiniMax-M3.1-Flash (the launch id) now gets the always-on low–max thinking the bundled MiniMax-M3.1-Flash-Preview rows have, and omits sampling params (temperature, top_p, top_k) it rejects (#16315 by @SaladDay)

Fixed

Gemma 4 models on Google AI Studio (google/gemma-4-31b-it, google/gemma-4-26b-a4b-it, …) no longer fail every request with Thinking budget is not supported for this model; thinking is now toggled with thinkingLevel (on = high, off = minimal) (#16350)

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

Added

Added the Ask and remember approval mode (tools.approvalMode: always-ask-cached, --approval-mode always-ask-cached): it also asks before file reads, and file prompts can remember the folder or the file, for this session or across sessions, through approval-cache.db (#16049 by @Peribunt) Added /forget-approvals to forget every file and folder approval Ask and remember has recorded (#16049 by @Peribunt) Extension ui.approve() hosts can render the new prompt.grants choices and answer { grant, always }; hosts that ignore them keep answering once/session/deny (#16049 by @Peribunt) Extension and custom tools can declare approvalCacheTargets to take part in Ask and remember grants (#16049 by @Peribunt) Added proc://<id>/streams for bash jobs: it lists the command's pipes, and proc://<id>/streams/<n> shows what has crossed pipe n so far, so cmd | tail -5 can be followed live without rerunning cmd Background job widgets are designed per job by the new widget model role (resolves like smol until you assign it): one request writes rules that read the job's output and its pipes (cmd | tail included), and every later update is computed locally with no further model calls or messages to the agent; a subagent gets a widget only once it says which output shows its progress, and a job with nothing worth charting gets none; turn them off with async.widgets: false Running subagents now show their current step, in their own words, on the task card; the periodic completion check also asks the subagent which output shows its progress, so the job widget knows what to chart The wait card shows the watched jobs as a row of tiles, each with its status, name (a subagent's in full), what it is doing, and its headline figure and live widget when it has one (a throughput chart with its target line, per-model bars, CI job status, trial progress), and a subagent's own completion estimate as a ring that turns from blue to green as it fills (hover the tile for the percentage); the HUD jobs pill shows the freshest job's headline and a mini chart, and hovering it opens a card with the running jobs as tiles; the jobs sheet shows the selected job's widget above its output, and the terminal status line appends the headline to the jobs count

Changed

While a subagent is focused, /model, /switch, /effort, Alt+P, Ctrl+P, and Shift+Tab change that subagent's model and thinking level (session-only) instead of telling you to return to the main session; /model and Alt+M open the session-only picker there, since role assignments configure the main session

Fixed

Fixed omp skill list omitting skills from a skills.customDirectories entry that starts with ~; such an entry now resolves against your home directory, matching the skill loader (#16347 by @yuzu-octopus) Fixed grep treating a ;-separated list of internal URLs (e.g. artifact://44;artifact://43) as one URI and refusing to search it; every listed resource is now searched (#14091) Fixed grep refusing a web URL that carries a :raw (or :conflicts) selector before the page was fetched; the selector now reaches the fetch, so :raw searches the verbatim response body (#14092) Fixed browser role/<role>[name="…" exact] selectors in Chromium and Tern tabs matching nothing for many names copied from observe(); a button or link with visible text is no longer matched by its title (#16252 by @will-bogusz) Fixed /tan clones with Mnemopi auto-recall re-sending the parent's recalled memories as an extra system-prompt block, which duplicated them and missed the parent's prompt cache (#16337) Fixed legacy pi extensions that import contentText from pi-ai or formatSkillsForPrompt from pi-coding-agent, such as pi-claude-bridge, failing to load (#16313 by @Jerryx333) Fixed legacy Pi plugins such as pi-ssh-remote crashing at session start when reading shell settings through SettingsManager (#16256) Fixed newly authenticated models missing from the current session's scoped /model picker and model cycle after login, including setup-wizard sign-in, without changing the active model or widening the configured scope (#16234 by @lazy1523) Fixed the computer tool's control.acquire returning the same { active: false } when nobody could be asked (a subagent or headless run) as when you declined; it now reports reason: "no-ui" or reason: "denied" (#16295 by @will-bogusz) Fixed a browser screenshot waiting past its deadline when Chrome was slow to open a DevTools session; it now stops at the deadline (#16230 by @will-bogusz) Fixed a parked subagent waking up with the todo tool and its instructions when messaged, though subagents are spawned without them (#16281 by @will-bogusz) Fixed wait failing with "Skipped due to a queued background completion" when the job it was waiting for had just finished; it now returns that job's result, and a steer, peer message or aside arriving at the same moment no longer turns a settled job or waiting peer message into that skip (#16301 by @will-bogusz) Fixed the second of two extension asides (pi.sendMessage(…, { deliverAs: "aside" })) sent together to an idle session being lost; it now reaches the agent after the first (#16292 by @will-bogusz) Fixed every idle agent woken by an agent://all broadcast answering the sender automatically, mostly to say the message was not for it; a direct message still gets the woken agent's turn back (#16312 by @will-bogusz) Fixed a subagent woken by an IRC message sending its waker and parent every line of text it wrote that turn run together (Checking.Answer.) instead of just its final answer (#16302 by @will-bogusz) Fixed a parent follow-up sent while a peer-woken subagent was running leaving the accepted agent:// result unchanged and skipping the parent's completion (#16305) Fixed yield reporting success while silently omitting unsupported root fields; such calls are now rejected with an error naming the fields (#16317) Fixed brew install and brew upgrade of omp failing with a 403 behind corporate proxies (#16264 by @debanjanbasu) Fixed browser timeouts in the release binary surfacing as raw errors such as Og: Navigation timeout of 7000 ms exceeded; a timed-out tab.goto or browser.open now stops the pending load and keeps the tab, as running from source did (#16266 by @will-bogusz) Fixed find, glob and ast_grep always refusing ssh:// paths with "ssh:// access needs exec approval; this command was approved at read": they now ask for exec approval like read and grep do (#16285 by @will-bogusz) Fixed a conflict://* write of per-id lines with literal values (1: foo, 2: bar) writing all of them into every conflict block and reporting success; it now fails without touching the file and points to per-block conflict://<N> writes (#16267 by @will-bogusz) Fixed hashline block edits (PUT N*:, CUT N*) applying over block lines a read never fully showed, such as a line cut at the column cap, which silently dropped that line's tail; they are now rejected like the equivalent explicit range (#16209) Fixed a resumed session's next snapcompact compaction losing the newest archived history once the archive passed 500k characters, and drawing [Session persistence truncated large content] into its frames; the archive's source text is now saved whole (#16282 by @will-bogusz) Fixed /compact, /new or a session switch during a running tool dropping that tool's result from the session file, so the model and a resumed session saw "No result provided" instead of what the tool returned (#16241 by @will-bogusz) Fixed read middle-eliding large file pages into an artifact; a page past the output spill threshold now stops at a line boundary with an exact :N continuation (#16277) Fixed an edit after a restart replacing a line that read or grep had shown cut at the column cap and silently dropping the rest of that line; such edits now ask for a full :raw read of the line first, while edits to lines within the cap still apply (#16171) Fixed Enter on an unknown slash command such as /not-a-command running a command whose description happened to match it (e.g. /loop, which then resent every later prompt after each turn); Enter now sends what you typed, including as the deny-and-steer message for a pending tool approval, unless you select a suggestion first (#16265) Fixed read of web pages dropping collapsed sections such as accordion and expander panels (e.g. a product page's "Item details" table); content in <template>, <noscript> and scripts stays out (#16246) Fixed /mcp reauth and /mcp add opening an unrelated origin-root authorization server's login page when the authorization server an MCP server advertises in its protected-resource metadata has invalid metadata; discovery now uses only the advertised servers and reports the issuer mismatch naming the server (#16339) Fixed auto thinking offering the judge effort levels the current model does not support, which could leave a sparse-ladder model on the wrong level; with at most one usable level under the ceiling it now skips the judge call (#16327 by @savanne-kham) Fixed subagents that were cancelled, interrupted, timed out, or killed refusing messages as "hard-aborted and cannot be messaged or revived": a message (or Agent Hub revive/focus) now resumes them from their transcript with full context Fixed interrupting a focused subagent to send it a queued message (empty Enter) sometimes ending its run as cancelled before it read the message; the subagent now answers the message and keeps working Fixed sessions whose first reply starts with a todo plan getting a title without its icon and code: the plan's title refresh no longer replaces the card title that is still being generated Fixed generated titles that come out without an icon and code (a subagent's title, a title-model fallback, a malformed card reply) staying plain: they now get a card like /rename titles do Fixed running the test suite adding fixture titles (PLAN, renamed session, …) to your real ~/.omp/agent/history.db

@oh-my-pi/pi-natives

Added

Added a hiddenContent option to htmlToMarkdown: "drop" (default) omits hidden content, "reachable" keeps content the page can reveal such as collapsed sections and inactive tab panels, and "all" also keeps <template> and <noscript> content; other values throw (#16246) Added normalizePtyDimensions(cols, rows) to size screen emulators with the same effective dimensions as native PTY sessions (#16192 by @C-W-Z) Added LineMatcher, a native multi-pattern line matcher: matchLines returns a batch's matches column-wise as typed arrays (line, pattern, and the UTF-16 span of each named group in groupNames() order) Added PipeStreams and the streams option of Shell.run: every pipe the run opens keeps a readable copy of its newest megabyte, so a stage's output stays visible while a later stage (| tail) holds it back

Fixed

Fixed the output minimizer altering what ssh commands print in the bash tool: remote lines were cut to 120 characters and blank lines dropped; ssh's own login and connection notices are still stripped (#16314 by @will-bogusz) Fixed X11 background shortcuts and typing reporting Cancelled when you stopped them right after the last key went down: the key releases now always go out and the call succeeds (#16235 by @will-bogusz) Fixed wrapTextWithAnsi leaving rows half-empty in Chinese and Japanese text: CJK runs now break between characters to fill each row, closing punctuation such as ,。

!

」 never starts a row, and opening brackets never end one (#16219) Fixed a cancelled or timed-out macOS computer call finishing its lookup of a sheet, popover or menu window, up to 5,000 accessibility elements, before it stopped and let the next request run (#16233 by @will-bogusz)

@oh-my-pi/pi-tui

Added

Added IrcMessage.broadcast, set on each copy of an agent://all broadcast so recipients can tell it from a direct message (#16312 by @will-bogusz) AutocompleteItem.descriptionMatch marks a slash command matched only through its description; Editor Enter no longer applies such a row unless the user moved the selection onto it (#16265) ApprovalDialogComponent accepts grants and onGrant: grant choices above Approve Once, led by a toggle that keeps them across sessions (#16049 by @Peribunt) Added describeJobWidget/renderJobWidgetLines to draw a background job's widget natively and as terminal lines, describeJobTiles/renderJobTileLines to draw jobs as tiles (status, title, figure, widget), and renderSparkline (with peakBuckets/fitSparkValues) for one-row block sparklines

Fixed

Fixed transparent images with empty top rows disappearing inside Zellij (#16346 by @Bouska) Fixed bash output rewritten by the output minimizer skipping the per-line column cap (tools.outputMaxColumns), so a line wider than the cap reached the model whole; the raw output stays in its artifact (#16314 by @will-bogusz) Fixed the composer caret drifting one cell left per pasted image or video chip in terminals that draw the chip icon as a wide emoji (JetBrains terminal); the unicode preset now uses 📷/🎬 chip icons (#16270) Fixed Tern hiding user text sent with /skill:<name> inside a collapsed skill card; only the loaded skill prompt is hidden (#16311) Fixed SIXEL charts and images overlapping following content when their top rows scroll out of the viewport (#16245 by @JustasMasiulis).

@oh-my-pi/pi-wire

Added

Added min, max and dashed reference marks to bars/spark chart nodes, a tone per series column, and the common hovercard prop: a node tree Tern floats over the node while the pointer rests on it

What's Changed

  • fix(tui): clip SIXEL rasters at the viewport top by @JustasMasiulis in #16245
  • fix(tui): kept Enter from running description-only slash matches by @roboomp in #16268
  • fix(ai): preserved finalized native reasoning without deltas by @roboomp in #16229
  • fix(tui): used emoji-presentation glyphs for image and video chips by @roboomp in #16276
  • fix(tui): kept skill draft visible in tern transcript by @roboomp in #16320
  • fix(read): paged file reads at the spill threshold instead of eliding by @roboomp in #16280
  • fix(tui-debug): support native Windows without /bin/sh by @C-W-Z in #16192
  • fix(ai): redact credential headers in PI_REQ_DEBUG dumps by @will-bogusz in #16293
  • fix(coding-agent): keep a running tool's result when /compact, /new or a session switch aborts it by @will-bogusz in #16241
  • fix(coding-agent): persist snapcompact archive source text whole by @will-bogusz in #16282
  • fix(edit): checked every block line in the hashline seen-line guard by @roboomp in #16218
  • fix(coding-agent): reject conflict://* per-id blocks with literal values by @will-bogusz in #16267
  • fix(coding-agent): ask exec approval for ssh:// paths in find, glob and ast_grep by @will-bogusz in #16285
  • fix(natives): never cancel X11 uinput releases by @will-bogusz in #16235
  • fix(mcp): restricted oauth discovery to advertised auth servers by @roboomp in #16340
  • fix(ai): keep Factory Droid Gemini tool schemas valid when a parameter takes a string or a list by @will-bogusz in #16249
  • fix(ai): keep Factory Droid Gemini calls to long-named tools in later requests by @will-bogusz in #16283
  • fix(ai): send parallel Gemini tool results back in call order by @will-bogusz in #16259
  • fix(catalog): sent thinkingLevel for gemma 4 on google ai studio by @roboomp in #16354
  • fix(browser): recognize Puppeteer timeouts in release builds by @will-bogusz in #16266
  • fix(ci): fall back to the GitHub release in the Homebrew formula by @debanjanbasu in #16264
  • fix(coding-agent): rejected yield calls carrying fields beside data by @roboomp in #16323
  • fix(task): published parent-injected wake results by @roboomp in #16307
  • fix(task): relay a woken subagent's final report, not all its turn text by @will-bogusz in #16302
  • fix: address review follow-ups for #16323, #16340, #16249, #16241 by @H4vC in #16362
  • fix(coding-agent,tui): stop woken agents auto-replying to agent://all broadcasts by @will-bogusz in #16312
  • fix(coding-agent): deliver both of two asides sent together to an idle session by @will-bogusz in #16292
  • fix(coding-agent): return a just-finished job from a wait its completion notice cut short by @will-bogusz in #16301
  • fix(pi-shell,tui): keep ssh remote output intact in the minimizer by @will-bogusz in #16314
  • fix(natives): broke cjk runs between characters in wrapTextWithAnsi by @roboomp in #16228
  • fix(coding-agent): keep todo stripped from a warm-revived subagent by @will-bogusz in #16281
  • fix(natives): stop a cancelled macOS stale-ref search before it looks up the window by @will-bogusz in #16233
  • fix(coding-agent): stop a browser screenshot waiting on a DevTools session past its deadline by @will-bogusz in #16230
  • fix(coding-agent): tell a computer.control.acquire nobody could answer apart from a refusal by @will-bogusz in #16295
  • fix(ai): classify mid-stream message_delta drops as retryable by @lz-lunzi in #16341
  • fix(coding-agent): refresh scoped models after OAuth login by @lazy1523 in #16234
  • fix(coding-agent): restored legacy shell settings accessors by @roboomp in #16258
  • fix(coding-agent): export contentText and formatSkillsForPrompt from the legacy pi shims by @Jerryx333 in #16313
  • fix(mnemopi): kept /tan clones from re-injecting the parent recall by @roboomp in #16338
  • fix(coding-agent): match browser role/ exact names to the names observe() shows by @will-bogusz in #16252
  • fix(coding-agent): let grep fetch a web URL that carries a :raw selector by @yuzu-octopus in #16352
  • fix(coding-agent): search every resource in a semicolon list of internal URLs by @yuzu-octopus in #16353
  • fix(coding-agent): expand tilde in skill list custom directories by @yuzu-octopus in #16347
  • fix(tui): preserve transparent SIXEL image width in Zellij by @Bouska in #16346
  • fix(coding-agent): add the legacy skills prompt template by @H4vC in #16364
  • fix: address second round of review follow-ups by @H4vC in #16365
  • fix(coding-agent): constrain auto-thinking choices to supported model efforts by @savanne-kham in #16327
  • fix(catalog): move MiniMax M3.1 Flash rules to the launch id MiniMax-M3.1-Flash by @SaladDay in #16315
  • docs(changelog): describe the auto-thinking fix by its effect by @H4vC in #16367

New Contributors

@JustasMasiulis made their first contribution in #16245 @debanjanbasu made their first contribution in #16264 @lz-lunzi made their first contribution in #16341 @lazy1523 made their first contribution in #16234 @Jerryx333 made their first contribution in #16313 @SaladDay made their first contribution in #16315

Full Changelog: v18.12.2...v18.12.3

原文入口

阅读原文(github.com)

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

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

了解来源批准与收录规则