2026 2026年10月28日 26 min · 7.4k chars by yxc023

GitHub 调研周报 2026-10-28

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

2026-10-28 GitHub 调研周报

扫描窗口:2026-09-08T09:23:29Z → 2026-10-28T00:30:00Z(共 49.6 天)| 基准来源:上次报告 2026-10-27 本期新增内容全部落在 2026-10-27T00:30:00Z 之后的约 24 小时(上次报告生成时间)

本期速览

  1. opencode v2.2.0 终于发版了,而这次发版本身就是上一期「发版闸门收紧」的第一个真实样本。 2026-10-27 09:04 发布,npm @opencode/cli latest 从 2.1.4 变为 2.2.0(此前连续 4 天未动)。release notes 有 4 条 Breaking Changes,其中两条是纯移除:OpenCode GitHub Action 不再发布(#59032),以及 @opencode/ai 包根改成 Promise API、Effect API 移到 @opencode/ai/effect、通配子路径导出被显式列表取代(#58847 / #59183);第三条是 TUI 插件硬性要求 OpenTUI 0.7(#59295)。亮点是实验性的 Desktop GUI 插件(#55246 / #59469 / #59489)与实验性的 image / decision 生成 API(#59190)。

  2. 「双发布线」从权宜之计变成了显式设计:GitHub 的 Latest release 仍指向 v1.19.4,npm latest 却是 2.2.0。 维护者 Hona 的 PR #59529 标题直接写着「restore desktop app-update.yml and keep V1 as the GitHub Latest release」,并解释了原因:pack.ts 用 electron-builder --dir 构建,app-builder-lib 只为 dmg/zip/nsis 写 resources/app-update.yml,而 updater 从不调 setFeedURL——任何更新到缺失该文件的构建的用户,将永远无法再自动更新。同一 PR 还列出两个发布阻塞项:#59529 修回 app-update.yml,#59665 让 v1 在没有 OPENCODE_APP_ID/OPENCODE_APP_SECRET 的情况下也能发版(「本周的 CI 收紧删掉了这两个密钥,绑定了 npm trusted publishing,于是每一个 v1 publish.yml 运行都失败」)。新流水线在第一次稳定运行前就被自己的产物格式卡住了。

  3. opencode 本期出现三个独立的「费用算错」报告,且方向互相矛盾——一次高估 10⁶ 倍、一次低估 6 倍、一次记成 0。 #59677 指出 cortecs/glm-5.2 会话侧栏显示 $8,386,053,原因是把 catalog 的 cost[].input(schema 明确写的是 USD per million tokens)当成 per-token;#59671 指出 GitHub Copilot 的 claude-haiku-5.5 存在 ≤100K / >100K 两档定价而长上下文档从未被应用,且 380 万 cache-write token 被按 $0 计,导致 25 小时会话显示 $1.56、实际约 $9.3–10.2;#59627 / #59634 则报告 2.2.0 对 opencode-go 模型把 session cost 记成 0。同一个面板上同时存在 10⁶ 倍高估、6 倍低估与归零三种故障——「成本显示」这个功能目前不可作为事实依据。

  4. 免费额度话题重新抬头,且分裂成两个互不相干的群体。 本期 149 个新 issue 中涉及 quota / limit / usage / free / credit 的有 33 个(22.1%),上一期是 19.5%。其中一类是「桌面版不支持免费模型」这句提示本身被当成 issue 标题提交(#59622 / #59482,正文就是这句话),配套的是 #59616「下载桌面版默认装到版本 1」;另一类是老问题——重置时间漂移(#59575「Free Usage Limit Reset Keeps Moving Forward by One Day」)、一次请求吃掉整个日限额(#59502)、限额不重置(#59525 / #59530)。前者是分发渠道问题,后者是计费系统问题,两者的解法互不相干。

  5. opencode 本期最重的一块基础设施改动来自外部:jlongster 把 opencode-pty 整体并入 monorepo(+12,790 行 / 58 文件,#59694),并跟了 7 个后续 PR。 方向是 daemon 化与去轮询:支持私有 Unix socket 目录(OPENCODE_PTY_SOCKET_DIR,#59697)、用阻塞订阅替代轮询(#59698,其上游 stack 计划彻底去掉 daemon 的空闲唤醒)、从 monorepo 发布(#59695)。同期 rekram1-node 把 Code Mode 从「每次异步调用一个 fiber」改成「一个 job 队列」(+3,664/−2,995,35 文件,#57976)。两个方向都是「把并发从每请求一个执行单元,改成统一的调度器」。

  6. pi 本期把「watch / observer / report」三套词汇合并成一套,这是 durable + chord 连续第三期的同一主题。 commit 5f312da「feat(chord,durable): failures are watch calls; one vocabulary for watches, observers and reports」把 Chord 的 watch 监听器参数改成带 tag 的调用对象 { kind: "value", value, ops, retired } 或 { kind: "failed", error },WatchEnd 改用 kind 标记、context 被 abort 时结束原因从 cancelled 改为 aborted,Durable 侧 onReport 带 report.kind、session_failed 改名 storage_failed、subscribeCommits 改名 observeCommits。配套 commit f3255de 引入 windowed conversation view、ConversationTranscript 与 runFailure,并移除 watchEvents() 及其 5 个事件类型(见 #11327)。渲染器不再从事件流里拼状态,改为直接读状态——事件类型不再是每个客户端都必须学会的扩展点。

  7. pi 的用户侧新发现集中在「缓存与前缀」这一层。 #11500 指出 compaction / summarization 请求与实时对话不共享任何 token 前缀——每次压缩都在 Anthropic / 本地 vLLM APC 上付一次全量 prefill,作者在 100k+ 上下文的本地端点上实测压缩请求缓存命中为 0;对应的 PR #11499 当天就提交了 prefix-preserving summarization。另两条:#11493 报告 Codex 在空闲后缓存全失效(与 persistent-cache 保证矛盾)、#11473 指出 codemode 默认内联完整 schema,13 个工具就能耗尽 3000 token 的 inlineBudget,超预算的工具连名字都不出现,模型无从知道它存在。「缓存」正从性能优化变成正确性问题。

  8. pi-web 连续第 8 天零提交,外部贡献继续涌入而维护响应仍为零。 最后一次 push 仍是 2026-10-20T16:53:57Z;本期 3 个新 PR(#1429 队列消息多时保持 composer 可见、#1427 已登出模型不再报 scope 警告、#1426 压缩期间排队的 prompt)与 4 个新 issue(#1432 网络异常后应保留分会话草稿且不覆盖新输入、#1431 建 worktree 时检查已有分支并补全、#1430 一键折叠全部 thinking block、#1428 队列过长把 composer 挤出视口)全部零回复。package.json 里 7 个 @earendil-works/* 包仍精确 pin 在 1.2.0(上游已到 1.4.0)。另有一条容易看错的信号:npm 上未加 scope 的 pi-web 最新版 0.15.3 属于另一个项目(ravshansbox/pi-web),本仓库对应的是 @agegr/pi-web,latest 仍是 0.12.2(2026-10-15)。

  9. hindsight 用一篇博客把「1.0 意味着什么」讲清楚了:API 是承诺,且大部分 Cloud 已跑在 Memlake 上。 2026-10-27 的官方博客《What’s New in Hindsight Cloud: The API Is a Promise Now》(#6141)列出六件事:Hindsight 1.0 API 稳定且保持稳定;Memlake(Rust 写的存储引擎,把记忆放进对象存储)已承载大部分 Cloud,对外宣称 1 亿条记忆 p99 < 100 ms 且每次写入在 ack 前已持久化;bank 文档可导出 zip 并再导入(不重跑事实抽取,因此计费低于 retain 费率);reflect 新增 Based On 面板展示所引用的 observation 全文及其附件,且会读取文档自身 metadata(如 doc_type)来加权;bank 支持 alias 与改名;组织成员也可审批 MCP 连接。同期代码侧继续收敛 decision-model 路线:新增 reranker 的 prune 开关(#6131)、废弃 typesafe reranker provider 改用共享 decision model(#6130)、BM25 同分时按 id 打破以保证重复 recall 结果一致(#6143)。

  10. ACP 单日合并 69 个 PR,其中 63 个来自 benbrandt 一人,同时放出 v1.27.0 / v2.0.0-alpha.10 / crate v1.13.0 三个版本——并且首次给 v1 和 v2 同时补上了安全章节。 #2542 新增 security.mdx(v1 与 v2 各一份),明确定信任模型:Agent 以其进程被赋予的权限运行,ACP 不做沙箱;Agent 输出不可信,包括被重放的内容;权限请求只是建议性的,Agent 自己负责遵守;自报身份不是安全信号。它参考了 MCP 的安全指南、A2A、LSP/DAP、RFC 3552,以及已发表的 coding agent / MCP 客户端事故(图像式数据外泄、终端转义注入、link handler RCE、配置文件写入导致代码执行、路径逃逸、loader 劫持、权限提示与实际执行不匹配)。其余集中在 v2 的 null 语义收口:#2570 为每个可选 v2 字段写明 null 行为、#2569 给 DefaultOnNull 列表加 x-deserialize 提示、#2557 用 currentValue 定义 config option 默认值、#2525 让文档链接写进源码并删除生成器的链接重写(+1,151/−1,194)。ACP 仍是零 issue、零新讨论的仓库——规范推进与社区反馈之间的落差本期未变。

各仓库详情

anomalyco/opencode

开源 coding agent(终端 TUI + 桌面 app + web),TypeScript / Bun 内核,多 provider 架构 | stars: 222378(+421) | open issues: 3860(−5) | 默认分支: dev | 最近 push: 2026-10-28T00:21:04Z | 主页: https://opencode.ai

近 N 周 release 重点:

  • v2.2.0(2026-10-27)— Desktop 插件、桌面端体验重做、实验性 image/decision 生成 API
    • Breaking:@opencode/ai 包根改为 Promise API,Effect API 移到 @opencode/ai/effect,@opencode/ai/promise 被移除,通配导出被显式入口列表取代(#58847 / #59183)
    • Breaking:OpenCode GitHub Action 不再发布,需从 workflow 中移除(#59032)
    • Breaking:TUI 插件要求 @opentui/core / @opentui/solid 0.7.0(此前 0.6.8+),0.6 依赖的插件无法安装;自定义 renderable 必须在构造器里赋 renderBefore / renderAfter / onLifecyclePass(#59295)
    • 新增实验性 Desktop 插件:可创建、安装、分享(#55246 / #59469 / #59489)
    • 新增实验性 image 与 decision 生成 API 端点(plugin + SDK),catalog provider 补齐对应入口(#59190 / #59380 / #58758)
    • 插件可用 ctx.session.instructions.entry.put/list/remove 挂载带 key 的会话指令:不再改写 system prompt 从而不会打掉 prompt cache,且能穿越压缩与回退
    • 可配置 prompt cache TTL(provider / model / variant 三级,#59157);桌面端 opt-in 恢复 Todo 工具;session history 从最近一次完成的压缩开始
    • 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v2.2.0
  • v1.19.4(2026-10-22):捆绑 Bun runtime 升级到 1.4.4。该版本仍是 GitHub 的 Latest release(releases/latest 解析到 v1.19.4),而 npm latest 已是 2.2.0。

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

  • #59529 fix(release): restore desktop app-update.yml and keep V1 as the GitHub Latest release (@Hona, 10-27)——新流水线的第一个发布阻塞项:electron-builder --dir 不写 resources/app-update.yml,updater 又从不调 setFeedURL,更新到缺失该文件的构建后永远无法再自动更新
  • #59665 fix(ci): release v1 without the OpenCode Agent app token (@thdxr, 10-27)——CI 收紧删掉 OPENCODE_APP_ID/OPENCODE_APP_SECRET 后,每个 v1 publish.yml 运行(预览也包括)都失败
  • #59694 chore(process-daemon): move opencode-pty into the monorepo (@jlongster, 10-27,+12,790/−0,58 文件) + #59697 私有 Unix socket 目录 + #59698 用阻塞订阅替代轮询 + #59695 从 monorepo 发布 + #59702 Windows 每 25ms 轮询 + #59701 等待就绪而非轮询 + #59700 stop 与归属统一走 Control + #59699 线程创建失败不崩
  • #57976 refactor(codemode): run programs on one job queue instead of a fiber per async call (@rekram1-node, 10-27,+3,664/−2,995)
  • #59417 fix(core): keep snapshots working in repos with a split index (@rekram1-node, 10-27) / #59419 perf(core): coalesce snapshot captures and skip repeat ignore work——与用户报告的 #59766「damaged store 时 snapshot cleanup 每次都失败并泄漏 store 尺寸的 tmp_pack」同源
  • #59441 fix(core): size compaction requests from the provider’s last count (@rekram1-node, 10-27)——按 provider 上报的实际 token 数计算压缩规模
  • #59649 fix(ai): don’t treat 429 throttles as context overflow (@rekram1-node, 10-27)——对应用户报告 #59752「真 429 被误判为不可重试的 QuotaExceeded,agent 运行永久停摆」
  • #59500 fix(core): keep prompt cache settings out of model variants (@rekram1-node, 10-27)
  • #59479 fix(core): pass the catalog’s decision media format to decision models / #59452 refactor(ai): align media and decision responses with the generate API / #59485 fix(ai): send input images to Cloudflare Workers AI image models
  • #59445 feat(ai): allow async tools and add generateObject to the Promise client / #59442 fix(ai): stop LLM.loop when a step reports a provider error
  • #59696 feat(app): redesign the inbox sidebar / #59723 redesigned question dock 改为 opt-in / #59764 composer pill 自绘 popover 内容 / #59757 新增 /interrupt slash command
  • #59731 feat(core): add Vercel AI Gateway sign-in / #59732 UI 替换过期的 Vercel Gateway key / #59729 feat(integration): add OAuth setup prompts (@pcomans, 10-27)
  • #59748 fix(core): apply webfetch URL rules to redirect targets / #59753 同样的规则覆盖到 Code Mode fetch (@rekram1-node, 10-27)
  • #59488 ci(release): only releasers can start stable releases / #59464 ci: publish nix hashes through an auto-merged pull request / #59516 ci(release): 用 homebrew-tap deploy key 推 Homebrew formula / #59503 从 dev environment 部署 dev Cloudflare workers / #59631 fix(cli): put dev builds back on the shared service and database / #59486 ci: rename ci-owners team to releasers (@thdxr, 10-27)
  • #59469 feat(plugin): add toasts, dialogs, notifications, UI, tabs and composer APIs to GUI plugins (@Hona, 10-27,+2,626/−50)
  • #55246 feat(plugin): add OpenCode Desktop GUI plugins (@Hona, 10-27,+14,712/−9,095,1,179 文件)

社区讨论 / 行业方向:

信号观察:

  • 24 小时内 95 个合并 PR、149 个新 issue、174 个新 PR;合并作者分布:rekram1-node 44、usrnk1 11、thdxr 11、Hona 9、opencode-agent 6、vimtor 4、jlongster 4
  • 「成本显示」目前有三种互相矛盾的故障模式同时存在(10⁶ 倍高估 / 6 倍低估 / 记为 0),均出现在 2.2.0 上线当天
  • 免费额度类 issue 占比回升至 22.1%(上一期 19.5%),但内部已分裂为「桌面版下载到 v1」与「限额重置漂移」两类不同问题
  • v2.2.0 的三条 Breaking Changes 里有两条是移除、一条是依赖版本抬升;插件生态需要跟进的信号已在 hindsight 侧出现(见下)
  • 两处并发模型重构同期落地:Code Mode 从 per-call fiber 改为单一 job 队列,PTY/daemon 从外部仓库并入并改为阻塞订阅
  • GitHub Latest release 与 npm latest 指向不同版本线(v1.19.4 vs 2.2.0),且该状态由 PR 显式维护

earendil-works/pi

AI agent 工具箱:统一 LLM API、agent loop、TUI、coding agent CLI,TypeScript monorepo | stars: 118289(+257) | open issues: 380(−9) | 默认分支: main | 最近 push: 2026-10-27T23:46:13Z | 主页: github.com/earendil-works/pi

近 N 周 release 重点:

  • 本期(24 小时)无新 release。npm @earendil-works/pi-coding-agent latest 仍为 1.4.0(2026-10-21),pi-ai 同为 1.4.0。
  • packages/durable/CHANGELOG.md 与 packages/chord/CHANGELOG.md 的 [Unreleased] 段继续是整包 Breaking Changes,且本期又扩大:
    • durable:watch 统一到 Chord 的 WatchHandle / WatchEnd;结束原因改为 stopped / cancelled / ended / listener_error / failed,retired 从「结束」降级为「标志」;document watch 跟随地址而非某次实例化;listener 改为接收单个 change 对象 { value, ops, retired };deferred commit(把流式答案与工具输出的节流提交推迟落盘,32 路并发下存储事务减少约 5.7 倍、磁盘写减少约 2.9 倍,长答案场景 27 倍与 9 倍);新增同步 observer(observeDoc / observeConversation / observeTaskGraph)与 HarnessOptions.readOnly
    • chord:WatchEnd 用 kind 而非 reason 标记;context 被 abort 时结束为 aborted 而非 cancelled;新增 NativeWatchable / Watchable / PendingOps;delta tracker 的 WeakRef 优化(20 万次小变更从提升 47.5 MB 降到 2 MB,单次 3.8 µs → 3.1 µs)

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

  • 5f312da feat(chord,durable): failures are watch calls; one vocabulary for watches, observers and reports (@Mario Zechner, 10-27)——Chord watch 监听器改收带 tag 的 { kind: "value" | "failed" } 调用对象;WatchEnd 改用 kind;Durable onReport 带 report.kind、session_failed → storage_failed、subscribeCommits → observeCommits、SessionEnd 与 ReportFrom 均带 tag
  • f3255de feat(durable): windowed conversation view, ConversationTranscript and runFailure; remove watchEvents (@Mario Zechner, 10-27)——移除 watchEvents() 及其 AgentEvent / AgentEventStream / SnapshotEvent / MessageChange / ToolEventCall 类型;渲染器改为直接读状态;pi.live.runFailure 记录运行无回答结束的原因(model_error / no_model / aborted / reset / faulted / orphaned)
  • b3a29f1 fix(durable): end restart loops visibly; a host death charges a generation’s attempt (@Mario Zechner, 10-27)——宿主在模型请求中崩溃不再无限重发
  • a922830 fix(chord): Delta’s tracker holds its one open change without a WeakRef (@Mario Zechner, 10-27)
  • 8025c41 feat(chord): SqliteExecutor.runCounted resolves with the rows a statement changed / 973b74c fix(chord): keep the workerd runCounted probe row outside the bulk range / db14038 fix(chord): bound the Node SQLite driver’s prepared-statement cache(改为只保留最近 256 条,避免 SQL 形状无界的查询构造器让内存无限增长)
  • bb65e3e fix(durable): import toCodemodeIdentifier from pi-codemode/declarations(不再加载 WASM QuickJS runtime,#11254)
  • #11498 docs(coding-agent): restore the full extensions guide, corrected against current source (@christianklotz, 10-27,+3,173/−230)
  • #11494 fix(ai): detect LiteLLM ContextWindowExceededError as context overflow (@robopipi[bot], 10-27)
  • #11486 fix(coding-agent): keep session memory in line with the file when a write fails / #11482 pass thinking level to branch summarization / #11471 inline ctx.ui.custom() 组件可上报 blocked program 状态 / #11470 空标签的 hidden thinking 不渲染行 / #11469 安装 pi 包时跳过 npm audit 与 fund 输出
  • #11468 fix(tui): recognize kitty F1-F12 sequences and ignore F13+ keys / #11467 default openai provider to gpt-6.1-sol / #11466 keep open extension dialog visible when the editor component is replaced / #11465 keep grep context lines aligned with ripgrep when a file has a lone CR / #11487 display math 超出内容宽度时回退到原始 LaTeX
  • #11434 fix(ai): use OpenCode protocol-specific endpoints (@vimtor, 10-27)
  • #10716 fix(env): include stderr in pi-env startup errors (@yzhg1983, 10-27)
  • 未合并的新 PR:#11499 feat(compaction): prefix-preserving summarization calls (@memearchivarius, 10-27)——直接回应 #11500

社区讨论 / 行业方向:

  • #11500 Compaction/summarization requests share no prefix with live turns — every compaction pays a full prefill (@memearchivarius, 10-27,2 条评论)——今天的 summarization 调用把对话序列化进一个全新的 <conversation> prompt,系统 prompt 与 tool 声明都不共享,与产生它的那些 turn 零前缀共享;作者在本地 vLLM(Qwen3.8-27B,开 APC)上强制触发一次压缩,summarizer 请求缓存命中为 0,100k+ 上下文时耗时以分钟计
  • #11497 SqliteStorage: a second opener of one file mints IDs the first owns (@mikeyobrien, 10-27)——open() 只读一次 next_id,mintId() 在内存里自增,第二个打开者发出重复 ID,checkGlobalIds 拒绝其 commit 并让整个 Session 失败;README 对 IndexedDB 有单 owner 规则,对 SQLite 没有
  • #11493 Codex: full cache miss after idle despite persistent-cache guarantee (@mustafa0x, 10-27)
  • #11473 Codemode inlines full schemas by default while making tools beyond inlineBudget invisible (@astrosheep-zero, 10-27)——单扩展 13 个 codemode 工具即可耗尽 3000 token 预算,超预算工具被丢弃且连名字都不出现
  • #11481 Built-in OpenCode model catalogue ships retired models as free-model baseline (@aner-dev, 10-27)
  • #11472 rpc mode: “turn_end could not resolve the persisted assistant entry ID” aborts every run with local openai-completions providers (@PoisonXploIT, 10-27,3 条评论)
  • #11460 Resume drops all built-in tools when the session branch is truncated (orphan parentId after ENOSPC)(4 条评论)
  • #11484 Nested executeTool calls can survive parent cancellation with an explicit signal / #11457 Anthropic SSE stream hang mid-response cannot be interrupted with Esc / #11461 tui: painting the scrollbar costs a quarter of the frame budget
  • 讨论区无新增讨论;#11500 是本期唯一被读者自行找到并附上实测数据的问题

信号观察:

  • 24 小时内 27 个 commit、15 个合并 PR、27 个新 issue、19 个新 PR;合并作者几乎全为 Mario Zechner 与 robopipi[bot]
  • watch / observer / report 三套 API 合并为一套词汇,是连续第三期的同一主题(上一期是 watch 统一到 Chord,本期进一步把 failure 也变成一种 watch call)
  • watchEvents() 被整体移除,渲染模型从「事件流」转为「状态快照 + 窗口」,这是渲染器 API 的破坏性重写
  • 「缓存前缀」第一次成为用户主动测量并报告的问题(#11500 附实测),且 opencode 同期在补 prompt cache TTL——两家分别从配置侧与调用侧处理同一件事
  • durable 的 deferred commit 性能数字已在 changelog 中以倍数给出(事务 5.7× / 磁盘写 2.9× / 长答案 27× 与 9×),说明这条路径已进入实测验收阶段
  • npm latest 停在 1.4.0 已 7 天,而 main 分支上已积累一整批整包 Breaking Changes——发布节奏再次落后于 API 演进速度

agegr/pi-web

pi coding agent 的本地 Web UI(Next.js / TypeScript),读同一套本地 session 文件 | stars: 7847(+29) | open issues: 78(+7) | 默认分支: main | 最近 push: 2026-10-20T16:53:57Z(连续 8 天未变) | 主页: 无

近 N 周 release 重点:

  • 本期无新 release。GitHub Release 最新仍为 v0.12.2(2026-10-15),npm @agegr/pi-web latest 同为 0.12.2(2026-10-15)。
  • v0.12.2 的内容以 UI 能力为主:新增 8 套主题(暖沙 / 丁香 / 暮紫 / 余烬 / 岩蓝 / 高对比浅色与深色 / Zenburn),主题以自身色块呈现便于比较;终端可单独切换深浅色而不影响应用主题;每轮回答显示耗时;可选的缓存与费用提示(对齐 pi TUI 的 showCacheMissNotices);Agents 切换器显示每个子代理的用量;归档视图可按项目折叠与批量处理;文件树支持拖拽上传;设置里可改模型上下文窗口;新增 30 多种文件类型的高亮。
  • 注意区分:npm 上未加 scope 的 pi-web(latest 0.15.3,2026-10-25)属于另一个项目(repository 指向 ravshansbox/pi-web),本仓库发布的是 @agegr/pi-web。

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

  • 本期 0 个 commit、0 个合并 PR。仓库所有分支(fix/*、feat/*、claude/* 等数十个)仍停留在 2026-10-20 之前。
  • #1429 fix(chat): keep composer visible with long queued-message lists (@wowayou, 10-27,未合并,0 评论)
  • #1427 fix(models): quiet scope warnings for known signed-out models (@HoloNova, 10-27,未合并,0 评论)
  • #1426 feat(chat): queue prompts sent while compaction runs (@vergram, 10-27,未合并,0 评论)
  • #1432 网络异常时普通发送、引导和后续消息不恢复原文,应保留分会话草稿且不覆盖新输入 (@tossp, 10-27,0 评论)
  • #1431 Check for existing branches, as well as autocomplete when creating the worktree (@cdrage, 10-27,0 评论)
  • #1430 feat(chat): one button to show/hide all thinking blocks (like pi TUI’s Ctrl+T) (@woyxiang, 10-27,0 评论)
  • #1428 fix(chat): long queued-message list pushes composer below viewport (@wowayou, 10-27,0 评论)

社区讨论 / 行业方向:

  • 讨论区无新增讨论;最新一条仍是 2026-10-14 的 #1233「Thank you for Pi Web!」
  • 同类替代实现继续在 npm 上 proliferate:搜索结果中同时出现 @hyperdreamer/pi-webui、@youweichen/pi-web-ui、@chainingintention/pi-web-cn 等多个 pi Web UI 实现,各自强调「remote-first」「服务器端持久会话」「SSH 节点工作台」等不同定位

信号观察:

  • 连续 8 天零提交;本期 3 个新 PR 与 4 个新 issue 全部零回复,累计外部贡献仍无维护响应
  • package.json 里 7 个 @earendil-works/* 包仍精确 pin 在 1.2.0,而上游 pi-coding-agent / pi-ai 已到 1.4.0
  • npm 包名 pi-web 已被另一个项目占用并持续发布(0.15.3),本仓库只能用 scope 区分——包名认知正在变模糊
  • 社区讨论区最近一次活动在 14 天前,与 GitHub 仓库的零响应状态一致

vectorize-io/hindsight

Agent memory 平台(Hindsight:Agent Memory That Learns),Python 后端 + 控制面 | stars: 54430(+332) | open issues: 175(+12) | 默认分支: main | 最近 push: 2026-10-27T22:01:26Z | 主页: https://hindsight.vectorize.io/

近 N 周 release 重点:

  • 本期无新 release。GitHub Release 最新仍为 v1.1.0(2026-10-21),此前 v1.0.0(2026-10-13)已宣告 GA。
  • 2026-10-27 官方博客《What’s New in Hindsight Cloud: The API Is a Promise Now》(#6141)是本期 Hindsight 侧最重要的对外信号,六条要点:
    • Hindsight 1.0:一年生产运行后架构与 API 稳定,「API 是一个承诺」,用户代码、SDK 与 MCP 配置无需改动
    • Memlake 已承载大部分 Cloud:Rust 编写的 agent memory 存储引擎,把记忆放进对象存储,对外宣称 1 亿条记忆 p99 < 100 ms,且每次写入在 ack 前持久化;由 Vectorize 运营,用户无需启用或迁移
    • bank 文档可导出 zip 并再导入:导入不重跑事实抽取(事实重新 embedding 并重新关联),计费按文档 token 走 import 费率,低于标准 retain 费率
    • reflect 显示依据:新增 Based On 面板展示被引用的 observation 全文及其附件;reflect 还会读取文档自身 metadata(如 doc_type: "kb" / "ticket")来加权,「优先手册而非闲聊」
    • bank 支持 alias 与改名:alias 升级后成为对外展示名,原 id 仍在底层工作,API key 对 alias 同样生效
    • 成员也可审批 AI client:原本只有 owner 与 admin 能审批 MCP 连接,现组织 owner 可开放给普通成员

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

  • #6131 feat(recall): prune flag for the decision-model reranker (@nicoloboschi, 10-27,+209/−28) / #6139 追加 live dedup 开关、按请求 dedup
  • #6130 chore(reranker): deprecate the typesafe reranker provider in favour of the shared decision model (@nicoloboschi, 10-27)——reranker 提供方收敛到一条路线
  • #6128 feat(decision-model): one standalone file for recall’s decision-rerank questions (@nicoloboschi, 10-27)
  • #6143 fix(recall): break BM25 score ties on id so repeated recalls return the same list (@nicoloboschi, 10-27)——recall 结果开始具备确定性
  • #6142 fix(audit): an MCP tool call writes one audit row, not two (#6071) (@nicoloboschi, 10-27)
  • #6133 fix(retain): store the ‘where’ dimension and fail instead of dropping an unsplittable chunk (@nicoloboschi, 10-27)——此前 ‘where’ 维度从未被存储,输出溢出且无法切分时 chunk 被静默丢弃(对应 #6129)
  • #6118 system-evals: one file per operation, categorised cases, retain and recall capability suites (@nicoloboschi, 10-27,+4,102/−2,093,46 文件)
  • #6147 feat(api): optionally require authentication for API docs (@benfrank241, 10-27,未合并)

社区讨论 / 行业方向:

  • Vectorize 官网: 定位表述仍是「Agent memory that learns」,强调「四路并行检索策略、token 预算优化、不是 RAG、不是向量库」;About 页 写「我们相信 agent 应该学习,而不只是响应」
  • Hindsight Cloud 官方博客: 本期新增文章,明确 Memlake 已在 Cloud 大部分环境运行
  • 讨论区无新增讨论;issue 侧出现明显的 opencode v2 适配 主题(见下)

信号观察:

  • 24 小时内 8 个 commit、8 个合并 PR、17 个新 issue、9 个新 PR;合并作者 7 个来自 nicoloboschi、1 个来自 benfrank241
  • opencode v2.2.0 直接打断了 hindsight 的 coding-agents 插件:#6146 与 #6138 报告 v0.8.2 在 2.2.0 下加载失败——「Plugin must export a default definition with an id and an effect or setup function」;#6138 明确指出这是与 #5823(v0.8.1 在 2.1.0 上)同一类故障,只是宿主行为再次变化,0.8.2 的修复不再成立
  • 因仓库 pull_request_creation_policy: collaborators_only,外部贡献者 #6144 只能推分支请求 import(「cross-fork creation 404s」)——外部修复路径被仓库策略本身堵住
  • reranker 从多提供方收敛到共享 decision model,recall 结果开始具备确定性(BM25 同分按 id 打破)——记忆检索正在从「相关性排序」走向「可复现排序」
  • 官方博客用「API 是一个承诺」来定义 1.0,与 ACP 用 schema 语义收口定义 v2 是同一种成熟期动作:承诺一旦给出,就需要一整套迁移与兼容说明来兑现

agentclientprotocol/agent-client-protocol

「让任意编辑器接任意 agent」的协议规范 + Rust crate + schema | stars: 4526(+10) | open issues: 31(−1) | 默认分支: main | 最近 push: 2026-10-27T22:48:12Z | 主页: https://agentclientprotocol.com

近 N 周 release 重点:

  • 本期一次性发布三个版本:Rust Crate v1.13.0、Schema v1.27.0、Schema v2.0.0-alpha.10(均 2026-10-27 21:56,由 acp-release-bot 自动发布,PR #2413)
  • v1.13.0 新增:v2 的 terminal_update 可选终端尺寸(#2550)、ResourceLink.size 改为无符号并定义未知 tool kind(#2521)、给 DiffPatch / ToolCallPermissionSubject / Icon / cancelled outcome 加 _meta(#2517)、v2 不允许 null request ID(#2499)、available commands 加类型判别符(#2494)
  • v1.13.0 修复:v2 严格解析 nextCursor 与列出的 session 目录(#2567)、畸形值不清空 replacement 列表(#2568)、未知 variant 的可选字段保持原样(#2561)、拒绝非对象的 elicitation schema 根类型(#2558)、ToolCallLocation.line 改为 1-based(#2546)、terminal exitCode 改为有符号整数(#2545)、v2 要求恰好一个 elicitation scope(#2498)

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

  • #2542 docs(protocol): add security considerations for v1 and v2 (@benbrandt, 10-27,+497/−0,29 文件)——v1 与 v2 首次拥有安全章节:信任模型(Agent 以进程权限运行、ACP 不沙箱、Agent 输出不可信含重放内容、权限请求仅为建议、自报身份非安全信号)+ 跨切面指引(渲染 Agent 内容时的脚本 / 原始 HTML / 链接 / 不可见字符 / 终端控制序列、URI 处理等);参考了 MCP 安全指南、A2A、LSP/DAP、RFC 3552 与已发表事故(图像式数据外泄、终端转义注入、link handler RCE、配置文件写入导致代码执行、路径逃逸、loader 劫持、权限提示与实际执行不匹配);全部为 SHOULD 级
  • #2553 docs(protocol): say the Agent owns remembered permission decisions and their scope(v2 中 Agent 存储 allow_always / reject_always 并定义其范围与生命周期,Client 不应从 kind 推断范围)
  • #2570 docs(schema): state null handling for every optional v2 field (+635/−267,12 文件) / #2569 mark DefaultOnNull lists with an x-deserialize hint / #2557 define config option defaults via currentValue and state select invariants
  • #2525 refactor(schema): write versioned doc links in source and drop the generator’s link rewriting (+1,151/−1,194,31 文件)
  • #2547 docs(schema): specify v2 diff baseline, path uniqueness and patch conflicts / #2548 define invalid base64, late output and retention for v2 terminals / #2544 define tool call field defaults and null resets in v2 / #2543 define switch_mode as changing the mode config option
  • #2532 docs(protocol): describe ACP content as a superset of MCP and pin the MCP revision / #2512 define v2 handling of unadvertised and failing MCP servers / #2506 require ordered delivery and in-order session updates in v2
  • #2500 define receiver behavior for unknown v2 variants / #2510 define Client handling of unknown v2 session states and tool statuses / #2508 define session/cancel as cancelling foreground work
  • #2535 docs: use consistent, generic extension naming in examples / #2522 mark required v2 fields in the docs and rename ClientAuthCapabilities

社区讨论 / 行业方向:

  • 讨论区无新增讨论,最近的讨论仍是 2025 年的旧帖(#37 等)
  • agentclientprotocol.com/protocol/v2/migration: 官方 v1→v2 迁移指南已成为独立页面,配套本期的 null 语义与默认值收口
  • 第三方文档索引(DeepWiki)已收录 v2 draft 规范页面与 schema 生成机制(docs.rs 上 agent-client-protocol-schema 的 v2 client 模块),说明规范的二手索引跟上了 v2 进度

信号观察:

  • 单日 69 个合并 PR(benbrandt 63、acp-release-bot 5、Sumit1993 1),同期新开 69 个 PR、0 个 issue、0 条新讨论
  • v1 与 v2 首次同时拥有安全章节,且明确写出「ACP 不做沙箱、Agent 输出不可信、权限请求只是建议」——协议层开始承认信任边界,而不是把它留给实现者
  • v2 的 null 语义、默认值、未知 variant 行为被逐字段写清,是「让实现者不必猜」的典型收口工作
  • 规范推进完全由一位维护者承担(63/69),社区侧零反馈——规范成熟度与社区参与度之间的落差在本期未缩小

yxc023/yxc023.github.io

本调研报告的发布载体(个人博客仓库)| stars: 1 | open issues: 27 | 默认分支: master | 最近 push: 2026-10-27T00:36:12Z | 主页: 无

近 N 周 release 重点:

  • 无 release。本期 1 个 commit:72056e1「auto(reports): 同步 daily-research 2026-10-27」,由同步脚本自动提交。

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

  • 本期 0 个新 issue、0 个新 PR;仓库内容仅为每日报告同步。

社区讨论 / 行业方向:

  • 无。

信号观察:

  • 仓库保持单一职责:只承载报告同步产物,无人工变更。

跨项目观察

  1. 「同一份语义只应有一个来源」这条原则本期在三个仓库以三种形式落地。 pi 把 watch / observer / report 合并为一套词汇(5f312da),并把事件流整体换成状态快照;opencode 把 provider option 键从 settings schema 派生(上一期)后,本期继续把「keyed session instructions」做成不重写 system prompt 的增量更新,从而不打掉 prompt cache;ACP 则为每个可选 v2 字段写明 null 行为与默认值(#2570 / #2557)。三者都在做同一件事:消灭「同一含义有两份定义」的结构性缺陷。

  2. 缓存与前缀正从性能问题升级为正确性问题,且两个 agent 框架同期从不同角度撞上它。 pi 的 #11500 用实测数据指出压缩请求与实时对话零前缀共享(本地 vLLM 上缓存命中为 0),opencode 本期补上 per-provider prompt cache TTL 并修掉「prompt cache 设置漏进 model variant」(#59500),同时 ACP 在 v2 里定义 diff baseline 与 patch 冲突规则。「省 token」这件事在 2026 年 10 月已同时是账单问题、延迟问题和正确性问题。

  3. 发布流水线的改造在本期第一次接受真实考验,暴露的是产物格式而非权限。 上一期的观察(发版闸门收紧)在本期落地为 v2.2.0,但真正卡住的不是密钥或 environment,而是 electron-builder --dir 根本不产出 updater 需要的 resources/app-update.yml(#59529),以及 CI 收紧误伤 v1 的发布(#59665)。收紧供应链时最容易漏掉的是「产物长什么样」,而不是「谁能发布」。

  4. 生态耦合的方向在本期反转:opencode 一次发版就打断了第三方插件。 hindsight 的 coding-agents 插件在 2.1.0 上已崩过一次(#5823),2.2.0 上再次崩(#6138 / #6146),修复还因仓库 collaborators_only 策略无法开 PR。当一个宿主仓库的插件 API 在两个月内变动两次,插件作者承担的是版本管理的全部成本。

  5. 「Agent 输出不可信」正在从各家 issue 里的个案,变成协议层的显式声明。 ACP 本期新增的 security.mdx 明确写出「Agent 输出不可信,包括被重放的内容;权限请求只是建议;自报身份不是安全信号」,并列举了已发表的 coding agent / MCP 客户端事故类别。同一周内 pi 侧仍有 #11473(codemode 工具因预算被静默丢弃)、#11497(SQLite 双开者 ID 冲突)这类「用户看不见的丢弃」问题。协议开始写「不可信」,实现仍需自己补上「不丢弃」。

  6. 协作形态的分化在本期进一步固化: opencode 单日 95 个合并 PR(rekram1-node 44、usrnk1 11、thdxr 11、Hona 9),ACP 单日 69 个(benbrandt 63),hindsight 8 个(nicoloboschi 7),pi 15 个(Mario Zechner 与 bot 为主),而 pi-web 连续 8 天零提交、3 个新 PR 与 4 个新 issue 全部零回复。「人少但事定」与「人多但无人接」的分界没有移动。

元信息

  • 报告生成时间: 2026-10-28T00:30:00Z
  • 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告 reports/latest.md 的 基准时间: 字段,自 2026-09-08 起连续 17 期未变)
  • 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-28T00:30:00Z(约 49.6 天);本期新增内容全部落在 2026-10-27T00:30:00Z 之后的约 24 小时
  • 数据源: GitHub API(gh CLI + GraphQL)+ mmx web search + 官方站点抓取(opencode.ai/docs/zen 与 /download、npm registry、opencode GitHub Releases)
  • API rate limit 剩余: 4933 / 5000(core,抓取完成后查询)
  • 抓取结果: 6 / 6 仓库 × 4 endpoint 全部成功(opencode 的 Discussions endpoint 返回 410「Discussions are disabled for this repo」,已跳过);本期增量统计口径为 created:>2026-10-27T00:30:00Z / merged:>2026-10-27T00:30:00Z 检索与 GraphQL 查询(opencode:50+ commit(commits endpoint 单页上限 50)、95 合并 PR、149 新 issue、174 新 PR;pi:27 commit、15 合并 PR、27 新 issue、19 新 PR;pi-web:0 commit、0 合并 PR、4 新 issue、3 个外部 PR;hindsight:8 commit、8 合并 PR、17 新 issue、9 新 PR;ACP:50 commit(单页上限)、69 合并 PR、0 新 issue、69 新 PR;blog:1 commit);opencode 的 release notes 取自 GitHub Release v2.2.0 与 dev 分支 CHANGELOG.md;pi 的 release notes 取自 GitHub Release v1.4.0、npm @earendil-works/pi-coding-agent 1.4.0 与 packages/{coding-agent,durable,chord,ai}/CHANGELOG.md 的 [Unreleased] 段;hindsight 无根级 CHANGELOG.md,release notes 取自 GitHub Release v1.1.0 与官网博客 hindsight-docs/blog/2026-10-27-hindsight-cloud-october.md;ACP 取自 Rust Crate v1.13.0、Schema v1.27.0 与 Schema v2.0.0-alpha.10

评论