扩展模型注册表开放流式 API,Copilot GPT-6 路由与会话树压缩竞态同批修复
2026 年 9 月 7 日,三个面向用户的 PR 合入 pi 编码代理主线。和之前几批一样,它们都还停在主线上,未进入任何已发布版本;当天另有两个合并属于仓库基建:实现级文档评测,以及横跨 prompts、文档与代码的仓库链接更新。
功能项是 rwachtler 的 #9272:面向扩展的模型注册表 ctx.modelRegistry 在既有的 complete(...) 之外,新增了 stream(...) 与 streamSimple(...)。在此之前,需要逐 token 增量的扩展只能直接调用 pi-ai 兼容层的 stream(),完全绕开识别 pi.registerProvider() 的 provider 组合器——只要模型的 api id 只存在于扩展层,就会报 “No API provider registered for api:
petrroll 的 #9253 修复 GitHub Copilot GPT 模型的路由(issue #9209):github-copilot/gpt-6-astra 此前被发往 /chat/completions,而 Copilot 对该端点直接返回 400 拒绝——因为路由选择把 gpt-5* 当作 Responses 模型,却没覆盖 gpt-6*。如今 GPT-6 系列走 GPT-5 已有的同一条 Responses 路径。PR 也说明了这一改动的前瞻性:GitHub 目录中已无 GPT-4 模型,按代际路由不会再波及它们。
acmerfight 的 #9179 堵住一个会话树竞态(issue #9178):compact() 先从当前分支准备摘要,再等待扩展钩子或模型返回;若 navigateTree() 恰好在等待期间移动了叶子节点,appendCompaction() 就会把旧分支的摘要连同指向它的 firstKeptEntryId 挂到新分支上,下一轮 provider 上下文可能只剩一条孤零零的摘要。现在压缩(或另一次树导航)进行期间的树导航会被直接拒绝,压缩结果与保留上下文留在准备它们的分支上,两条竞态路径都有回归测试覆盖。这一拒绝行为与 #7383 为手动压缩引入的守卫一脉相承,并与 #9155(反向顺序:树导航期间发起 prompt)互为补充。
三项改动都尚未发版——要等 v0.85.1 之后的下一个 release 才会进入 npm;在此之前,GitHub 上的 #9272、#9253 与 #9179 页面已带有完整的 diff 与测试记录。
source: https://github.com/earendil-works/pi/pulls?q=is%3Apr+merged%3A2026-09-07+is%3Aclosed