2026 2026年10月12日 39 min · 11.4k chars by yxc023

GitHub 调研周报 2026-10-12

扫描窗口:2026-09-08T09:23:29Z → 2026-10-12T00:36:43Z(共 33.6 天)| 基准来源:上次报告 2026-10-11

2026-10-12 GitHub 调研周报

扫描窗口:2026-09-08T09:23:29Z → 2026-10-12T00:36:43Z(共 33.6 天)| 基准来源:上次报告 2026-10-11

仓库范围:config/repos.yaml 中 6 个项目。基准时间字段自 2026-09-08 起未变,因此窗口逐日变宽,本期新增内容主要落在 10-11 00:36 之后的 24 小时。本期最重要的一件事是 anomalyco/opencode 用 v1.19.0 正式把 1.x 线变成 OpenCode 2 的分发渠道并关掉自动更新,而升级通道打开的同一天 V2 就收到一份 SECURITY 级报告:plan mode 对 shell 没有规则,写项目树、写项目外、跑 gh 全部静默放行(#54632,修复 PR #54165 自 10-09 挂起未合)。第二件是 pi 的 durable code mode 一天落 6 个 commit:sandbox.start() 虚拟时钟 + 种子随机数做确定性重放、结果先 journal 后投递、nested call 按 c<id> 重挂、计数对账证明哪些调用是新的。第三件是 pi 的 compaction 从静默失败改成显式失败——996K/1M 的 session 此前每一轮都拿到空的 length 回答而界面上没有任何错误(#10807/#10806 当天开当天关)。第四件是 ACP v1.25 把 session notices 与 session compaction 两条 RFD 同时 stabilize,并在同一批把「fallback 本身有含义」的字段从宽容解析改成严格拒绝(#2333)。第五件是 pi-web v0.12.0 是一版纯性能 release(会话列表 3.2 MB → 385 KB、Prism 按需加载),并把 0.11.0 那个「npm 包内固定密钥可绕过密码」的余波收干净。hindsight 主分支停更 34 小时,但一天内出现三条形状一致的插件丢数据报告(#5492/#5493/#5494)。

本期速览

  • anomalyco/opencode: 1.x 最后一个功能型 release 到来了——v1.19.0(10-11)把 opencode upgrade --major 和 /update 变成通往 OpenCode 2 的唯一通道,并且取消自动安装更新;同一版把 PTY 检查改成「先校验 origin 与 ticket,再判断 PTY 是否存在」。升级通道打开的当天,V2 侧就收到一份标为 SECURITY 的报告 #54632:plan mode 在 V2 只是建议性而非强制执行——Plan agent 拒绝 edit/write/patch,却对 shell 没有任何规则,于是落到默认 allow;external_directory 自 #53585 起也默认 allow。维护者 bot 确认这是已知问题并把报告判为 #53955 的重复,修复 PR #54165(10-09 提交)至今 open 未合。

  • earendil-works/pi: durable code mode 在一天内落成 6 个 commit。sandbox.start() 让脚本带虚拟时钟与种子随机数确定性重跑,每次调用的结果先写 journal 再投递;重跑时 nested call 按 key c<id> 重新挂接,journal 缺的调用会被扣住直到 replay 结束,再与历史尝试的 key 对账;divergence、模块版本变化、sandbox 指纹变化、deadline 超时都会终止调用并存下错误。bench:codemode 把对比写进了 commit message:1,000 次并行调用 0.82 vs 0.78 ms/call,串行 1.52 vs 1.10 ms/call(每次调用多两个 commit:journal 条目和计数)。

  • earendil-works/pi: compaction 从「静默失败」改为「显式失败」。89e5c2c 记录的场景是——一次 blocking compaction 失败后,生成仍然照发请求,context 仍高于阻塞阈值,1M 窗口下 996K 的 session 每一轮都拿到空的 length 回答,而界面上看不到任何错误。现在 compaction 失败/fault/orphan/被中止会让生成以 model_error (Compaction failed: …) 结束,pi.live.compactionFailure 保留最近一次失败直到产出摘要。15e7bdc 同时修掉一个 1.38M-token 的 summarization 请求:thinking 不该进摘要(replayed thinking 常常根本不在 live context 里,provider 也只返回推理部分的摘要)。

  • earendil-works/pi: Session 的 document cache 从「进程生命周期」改成「按用量回收」。f44707e 引入 documentRetentionMs(默认 10 分钟,0 = 用完即丢,Infinity = 永不淘汰),没有 watch / document state 观察的文档在静默期后从 cache 退场,下次访问重新从 Storage 加载。bench:document-cache 测出的量级:5,000 个会话原本常驻 26,000 个文档、每个约 3.8 KB。配套的 cdaf6c2 把图像准备搬进 worker thread,6 兆像素图片从阻塞 event loop 200ms 以上降到 100ms 以内。

  • agentclientprotocol/agent-client-protocol: v1.25.0 / Rust crate v1.11.0(10-09)把 session notices 与 session compaction 两条 RFD 同时从 Preview 推到 Completed,v2.0.0-alpha.8 同步。同一批的 #2333 把「fallback 本身带有含义」的字段从宽容解析改成严格拒绝:v1 terminal/create 的 args/env/cwd/output 等,之前收到畸形值会静默做成与发送方意图不同的事,现在直接拒。这是对上周「用拒绝换掉默认放行」这条线在协议层的收口。

  • agegr/pi-web: v0.12.0(10-11)是一版几乎纯性能的 release。流式回复改成按 Markdown 块增量解析(#1176),会话列表接口不再携带每条会话的完整首条消息(大目录 3.2 MB → 385 KB),约 300 种 Prism 语言改为按需加载(#1183),工具结果图片由浏览器长期缓存,每次运行结束只重建一次列表。同时把 0.11.0 那个「npm 包内固定密钥可绕过密码」安全修复的余波收干净:指向已删除会话的链接不再回落到项目上一个会话(#1180)、ctx.reload() 在生成期间被守卫拒绝(#1173)。

  • vectorize-io/hindsight: 主分支从 10-10 14:24 起 34 小时没有 push,但 issue 区在同一天集中出现三条同一形状的插件丢数据报告:#5492 claude-code 插件的增量 retain 只保留最后一轮且不发时间戳、#5493 hermes 插件 shutdown() 丢掉上次 retain 之后缓冲的轮次、#5494 dsh 插件写入已下线的 V3 source.kind: "plugin" wrapper 导致每个新会话都失败。三条指向同一个结构问题:harness 侧的「会话结束」语义没有和 retain 缓冲绑定。社区侧同期出现三份 consolidation 追不上的报告(#5035 固定在 8.1m 失败、#4822 38k backlog、#5495 4B 量化模型 600s 超时)。

  • earendil-works/pi(社区): 「无人值守」正在从技巧变成协议。本周 Discussions 里出现 Pippa(Swift 原生 macOS 界面,走 pi --mode rpc,本地模型经 llama.cpp,Mail/Calendar/Reminders 暴露为 MCP)、Orbi(以 GitHub Issues 为唯一状态存储,无数据库无 daemon,双 session 先实现后评审、只有被评审过的 head 能合并)、以及用 models.json header 的 ${VAR} 给每次 pi -p 运行设硬美元上限(本地网关在预算耗尽后直接回 HTTP 402)。同期 dylanmoz 提议把「在 tool call 上暂停」做成协议能力:pending call 持久化、内存里什么都不留、人可以隔几小时再批准。

各仓库详情

anomalyco/opencode

开源 coding agent:TypeScript / Bun,单仓多 target(CLI / Desktop / TUI / ACP server / Web);MIT;Zen 为其模型网关。| stars: 212,734(上份 212,561,+173 / 24h) | open issues(含 PR): 3,996(上份 5,231,−1,235;其中 open issues 3,265、open PRs 731) | 默认分支: dev | 最近 push: 2026-10-11T23:48:27Z | 主页: https://opencode.ai

窗口期内 release 重点(近期):

  • v1.19.0(2026-10-11)— 1.x 线的功能收官,通道转向 V2

    • 新增 opencode upgrade --major,直接升级到 OpenCode 2;TUI 侧改用 /update 安装更新或升级 V2,更新不再自动安装
    • 允许 OpenAI 的 ultrafast service tier
    • 安全收紧:在判断某个 PTY 是否存在之前,先校验连接来源与 ticket
    • 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.19.0
  • v1.18.35(2026-10-06)— 面向 agent 的统计接口

  • v1.18.34(2026-09-30)— 身份头与 macOS 签名

    • 模型请求带上 namespaced 的 session 与 parent-session 身份头
    • 本地编译的 macOS 二进制 ad-hoc 重签,以在 macOS 27+ 上可靠运行(@ryangamerdev);CLI release 二进制改用 Developer ID 签名
    • 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.18.34

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

  • #54632 项目(安全) — SECURITY: plan mode is advisory, not enforced on V2 - writes, out-of-workspace writes, and shell execute unprompted and unrecorded(@Jin-Rk1, open,bot 判定为 #53955 重复)
    • 报告者在 V2 的 plan agent 下观察到:写项目树、写项目根之外(%TEMP%、workspace 外文件)、执行任意 shell(含 gh auth status 与 gh issue create 打公开仓库)全程无提示、无拒绝、tool history 里也没有记录;同样的请求在 V1 上会被拒绝
    • 维护者 bot 的解释确认了机制:Plan agent 在 ~/.opencode/plan/ 之外拒绝 edit/write/patch,但对 shell 没有任何规则,于是落到默认 allow;external_directory 自 #53585 起默认 allow;插件工具(context-mode)与 provider 自带工具完全不在权限体系内
    • 关联修复:#54165 fix(core): ask before shell commands in plan mode(10-09 提交,仍 open)
  • #54631 项目(资源泄漏) — Location invalidation duplicates a directory's fff engine; on v2 releases the old engine is never destroyed(@connor-grady, open)
    • 每个 location graph 各自 Fdd.create() 一份 fff engine 与 inotify 实例,内核不跨 inotify 去重 watch;v2.0.0–v2.0.26 锁 effect@4.0.0-rc.112,其 RcMap.release 只在 key 不在 map 时关闭条目,导致每个 V2 release 之后旧 graph 都不被销毁
  • #54640 项目(数据可达性) — sessions: V1-migrated sessions are orphaned in the global project and hidden after upgrading to V2(@WilliamSantos96, open)
    • 1.19.0 → 2.0.26 迁移后 94 条历史会话仍在 V2 数据库里,但挂在合成的 global project(canonical: "/"、subpath: "Windows/System32")下,V2 没有任何真实目录解析到它,只能靠 Ctrl+O 找到
  • #54617 项目(路径边界) — V2 forwards foreign directory hints to Location lookup without boundary validation(@romanilyin, open)
    • POSIX server 上 GET /api/location?location[directory]=C:\Work\Repo 或 x-opencode-directory 头里的 Windows 语法会被原样转给 Location lookup,期望在初始化前返回结构化 HTTP 400
  • #54652 / #54653 项目(无障碍) — V2 在生成期间用 aria-hidden 隐藏整个 assistant 子树,屏幕阅读器要等生成结束才能读到内容;AnimatedNumber 把动画格暴露给辅助技术,多位数读序颠倒(值 12 的可访问性快照里出现 2 再 1)(@aimansour, open)
  • 38454c6 项目(安全) — feat(cli): ask before pair --remote first exposes the server (@thdxr, 10-11)
  • 83f2b6f 项目(架构) — refactor(console): make Zen routes a thin inference proxy (@vimtor, 10-11)
  • 4be28c9 项目(生命周期) — feat(core): archive projects whose directories are gone (@thdxr, 10-11)
  • #54563 / #54597 / #54609 / #54622 — 4 条集中在更新与安装路径的改动:artifact 文件名改为重定向到 latest release URL、curl 安装检测解析 symlink home、优先使用路径匹配的包管理器并延长探测超时

社区讨论 / 行业方向:

信号观察:

  • 1.x 从「与 V2 并行的产品线」转成「V2 的分发渠道」:v1.19.0 一版里同时做了升级入口、关闭自动更新、收紧 PTY 校验,典型的维护末线形态。
  • open issues(含 PR)从 5,231 降到 3,996,一天内 −1,235;配合 #54640 这种「会话还在库里但列表里看不到」的报告,V1→V2 迁移的收尾工作仍在进行中。
  • 本周新开的 issue 有明显的读源码取证特征:#54631、#54617、#54652 三条都直接引用到行号的 v2 commit 4617210822,其中两条明确说明「受影响文件在当前 dev 的 707de58 上同样未变」。
  • 权限相关的报告正在从「bug」升级为「SECURITY」定级,理由不是可利用性而是失效是静默的——报告者自己写道:界面、转录、tool history 里都没有任何护栏被绕过的信号,操作者拿不到任何提示。

earendil-works/pi

AI agent 工具集:统一 LLM API、agent loop、TUI、coding agent CLI;TypeScript / Bun,可作为 pi extension 扩展;MIT。| stars: 114,318(上份 114,115,+203 / 24h) | open issues(含 PR): 321(上份 323,−2;其中 open issues 236、open PRs 85) | 默认分支: main | 最近 push: 2026-10-12T00:23:39Z | 主页: https://pi.dev

窗口期内 release 重点(近期):

  • v1.1.0(2026-10-07)— 程序状态上报 + 分类模型

    • Program status reporting:支持 OSC 7501 的终端与 agent dashboard 能看到 pi 是「在工作」「卡在对话框或登录」「完成」还是「失败」;PI_PROGRAM_STATUS=1|0 可覆盖检测结果(#10607)
    • 新增 Claude Haiku 5.5(anthropic/claude-haiku-5-5),adaptive thinking 最高到 xhigh/max;新增 OpenAI GPT-6 Luna 作为分类模型走 Decisions API,models.classify() 接受图片
    • --tools 支持 +name/-name 增量修改默认工具选择(pi -t +codemode,-write),而不是整体替换
    • llama.cpp 0.6.0+ 服务的 Julia-1、Laya、Kev、lev、OpenJev 通过 /v1/systemone 原生跑为分类模型而非 chat 模型
    • agent_settled 事件新增 aborted,让集成方能区分「被取消」与「跑完了」;tool_execution_end 新增 durationMs
    • 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.1.0
  • v1.0.4(2026-10-05)— 工具模式与 --no-mcp

    • --tools / --exclude-tools 接受 * 通配(--tools read,codemode,'mcp__radius__*' 可只保留一个 MCP server 的工具);--no-mcp 单次运行关闭内置 MCP
    • codemode 的 tools.read() 读图片现在返回 image block,image() 能显示;内置对象在脚本运行前被冻结,Array.prototype.toJSON = ... 之类补丁不再让 pi 崩溃并让 tool call 悬空(#10444)
    • 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.0.4
  • v1.0.3(2026-10-05)— Azure provider 改名(breaking)

    • azure-openai-responses 更名为 azure,需在 auth.json、models.json、settings.json 三处同步;使用旧 provider 的会话恢复时会回落到别的模型且 prompt cache 不复用;AZURE_OPENAI_* 环境变量不变(#9714, @jsanter27)
    • codemode 的 image() 现在额外把图片写到临时文件并在结果里给出路径
    • 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.0.3

其他重要 commits / PRs(按重要性挑选,均为 10-11 当天):

  • 7b597d1 项目(长时运行) — feat(durable): durable code mode (@earendil-works/pi-durable/codemode) (@badlogic)
    • 脚本确定性运行(pi-codemode start()),每个结果先写 journal 再投递;重跑从存档的 start data 重新开始,按序投递已 journal 的结果,nested call 按 key c<id> 重新挂接,核对每次记录的调用数,把 journal 缺失的调用扣到 replay 结束再与历史尝试的 key 对账,然后继续实时执行
    • 只有在「发起它的那次 drain 的计数已提交」之后调用才会真正发出,所以重跑能证明哪些调用是新的
    • divergence、模块版本变化、sandbox 指纹变化、deadline 到期 → 以存档错误结束;已决定的结局无需 VM 即可返回
  • 0fb1aee 项目(协议) — feat(codemode): deterministic runs that the host answers (sandbox.start) (@badlogic)
    • start() 用虚拟时钟(startedAt,然后是每个结果的时间,绝不回退)、来自种子的随机数、UTC、无 WeakRef/FinalizationRegistry,以及该 run 自己的工具与全局量;每次调用带 VM call id 交给 onCall,宿主用 run.deliver(seq, now, id, outcome) 回答
    • VM 无论传输层如何乱序都严格按 seq 应用结果,在脚本运行前报告指纹(引擎版本、prelude hash、limits)
  • 127b771 项目(可观测) — feat(durable): code mode result lists the script's tool calls (@badlogic)
    • details.calls 按调用顺序记录脚本做的每个工具调用,含 ok/error/cancelled、耗时、截断的参数与错误;脚本结束时仍在跑或尚未发出的调用记为 cancelled
    • bench:codemode:1,000 次并行调用 0.82 vs 0.78 ms/call,串行 1.52 vs 1.10 ms/call(每次调用多两个 commit:journal 条目与计数)
  • 89e5c2c 项目(正确性) — fix(durable): fail a run whose blocking compaction failed; keep compaction failures visible (@badlogic)
  • 15e7bdc 项目(成本) — fix(coding-agent,durable): omit thinking from compaction summaries (@badlogic):一个 Pi Mobile session 在 1M 上下文里跑到约 996K 时,会产出 1.38M-token 的 summarization 请求并每次都失败
  • f44707e 项目(资源生命周期) — feat(durable): bound the Session's document cache by use (documentRetentionMs) (@badlogic),配套 bench:document-cache
  • cdaf6c2 项目(性能) — feat(durable): prepare images in a worker thread in /images/node (@badlogic)
  • 8a9c051 项目(schema) — feat(codemode): show schema constraints in tool declarations (@mitsuhiko):TypeScript 类型表达不了的约束(integer、bounds、lengths、pattern、format、default)以 @ tag 形式带进声明,从可空的 anyOf 分支也能读到;closes #10707
  • 96abe9a 项目(配置) — feat(coding-agent): use pi.dev configuration schemas (#10751, @christianklotz, 已合并)
  • e6b9a6a 项目(durable 输入) — feat(durable): inputs placed as application entries, display-only writes appended at once (@badlogic, closes #10407):只有 kind 和 data、没有 model/head/edits 的写入会一次性追加并直接 settled done;只有 queued reset 会把它们扣住
  • 0f4b146 项目(兼容) — fix(ai): send the codex request body as a Uint8Array<ArrayBuffer> copy (@badlogic):DOM lib 下 fetch 也接受它作为 body

社区讨论 / 行业方向:

信号观察:

  • 本周 25 条新 issue 中 24 条在当天被关闭,其中大量是具体的可复现缺陷(read EIO 崩溃、managed npm install 竞态、Playwright Chrome 残留进程组、上下文估算被一次 429 永久污染)。这与上周记录的「github-actions[bot] 自动关闭未获 lgtm 的 issue」是同一套机制,但本周关掉的是有实质内容的问题。
  • durable 的三个 commit message 都自带量化的验收数字(0.82/0.78 ms per call、26,000 文档 × 3.8 KB、6MP 图片 200ms→100ms),并且 npm test 会用「每次访问后立即淘汰」的设置把 durable suite 再跑一遍(f44707e)。
  • 「确定性重放 + 键对齐 + 计数对账」这套机制目前是本仓库里对「外部副作用如何不重复执行」回答得最完整的一版;0456663 补上的边界也写得很直接:沙箱被关闭不应替脚本决定结局。
  • 社区侧四个新项目(Mac 原生界面、GitHub Issues runner、硬预算网关、人工批准暂停)互不相识,但都指向同一件事:把「谁持有这段工作」从进程内存搬到可持久化的存储。

agegr/pi-web

pi coding agent 的 Web UI;TypeScript / Next.js,读取本地 pi session JSONL 维持会话,服务端在真实 workspace 里让 session 持续运行。| stars: 7,246(上份 7,224,+22 / 24h) | open issues(含 PR): 6(上份 21,−15;其中 open issues 3、open PRs 3) | 默认分支: main | 最近 push: 2026-10-11T14:04:27Z | 主页: https://github.com/agegr/pi-web

窗口期内 release 重点(近期):

  • v0.12.0(2026-10-11)— 一版以性能为主的 release

    • 新增:项目分组 ⋯ 菜单末尾「删除全部会话… · N」(先确认且默认聚焦「取消」,保留正在运行或等待输入的会话,#1182);侧边栏会话标题变成真正的链接,中键 / Ctrl+Cmd 点击在新标签页打开(#1167, #1169);子代理可连接 MCP 服务器(配置文件写 mcp: on,只读工具的子代理只跑服务器标为只读的 MCP 工具,#1053/#1187);子代理模型支持 :level 后缀(#1188/#1189);竖屏触屏终端提供 Termux 风格额外按键(#1166)
    • 修复:完成提示音在空闲时挂起 AudioContext、运行期间保持运行,锁屏时结束也能响,resume 超 3 秒的提示音直接丢弃(#1157/#1178/#1185);指向已删除会话的链接不再显示项目上次打开的会话(#1168/#1180);Windows CLI 在 Node 23–24.19 / 26.6 上不再以 0xC0000409(libuv 断言)退出(#1174/#1179);扩展在生成或压缩期间调用 ctx.reload() 被拒绝并警告(#1172/#1173)
    • 性能:流式回复按 Markdown 块增量解析、每个片段只重新渲染正在生成的回复(#1176/#1191);约 300 种 Prism 语言改为按需加载,长历史里的代码块在空闲时分批上色(#1183/#1181);会话列表接口不再携带每条会话完整的首条消息,大目录 3.2 MB → 385 KB(#1176);每次运行结束只重建一次列表(#1177);工具结果图片由浏览器长期缓存
    • 内部调整:删除只复述实现源码文本的测试(2968 → 2589 个,f364bc3)
    • 完整 release notes: https://github.com/agegr/pi-web/releases/tag/v0.12.0
  • v0.11.1(2026-10-10)— 文件浏览器默认位置 + CLI 命令

    • 桌面端文件浏览器默认显示在会话列表下方(可拖动、可折叠、带自己的文件搜索,3fe257f);新增 pi-web version / update / status / stop / open(#1139/#1154);子代理工作可在右侧面板标签中查看只读对话记录(#1129);子代理支持可选 codemode(#1097);运行中写入的文件与编辑器/终端里的改动自动刷新文件树(#1144/#1153)
    • 完整 release notes: https://github.com/agegr/pi-web/releases/tag/v0.11.1
  • v0.11.0(2026-10-08)— 侧边栏重设计 + 严重安全修复

    • ⚠️ 0.11.0 之前密码保护可被绕过:每个 npm 包里都带着同一组固定的内部密钥,任何人从公开 npm 包读到它就能绕过密码登录与 Host/Origin 检查。新版每次启动生成新的随机密钥;安装目录不可写时启动打印警告。感谢腾讯玄武实验室 XlabAI Team 报告
    • Windows 上 git diff 接口可通过目录联接(junction)读到允许范围以外的文件(#1039);Next.js 升级到 16.3.8
    • 侧边栏重设计:所有项目同时显示为可折叠分组、置顶与归档、项目顺序不再因新消息跳到最上面、在侧边栏分叉会话、「会话 | 文件」两个标签
    • 完整 release notes: https://github.com/agegr/pi-web/releases/tag/v0.11.0

其他重要 commits / PRs(按重要性挑选,均为 10-11 当天):

  • #1191 项目(性能) — perf(chat): re-render only the streaming reply per chunk (@agegr, 已合并)
  • #1187 项目(权限继承) — feat(subagents): connect mcp.json servers with a profile's mcp: on (@agegr, 已合并, #1053)
    • 子代理按普通会话相同的信任规则连接 mcp.json 中的服务器——这一条值得单独记:权限模型不是为子代理另设一套,而是复用主会话的判定
  • #1176 项目(性能/正确性) — perf: streaming markdown, session list payload, push title, SSE image echo (@agegr, 已合并)
  • #1173 项目(并发正确性) — fix(sessions): guard the remaining in-flight-turn invalidation paths (@solidlime, 已合并):与 pi TUI 行为对齐,在生成或压缩期间 ctx.reload() 被拒绝
  • #1169 项目(交互) — feat(sessions): open sidebar sessions in a new browser tab (@wowayou, 已合并)
  • #1166 / #1160 项目(移动端输入) — feat(terminal): add Termux-style extra keys on portrait touch screens / fix(terminal): keep input alive when the phone keyboard collapses the panel (@vill-jiang, 均已合并)
  • #1190 项目(一致性) — fix(mcp): say each fact once in a server's detail pane (@agegr, 已合并):状态与连接合为一行、工具列在 Tools 选项下、去掉重复的 Transport / Sign-in 行
  • #1186 项目(社区) — add theme logo and + (@su600, open)

社区讨论 / 行业方向:

信号观察:

  • 外部贡献在本仓库是可量化的:v0.12.0 的 release notes 里 vill 贡献 2 条、Tigerrr07 贡献 2 条、tammelin、wowayou、solidlime 各 1 条,全部在当天合并。这与 opencode / pi 的「外部贡献默认不被接收」形成对照。
  • 社区贡献集中在具体的平台适配上(Termux 按键、Windows libuv 崩溃、移动端音频唤醒锁、超 256KB 的 HTML 预览),而不是架构性改动。
  • v0.11.0 的安全修复(固定密钥 → 每次启动随机)发布 4 天后,#1180 与 #1173 两条针对该版新行为的回归报告都已修复并进入 v0.12.0。
  • open issues(含 PR)从 21 降到 6,说明维护者在 v0.12.0 发布当天清空了积压;剩下 3 条 issue 中有 2 条是 10-11/10-12 新开的。

vectorize-io/hindsight

Agent 记忆系统:retain / recall / reflect 三大能力 + 本地嵌入式 hermes / embed,可作 MCP server、CLI、REST API,也可作为 Hermes / OpenClaw / Cursor / Paperclip / Grok Bot 的可插拔记忆层;MIT。| stars: 48,426(上份 48,072,+354 / 24h) | open issues(含 PR): 200(上份 191,+9;其中 open issues 192、open PRs 8) | 默认分支: main | 最近 push: 2026-10-10T14:24:49Z | 主页: https://hindsight.vectorize.io/

窗口期内 release 重点(近期):

  • v0.10.3(2026-10-08)— 记忆从「判断」改为「义务」

    • feat(coding-agents): treat memory as a past record, and let teams add their own guidance (#4791)
    • fix(coding-agents): hold the deepen lock with a heartbeat, not a 30-minute TTL (#4920)——锁的持有方式从固定 TTL 改成心跳
    • fix(coding-agents): deepen waits out 429s instead of dropping history (#4942)
    • feat(coding-agents): add TraeCode (TRAE CN) harness (#4535, @cq-guojia)
    • fix(hermes): run the embedded daemon out-of-process instead of importing hindsight-all (#4930),配套把父进程的 PYTHONPATH 排除在 uvx 守护进程之外(#4936/#4946)
    • chore(types): turn invalid-argument-type on, and clear the 284 it reported (#4975);fix(api): let an operation validator declare a bank-list scope (#4970)
    • docs(eve): capture regression spans 0.51–0.68, fixed in eve 0.69.0 (#4984)
    • 完整 release notes: https://github.com/vectorize-io/hindsight/releases/tag/v0.10.3
  • v0.10.2(2026-09-29)— 记忆额度与 Oracle 后端补齐

    • feat(coding-agents): make memory crediting an obligation, not a judgement call (#4677)
    • fix(coding-agents): concise extraction by default, configurable and synced (#4560)
    • feat(consolidation): per-scope consolidation strategies (#4619);fix(mental-models): a failed refresh settles instead of looping on the LLM bill (#4618)
    • 大批量 Oracle 后端修复:JSON_MERGEPATCH 返回 CLOB(#4628)、SET LOCAL 视为空操作(#4633)、NOT (jsonb @> literal) 重写(#4634)、relink_pass 接受 UUID id(#4647)、staleness 时间戳按 UTC 比较(#4627)
    • blog: A Bank Is Now Something You Can Pick Up(#4624)
    • 完整 release notes: https://github.com/vectorize-io/hindsight/releases/tag/v0.10.2
  • v0.10.1 / v0.10.0(2026-09-21 / 2026-09-14)— 窗口期内的两个大版本

    • v0.10.0:fix(retain): batch a document's chunk embeddings(每 chunk 一次请求 → 批量)、perf(tokenizer): replace tiktoken with quicktok and default to o200k_base、feat(recall): per-bank enable_text_search toggle for pure vector recall、blog: How We Made Retain's Peak Memory Flat, from 4 MB to 90 MB Documents
    • v0.10.1:fix(coding-agents): read transcripts whole so append survives past 32MB、feat(python-client): add task-local retain suspension、chore(skills): add ship-it skill
    • 完整 release notes: https://github.com/vectorize-io/hindsight/releases

其他重要 commits / PRs:

  • 主分支自 2026-10-10T14:24Z 起 34 小时无 push。窗口后段最近的实质提交:
    • 44d5340 项目(集成) — blog: Grok Bot Can Read What Your Other AI Tools Already Learned (#5461, 10-09)
    • d144bb7 项目(文档) — docs(grok-bot): the marketplace listing is not approved yet (#5465, 10-09):在上线前一天就明确标注 marketplace listing 尚未获批
    • a9eeed7 / a0adcf0 / ecd15ec / ac99185 — 10-10 的四条依赖 bump(handlebars 4.7.10、banks 2.5.1、pydantic-ai-slim 1.107.7)
  • 本周新开 issue 中,三条在同一天提交且形状一致:
    • #5492 claude-code plugin: incremental retains keep only the last turn, and no timestamp is sent (@ai-ag2026, open)
    • #5493 hermes plugin: shutdown() drops turns buffered since the last retain (retain_every_n_turns > 1) (@ai-ag2026, open)
    • #5494 dsh plugin: recall injection writes the retired V3 source.kind: "plugin" wrapper — every new dsh session fails (@judickzhu, open)
  • #5500 Mental-model refresh: delta and retraction calls are tied to the consolidation temperature (@gustavcke, open)
  • #5497 Consolidation: opt-in cosine filter on pending facts before LLM batching (skip near-duplicates, no delete) (@royalskynet, open)
  • #5498 Allow for retrying failed imported documents (@Frankkkkk, open)
  • #5496 CLI 0.10.3: documented failed outcome is rejected and stored error text causes a false HTTP 500 (@HengYangDS, open)
  • #5499 hermes plugin: cut a new release for catalog re-pin (local_embedded/Windows daemon fix and newer config surfaces) (@hugetoucan, open)
  • 窗口内长期存在的未合并 PR:#3900 feat(llm): route operations by metadata (@cachanova, open)

社区讨论 / 行业方向:

  • Self-hosted on a shared local GPU: consolidation never catches up (38k backlog). What are we doing wrong? (@Longfortv5, 09-26 创建,10-11 更新):v0.10.1、Docker、embedded pg0、单 worker、NVIDIA GB10(128GB 统一内存);retain 与 consolidation 用同一个本地 27B 模型、同一块 GPU,白天还要跑交易 agent 与 Graphiti 图构建;embedding 换成 nvidia/NV-Embed-v2 后 recall 质量明显上升,但 consolidation 从此追不上。提问者自陈「大部分痛点是我们自己的部署选择而非 Hindsight 的 bug」
  • Field report: Hindsight v0.10.3 with local Qwen3.5 4B Q4_K_M (@sheyoshan, 10-11):6–7 小时排查,结论是 Retain 良好、Recall 响应快,但 Consolidation 不一致:有的 2 事实批次约 80 秒完成并给出简洁合法 JSON,有的生成上千 token 无法在 600 秒超时前结束。作者假设是任务/模型/硬件错配——4B 级量化模型难以可靠终止复杂的长上下文 schema 约束生成,约 11 token/s 下超长补全必然超时
  • My consolidation always fails at duration 8.1m (@KonradHEXANT, 10-01 创建,10-11 更新):失败时间固定在 8.1 分钟,问是否有更长的超时设置——同一个 8.1 分钟的数字在另一份报告里也出现过,指向某个写死的超时而非负载相关
  • Community benchmark: we evaluated Hindsight (0.10.2, retrieval-only, Chinese corpus) (@FuRongJun-1999, 10-04):自建中文长上下文记忆基准 hive-memory-bench(23 章约 6.1 万字 + 184 道因果推理题),所有记忆系统接同一个生成器(deepseek-flash),唯一变量是记忆层检索到什么;对比 OpenViking、Mem0、MemOS、Hindsight、朴素 BM25 基线与自家的 dsh-memory(灵枢),并主动披露自家项目也参与对比、公开全部原始读数以供复算
  • hindsight is #1 in Memory on Archestack (@archestack, 10-10):基于公开 GitHub 数据生成的独立开源 AI 项目排名,hindsight 在 12 个 Memory 类项目中排第一,作者主动提供每日更新两次的徽章并说明「加不加徽章都不影响排名」
  • Local inference setup - recommendations (@zviratko, 创建于 06-15,10-11 仍有更新):M5 Max 128GB 上 oMLX 同时加载 bge-m3-mlx-fp16(embedding ~1GB)、bge-reranker-v2-m3(reranker ~2GB)、Qwen3.6-35B-A3B(~38GB)、gemma-4-E4B-it-oQ8(~8GB);retain 与 consolidation 一启动就整体变慢
  • hindsight is #1 in Memory on Archestack 与 hive-memory-bench: 社区自发出现两类外部评价基建——一个基于公开 GitHub 数据的排名系统,和一个把「记忆层」作为唯一变量隔离出来的中文基准

信号观察:

  • 本周 10 条新 issue 中有 4 条来自同一位报告者(@ai-ag2026),分别指向 claude-code 与 hermes 两个插件,且都是**「增量 / 缓冲的轮次在某个事件边界丢失」**这一形状。加上 #5494 的「写入已下线的 V3 wrapper」,三条都指向同一件事:harness 侧的会话结束与 schema 版本语义没有和 retain 缓冲绑定。这与 v0.10.3 的 shutdown() 丢缓冲(#5493)互相印证。
  • consolidation 是当前社区反馈最集中的单一故障面,且失败模式高度一致:不是数据错,是任务不收敛导致超时。三类报告(小模型 schema 约束生成不终止、固定 8.1 分钟超时、共享 GPU 吞吐被抢占)指向同一个未解决的资源问题。
  • v0.10.3 的 deepen lock with a heartbeat, not a 30-minute TTL 与 deepen waits out 429s instead of dropping history 是同一方向的两次修补:把「超时即放弃」换成「心跳续约 + 等待」。这与上周记录的「pi-durable 用所有权引用替代 TTL」是同一类修法。
  • 社区自发形成了两个外部评价来源(Archestack 排名、hive-memory-bench 中文基准),后者明确采用「同一生成器、只变记忆层」的对照设计,并主动披露利益相关与可复算的原始数据。

agentclientprotocol/agent-client-protocol

Agent 与 Editor 之间的协议(ACP):JSON-RPC 2.0 over stdio / HTTP,本地 agent 作为子进程启动;Rust crate + JSON schema 双轨发布;Apache-2.0。| stars: 4,414(上份 4,408,+6 / 24h) | open issues(含 PR): 46(上份 45,+1;其中 open issues 9、open PRs 37) | 默认分支: main | 最近 push: 2026-10-11T20:20:03Z | 主页: https://agentclientprotocol.com

窗口期内 release 重点(近期):

  • schema-v1.25.0 / Rust crate v1.11.0 / schema-v2.0.0-alpha.8(2026-10-09)— 两条 RFD 同时收尾

    • feat(schema): stabilize session notices (#2336):Notice、开放的 NoticeSeverity、SessionUpdate::Notice 变体与 v1 notice 能力不再需要 unstable_session_notices;保留 Preview 阶段的线上契约——v1 投递需要 clientCapabilities.session.notices,v2 不需要任何能力声明;notice 仍是 live-only 事件,不进入对话历史,由 Client 负责呈现与关闭
    • feat(schema): stabilize session compaction (#2334):移除 unstable_session_compaction,compaction 类型、session update 与 v1 能力进入稳定产物;新观察到的 compaction 默认按 in_progress 处理,允许摘要 chunk 作为第一条通知,compaction_update 上的 status 保持必填
    • fix(schema): reject malformed values receivers act on (#2333):紧跟 #1583,把「fallback 本身带有含义」的字段从宽容解析改为严格拒绝——v1 terminal/create 的 args/env/cwd/output 等,收到畸形值时之前会静默做成与发送方要求不同的事
    • feat(unstable): report failures after prompt insertion with an error stop reason (#2281)
    • docs: clarify v2 entity IDs are unique per entity type (#2332)
    • 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/schema-v1.25.0
  • v1.10.2(2026-10-01)— 静默跳过畸形条目

其他重要 commits / PRs:

  • 窗口后段 main 的 4 次提交全部是 acp-release-bot[bot] docs: update registry agents(#2345–#2348,10-11 四次)。本批的 registry 变更内容为纯版本号推进:Qwen coding assistant 0.25.0 → 0.25.1、sigit 1.6.6 → 1.6.7
  • 协议主线在 10-09 发布 v1.25.0 后,本周没有新的 schema 变更提交——节奏是「RFD 成熟 → 一次性 stabilize 若干条」

社区讨论 / 行业方向:

信号观察:

  • #2336 保留了 Preview 阶段的线上契约(v1 需要能力声明、v2 不需要、notice 不进对话历史、呈现与关闭由 Client 决定)——协议稳定化的常见做法是先把「谁负责什么」写死,再放开 flag,而不是同时改语义。
  • #2333 与 #2336/#2334 出自同一天、同一批发布,方向相反但同源:一面把两条能力从 Preview 推向稳定,一面把「fallback 有自己含义」的字段从宽容改成拒绝。宽容解析被显式收窄的字段清单,本质是一份「静默做错事」的清单。
  • acp-release-bot 在 10-11 一天内四次提交 registry 版本号推进,说明生态的日常变化目前几乎全部落在文档而不是协议上。
  • 提案区的密度(10-02 单日 3 条:nested session config、projects、decision model endpoint)与 projects 提案指向同一个未被协议覆盖的现实:agent 已经在按项目/工作树分裂线程,但协议里只有 cwd。

yxc023/yxc023.github.io

个人技术博客(Astro);本仓库作为 daily-research 报告自动同步的目标。| stars: 1 | open issues(含 PR): 27(其中 open PRs 3,全部为 dependabot 未合并) | 默认分支: master | 最近 push: 2026-10-11T00:38:33Z | 主页: https://yxc023.github.io

窗口期内 release 重点:

  • 窗口期内无 release(该仓库不发布 GitHub Release)。npm 包 @agegr/pi-web 的发布在 pi-web 仓库而非此处。

其他重要 commits / PRs:

  • 069c4c7 自动(同步) — auto(reports): 同步 daily-research 2026-10-11 (@yxc023, 10-11)
  • 8fb5dff / 67943f6 / b8a5d98 / ec6fc9e / 6ac215f / 6ce9044 / 8bf065b / 44d48be — 10-02 至 10-10 每日的 auto(reports): 同步 daily-research <date>
  • bffed37 人工 — revert: 撤下《Agent Skill 管理实践调研》 (@yxc023, 10-08):该文于 09-29 上线(604a732),10-08 被撤下,是窗口内该仓库唯一的非自动提交
  • 未合并 PR:#28 Bump astro from 5.18.2 to 7.2.8 / #24 Bump astro from 5.18.2 to 7.1.1 / #23 Bump sharp and astro(均 @dependabot[bot],open)——Astro 主版本从 5 到 7 的两次 dependabot 提案并存且都未合并,说明该仓库的依赖升级不在自动流程里

社区讨论 / 行业方向:

信号观察:

  • 该仓库的提交历史即本调研的部署轨迹:连续 9 天的 auto(reports) 提交与 scripts/deploy-blog.sh 的 sync → commit → push → build → deploy 流水线一一对应。
  • 10-08 的 revert 发生在报告同步之外(09-29 上线、10-08 撤下,中间隔了 9 天),说明该博客的手工内容有独立的编辑周期。
  • 3 个未合并的 dependabot PR 中有 2 个是同一条 Astro 5→7 升级的不同版本提案,互相冲突且长期挂起,是全窗口内唯一「自动化流程没有覆盖到」的位置。

跨项目观察

  1. 「默认 allow」正在成为各家最贵的默认值,而且失效是静默的。 opencode 的 plan mode 对 shell 无规则(#54632)、external_directory 自 #53585 起默认 allow、插件与 provider 自带工具完全在权限体系之外;hindsight 三条插件 issue 的形状是「shutdown() 静默丢弃缓冲轮次」;pi-web 的对策是把子代理直接复用主会话的信任规则而不是另设一套(#1187)。四处面对的都是同一个问题:当默认值是「放行」时,「没触发保护」和「保护生效了」在信号上无法区分。

  2. 协议层选择收紧,实现层仍在放松,两件事在同一周发生。 ACP 的 #2333 把「fallback 本身带有含义」的字段从宽容解析改成严格拒绝(v1 terminal/create 的 args/env/cwd/output);同一批的 #2336/#2334 把 session notices 与 session compaction 从 Preview 推到稳定。而实现侧,opencode 把项目目录之外的访问询问默认关掉,Claude Code 同期也在把 deny 规则扩展到 symlink 与复合命令。前者把模糊变清楚,后者把询问变少——两条相反的曲线在同一周各自推进。

  3. 性能数字进 commit message 已经是这几家的共同做法,而且开始带条件。 pi 的 bench:codemode(1,000 并行 0.82 vs 0.78 ms/call、串行 1.52 vs 1.10)、bench:document-cache(5,000 会话 / 26,000 文档 / 3.8 KB)、bench:scheduler-fanout(上周的 18.8 s → 2.7 s);pi-web 把 3.2 MB → 385 KB 和「2968 → 2589 个测试」直接写进 release notes;hindsight 的 blog: How We Made Retain's Peak Memory Flat, from 4 MB to 90 MB Documents 把内存曲线做成了发布内容。值得注意的是 pi 的基准带对照组(durable vs 非 durable、默认 retention vs 50ms retention),而不只是单点数字。

  4. 会话与文档的生命周期正在从「进程生命周期」改为「按用量回收」。 pi 的 documentRetentionMs(默认 10 分钟,0 = 用完即丢,Infinity = 不淘汰,且 eviction 跑在 mutation line 上、每次 commit outcome 后执行以保证事务不丢 tracker);pi-web 每次运行结束只重建一次列表、子代理关系只在文件变化时重读;opencode 开始归档目录已消失的项目(#54354)并把 fff engine 的重复创建当成资源泄漏在追(#54631);pi-durable 上一周已把常驻边从 10,001 条压到 1 条。四处都是同一个取舍:宁可让下次访问重新加载,也不为「也许还会用」常驻。

  5. harness 集成层的 bug 高度集中在三个位置:会话结束、增量/缓冲、schema 版本漂移。 hindsight 一天内三条(#5492 增量 retain 只留最后一轮且不发时间戳、#5493 shutdown() 丢缓冲轮次、#5494 写入已下线的 V3 source.kind wrapper);pi-web 的对应动作是让子代理读 pi 的 model:level 后缀(#1189)与 mcp.json 信任规则(#1187)——不自己发明语义,而是复用上游。opencode 的 #54640(V1 迁移后的会话挂在无人解析的 global project 下)本质上是同一个问题的迁移侧版本。

  6. 「非功能性」缺陷开始被当作正式 bug 提交。 opencode 本周有三条读源码取证的 issue 指向无障碍(#54652 生成期间 aria-hidden 隐藏整个 assistant 子树、#54653 AnimatedNumber 的读序颠倒)与路径边界(#54617 POSIX server 接受 Windows 语法的目录 hint),全部精确到 v2 commit 4617210822 的行号,并说明「受影响文件在当前 dev 的 707de58 上同样未变」。这类报告过去通常不会进入 issue 列表。

元信息

  • 报告生成时间: 2026-10-12T00:36:43Z
  • 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告 reports/latest.md 的 基准时间: 字段)
  • 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-12T00:36:43Z(约 33.6 天)
  • 数据源: GitHub API(gh CLI)+ mmx web search;Discussions 与 Issues 用 GraphQL / search API 补充(REST 的 discussions 列表接口返回的是最早一页,本轮未使用)
  • API rate limit 剩余: 5000
  • 抓取失败: 无(6/6 仓库的 repo / releases / commits / pulls 全部成功;anomalyco/opencode 的 Discussions 处于禁用状态,GraphQL 返回 hasDiscussionsEnabled: false,该仓库的社区讨论段改由 mmx web search 与 issue 区补足)

评论