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 按 keyc<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 插件写入已下线的 V3source.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.jsonheader 的${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 的
ultrafastservice tier - 安全收紧:在判断某个 PTY 是否存在之前,先校验连接来源与 ticket
- 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.19.0
- 新增
-
v1.18.35(2026-10-06)— 面向 agent 的统计接口
- 为 agent 可读的 stats 增加 canonical redirect,以及 JSON 与 Markdown 两种数据格式
- xAI 的 tool result 现在能带上受支持的图片,不再支持的格式直接跳过(@Jaaneek)
- 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.18.35
-
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)
- 报告者在 V2 的 plan agent 下观察到:写项目树、写项目根之外(
- #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 都不被销毁
- 每个 location 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 数据库里,但挂在合成的
globalproject(canonical: "/"、subpath: "Windows/System32")下,V2 没有任何真实目录解析到它,只能靠Ctrl+O找到
- 1.19.0 → 2.0.26 迁移后 94 条历史会话仍在 V2 数据库里,但挂在合成的
- #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
- POSIX server 上
- #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、优先使用路径匹配的包管理器并延长探测超时
社区讨论 / 行业方向:
- OpenCode 2 Version Tracker: Environment Variables, Config & Features per Release: 第三方逐版本追踪指出 V2 是从零开始的 TypeScript 重写,自 2026-09-11 以
@opencode/cli发布,在v2分支开发而 1.x 继续出包;V2 的 tag 一开始不带 release notes,所以每条分析都靠 diff 归属到具体版本 - OpenCode 2 v2.0.25: Office file previews, fewer access prompts: 该文把 #53585「不再为项目目录之外的路径请求访问」与 #53546「请求体不再携带 API key 元数据」并列为触及权限与凭据表面的两个改动 —— 本周 #54632 报告的正是第一条的实际后果
- OpenCode 2 v2.0.24: native Vercel AI Gateway provider, AI SDK v6 by default: Vercel AI Gateway 成为原生 provider,provider 集成默认安装 AI SDK v6;文中反复出现的对照是 Claude Code / Codex CLI / Gemini CLI 各自锚定单一厂商,OpenCode 的分量在于入口数量
- 更新日志(中文镜像): 官方 changelog 的中文版已同步 v1.19.0,措辞与英文原文一致
信号观察:
- 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
- Program status reporting:支持 OSC 7501 的终端与 agent dashboard 能看到 pi 是「在工作」「卡在对话框或登录」「完成」还是「失败」;
-
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 按 keyc<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、耗时、截断的参数与错误;脚本结束时仍在跑或尚未发出的调用记为 cancelledbench: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
社区讨论 / 行业方向:
- Show & tell: Pippa, a native Mac interface for everyday Pi tasks — testers welcome (@tschnorpfeil, 10-11):免费 MIT 的 Swift 原生 macOS 界面,把字母或文件夹拖到一个浮动胶囊上就能取结果;通过
pi --mode rpc与 pi 通信,本地模型走 llama.cpp,Mail / Calendar / Reminders / Excel 通过 Pippa 自己的 MCP server 暴露;邮件回复只存草稿。正在招 Apple silicon 8GB / 16GB 机器的测试者 - Show & tell: Orbi, running Pi unattended from GitHub Issues (with a separate review session) (@xqliu, 10-08):给 Issue 打
ai-ready标签 → 建分支与 worktree → 起一个 pi session 实现 → 开 PR → 第二个独立的 pi session 按 Issue 的验收标准评审 PR 并修它发现的问题 → 只有被评审过的 head 能合并;卡住就打ai-blocked标签把决定权交回人。GitHub Issues 是唯一状态存储,没有数据库、队列或 daemon - Show & tell: a hard dollar limit per pi -p run (models.json headers with ${VAR}) (@domondi1, 10-07):
models.json的 header 值在请求时解析${NAME},因此可以纯配置地给每次pi -p运行(CI job、工单循环、批量脚本)一个硬美元上限——把 provider 指向本地网关并发送 run id 与预算,预算用完后网关在请求到达 provider 之前就返回 HTTP 402 - Pausing a run on a tool call until a human approves or client-side results arrive (nothing kept in memory) (@dylanmoz, 10-07):模型调用工具 → 运行在工具执行前停下 → pending call 被持久化,内存里什么都不留 → 用户几小时或几天后批准、编辑或拒绝 → 运行从同一个 tool call 继续
- Pi Durable: An Agent Harness That Survives Its Own Crashes / Pi 1.0: Codemode, Pi Durable and an open agent harness, explained: 第三方解读一致把 Pi Durable 定位为「实验性的、面向长时 agent 应用的 substrate」而非 coding agent 的替代品
- MisterBrookT: why the updates so frequently? (@MisterBrookT, 10-04,1 条回复):社区里对发布节奏本身提出的疑问,回复数少但代表了「0.99 → 1.1 在 8 天内发 6 个版本」带来的观感
信号观察:
- 本周 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
- 新增:项目分组 ⋯ 菜单末尾「删除全部会话… · N」(先确认且默认聚焦「取消」,保留正在运行或等待输入的会话,#1182);侧边栏会话标题变成真正的链接,中键 / Ctrl+Cmd 点击在新标签页打开(#1167, #1169);子代理可连接 MCP 服务器(配置文件写
-
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
- 桌面端文件浏览器默认显示在会话列表下方(可拖动、可折叠、带自己的文件搜索,3fe257f);新增
-
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)
社区讨论 / 行业方向:
- 加入中文微信群 / WeChat Community (@agegr, 07-26 创建,10-08 更新,10 条回复):Announcements 类别唯一的帖子,是本仓库唯一的官方公告渠道
- Desktop-style launcher for Pi Web (@manuelbettoni-prog, 10-02 创建、10-06 更新,Ideas 类别,3 条回复):希望有一个桌面启动器形态,与 v0.11.1 新增的
pi-web version/update/status/stop/openCLI 命令方向一致 - pi-web-statusline: a single-line status row for Pi Web (@Fantasymax, 09-07):单行状态条扩展,显示 model | think | dir | context | cache
- Subagent 插件,主 agent 容易不调用 get result 工具 (@canoziia, 09-29):主 agent 用其它方式拿到了结果,导致长 loop 结束后才收到自动的结果通知——子代理结果回传的时序问题
- #1195 Feature request: Ability to do inline review comments (@cdrage, 10-12, open):行内评审评论,是本周唯一一条新功能请求
- #1184 Long sent-message bubble scrolls back to top on every newly appended content block while streaming (@Ayarxy, 10-11, open):流式期间每追加一个内容块,已发送的气泡就滚回顶部——v0.12.0 的增量渲染改造的直接副作用
信号观察:
- 外部贡献在本仓库是可量化的: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
- v0.10.0:
其他重要 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)
- 44d5340 项目(集成) —
- 本周新开 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)
- #5492
- #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 本身带有含义」的字段从宽容解析改为严格拒绝——v1terminal/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)— 静默跳过畸形条目
fix(rust): remove skipped-entry deserialization logging(#2273):静默跳过 list 中的畸形条目,不再记录 Serde 错误或私有 payload 值;tracingfeature 保留为向后兼容的空操作- 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/v1.10.2
其他重要 commits / PRs:
- 窗口后段
main的 4 次提交全部是acp-release-bot[bot] docs: update registry agents(#2345–#2348,10-11 四次)。本批的 registry 变更内容为纯版本号推进:Qwen coding assistant0.25.0 → 0.25.1、sigit1.6.6 → 1.6.7 - 协议主线在 10-09 发布 v1.25.0 后,本周没有新的 schema 变更提交——节奏是「RFD 成熟 → 一次性 stabilize 若干条」
社区讨论 / 行业方向:
- Concerns regarding the removal of client filesystem and terminal capabilities (@Ruddickmg, 10-04 创建、10-05 更新,Protocol Suggestions 类别):针对 RFD v2: Client Filesystem & Terminal Capabilities 的反对意见,核心论点是「既然这些能力本来就是可选的,保留在 spec 里不花成本,移除却会把复杂且次优的 workaround 强加给 client」,尤其影响远程与容器化场景
- Add structured agent output support (@felixarntz, 09-11 创建、10-06 更新)
- Proposal: Make permission checks required for file writes and terminal execution (@ZhengShenghan, 04-08 创建、10-04 更新,5 条回复)——本周 opencode 的 #54632 在实现层暴露的正是这类问题,而协议层这条提案已经躺了半年
- Change working directory in a live session (@lifeizhou-ap, 08-18 创建、10-05 更新,2 条回复)
- Nested session config (@yoshuawuyts, 10-02):ACP 配置目前只有布尔开关与单值选择器,无法表达「按 model 分组、每组再选 effort 与 context size」这类嵌套菜单;作者以 Wassette 的工具表格为例
- Add support for projects (@jonathanKingston, 10-02):希望 thread 能关联
projectId,解决 Codex client 因 agent 给每个 worktree 分配唯一工作目录而产生的大量无法归组的单线程 - Prototype a decision model endpoint (@jonathanKingston, 10-02):同一天内的第三条提案
- Eclipse IDE: Prototype of ACP/MCP Support (@jwflicker, 2025-09-24 创建,10-11 更新,9 条回复,本仓库最活跃的讨论帖)
- New ACP client: RunJam — local-first desktop for Claude Code, Codex CLI & Gemini CLI (@peintune, 09-01 创建、10-04 更新) 与 ACP SDK Ruby (@nutsoriginal, 09-30)
- Session compaction(codex-acp 适配文档): 适配侧已按 RFD 实现——client 在 initialize 时声明
{ "clientCapabilities": { "session": { "compaction": {} } } },Codex 的contextCompactionitem 开启一个in_progress实体,完成时用同一compactionId更新为 completed,失败或中断则以 failed / cancelled 关闭未完成的实体 - Prompt Turn(ACP 协议文档): 规范侧对 compaction 状态机的表述——
in_progress/completed/failed/cancelled四态,agent MUST 在报告的 compaction 结束时给出终态;status是开放字符串枚举,以_开头的值保留给实现特定扩展 - Agent Client Protocol (ACP) for AI Coding Agents: 独立生态站点(非官方 spec),记录 wire protocol v1 已稳定、v2 为 draft 且需 feature-flag、registry 中 40 个已认证 agent、官方 SDK 为 TS 与 Rust 1.0
信号观察:
- #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:
#28Bump astro from 5.18.2 to 7.2.8 /#24Bump astro from 5.18.2 to 7.1.1 /#23Bump sharp and astro(均 @dependabot[bot],open)——Astro 主版本从 5 到 7 的两次 dependabot 提案并存且都未合并,说明该仓库的依赖升级不在自动流程里
社区讨论 / 行业方向:
- Welcome to yxc023.github.io Discussions! (@yxc023, 2026-08-12):Announcements 类别唯一帖子,0 回复;仓库 Discussions 功能开启但实际未使用
信号观察:
- 该仓库的提交历史即本调研的部署轨迹:连续 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 升级的不同版本提案,互相冲突且长期挂起,是全窗口内唯一「自动化流程没有覆盖到」的位置。
跨项目观察
-
「默认 allow」正在成为各家最贵的默认值,而且失效是静默的。 opencode 的 plan mode 对
shell无规则(#54632)、external_directory自 #53585 起默认 allow、插件与 provider 自带工具完全在权限体系之外;hindsight 三条插件 issue 的形状是「shutdown()静默丢弃缓冲轮次」;pi-web 的对策是把子代理直接复用主会话的信任规则而不是另设一套(#1187)。四处面对的都是同一个问题:当默认值是「放行」时,「没触发保护」和「保护生效了」在信号上无法区分。 -
协议层选择收紧,实现层仍在放松,两件事在同一周发生。 ACP 的 #2333 把「fallback 本身带有含义」的字段从宽容解析改成严格拒绝(v1
terminal/create的args/env/cwd/output);同一批的 #2336/#2334 把 session notices 与 session compaction 从 Preview 推到稳定。而实现侧,opencode 把项目目录之外的访问询问默认关掉,Claude Code 同期也在把 deny 规则扩展到 symlink 与复合命令。前者把模糊变清楚,后者把询问变少——两条相反的曲线在同一周各自推进。 -
性能数字进 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),而不只是单点数字。 -
会话与文档的生命周期正在从「进程生命周期」改为「按用量回收」。 pi 的
documentRetentionMs(默认 10 分钟,0 = 用完即丢,Infinity = 不淘汰,且 eviction 跑在 mutation line 上、每次 commit outcome 后执行以保证事务不丢 tracker);pi-web 每次运行结束只重建一次列表、子代理关系只在文件变化时重读;opencode 开始归档目录已消失的项目(#54354)并把 fff engine 的重复创建当成资源泄漏在追(#54631);pi-durable 上一周已把常驻边从 10,001 条压到 1 条。四处都是同一个取舍:宁可让下次访问重新加载,也不为「也许还会用」常驻。 -
harness 集成层的 bug 高度集中在三个位置:会话结束、增量/缓冲、schema 版本漂移。 hindsight 一天内三条(#5492 增量 retain 只留最后一轮且不发时间戳、#5493
shutdown()丢缓冲轮次、#5494 写入已下线的 V3source.kindwrapper);pi-web 的对应动作是让子代理读 pi 的model:level后缀(#1189)与mcp.json信任规则(#1187)——不自己发明语义,而是复用上游。opencode 的 #54640(V1 迁移后的会话挂在无人解析的globalproject 下)本质上是同一个问题的迁移侧版本。 -
「非功能性」缺陷开始被当作正式 bug 提交。 opencode 本周有三条读源码取证的 issue 指向无障碍(#54652 生成期间
aria-hidden隐藏整个 assistant 子树、#54653AnimatedNumber的读序颠倒)与路径边界(#54617 POSIX server 接受 Windows 语法的目录 hint),全部精确到 v2 commit4617210822的行号,并说明「受影响文件在当前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 区补足)
评论