2026 2026年10月20日 27 min · 7.9k chars by yxc023

GitHub 调研周报 2026-10-20

扫描窗口:2026-09-08T09:23:29Z → 2026-10-20T00:30:19Z(共 41.7 天)| 基准来源:上次报告 2026-10-19

2026-10-20 GitHub 调研周报

扫描窗口:2026-09-08T09:23:29Z → 2026-10-20T00:30:19Z(共 41.7 天)| 基准来源:上次报告 2026-10-19 本期新增内容全部落在 2026-10-19T00:30 之后的约 24 小时。这一天的形状是「成本进入 PR 正文」+「一个模型契约同时打断两个仓库」。

本期速览

  • vectorize-io/hindsight: 10.5 小时 49 个 commit + 20 个 PR 合并,结束自 2026-10-16T19:58Z 起约 2 天 13 小时的 main 静默,并打出 coding-agents v0.8.2。上期「代码停了、注意力没停」的判断在本期被推翻——star 增速也从 +807 → +370 回升到 +432。

  • MiniMax-M3.1 的「思考不可关」在同一天改了两个仓库的代码:pi d2e7d8b 加入 MiniMax-M3.1-Flash(关掉旧 MiniMax 模型),hindsight #5774 把 thinking 从 disabled 改成 adaptive——在 M3.1 上 retain / consolidation / reflect 的每一次 LLM 调用都返回 HTTP 400(error 2013),即该 provider 整体不可用。这是本期唯一一个跨仓库的、由同一个外部契约触发的事件。

  • anomalyco/opencode #56983 把成本写成了美元:一个重度 Studio 安装的 24h opencode.db(Opus 5.5)测出 517 次完整 cache 重写 / 天 = $502/天,其中图像预算这一条占 150 次、$101/天(20%),是 subagent 的第二大成因。根因是 boundImages 每次请求重算切点,一有新截图就把切点往前推一格,Anthropic cache 只能复用 tools + system。

  • 同一天 #57091 处理了同一个 cache 主题的另一面:压缩原本只把 keep 之前的旧部分发给模型,请求在 tail 处与正常请求分叉,只能复用更早前缀;改成发整个当前对话后延长了可复用前缀。两条 PR 都出自同一份 24 小时 usage 账单。

  • 压缩(compaction)在两个 harness 同一天各自坏掉:opencode #57187 在接近 context limit 时把整段对话(~128.8K / 131,072)当摘要请求,max_tokens 只剩 2,254,thinking 模型把预算全花在 reasoning 上、finish_reason=length,无重试、无输入截断,会话永久死在 context limit;pi #11143 的 _compactBeforeNextAssistantResponse() 跳过 _sanitizeProjectionMessages(),重复 tool_result 打到 Anthropic 返回 400,自动重试每次都报同一条错。

  • earendil-works/pi 的 telemetry 从「契约」变成「实现」:上期刚补完 propagation + metrics 契约,本期 d9025a5 落地 SQLite telemetry store(StoredSpan/StoredTrace、findTraces 带 name/attribute/error/时间窗过滤 + 游标分页、metrics 按 series 每 10s 聚合、1s 批量 flush + retention + 有界队列并计数丢弃),2ec55d8 补上 pi.ai.request/pi.ai.poll 与 pi.durable.submit/pi.durable.phase span。

  • pi 同日落下第二个破坏性变更:5c1736f 让 checkpointWhen 在 defineDoc / defineDocFamily 上成为必填且不提供默认值(Breaking change)。在上期「schema v2 迁移后不可回滚」之后,Durable 文档 API 又被收紧一次。

  • 「静默降级」第四次成为主要缺陷形状,且这次跨三个仓库:pi #11124 modelTools 对着空 registry 过滤,子 agent 静默拿到零工具,无报错无警告,模型退化成把工具调用当纯文本输出(OpenAI-completions adapter 不解析成结构化 toolCalls);opencode #57230 openai-compatible 恒注入 stream_options + store,文档给的 includeUsage: false 变通法在 v2 失效(resolveSDK() 只读 provider.options,而 v2 已把它归一化进 settings);hindsight #5771 embedding/rerank 从不计量,hosted 花费在 llm-requests API 里完全不可见。

  • anomalyco/opencode 的 open issues 一天从 4668 掉到 4491(−177),是本清单单期最大变动;open PR 已触顶(?per_page=100 返回满 100)。同期 d2c4c38 只在连接时才轮询 Console 配置、b154f6a 停止轮询 DigitalOcean routers——轮询面在被系统性收窄。

  • ACP 连续第 5 天只有 bot 变动:4 次 docs: update registry agents + 5 个 dependabot PR。唯一的实质提交是 #2427 把 acp-sdk (Ruby) 加进 community libraries——上期它还是「仍 open」状态,本期已合并。registry 内部顶替:claude-agent-acp 0.93.0→0.94.0、2.169.0→2.170.0、copilot-cli 1.0.98→1.0.100、nova 1.1.55→1.1.57。

  • agegr/pi-web 连续第 2 天零活动:最后 commit 停在 2026-10-18T13:00(约 35.5 小时),0 PR 合并,而 open issues 从 22 升到 28——上期「唯一关闭快于新增」的仓库,方向反转。

  • 行业侧:hindsight 的 benchmark 叙事正在被外部反复质疑。其 91.4% LongMemEval 数字出自公司 CEO 与一位 Virginia Tech 教授合著的论文;9 月 21 日 release 把自带的评测脚本换成了一个持续更新的在线看板(benchmarks.hindsight.vectorize.io)。多个外部站点记录「两个外部实验室自称复现过」与「star 数跑在自家作者发布的分数上」这两点。

