pi 这天只合入修复:恢复不再丢工具结果,grep 无视 ripgrep 配置,@ 补全转义正则元字符
2026 年 10 月 21 日,pi 合入三笔 PR,全部是修复:petrroll 的两笔修住恢复与 grep 里的失效路径,rwachtler 的一笔让 @ 文件补全不再误伤形如 [id].tsx 的文件名。
#11233 关闭了一个会污染会话后续所有 prompt 的恢复缺陷(issue #11227)。运行在可恢复的长度停止处停下时,恢复机制会用一次上下文编辑藏起失败的 assistant 消息,但 _omitRecoveryAttempt() 只隐藏调用方传给它的那些工具结果——而 _prepareRun() 里的提示前检查一个都不传。恢复后的会话于是可能带着一条 toolResult、其对应的调用却被藏掉了:OpenAI 直接拒绝这种请求,持久化的编辑也会弄坏之后的每一次提问。现在这个辅助函数自己在该 assistant 消息与下一条消息之间的投影上下文里找出匹配的工具结果,让所有调用方都把调用与结果一起隐藏——与运行结束路径、压缩切点以及 packages/durable 的 orderToolResults() 同一形状。_lastAssistantToolResults 这套管道与 _checkCompaction() 的 toolResults 参数随之移除。
#11230 让内建的 grep 工具不再受 ripgrep 配置摆布(issue #11203)。工具此前以继承的进程环境启动 rg,若 RIPGREP_CONFIG_PATH 含 –fixed-strings,声明为 literal: false 的搜索会被悄悄改成字面匹配——结果残缺,且毫无报错。如今 rg 以 –no-config 运行,作者用 ripgrep 15.2.0 验证过该参数能完全中和这个环境变量,literal、glob、limit 等工具契约在任何机器上都固定一致。随附的审计清点了其余内建工具:fd 没有配置文件或环境变量机制,bash 与 powershell 本就有意继承完整环境,ls、read、edit、write 则不启动任何子进程;.gitignore、.ignore 与全局 git excludes 对 grep 和 find 依然生效,这是有意为之且已成文。想要自定义 grep 行为的用户可以用扩展包一层,或经 bash 工具调用 rg。
当天最早合入的 #11212 出自 rwachtler,修复文件名长得像正则时的 @ 文件补全(issue #10972):不含斜杠的查询现在会先转义再交给 fd,[id].tsx 与 (group).ts 按字面匹配、不再被当成模式,buildFdPathQuery 里一个不可达的 segments.length === 0 守卫也一并删除。
三笔都还没有搭上任何 release:v1.3.0 于 10 月 15 日切出,比这三笔早六天,用户要等下一个 tag 才能用到;在此之前,diff 与回归测试都在各 PR 页面上。