各仓库详情

vectorize-io/hindsight

Agent 长期记忆系统(Agent Memory That Learns),MIT,四类隔离记忆网络 + retain/recall/reflect/consolidate 循环| stars: 51663(上期 51231,+432)| open issues: 157(上期 162,−5) | 默认分支: main | 最近 push: 2026-10-19T21:53:48Z | 主页: https://hindsight.vectorize.io/

近 41.7 天 release 重点:

  • v1.0.0(2026-10-13)— 1.0 GA

  • coding-agents v0.8.2(2026-10-19T16:39,16df02a release(coding-agents): v0.8.2)— 子包发布,本期窗口内唯一新 tag

    • 配套 5529f9b fix(coding-agents): append only new commits to the git-log document (#5711):git-log 文档只追加新 commit,不再每次重放整条历史

(如无 release:“窗口期内无 release。”)

其他重要 commits / PRs(按重要性挑选):

  • c5f585f 文档 — docs(api): runbook for splitting a memory bank in place (#5803) (@benfrank241, 已合并) — 原地拆分 memory bank 的操作手册
  • cfef79e 新特性 — feat(documents): per-document change history rebuilt from operations (#5638) (@nicoloboschi, 已合并) — 改一条事实(哪怕只改日期)、追加、重新 ingest 或 invalidate 都会删掉建在它上面的 observation,而被删的行不留任何痕迹,导致一次把两个无关事件合并掉的 rebuild 事后无法追查。修复后每次变更在对应 operation 的 result_metadata.document_events 上记 id 与计数(绝不记文本,id 列表上限 100)
  • a8c5802 provider 修复 — fix(minimax): send thinking=adaptive to MiniMax-M3.1, which rejects disabled (#5718) (@nicoloboschi, 已合并) — provider=minimax 一直发 thinking: {"type":"disabled"}(来自 #2558),而 M3.1 始终思考并以 HTTP 400(error 2013) 回应,导致该 provider 上每一次 retain / consolidation / reflect 调用全部失败。修复后名字含 m3.1 的模型发 adaptive,M3 与 M2.x 仍是 disabled;显式 *_LLM_EXTRA_BODY 仍以 setdefault 胜出
  • 878adae 并发修复 — fix(consolidation): lock in the writers’ order so it cannot deadlock against retain or delete (#5433) (@nicoloboschi, 已合并) — 不只是 pgvectorscale:consolidation 对同一 bank 的 batch facts 先 share-lock、再锁它要改写或删除的 observation、最后盖 batch 戳;delta retain 先锁 document、sweep 锁住建在重切 facts 上的 observations、再重标幸存 facts(可能就是那个 batch)。双方各持对方下一步需要的东西,普通 Postgres 上是行锁死锁,pgvectorscale 的 DiskANN 又加了第二条路径
  • 0646d3c 并发修复 — fix(consolidation): lock in the writers’ order (#5433) 的同批修补:dbb86c9 test(consolidation) 给死锁测试的 fake engine 补上 embedder(#5797 起因是 test_retain_consolidation_deadlock 在 main 上因 a4db343 引入的批内单次 embedder 调用而失败)
  • b463785 降级修复 — fix(typesafe): shrink and retry a request Jev finds over its window, stop dropping decision answers (#5794) (@nicoloboschi, 已合并) — 我们用自己的 tokenizer 估 TypeSafe 请求大小,而 Jev 对混合文字(emoji、CJK、阿拉伯文、重音)约计 2×。26k 预算内fit的请求可能返回 400 max_tokens_exceeded:reranker 侧 recall 变成 HTTP 500;decision model ask_all 侧失败只记日志,这些答案被静默丢弃,decision reranker 再把对应候选排到最后。改为超限时按 26k → 13k → 6.5k → 3.25k 重建请求再抛
  • 0619793 新特性 — feat(operations): retry runs a deferred operation now (#5772) (@nicoloboschi, 已合并) — provider 报配额重置时间时 worker 会把 operation park 到那一刻,但provider 会高估窗口(#5684 看到「65 小时后重置」的配额约 7 小时就回来了),且 retry 拒绝 deferred op(status is 'pending', expected 'failed' or 'cancelled')——用户看得到它被 park,却跑不了它
  • 7f18b6f 成本 — fix(embeddings): defer operations when OpenAI embeddings run out of credits (#5746) (@nicoloboschi, 已合并)
  • 64c83a0 新特性 — feat(api): tag globs in observation_scopes + per-bank default_observation_scopes (#5666) (@nicoloboschi, 已合并)
  • 31520ca 修复 — fix(mental-models): sibling pages no longer rewrite a document whose memory scope is empty (#5728) (@nicoloboschi, 已合并)
  • 7c73b65 性能 — perf: a4db343 perf(consolidation): embed a batch's recall queries in one embedder call (#5769) (@nicoloboschi, 已合并) — 一批 recall query 合并进一次 embedder 调用
  • 668b159 故障转移 — fix(llm): mental-model refresh inherits the global failover chain (#5780) (@nicoloboschi, 已合并)
  • 856b3fc 性能 — fix(api): stop a big graph read from freezing the event loop (#5703) (@nicoloboschi, 已合并)
  • 0ee8b17 可用性 — fix(control-plane): make the control plane usable on phones (#5776) (@nicoloboschi, 已合并) — 关闭 sghng #5736(竖屏下 sidebar 占 66% 屏宽、页面横向滚动、header 控件够不到、iOS 主屏图标是字母块)
  • b18f425 部署 — fix(api): honor a systemd CPUQuota and bound ONNX Runtime threads (#5725) (@nicoloboschi, 已合并)
  • 0686d3c 依赖 — fix(deps): stop the win32-only onnxruntime cap from locking every platform (#5770) (@nicoloboschi, 已合并) — 让 slim server 能在 Python 3.14 上安装
  • 231b44e 内存 — fix(transfer): export and import a bank’s growing tables a page at a time (#5737) (@nicoloboschi, 已合并) — 关闭 lusoris #5737:json.dumps 整个行列表把大 bank 的 API OOM 杀掉
  • 04f0345 迁移 — fix(migrations): build a new schema’s indexes plainly so provisioning never waits on other transactions (#5700) (@cdbartholomew, 已合并)
  • 1a3c5e8 API — fix(api): return consolidation state on GET /memories/{id} (#5767) (@nicoloboschi, 已合并) — 关闭 a-min-7 #5730

社区讨论 / 行业方向:

信号观察:

  • 「注意力与代码脱钩」在上期成立、本期反转。 main 静默区间实测为 2026-10-16T19:58Z → 2026-10-19T09:07Z(约 2 天 13 小时),随后 10.5 小时内 49 个 commit、20 个以上 PR 合并。star 增速走成 +807 → +370 → +432,在 +370 触底后回升。
  • 本日 49 个 commit 里约 60% 是 Nicolò Boschi 一人提交,且几乎全是 fix/perf;这类形状通常对应 1.0 GA 之后的第一波真实负载问题。
  • 死锁仍是头号结构性缺陷:#5433 的 PR 正文直接画出 retain vs consolidation 的锁顺序图,且指出 pgvectorscale 的 DiskANN 会加出第二条死锁路径。合并当天就新开 5 条 Flaky: issue,其中 3 条是死锁或 teardown 期错误(#5806、#5805、#5781)。
  • 成本可见性被官方承认为缺口:新 issue #5771 指出 llm_requests 只覆盖 chat/completion,embedding 与 reranker 调用从不记录,hosted 花费无法归因到 bank、operation 或时间窗。这与 opencode 本期把美元写进 PR 正文是同一趋势的两端。
  • nicoloboschi 自己在 issue 区公开挂 flaky 清单(#5806、#5805、#5804、#5786、#5785、#5765、#5764、#5752)——故障透明度高于本清单其它仓库。

anomalyco/opencode

通用开源编码 agent,MIT,提供 TUI、桌面端、Web 与共享后台服务| stars: 217795(上期 216573,+1222)| open issues: 4491(上期 4668,−177) | 默认分支: dev | 最近 push: 2026-10-20T00:27:42Z | 主页: https://opencode.ai

近 41.7 天 release 重点:

窗口期内无新 release(最新为 2026-10-16 的 v1.19.3;V2 线 2.0.32 同日)。本期全部产出在 dev 分支 unreleased。

其他重要 commits / PRs(按重要性挑选):

  • #56983 成本修复 — fix(core): keep the image budget cut stable so the prompt cache survives (@kitlangton, 已合并,closes #51985) — boundImages 每次请求从头重算图像切点;会话内联图超过 25 MiB 后,每来一张新截图就把切点往前推一格,替换掉历史中间的一条消息,Anthropic cache 只能复用 tools + system。实测数字:24h opencode.db(Opus 5.5)517 次完整 cache 重写 = $502/天,本条占 150 次、$101/天(20%),是 subagent 第二大成因;一个 concept-art subagent 连续 77 步各重写 50–60k tokens。
  • #57091 成本修复 — fix(core): summarize the whole conversation during compaction (@Filip, 已合并,closes #52761) — 压缩原本只发 keep tail 之前的旧对话再追加摘要提示,请求恰好在 tail 起点与正常请求分叉,只能复用更旧的前缀缓存;这些条目过期后(最新请求的前缀是唯一保温的),压缩要为整段历史付全价 cache-write。改成发整个当前对话以延长可复用前缀
  • #57203 契约变更 — refactor(schema): remove recent from compaction messages and events (@rekram1-node, 已合并) — 自 #56954 起摘要压缩改用 metadata.firstKeptMessageID 并恒写 recent: "",字段却仍留在 public contract 里,于是每个 API reader / client / plugin 都看到一个只为旧压缩记录才有意义的空串。本 PR 从 schema、OpenAPI、生成客户端、plugin 四处移除
  • #56947 能力回补 — feat: restore the todowrite tool behind an experimental flag (@rekram1-node, 已合并,refs #42421) — 为对齐 V1 恢复 todowrite,默认关闭,需 {"experimental":{"todo":true}}。与 V1 同样的整表形状 {todos:[{content,status}]},priority 被丢弃;模型拿到的是短摘要而非整表;不新增存储,列表就是最近一次调用。迁移过来的 V1 会话提示语从「must not be called」改为「no longer available by default」
  • #56245 平台能力 — feat(core): enable persistent PTYs on Windows (@jlongster, 已合并) — @opencode-ai/pty 0.2.0 → 0.3.1,新增 Windows 原生 daemon(命名管道 + ConPTY),发布 @opencode-ai/pty-win32-{x64,arm64}。移除 Windows 门控,PersistentPty.available 在 Bun 与 Node 上均为 true,服务端现在在每个平台都上报 persistentPty 能力
  • #54090 静默失败 — fix(core): drop undefined permission metadata values before publishing requests (@kitlangton, 已合并,closes #37650) — glob/grep 权限挂起且模型省略可选输入时,GET /api/session/:id/permission 返回 HTTP 400(glob.ts/grep.ts 把 input.hidden/input.limit 直接拷进 metadata,省略即 undefined)。任何通过 permission.list 补齐挂起权限的客户端(会话打开、重连、第二个客户端、opencode run --session、Drive 的 multi-tool-interleavings 探测)都会拿到错误而看不到待处理请求,只有实时 permission.asked SSE 事件能过去,因为它走 JSON.stringify
  • #57181 事件作用域 — fix(core): publish sdk.plugin.updated globally across locations (@kitlangton, 已合并) — SdkPlugins 是个 makeGlobalNode,其 docstring 明写「注册时发布一个无位置更新,让每个已启动的 Location 从共享 store 重载插件代次」,但 bus.publish(Updated, {}) 漏了 {global:true},导致携带 Location.Service 的 fiber 里调用 sdk.register(...) 只会刷新单个 Location
  • #57175 轮询收敛 — fix(core): stop polling DigitalOcean routers (@opencode-agent[bot], 已合并)
  • d2c4c38 轮询收敛 — fix(core): only poll Console config while connected (#57201) (@Aiden Cline, 已合并)
  • #57166 噪音 — feat(console): drop enterprise form spam before it reaches Salesforce (@opencode-agent[bot], 已合并)
  • #57189 + #57112 桌面端 — refactor(desktop): drop Drive-specific service handling(@James Long)/ feat(desktop): preserve Drive-managed development state(@James Long, 已合并)
  • #56888 能力 — feat(voice): add Gemini Live ephemeral token support (@Kit Langton, 已合并)
  • #57151 TUI — fix(tui): open /models on the current model and keep the server’s model order (@kitlangton, 已合并)
  • a15de38 修复 — fix(merman): treat apostrophes in flowchart labels as text (#57060) (@opencode-agent[bot], 已合并)

社区讨论 / 行业方向:

信号观察:

  • open issues 从 4668 掉到 4491(−177),是本清单单期最大变动;同时 open PR 查询 ?per_page=100 已返回满 100,合并队列可能已饱和。
  • star 增速 +1222 与上期 +1265 基本持平,是本清单绝对值最高,但相对增速在 opencode 自己的体量下已明显放缓。
  • 「成本」第一次以美元/天出现在本仓库的 PR 正文里,且两条 PR(#56983、#57091)指向同一个根因族:prompt cache 命中率。这与上期「成本意识进入 PR 正文」是同一条线的延续,但单位从 token 数升级到账单金额。
  • 压缩是本日唯一被三条改动 + 一个严重 issue 同时击中的子系统(#57091 改请求形状、#57203 删契约字段、#57187 预算塌陷),且这些改动互为因果:#56954 引入 firstKeptMessageID → #57203 清理遗留字段 → #57091 修 tail 处的缓存分叉,而 #57187 是同一处的反面。
  • 轮询面在系统性收窄:停止 DigitalOcean routers 轮询、Console config 仅在连接时轮询、plugin 更新从 location-scoped 改成 global——都在减少「后台无条件发请求」。
  • 新 issue 里「静默降级」占比高:#57210(TUI model picker 漏掉全部 ollama 模型,CLI 与 API 都能列出来)、#57204(Location plugins did not finish activating)、#57180(tool-result metadata.diagnostics 在 TUI 有、web timeline 丢)、#57185(切换 agent 后 delegation 工具在 native agent 上仍可见)。
  • iceteaSA 一个人提交了 6 条 Plugin API 请求(#57217、#57216、#57214、#57213、#57212、#57215),指向同一件事:plugin 只能在 host 存储之前介入,无法干预或观察消息/part 的写入。

earendil-works/pi

AI agent 工具包:统一 LLM API、agent loop、TUI、编码 agent CLI;MIT,Pi 生态的核心 harness| stars: 116420(上期 116152,+268)| open issues: 349(上期 347,+2) | 默认分支: main | 最近 push: 2026-10-19T22:14:04Z | 主页: (仓库未填 homepage)

近 41.7 天 release 重点:

窗口期内无新 release(最新为 2026-10-15 的 v1.3.0,已 5 天)。本期全部产出在 unreleased。

其他重要 commits / PRs(按重要性挑选):

  • d9025a5 新特性 — feat: SQLite telemetry store in Chord, shared TelemetryStore and trace renderer (@Mario Zechner) — 上期落地的 telemetry 契约,本期有了存储与渲染:StoredSpan/StoredTrace/TelemetryStore(findTraces 支持 name、attribute、error、时间窗过滤 + 游标分页;getTrace;findMetrics),trace id 随 carrier 传递,renderTrace 放在 /render 子路径;内存适配器实现该 store,适配器契约改为信任强类型输入(malformed-input conformance 用例被删除)。@earendil-works/chord/telemetry-sqlite 建在 chord/sqlite 之上:settled spans 带内联 events 与 links,metrics 按 series 每 10 秒聚合、1 秒批量 flush + retention、有界队列(丢弃并计数)
  • 2ec55d8 新特性 — feat: Durable and pi-ai telemetry; Context.telemetry is always a span (@Mario Zechner) — pi-ai 新增 AI_TELEMETRY_SCHEMA,pi.ai.request / pi.ai.poll span 围绕 Models 请求(经一个 lazyStream observer,不改 provider),first_chunk 与 block 事件按非每 delta 发出,usage/cost 作为结束属性,provider_error 带有界长度的 message,aborted 保持 ok;选项从 telemetryContext 改名为 telemetry(一个 parent span)。chord/context 的 Context.telemetry 恒为 TelemetrySpan(NOOP 默认),withTelemetry 接收 span。durable 新增 DURABLE_TELEMETRY_SCHEMA:pi.durable.submit(输入自起一条 trace 并 link 到调用方)与每个 task phase 的 pi.durable.phase span,carrier 随 submission 与 task 存储(TaskOptions.trace、links),entry/submission/checkpoint/replay/report 事件均在 commit 之后发出,恢复的任务仍留在原 trace 内,失败 phase 带固定分类与有界 message
  • 5c1736f 破坏性变更 — feat: checkpointWhen is required on Durable document definitions (@Mario Zechner) — commit message 首行即写 Breaking change::defineDoc 与 defineDocFamily 现在必须提供显式的 checkpointWhen 谓词,不提供默认值,内置文档、示例、测试与 triage state 均已补策略
  • d2e7d8b 模型 — feat(ai): add MiniMax-M3.1-Flash and hide only old MiniMax models (@David Brailovsky) — 同时关闭 SaladDay #11121
  • e86b054 修复 — fix(ai): OpenRouter reasoning test uses deepseek-r1-0528, deepseek-r1 left the catalog (@Mario Zechner) — 模型下架后测试未跟进,是同一类契约漂移
  • 73f8de8 修复 — fix(ai): recover from Copilot request-size overflow (@Petr Houška, PR #11016)
  • 0ed1b04 终端 — feat(tui): detect Rex terminal for OSC 8 hyperlinks (@Petr Houška, PR #11150) — 关闭 nihaals #11131
  • 61060dd + 28bea00 Windows 修复 — resolve Windows shells from installation directories(#9501)/ accept Windows Store shell aliases(#9504)(@Petr Houška)
  • e28e708 — ignore .pi/settings.json (@David Brailovsky)

社区讨论 / 行业方向:

信号观察:

  • 增长从上期的急跌中回升:+178 → +268 / 24h(约 +50%),但仍远低于两期前的 +509。open issues 持平在 349(+2),85 个 open PR。
  • telemetry 连续两期推进,方向从「约定」→「落库 → 可渲染」。上期包 README 写死的立场(no exporter、no global current-span state、no telemetry backend 依赖)本期依然成立,但已经配上了 SQLite store 与 renderTrace。Context.telemetry 从 NOOP 默认改成「恒为 span」,telemetryContext 更名为 telemetry——契约名字在两个包之间统一了。
  • 24 小时内落下第二个破坏性变更(checkpointWhen 必填)。继上期 schema v2 迁移「不可回滚」之后,Durable 文档 API 又收紧一次;两次都明确写在 commit 首行而非 release notes——破坏性变更目前只活在 git 历史里,尚未随 release 固化。
  • 「静默降级」第四次出现:#11124 modelTools 过滤已注册工具集,若目标工具从未经 registry.install(...) 注册,子 agent 静默拿到零工具,无报错无警告,模型退化为把工具调用当纯文本输出,而 OpenAI-completions adapter 不把它解析成结构化 toolCalls——最终表现是模型「说话」而不是「干活」,没有任何一层报错。
  • 本仓库 issue 关闭速度仍极高(本日新 issue 中绝大多数已 closed),本期 4 个合并 PR 全部来自同一外部贡献者 petrroll,且集中在 Windows 与终端两个窄面——外部贡献正在被引导到平台适配,而不是核心架构。
  • #11138(pi-ai 跨轮保留 provider server-tool blocks)、#11135(MCP sign-in refresh 与 connection refresh 竞态导致清除刚轮换的凭据)、#11143(压缩路径跳过 sanitize 导致 Anthropic 400 且重试无效) 三条同日关闭,指向同一个主题:provider 契约(Anthropic 的 tool_result 唯一性、MCP 的 refresh token 轮换)在 pi 内部有多条路径需要各自满足。

agentclientprotocol/agent-client-protocol

连接任意编辑器与任意 agent 的协议(LSP 之于编辑器之于编程 agent)| stars: 4468(上期 4464,+4)| open issues: 40(上期 37,+3) | 默认分支: main | 最近 push: 2026-10-19T23:44:05Z | 主页: https://agentclientprotocol.com

近 41.7 天 release 重点:

窗口期内无新 release(最新为 2026-10-16 的 v1.12.0)。

其他重要 commits / PRs:

  • 58bf805 文档 — docs: add acp-sdk (Ruby) to community libraries (#2427) (@Jake Bottrall, 已合并) — 上期这条还在 open 队列里,本期已合并;窗口内唯一的非 bot 提交
  • 2f5a9a0 / 891600e / 17bb882 / beac4ba — docs: update registry agents (#2441 / #2439 / #2432 / #2431) (@acp-release-bot[bot]) — 全部是 registry.mdx 的版本号顶替
  • 91d6cc2 — chore(deps): bump the minor group with 20 updates (#2438) (@dependabot[bot])
  • adc1552 / a5ba012 / 70e7698 / cb44acf — dependabot 4 项(actions/create-github-app-token 3.2.0→3.3.0、release-plz/action 0.5.141→0.5.142、dtolnay/rust-toolchain、taiki-e/install-action 2.87.27→2.87.29)

社区讨论 / 行业方向:

  • 窗口期内该仓库无新增 issue(GitHub 返回空)。
  • 行业侧无新的独立讨论;上期已记录的 Block 播客、第三方 ACP client/agent 目录、Hivebook 的 v1/v2 对照表在本窗口无更新。

信号观察:

  • 连续第 5 天只有 bot 变动:10 个提交里 9 个来自 acp-release-bot 或 dependabot,唯一的人类提交是一条文档。
  • registry 内部版本推进:claude-agent-acp 0.93.0→0.94.0、2.169.0→2.170.0、copilot-cli 1.0.98→1.0.100、nova 1.1.55→1.1.57,registry 日期 2026.10.16→2026.10.18。
  • star 增速 +4 / 24h 仍是本清单最低,open issues +3(40)。
  • 上期的判断(叙事在扩张、代码在沉淀)在本窗口未变:唯一的实质变化是一个 Ruby SDK 被登记进 community libraries。

agegr/pi-web

pi coding agent 的 Web UI| stars: 7516(上期 7484,+32)| open issues: 28(上期 22,+6) | 默认分支: main | 最近 push: 2026-10-18T13:00:00Z | 主页: (仓库未填 homepage)

近 41.7 天 release 重点:

窗口期内无新 release(最新为 2026-10-15 的 v0.12.2)。

其他重要 commits / PRs:

  • 窗口期内零 commit、零 PR 合并。 最后三个提交停在 2026-10-18:
    • df163cd feat(models): match provider ids in the model and Add provider searches (#1308)
    • 35af710 feat(terminal): follow the chat font size in the terminal (#1329)
    • fbcbc31 feat(agents): show running subagents on the top bar’s Agents badge (#1311)
  • 新 issue(本日):
    • #1345 Extension commands sent as prompt trigger a spurious “Session complete” Web Push(@moshouhot, open)
    • #1335 macOS 下 Ctrl+Alt+N 新建会话快捷键永不触发(Option+N 是死键,e.key 为 "Dead")(@jianzhangg, open)
    • #1334 [Session Info] Active Time stays frozen at the last session snapshot while token totals keep updating(@Popcornnnnnnnn, open)
    • #1338 UI 界面优化建议(@arch3rPro, open)

社区讨论 / 行业方向:

  • 窗口期内未检索到新的公开讨论。

信号观察:

  • 连续第 2 天零活动:最后 commit 停在 2026-10-18T13:00,距今约 35.5 小时;commits?since=2026-10-19T00:30:00Z 返回 0 条,closed PR 合并 0 个。
  • open issues 从 22 升到 28(+6),方向与上期反转——上期它是本清单唯一「关闭速度快于新增」的仓库(43→22),本期这个优势消失,且是在完全没有开发活动的情况下发生的。
  • star 增速 +32(上期 +18),略有回升,但绝对量仍是本清单最低。
  • 新 issue 全部来自中文用户,且集中在快捷键(死键)与静默状态:#1345 的「扩展命令被当成 prompt 发出,触发一次假的『Session complete』推送」与 #1334 的「Active Time 冻结而 token 继续累加」是同一类——界面显示的状态与实际状态脱节,且无提示。

yxc023/yxc023.github.io

个人博客站(Astro),同时是本报告的发布目标仓库| stars: 1 | open issues: 27 | 默认分支: master | 最近 push: 2026-10-20T00:10:46Z | 主页: (仓库未填 homepage)

近 41.7 天 release 重点:

窗口期内无 release。

其他重要 commits / PRs:

  • 本仓库的提交来自报告同步脚本,非人工内容。

信号观察:

  • stars: 1 | open issues: 27 —— 27 个 issue 是历次自动同步留下的,不是待办信号。

跨项目观察

  1. 一个模型契约在同一天改了本清单两个仓库的代码,而失败模式是「整个 provider 不可用」。 MiniMax-M3.1 强制 thinking: adaptive(发 disabled 返回 HTTP 400 error 2013)在 pi 表现为「加一个模型、隐藏旧模型」(d2e7d8b),在 hindsight 表现为「retain / consolidation / reflect 每次调用都 400」。差别在于 hindsight 的 LLM 调用全部走这条路径,因此没有部分可用状态。同一时期 pi 还修了 e86b054(deepseek-r1 下架后测试未跟进)——模型目录的生命周期正在变成各仓库必须自己维护的契约。

  2. 成本第一次以「美元/天」出现在 PR 正文,并且两条 PR 同源。 opencode #56983(图像预算切点抖动,$101/天,占实测 $502/天问题的 20%)与 #57091(压缩请求在 tail 处分叉缓存前缀)出自同一份 24 小时 usage 账单。hindsight 侧的对应动作是 #5746(OpenAI embeddings 欠费时 defer)与新 issue #5771(embedding/rerank 从不计量,hosted 花费在 API 里不可见)。四个仓库里有三个在同一天处理「花了多少钱、花在哪里」,但只有一个真的把账单写进了 PR。

  3. 压缩(compaction)成为跨 harness 的共同故障面。 opencode 同日三条改动(#57091 改请求形状、#57203 删 recent 字段、#57187 预算塌陷致会话永久死锁)与 pi 的 #11143(压缩路径跳过 sanitize,重复 tool_result 打 Anthropic 400 且自动重试每次报同一条错)。两边都不是「模型不够强」而是同一段代码有两个以上路径必须同时满足上游约束,而只有一条路径做了 sanitize / 预算检查。

  4. 「静默降级」第四次成为主要缺陷形状,本期横跨三个仓库四个缺陷。 pi #11124(modelTools 对空 registry 过滤 → 子 agent 零工具无警告)、opencode #57230(v2 把 provider.options 归一化进 settings,导致文档给的 includeUsage: false 变通法失效)、opencode #57210(TUI model picker 漏掉全部 ollama 模型)、hindsight #5771(embedding/rerank 不计量)、hindsight #5794(decision model ask_all 失败只记日志,被丢弃的答案让 reranker 把候选排到最后)、pi-web #1334(Active Time 冻结而 token 继续涨)。共同形状:配置或流程看起来在工作,实际某一步被跳过,且跳过不产生任何可见信号。

  5. 上期「注意力与代码脱钩」的判断在 hindsight 上被推翻,但换成了另一种形态。 静默区间实测 2026-10-16T19:58Z → 2026-10-19T09:07Z(约 2 天 13 小时)后,10.5 小时内 49 个 commit、20 个以上 PR 合并。star 增速 +807 → +370 → +432,在 +370 触底后回升。这不是「持续开发」,而是「1.0 GA 后的负载问题一次性集中回流」——本期 49 个 commit 里约 60% 来自单人以 fix/perf 为主。

  6. pi 的 telemetry 走完了一个完整闭环,而 opencode 同期在同一主题上选了另一条路。 pi 两期连做:先是 propagation + metrics 契约(并明写「no exporter, no global current-span state, no backend 依赖」),本期是 SQLite store + findTraces 游标分页 + renderTrace,同时把 Context.telemetry 改成恒为 span、telemetryContext 更名为 telemetry。契约被统一了,但「显式注入而非全局埋点」的立场没有松动。

  7. 破坏性变更开始从 git 历史里冒出来,但还没进 release notes。 pi 的 5c1736f 在 commit 首行写 Breaking change:(checkpointWhen 必填、无默认值),紧接在上期 schema v2「迁移后不可回滚」之后。两个破坏性变更都还没随 release 固化——v1.3.0 停在 10-15 已 5 天,本期全部产出 unreleased。ACP v1.12.0 相反,它第一次删特性时同时留下了 Removed 通知。

  8. 「一个 harness + 多个界面」的收敛在加速,但速率不对称。 opencode 侧 TUI/桌面/Web 三界面共享服务端的能力已延伸到 Windows(#56245 persistent PTY 全平台可用)与 Drive 管理状态(#57112/#57189);pi 生态侧 pi-web 连续第 2 天零活动、open issues 反而 +6。收敛发生在 harness 一侧,界面一侧正在掉队。

元信息

  • 报告生成时间: 2026-10-20T00:30:19Z
  • 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告 reports/latest.md 的 基准时间: 字段,自 2026-09-08 起连续 11 期未变)
  • 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-20T00:30:19Z(约 41.7 天);本期新增内容全部落在 2026-10-19T00:30 之后的约 24 小时
  • 数据源: GitHub API(gh CLI)+ mmx web search
  • API rate limit 剩余: 4975 / 5000(core,抓取完成后查询)
  • 抓取结果: 6 / 6 仓库 × 4 endpoint 全部成功;hindsight 新增提交数经 per_page=100 二次确认(49 条,列表接口 30 条为截断);opencode V2 changelog 取自默认分支 CHANGELOG.md(最新 v2.0.32,2026-10-16);ACP registry 版本变化取自 registry.mdx 的 patch;coding-agents v0.8.2 为 hindsight 仓库内子包 release,非 GitHub Release 对象

评论