2026 2026年10月18日 36 min · 10.8k chars by yxc023
GitHub 调研周报 2026-10-18
扫描窗口:2026-09-08T09:23:29Z → 2026-10-18T00:33:51Z(共 39.6 天)| 基准来源:上次报告 2026-10-16
2026-10-18 GitHub 调研周报
扫描窗口:2026-09-08T09:23:29Z → 2026-10-18T00:33:51Z(共 39.6 天)| 基准来源:上次报告 2026-10-16
仓库范围:
config/repos.yaml中 6 个仓库。基准时间字段自 2026-09-08 起连续 9 期未变,窗口逐日变宽,本期新增内容全部落在 2026-10-16T00:32:07Z 之后的约 48 小时(2026-10-17 没有报告,窗口跨了两天)。这一次的形状是「架构改动日」——pi 把pi-durable的 sleep 语义整个重写并宣布不可回滚,ACP 第一次从规范里删掉一整个特性并同时补齐 v2 的前台/后台工作状态机;opencode 则相反,把力气花在了 1.x/2.x 分裂的收口和营销站上。hindsight 与 pi-web 的 main 分支在本窗口内完全没有新提交。
本期速览
-
earendil-works/pi:
TaskRuntime.sleep()被删除,SQLite 存储打开即迁移到 schema v2,且明确写了「迁移后的库 1.3.0 及更早版本打不开,部署不能回滚过这个 release」。f75b324(Mario Zechner,10-17 22:29Z)的理由写在packages/durable/CHANGELOG.md里:旧的 sleep 是「在一个 phase 内部等待」,它占住一个 invocation,重启后会重跑该 phase 并重新开始等待。新模型是任务以sleeping状态结束当前 phase(runtime.sleepUntil(until, checkpoint, context),或从runtime.commit()返回{status:"sleeping", until, checkpoint}),等待之后的工作挪到下一个 phase,所需状态装在 checkpoint 里。sleeping是新增状态,凡是把每个TaskState/TaskGraphState/TaskInspection都穷举分支的代码都得加一条 case。 -
earendil-works/pi: Durable 从「能跑」变成「能被云唤醒」。
Harness.wake()与HarnessOptions.onWake告诉宿主「这个 Session 下次需要进程」的两态:active(有活可跑)与at(最早的那次 sleep 何时到)。配了onWake之后 Harness 不为 sleep 保留任何 timer,Cloudflare Durable Object 可以真正 hibernate、由自己的 alarm 唤醒后调resume()。HarnessOptions.setTimer统一接管 Session / 调度器 / 任务的全部 timer(进度节流、空闲内存回收、sleep),ToolExecutionApi.now()读 Harness 时钟——代码模式(code mode)的脚本 deadline 与 wall time 从Date.now()改到了这个宿主/假时钟上。 -
earendil-works/pi: SQLite 驱动从 durable 搬进了 chord。
c268154把 Durable 的 SQLite 驱动、可移植接口与通用迁移 runner 移到@earendil-works/chord/sqlite;老的 Durable SQLite 入口继续 re-export 公共名字,storage helper 与 schema 迁移仍留在 durable。配套还有ea7c648(workerd 里跑 Durable Object 托管的测试)、e17e2e1(第二次慢调用在第一次完成时就释放,而不是轮询 200 次后才释放)、以及 Windows/Cloudflare Workers 上一个真 bug:Workers 里的 timer 有unref(),一个 pending 的 timer 会让 Durable Object 无法 hibernate 并阻塞回收,现在 Workers 下直接拒绝这类 timer,改为在更晚的 commit 里释放内存。 -
agentclientprotocol/agent-client-protocol: v1.12.0 是这个规范第一次「删除特性」,而且删得很彻底。 #2266 移除 next edit suggestions(NES):从 v1 与 v2 两侧删掉
unstable_nesCargo feature 与全部实现——类型、能力字段与 builder、方法名、请求/响应、通知、dispatch arm,NES 专属的 document 事件通知与位置编码协商,从两份 draft schema 各删掉 57 个 definition,删掉退役的 RFD 与导航项并留下 Removed 生命周期更新。(对照上期:NES 当时只是被 #2264 标成「To be removed」。) -
agentclientprotocol/agent-client-protocol: 同一个 spec 周期把 v2 的前台/后台工作状态机补齐了,并给版本协商定了错误码。 #2411 把 v2 前景工作生命周期定义为 session 级状态快照而不是「单个 prompt / tool call / 用户动作请求的事件」:定义初始状态与 resume 时的 current-state 同步(含正在跑或被阻塞的 session)、重复快照、聚合的用户动作等待、无模型工作的本地命令;resume 在请求的重放之后、成功应答之前发一份 current-state 快照;
requires_action仍是 SHOULD,但一旦上报,Agent 必须报恢复进展或完成。#2412 定义协商为「取 ≤ 请求版本的最高支持版本」,没有合格版本时报-32022 Unsupported protocol version(必带requested与supported),畸形版本号仍是-32602,不匹配的连接保持 uninitialized。同期关掉了 #1847「Tool calls that outlive their turn have no protocol expression」(作者 @ivebenfreed 8-01 提出:client 渲染 ACP session 时分不清 agent 是卡住了还是在等,orchestrator 也分不清静默是进展还是死锁)。 -
anomalyco/opencode: v1.19.2 把 1.x / 2.x 的分裂写成了产品契约。 release notes 原文:update check 只看 npm
opencode-ai的 latest 版本,1.x 安装永远不会被当作常规更新推荐 2.x 构建;升级到 OpenCode 2 变成一次独立且显式的选择(/update里的 2.0 offer 或opencode upgrade --major);修了 yarn 托管安装的升级;Homebrew Core 安装跳过 1.x 更新(Homebrew Core 现在跟 OpenCode 2),并在提供更新前先检查 tap 与 Chocolatey 可用性;安装脚本拒绝安装 2.x。 -
anomalyco/opencode: 这条契约的直接后果当天就被人撞上了:#56583——npm CLI(1.19.3)跑在 Desktop 2.0.32 建的共享
opencode.db上直接崩。 报错是Database is not empty and has no session table,每条用到存储的 CLI 命令都失败,直到用户把XDG_DATA_HOME指到别处。报告者同时给出关键事实:npm 上 12,253 个版本,没有任何一个版本以 “2.” 开头——CLI-only 用户被卡在 1.x 上,且没有任何可执行的错误提示。(v1.19.2 同日发布,正是为了把这个断裂变成显式的。) -
anomalyco/opencode: V2 配置兼容性出现了第一个「静默丢弃」报告:#56602。 V1 形状的
mcp: { roam: { type:"local", command:[...] } }在 V2 里被无警告地忽略(V2 期望mcp.servers.roam),opencode mcp list报 “No MCP servers configured”,而配置文件里明明有——报告者指出迁移指南写着 V1 配置文件「are intended to remain compatible」,一个坏掉的集成看起来像一个正常工作的配置。 -
anomalyco/opencode: OpenCode Go 的密钥与免费层缺陷簇继续扩大。 #56586 记录了一个可复现的失效链:存着的 Go API key 实测寿命约 47 小时(
2026-10-16 11:38:44→2026-10-18 10:52:24首次报过期,且该 key 是升级/迁移时自动创建的、并非用户选择),过期报错不给任何可用的恢复路径、主动说错修法(“Signing in again will not renew this key”),随后一条Insufficient account funds又把用户推向账单页;作者说他和三个 AI 助手都没能从报错文本里找到去哪儿换 key,最后是/connect登录才好——而报错恰恰说/connect没用。同期新开的 #56573 / #56585 / #56598 / #56570 是同一个免费层拒绝文案(“free tier can only be used from within OpenCode”,其中一个还是阿根廷住宅 ISP AS7303)。 -
anomalyco/opencode: 10-17 的提交几乎全部是 Kit Langton 对营销站(console/www)的一次集中收编。
/en前缀 URL 301 到无前缀英文页、移动端菜单与复制按钮的键盘可达性、/llms.txt重定向到文档索引、只加载站点真正用到的 IBM Plex Mono 字重、把 FAQ 答案渲染进服务端 HTML、每个营销页收敛到单一 meta description、补全社交预览 tag、修 v2 文档里的自相矛盾与笔误、v2 文档进 sitemap。同期 Core 只有五条实质改动:#56497 用共享策略重试 buffered generation、#56370/#56226 移除 honeycomb 与 random provider 及已死的 honeycomb 监控与日志处理、#56243/#56264 把 session list 分页下沉到 core 并对插件暴露、#56286 容忍未知与无类型的 stream event、#56307 重试 broken-pipe 传输失败;另有 typecheck 升到 TypeScript 7.0.2。 -
vectorize-io/hindsight: decision model 从「排序器」升级成「省钱闸门」,并且第一次给出带陷阱的对照数字。 #5698(@nicoloboschi,10-16 16:17Z,仍未合并)在 delta knowledge-page refresh 前加一道 gate:refresh 读出上次运行以来新增的记忆,然后逐条问决策模型「这条能不能改变这个页面」,只有被保留的记忆才进 delta LLM 调用,reflect loop 不再跑;一条都不保留时完全没有 LLM 调用。理由是决策模型比 LLM 便宜约 1000 倍,而一次 delta refresh 过去要付一整轮 reflect 的钱。实测(gemini-3.1-flash-lite 生成、gemini-2.5-flash 评分、决策模型 TypeSafe Jev,每臂只跑一次,作者自称只能当方向性参考):test_05(20 条新记忆)开 gate 后 LLM 调用 1 次、input 4,871 tokens、8.0s;test_11 新评测 6/6 vs 无 gate 的 4/6(reflect 的检索漏掉了「Dana Reyes 离职」和「Kestrel Labs 升到 Team 计划」——这两条都没点名页面主题,而 gate 是拿记忆去对页面本身判)。
-
vectorize-io/hindsight: 同一个 PR 里,作者自己标注了自家决策模型还不能用。
hindsight-decision(Vectorize 自家推理 API)在 test_05 上 20 条 on-topic 记忆保留了 0 条,在 test_01 上得 5/8 并踩中 2 个 trap。同时 gate 默认关闭(HINDSIGHT_API_MENTAL_MODEL_REFRESH_DELTA_GATE),且要求mental_model_refresh_use_decision_model为真;记忆库列不出记忆、新增记忆超过 200 条、或任何一次决策调用失败,都会退回普通 reflect 路径。「不做批处理」与「不把决策调用计入 refresh 的 usage」也被明确列为不做。 -
vectorize-io/hindsight: 10-17 是彻底的代码静默:main 分支 0 个提交、0 个 tag。 但 16 条新 issue 继续涌入,覆盖面很宽:#5718「MiniMax provider 强制
thinking: disabled,而 MiniMax-M3.1-Flash-Preview 用 HTTP 400 拒绝」、#5719「Anthropic provider 在重建 assistant tool-use turn 时丢掉thinkingblocks」、#5714「没有办法把一个 knowledge page 钉住、让它每轮都在上下文里」、#5713「coding-agents 的 auto-inject 每个 session 只跑一次且永不刷新,后来的决策永远重新读不到」、#5721「page search 工具承诺返回『matching passage』,而在没有相关性阈值的情况下它从不」、#5707「per-bank pgvector 改 embedding 维度会创建全局索引idx_memory_units_embedding_hnsw」、#5703「大limit的 graph 接口会长时间阻塞 API 事件循环」。 -
agegr/pi-web: main 分支停在 v0.12.2 的发布那一刻(10-15 15:14Z),本窗口零提交;全部工作在 18 个 open PR 里。 值得注意的几条:#1321「读 pi 的
keybindings.json而不是硬编码按键」(社区 PR @jianzhangg,10-17)、#1320「Ask here 引用插入后把光标停在引用末尾」、#1311「顶栏 Agents 徽章显示正在运行的 subagent」、#1288「暴露 per-model 的原生 Base URL 覆盖」、#1287「把已保存的定义应用到空闲 session」。pushed_at停在 10-16 13:43Z 正是 #1311 那次开分支的时刻。
各仓库详情
anomalyco/opencode
通用开源编码 agent,MIT,提供 TUI、桌面端、Web 与共享后台服务| stars: 215308(上期 213922,+1386)| open issues: 4617(上期 4336,+281) | 默认分支: dev | 最近 push: 2026-10-17T23:59:54Z | 主页: https://opencode.ai
近 N 周 release 重点:
-
v1.19.3(2026-10-16T12:31:52Z)— 唯一的改动:把 model reasoning 选项改成生成 reasoning 变体,替换 catalog 变体但保留用户自己配置的变体覆盖。
- 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.19.3
-
v1.19.2(2026-10-16T02:30:38Z)— 「OpenCode 1 留在 1.x 线上」的契约化
- update check 只用 npm
opencode-ai的 latest 版本,1.x 安装永不把 2.x 作为常规更新推给它 - 升级到 OpenCode 2 是独立且显式的选择:
/update里的 2.0 offer,或opencode upgrade --major - 修复 yarn 托管安装的升级路径
- Homebrew Core 安装跳过 1.x 更新(Homebrew Core 现在跟 OpenCode 2),并在提供更新前先探测 tap 与 Chocolatey 可用性
- 安装脚本拒绝安装 2.x
- 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v1.19.2
- update check 只用 npm
-
v2.0.32(2026-10-16,release notes 记在
dev:CHANGELOG.md,GitHub Releases 上没有对应条目)/copy改为复制最新一条 assistant 消息(或已完成的 compaction 摘要),全文转录仍在命令面板 //export(#56053、#56055)opencode auth login在无法打开浏览器的无头环境不再崩溃,改用终端里已经打印出来的 URL 继续(#56082)- Gemini 遇到间歇
MALFORMED_RESPONSEfinish 改为重试或继续,而不是立刻失败(#56232) - Windows 上快照捕获对并发 Git object 写入更稳健(#56190)
- SDK:新增实验性
client.voice.session(...),通过 server 代理 OpenAI GPT-Live / Realtime WebRTC、OpenAI Realtime WebSocket 与 xAI Grok Voice WebSocket 会话;用服务端存的 API key 或OPENAI_API_KEY/XAI_API_KEY,不使用 ChatGPT 登录凭据(#55951)
其他重要 commits / PRs(按重要性挑选):
e4b2afcfix(www): 让过宽的文档表格可横向滚动并给搜索框加标签(#56592)— 10-17 23:59:50Zeb9351cfeat(console): 把/llms.txt重定向到文档索引(#56594)— 10-17 23:55:24Z797d2afperf(console): 只加载站点真正用到的 IBM Plex Mono 字重(#56595)— 10-17 23:55:28Za416379fix(console): 移动端菜单与复制按钮的键盘可达性(#56591)— 10-17 23:56:12Z86c7f7cfix(core): 用共享策略重试 buffered generations(#56497, @Aiden Cline)— 10-17 19:33:47Z1cb7bcarefactor(core): 把 session list 分页下沉到 core(#56243)/bc5fa1cfeat(plugin): 对插件暴露 session list(#56264)— 10-17 04:11 / 05:07Za49f179chore(infra): 移除 honeycomb 与 random providers(#56370)/a801306移除已死的 honeycomb 监控与日志处理器(#56226)— 10-17 10:31 / 10:18Z4a53028fix(ai): 容忍未知与无类型的 stream event(#56286, @Aiden Cline)— 10-17 04:40:31Z22e771ffix(util): 重试 broken-pipe 传输失败(#56307, @Divanshu)— 10-17 05:31:43Z23359e9chore: 把 typecheck 升到 TypeScript 7.0.2(#56300,bot)— 10-17 20:26:46Z
社区讨论 / 行业方向:
- OpenCode 2 Version Tracker: Environment Variables (2026-09-26): 第三方按版本追踪 v2 的环境变量 / 配置 / 特性,开篇即点明「2.0.0 于 2026-09-11 以
@opencode/cli发布,在 v2 分支开发,同时 1.x 线继续出货」,并记录「tags 不带 release notes」——这正是本仓库把 V2 变更写进dev:CHANGELOG.md而不是 GitHub Releases 的原因。 - OpenCode 2.0 架构分析(中文) (2026-10-15): 把 V2 定性为「从单次调用的 CLI 转为系统级常驻服务」,认为代码级工具编排与异步子智能体压制了上下文膨胀,代价是旧版插件生态彻底失效、并发重启引发资源风暴、企业管控曾出现绕过风险。
- theaiadventurer: OpenCode 2.0 runs as one background service (2026-10-12): 强调「一套后台被 terminal / web / desktop 共享,客户端只是客户端」,以及新 API 与新 client 包(
@opencode/client)。 - AgentUpdate.ai 的 OpenCode 版本时间线: 独立佐证了本期的版本形状——10-16 同日落下 v1.19.3 / v2.0.31 / v1.19.2,10-16 之前的 v1.19.1 写的是「Session sharing has been discontinued」(与上期报告的 #55716 移除 sharing 后端一致),10-11 的 v1.19.0 才刚加上
opencode upgrade --major。 - OpenCode V2 来了:一套后台,终端桌面网页接着干(中文): 复述「V1 和 V2 命令名都是
opencode,默认不再并排装;包管理装的 V1 要先卸掉再装 V2;curl 安装脚本会替换 V1 二进制」——与本期 v1.19.2「安装脚本拒绝安装 2.x」是同一件事的两端。
信号观察:
- 版本分裂从「发布策略」升级成了「支持问题」:v1.19.2 用五条 release note 把 1.x 钉在自己的线上,同日 #56583 就报出 npm CLI 1.19.3 与 Desktop 2.0.32 共用
opencode.db的硬崩溃,并附上「npm 上没有任何 2.x 版本」这一事实。分发行不是被隐藏了,而是被正式承认并要求用户自己选。 - 共享数据目录成了 1.x/2.x 的耦合点:Desktop 自动更新到 2.0.32、CLI 停在 1.19.3,两边写同一个
~/.local/share/opencode/opencode.db,而报错文本不区分「数据由更高版本创建」。这类问题不是版本策略能解决的,是数据目录所有权没定义。 - 订阅/免费层是当前最集中的缺陷簇:Go key 47 小时寿命 + 误导性报错(#56586)、四份重复的「free tier can only be used from within OpenCode」(#56573/#56585/#56598/#56570)、ZEN 的
api_key_expired(#56560),指向同一件事——订阅侧的鉴权与额度边界没有被当成一条独立的错误通道来处理。 - 10-17 的开发重心明显偏向对外站点:30 条新提交里 15 条来自 Kit Langton,全部是 console/www(重定向、可访问性、SEO、字体子集、文档一致性);Core 只有 5 条。产品发布节奏停了,公开形象在补。
- Core 侧三条移除(session-sharing 后端已在 v1.19.1 移除、本期移除 honeycomb/random provider 与 honeycomb 监控)在同一天发生,都是「收缩到自维护范围」。
earendil-works/pi
AI agent 工具包:统一 LLM API、agent loop、TUI、编码 agent CLI;MIT,Pi 生态的核心 harness| stars: 115974(上期 115465,+509)| open issues: 347(上期 350,−3) | 默认分支: main | 最近 push: 2026-10-17T23:54:51Z | 主页: (仓库未填 homepage)
近 N 周 release 重点:
窗口期内无 release。最新仍是 v1.3.0(2026-10-15T19:17:33Z),其 changelog 的 [Unreleased] 段在本期被大幅重写(见下)。
de47e48docs(durable): 为 sleeping task、timer 与 wakeup 写 changelog — 10-17 23:08:06Z- 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.3.0
其他重要 commits / PRs(按重要性挑选):
f75b324feat(durable): durable sleeping state 取代runtime.sleep— 10-17 22:29:26Z- Breaking:
TaskRuntime.sleep()被移除(它在 phase 内部等待,占住一个 invocation,重启后重跑该 phase 并重新开始等待) - Breaking:任务新增
sleeping状态,TaskState/TaskGraphState/TaskInspection的穷举分支都要加 case - Breaking:打开 SQLite 存储会自动迁移到 schema v2 并重建 task 表;迁移后的库 1.3.0 及更早版本打不开,部署不能回滚过这个 release(JSONL 存储无需迁移,但 1.3.0 及更早版本永远不会恢复一个它发现的 sleeping task,那个 run 的对话会一直处于 busy)
- Breaking:
TaskRuntime新增sleepUntil()/setTimer(),ToolExecutionApi新增now(),手工构造这两个对象(测试 fake、没做 spread 的 tool wrapper)必须补齐 - 新增:
Harness.wake()与HarnessOptions.onWake;HarnessOptions.setTimer接管 Session / 调度器 / 任务的全部 timer;HarnessOptions.models与.settings也接受返回当前值的函数(像env一样),让宿主不重开 Harness 就能换模型配置 - 变更:generation 重试退避、deferred-response 轮询、compaction 重试退避改为 sleep 而不是在 running phase 里等,进程可以在这些期间停止或 hibernate;代码模式的脚本 deadline 与 wall time 改用
HarnessOptions.now而非Date.now()
- Breaking:
c268154feat(chord): 把 Durable 的 SQLite 驱动搬进chord/sqlite— 10-16 16:48:29Z- 驱动、可移植接口与通用迁移 runner 迁到
@earendil-works/chord/sqlite;老入口继续 re-export 公共名,storage helper 与 schema 迁移留在 durable
- 驱动、可移植接口与通用迁移 runner 迁到
ea7c648feat(durable): workerd 里跑 Durable Object 托管的测试 — 10-17 23:02:48Ze17e2e1fix(durable): 第二次慢调用在第一次完成时就释放,而不是轮询 200 次之后 — 10-17 23:54:43Z2331785fix(durable): Codex 的 prompt-cache e2e 测试改跑gpt-6.1-sol— 10-16 19:42:02Z7ec1f64feat(durable):HarnessOptions.models与settings接受函数 — 10-16 19:30:35Z95364a5feat(coding-agent): NVIDIA 默认模型换成 Nemotron 3.5 Super VL(#10910, @cv)— 10-16 20:26:37Z6fcb486fix(coding-agent): 摘要请求去掉固定的输出上限(#11036, @davidbrai)— 10-16 11:53:16Z90d863ffix(coding-agent): 小米默认模型改为mimo-v2.6-pro— 10-16 10:51:37Z698a2d2/0fbdbd3fix(ai): 重试更多 gateway 上游失败与 node-fetch 的 “request to … failed”(@davidbrai)— 10-16 08:48 / 15:12Z4dd2b14fix(ai): 把只有空白的 tool output 当成空 — 10-16 12:06:06Z8efd314docs: 从 schema 自动生成models.json参考文档(#11038, @christianklotz)— 10-16 20:53:00Z
社区讨论 / 行业方向:
- Socket: @earendil-works/pi-durable (2026-10-07): 第三方包索引把 durable 的存储契约描述为「要么全部存下来,要么一个都没有」,内置槽位分别持有每段对话的 agent 选择(
pi.agent)、面向 provider 的会话身份(pi.provider)、运行中的 generation 与工具(pi.live)、排队的提交(pi.inbox)与花费(pi.usage)——与本期 changelog 里的sleeping/ checkpoint 模型是同一条线索。 - CyberQ 賽博客:极简 AI 代码代理 Pi 1.0 正式登场 (2026-10-02): 记录 Earendil 自述「目前每周有数十万人使用 Pi」,以及 1.0 与实验性套件 Pi Durable 同日推出(
npm install @earendil-works/pi-durable)——本期把 durable 的 sleep 语义整个重写,是这条线从「实验性套件」走向可用基础设施的下一步。 - hivebook.wiki 的 OpenCode 侧记录: 从竞品角度记录了 V2 的三处硬断(server API 与 client 包改名、terminal-client 设置从分层
tui.json合并到单一全局~/.config/opencode/cli.json,首次启动时从全局tui.json自动迁移,项目级tui.json不迁移)——与本期 pi 侧ToolControl.terminate类型收敛(#10858)是同一类工作:跨包边界的契约收紧。
信号观察:
pi-durable是本期唯一真正的主线:f75b324+c268154+ea7c648+e17e2e1+7ec1f64+2331785+790271c一条链,把「等一会儿」从「占着进程」改成「交还控制权 + 在 checkpoint 处被唤醒」。这是把 agent harness 往 Cloudflare Durable Objects / hibernation 形态推的一步。- 这一改的代价写得很直白:SQLite schema v2 是单向门,部署无法回滚过这个 release;凡是穷举 task 状态或手工构造
TaskRuntime的代码都要改。发布说明没有回避这一点。 - Windows/Workers 的 timer 语义差异被显式处理(Workers 里
unref()的 timer 会阻塞 Durable Object hibernate → 直接拒绝、改为更晚 commit 时释放),说明这条路径已经在真实托管环境里跑过。 - issue 依然是「当天开当天关」:本期 pi 新开 22 条 issue,全部已 closed。值得记的几条内容:#11065「从
preflightResult("started")抛异常会让 session 永远 busy(1.2.0 的回归)」、#11083「恢复的 MCP tool 在注册晚于 prompt 启动时丢失激活」、#11091「anthropic-messages:会话中途的 system message 落在 user message 之前」。同时 7 个新 PR 仍 open,其中 #11082(per-session MCP servers over RPC)、#11077(compaction 结束前不触发sendMessage的 turn)、#11079(durable 为 task sleep 注入 timer)三条指向本期刚落地的 durable 生命周期。 - 上一次 v1.3.0 的两条 headline 在本期没有新动作:
/share的三档上传目的地与会话中途改 thinking level 保 prompt cache,本期窗口内无后续 commit 或 issue。
agegr/pi-web
pi coding agent 的 Web UI| stars: 7466(上期 7398,+68)| open issues: 43(上期 13) | 默认分支: main | 最近 push: 2026-10-16T13:43:55Z(= PR #1311 开分支的时刻)| 主页: (仓库未填 homepage)
近 N 周 release 重点:
窗口期内无 release。最新仍是 v0.12.2(2026-10-15T15:15:42Z),其内容即上期报告已覆盖的「更多主题(按色板选取)、显示 pi 的 cache 与 cost 提示、每个 agent 的时间/token/花费、增长中的 session 文件只重扫追加的尾部」等一批改动。
其他重要 commits / PRs(按重要性挑选):
main 分支自 v0.12.2 发布(10-15 15:14Z)以来零提交。以下均为 open PR:
- #1321 feat(shortcuts): 读 pi 的
keybindings.json而不是硬编码按键(@jianzhangg)— 10-17 16:37:38Z - #1320 fix(chat): Ask here 引用插入后把光标停在引用的末尾(#1319)— 10-17 16:37:21Z
- #1311 feat(agents): 在顶栏 Agents 徽章上显示正在运行的 subagent — 10-16 13:43:57Z
- #1288 feat(models): 暴露 per-model 的原生 Base URL 覆盖 — 10-16 02:02:48Z
- #1287 fix(models): 把已保存的定义应用到空闲 session — 10-16 02:02:45Z
- #1318 fix: 会话搜索能命中重命名与自动生成的标题 — 10-17 06:44:14Z
- #1317 fix(chat): 新建 session 后把焦点给新的 composer(#1313)— 10-17 06:30:59Z
- #1305 fix(files): 从 Android Chrome 的占位页也能打开 PDF(#1298)— 10-16 13:39:46Z
- #1304 fix(chat): 标出 diff 中两个 hunk 之间被跳过的行 — 10-16 13:39:43Z
- #1292 fix(sidebar): 在同一浏览器的多个标签页之间同步未读标记 — 10-16 03:23:04Z
社区讨论 / 行业方向:
- Pi Web 项目页(GitHub): 自述定位是「There is nothing to install」——replies 是预先生成的、不调用模型——即 Pi Web 只读本机 pi 的 session 文件与配置,把浏览器变成一个前端。
- Pi Web 中文 README(fork): 明确了功能边界:会话工作区(按项目查找/继续/重命名/导出/删除,运行状态、上下文占用、花费、压缩详情)、项目文件工具(浏览上传、Git diff、预览源码/Markdown/图片/音频/PDF/DOCX)、Git worktree 切换与同仓库多 worktree 的会话归组。
- NewReleases: agegr/pi-web v0.12.2: 记录该版本「新增 CONTRIBUTING.md(含中文版)说明 Pi Web 的定位与范围,中/日/俄文 README 移到
docs/下」——范围声明是被写进仓库的,这解释了为什么本期的 PR 大多是 UI 打磨而不是新方向。
信号观察:
- 仓库进入了「PR 队列驱动」的状态:main 自发布后 45 小时零提交,但有 18 个 open PR,其中 3 个来自外部贡献者(@jianzhangg 一次推了 2 个)。星数仍在涨(+68),watch 事件在 10-17 密集出现。
- 功能方向明显在追 pi 自身的能力:#1321 读
keybindings.json(跟随 pi 的快捷键)、#1311 显示运行中的 subagent(跟随 pi 的 subagent 语义)、#1288 的 per-model Base URL(跟随 pi 的 provider 模型)——Pi Web 的价值主张越来越绑定在「与 CLI 共享同一份 session 与配置」上,而不是自己实现一套 agent 能力。 - open issues 从 13 涨到 43(GitHub 的该计数包含 open PR,18 个 open PR 是主要增量),本窗口内新开的 issue 只有 1 条(#1319,即被 #1320 修掉的那条)。
vectorize-io/hindsight
Agent 长期记忆系统(Agent Memory That Learns),MIT,四类隔离记忆网络 + retain/recall/reflect/consolidate 循环| stars: 50861(上期 50054,+807)| open issues: 148(上期 178,−30) | 默认分支: main | 最近 push: 2026-10-17T14:59:44Z(main 分支本身自 10-16 19:58Z 起零提交)| 主页: https://hindsight.vectorize.io/
近 N 周 release 重点:
窗口期内无 release、无 tag。最新仍是 v1.0.0(2026-10-13T14:08:48Z)。
其他重要 commits / PRs(按重要性挑选):
10-16 一天合并 19 个 PR,之后 10-17 静默。以下均在 10-16:
1989479feat(reflect): 配了 decision model 就用 decision-orchestrated reflect(#5382)— 15:32:31Z0d8e58bfeat(consolidation): decision-model triage 在 LLM 调用之前就把简单事实结清(#5664)— 16:35:54Ze00ca6dfeat(api): 通过 Sign in with ChatGPT 提供 chatgpt LLM provider(#5688)— 16:59:27Z2ecc73cfeat(api): NVIDIA NIM reranker 与 embeddings provider(#5697)— 16:39:08Z8c5fabffeat(anthropic): 支持 Workload Identity Federation 取代静态 API key(#5690)— 16:19:13Zdcc3ee4fix(llm): 为 Codex、Claude Code 与 Anthropic 报告真实 token 用量(#5693)— 16:32:45Z11cf2c1perf(api): 启动时不加载未使用的重量级模块(#5479, #5686)— 15:46:10Zc4c572cfix(mcp): 让 recall tool 返回 source chunks、entities 与 source facts(#5470, #5678)— 14:01:14Z45616fffix(reflect): 通过 expand 读到的事实保留在 citations 与based_on里(#5474, #5677)— 13:55:04Zb991f96fix(api): 探测 bank 是否有 consolidation 工作时不再 seq-scanmemory_units(#5672)— 13:58:58Z40cebcbfix(transfer): 导入 archive 时不再整体读进内存(#5524, #5696)— 16:40:44Z074e3fefix(codex): 默认改用 ChatGPT 账号真能用的模型,并停止每次调用都烧配额(#5658)— 11:07:27Z5331da2blog: 用 Vercel Eve 与 Hindsight 做四件事(#5699, @ben)— 19:58:40Z- 仍未合并:#5698(decision-model gate,见速览)、#5700(迁移时把新 schema 的索引改为普通构建,避免 provisioning 卡在其他对象上,10-17 更新)
社区讨论 / 行业方向:
- #5699 的 PR 正文: 博客从 Vercel Eve 官方教程的
defineState切入——Eve 的文档说状态能「survive across step and turn boundaries within a session」,作者评价为「直觉正确,但容器小了一号:术语表是关于团队的事实,不是关于这次对话的事实」。四件事:①术语表活过 session(slot 作用域定到团队,谁先说出来谁就教给所有人);②一个客户、每个渠道(记忆跟着已认证 principal 走,并明写byPrincipal是按 principal type / authenticator / issuer / ID 做 key,只有同一个身份提供商说是同一个人时两个渠道才共享记忆);③租户隔离不是过滤器(作用域从已验证的 session auth 解析,绝不从模型解析,一个 lock 住的作用域一个 bank,语义检索不会全局排序后再过滤);④指向团队已有的 bank(并指出字符串bankId会把所有作用域钉在一个 bank 上——对内部 agent 对,对多租户错)。 - #5698 的 PR 正文: 附完整的成本对照表、新的
test_11_delta_updates评测设计(每例从一个已写好的页面开始,然后来一波会改变它的记忆,混在 hard corpus 里当噪声:只被页面间接链接到主题的记忆 / 改名后跟着用新名的更新 / 对早先数字的更正 / 列表加一减一 / 页面从未提过的新条目 / 什么都没变的安静一波),以及系统故事test_48_delta_gate。 - 稀土掘金:把 Agent 记忆准确率做到 94%,这个开源引擎做对了什么? (2026-10-13): 中文侧最完整的一篇拆解,把 Hindsight 描述为「三大自愈动作驱动四层正交认知网络闭环」,评测准确率 94.6% SOTA;开篇用「第 3 轮强调过的数据库命名规范,到第 7 轮 agent 还是建了驼峰字段」描述失忆痛点。
- Self Development 的 Hindsight 研究笔记 (Updated 2026-10-16): 第三方整理的 Strengths / Cautions / Pricing,明确标注为
fully-ai-generated(模型 glm-5.3-flash),可作为「外部读者怎么理解它」的样本,注意其自陈的生成属性。 - AI 星图:Hindsight 是什么?: 强调「对外只暴露 retain / recall / reflect 三个操作,默认存在 PostgreSQL 里,LongMemEval 排名第一」,并特别指出它公开的是持续更新的分模型准确率、延迟与成本结果,而不是一张精选宣传图。
信号观察:
- decision model 是本期的主线工程,而且作者第一次给出了它自己的失败边界:自家
hindsight-decision在 on-topic 记忆上保留 0 条,在 test_01 上踩 2 个 trap。这比宣布「决策模型便宜 1000 倍」更有信息量——它同时说明成本优势目前依赖第三方模型(TypeSafe Jev),而 Vectorize 自己的推理端点还没到可用状态。 - 省 token 的路径被反复加固,但都留了显式退路:超过 200 条新增记忆就退回 reflect、任何一次决策调用失败就取消其余并退回 reflect、决策调用目前不计入 refresh 的 usage、开关是 server-wide 且实验性。保守是有意的:一次决策调用失败就整体回退,宁可多花 LLM 钱也不产出半截页面。
- Windows 与非 UTF-8 locale 成为新的问题聚集地:#5704「Hermes 插件在 Windows 非 UTF-8 locale 下加载失败(
_plugin_version抛 UnicodeDecodeError)」、#5716「local_embedded希望能从插件配置里配 embedding 与 reranker 后端」、#5710「binOnPath不按 PATHEXT 解析 + codex 的-c值直插反斜杠 ⇒ Windows 上codebaseSurvey永不启动(附 25 组离线复现)」。 - 「自动注入的知识只活一次」是一类反复出现的抱怨:#5713(coding-agents 的 auto-inject 每 session 跑一次且永不刷新)、#5714(没有办法把一个 knowledge page 钉住、让它每轮都在上下文里)、#5721(page search 承诺返回「matching passage」,在没有相关性阈值时从不)。knowledge page 的生命周期管理正在成为独立于检索质量的一类需求。
- v1.0 之后 5 天没有新 tag,但 open issues 从 178 降到 148,同时 10-17 单日新增 16 条 issue——量在换手,不是在堆积。
agentclientprotocol/agent-client-protocol
连接任意编辑器与任意 agent 的协议(LSP 之于编辑器之于编程 agent)| stars: 4461(上期 4451,+10)| open issues: 35(上期 38) | 默认分支: main | 最近 push: 2026-10-17T21:32:20Z | 主页: https://agentclientprotocol.com
近 N 周 release 重点:
三个 tag 在 10-16 同一天落下:
- schema-v2.0.0-alpha.9(2026-10-16T10:03:30Z,prerelease)— v2 草稿 schema
- Added:
(unstable-v2)patch 按 top-level key upsert_meta(#2372);(unstable)新增 client system prompt schema(#2361) - Fixed:
(unstable)移除 next edit suggestions(#2266);(schema)对齐 v2 实验特性的兼容性声明(#2397) - Other:
(unstable-v2)定义 foreground state transitions(#2411);(v2)澄清 replay ID 与不支持的 cursor(#2398)、对齐取消的规范性要求(#2390)、澄清 prompt 插入契约(#2392)与关闭会话时的 prompt 取消(#2385)、foreground work 生命周期(#2387)、foreground work 可以没有 prompt 就开始(#2357)、在AgentCapabilities.session上列出完整的 v2 session baseline(#2358)、git_patch写路径的方式(#2362);(unstable)澄清 fork 出来的 session 是 active 的(#2359) - 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/schema-v2.0.0-alpha.9
- Added:
- schema-v1.26.0(2026-10-16T10:03:24Z)— 稳定 schema,只带 1 项 Added + 1 项 Fixed + 1 项 Other(#2361 / #2266 / #2359)
- v1.12.0(2026-10-16T10:03:21Z)— Rust crate
- Added:
(rust)为 content block 实现Eq(#2352) - 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/v1.12.0
- Added:
其他重要 commits / PRs(按重要性挑选):
- #2266 fix(unstable): 移除 next edit suggestions(@benbrandt,9-30 提出 → 10-16 09:49 合并)— 上期只把它标成「To be removed」,本期完成
- 删掉
unstable_nesCargo feature 与 v1/v2 两侧的全部实现:类型、能力字段与 builder、方法名、请求/响应、通知、dispatch arm - 删掉 NES 专属的 document 事件通知与位置编码协商
- 重新生成两份 draft schema、方法元数据与 API 参考文档,从每份 schema 里各删掉 57 个 definition
- 删掉退役的 RFD 与导航项,加一条 Removed 生命周期更新,历史更新改为指向该通知
- 更新 v2 指南,保留可选的 session capabilities 与 extension-method 透传
- 删掉
- #2412 feat(unstable-v2): 定义版本不匹配错误(@benbrandt,10-16 10:28 → 10:33)— 落地于 5 分钟内
- 协商定义为「选择 ≤ 请求版本的最高受支持版本」
- 无合格版本时新增
-32022(Unsupported protocol version),错误数据必须带requested与supported - 畸形版本号仍归
-32602;要求 client 检查协商是否成功;不匹配的连接保持 uninitialized - v1 client 打到 v2-only 端点会收到一个普通的初始化错误,端点不需要伪造 v2 client 身份或调用它类型化的 v2 handler 来报告不匹配
- 附 TypeScript SDK PR #286、Rust SDK PR #424
- #2411 docs(unstable-v2): 定义 foreground state transitions(@benbrandt)— 把 v2 前景工作生命周期定义为 session 级状态快照而非单个 prompt / tool call / 用户动作请求的事件
- 定义初始状态与 resume 时的 current-state 同步,含正在运行或被阻塞的 session
- 规定重复快照、聚合的用户动作等待、前景区间的边界、以及没有模型工作的本地命令的生命周期更新
- 把 elicitation 与 foreground state 关联,并建议通过既有的 request-cancellation 机制做选择性取消(session 或 tool-call 作用域本身不要求取消)
- 行为选择:
requires_action上报仍是 SHOULD,但一旦上报,Agent 必须报恢复进展或完成;阻塞中开始的工作可以直接报requires_action;resume 在请求的重放之后、成功应答之前发 current-state 快照;重复快照可以携带新信息,但不产生额外的状态转移、完成、取消或 usage 记账
- #2387 docs(unstable-v2): 澄清 foreground work 生命周期 — 定义前景与后台工作(含 agent 自主发起的目标与续跑);无论工作是不是由 prompt 启动,都适用同一套 running→idle 生命周期,前台工作结束时要求 idle 并建议给出 stop reason;后台进展与权限请求可以在 idle 时到达而不改变 foreground state
db2116efix(unstable): 移除 next edit suggestions(#2266)— 10-16 09:49:08Z- #2286 v2: 要求
session/resume之后必须收到当前state_update— 10-16 09:49 关闭 - #1847 Tool calls that outlive their turn have no protocol expression(@ivebenfreed,8-01 提出 → 10-16 09:51 关闭)
- 论点一:
ToolCallStatus的in_progress同时覆盖「agent 卡在工具里」与「agent 已经往前走、这活儿在后台跑」;Claude Code 会在工具结果上暴露is_backgrounded,并维护一个background_tasks[]摘要来「区分 session 已结束与 session 在等后台工作唤醒」——它还会在命令超时后自动转后台,agent 从没要求过 - 论点二:
prompt()返回后到达的tool_call_update属于创建它那个 turn 之外,规范没写是否允许;这与 #554 提议的turn_complete信号直接冲突(两者不能同时无条件成立)
- 论点一:
- 7 个
docs: update registry agentsbot commit(#2414 / #2416 / #2417 / #2418 / #2419 / #2421 / #2422)— 本窗口 15 个合并 PR 里的 7 个是机器人;规范本身只有 4 个人写的 commit
社区讨论 / 行业方向:
- Next Edit Suggestions RFD(已下线): #2266 删掉了这个 RFD 页面,历史更新改为指向 Removed 通知——从规范里删除一个特性的完整留痕现在可以在站点上查到。
- claude-agent-acp #864: session/update keeps arriving after session/prompt resolves (2026-07-12): agent 实现侧的 issue 标题与本期的 #2411/#2387 几乎逐字对应(「expose a session-level active/idle signal」)——#1847 从 8-01 提出、#2411 在 10-16 定稿,中间隔了三个多月与一个 agent 实现上的真实诉求。
- zeroclaw 的 ACP 通道文档: 第三方实现记录了一个协议未规定但影响互操作的细节——ACP 会话库文件创建失败时(只读文件系统、权限不足)回退到纯内存会话,并在
initialize响应里把loadSession报成 false。 - til.desertthunder.dev: The Agent Client Protocol (2026-08-18): 用 LSP 类比解释职责划分——「Agent 拥有 model-and-tools loop,Client 拥有用户界面、环境与访问决策」,双方都不需要对方的私有集成 API;本地 agent 用 stdio。
信号观察:
- 这是一个规范成熟期的典型动作:不是加特性,而是删特性并补状态机。 一个 release 周期里同时做「删掉一整个特性(含 114 个 schema definition)」和「定义前景/后台工作生命周期」,方向是收缩表面面积、把剩余的状态表达清楚。
foreground/background是本期 ACP 真正的关键词,而且它同时出现在三个地方:#2411(session 级快照)、#2387(running→idle 生命周期)、#2357(前景工作可以没有 prompt 就开始,即 agent 自主续跑)。#1847 的关闭说明社区提了三个月的「分不清卡住还是在等」被正面回答了。- 版本协商第一次有了自己的错误码,且规则写得很克制:不伪造身份、不为报告不匹配而调用另一侧的 handler、连接保持 uninitialized。
- 发布节奏仍由 bot 主导:15 个合并 PR 里 7 个是
docs: update registry agents;RFD 队列仍有 20+ 个 open PR(#2407replay_complete、#2404prompt_suggestions、#2323 session list 扩展、#2394 session 的 last change、#2208 durable & resumable HTTP/WS transport、#2255 session steering、#2114 session cursor、#2154 LSP proxy),规范的「未决问题清单」比它的合并节奏更能说明它往哪走。 - 星数几乎不动(+10),与 opencode(+1386)、hindsight(+807)形成对比——ACP 处在「被集成」而非「被围观」的阶段。
yxc023/yxc023.github.io
个人博客站(Astro),同时是本报告的发布目标仓库| stars: 1 | open issues: 27 | 默认分支: master | 最近 push: 2026-10-16T00:33:33Z | 主页: (仓库未填 homepage)
近 N 周 release 重点:
无 release、无 tag。本窗口唯一提交:
ab48097auto(reports): 同步 daily-research 2026-10-16 — 10-16 00:33:29Z(作者:杨晓辰(小德) & 再探再报)
其他重要 commits / PRs:
无。本窗口 0 个 issue、0 个 PR。
社区讨论 / 行业方向:
窗口期内未检索到公开讨论。
信号观察:
- 这是本仓库自己(上一期报告)的自动同步提交,也是
scripts/deploy-blog.sh的落点。没有人工内容变化。
跨项目观察
-
「发布策略」正在变成「支持契约」。opencode v1.19.2 用五条 release note 把 1.x 与 2.x 的关系写成明确契约(同日 #56583 立刻暴露这条契约在共享数据目录上不成立);pi 的 durable changelog 直接写「迁移后的库 1.3.0 打不开,部署不能回滚过这个 release」;ACP 的 v1.12.0 是第一次从规范里删除特性并留下 Removed 生命周期通知。三者方向一致:把破坏性变更写清楚、写贵、写不可逆,而不是靠兼容层拖。
-
本期的共同主题是「谁持有控制权,何时交还」。 pi 的
TaskRuntime.sleep()被删是因为它占住一个 invocation;新模型把睡眠变成一个可 checkpoint 的sleeping状态,并交给宿主的 alarm 唤醒(Harness.wake()/onWake)。ACP 定义 foreground / background 工作状态机,理由是 client 分不清「agent 卡住了」与「agent 在等后台工作」;OpenCode V2 把单次 CLI 变成常驻后台服务。三家都在把「等待」从进程内部搬到一个可以被外部观察和接管的显式状态上。 -
成本意识第一次以「实测对照表」的形式进入这些项目的 PR 正文。hindsight #5698 直接给出「开 gate 后 LLM 调用 1 次 / 4,871 input tokens / 8.0s」与两个对照评测分数,并主动声明自家
hindsight-decision在 on-topic 记忆上保留 0 条;每次跑只有一个样本、只能当方向性参考。opencode v2.0.32 的client.voice.session(...)明确「不使用 ChatGPT 登录凭据」,hindsight #5658 让 Codex「停止每次调用都烧配额」——token 账正在被当成一等公民写进设计决策。 -
两个仓库在窗口内「主分支完全静默」,但都不是停滞。 hindsight main 自 10-16 19:58Z 起零提交零 tag,同时单日新开 16 条 issue;pi-web main 自 10-15 发布后零提交,但有 18 个 open PR(其中 3 个来自外部贡献者)。它们的活跃形态从「往 main 上推」转成了「issue / PR 队列 + review」。
-
同一批缺陷在多个项目里以不同名字重复出现:「静默降级」。 opencode #56602 是 V2 配置静默丢弃 MCP server(
opencode mcp list说「没有配置任何 MCP」,而文件里明明有);#56583 是 CLI 对更高版本创建的数据库报一个不指向根因的错误;hindsight #5721 是 page search 承诺返回「matching passage」而在没有相关性阈值时从不;三者都是**「系统看起来在工作,实际没做」**,且都没有警告。pi 侧相反——#11065(preflightResult("started")抛异常让 session 永远 busy)这类问题当天就关掉了。 -
社区对 OpenCode V2 的评价已经收敛到一个共同形状:架构收益明确,迁移代价被算在用户头上。 中文与英文来源给出的关键词高度一致——常驻后台 + code mode 压制上下文膨胀(正面),旧版插件生态彻底失效、并发重启的资源风暴、企业管控绕过风险(负面)。而 V1→V2 的三处硬断(server API 与 client 包改名、
tui.json只迁移全局不迁移项目级、默认不再并排装)被反复提及。本期 #56583 / #56602 正是这份账单上还没被写完的部分。
元信息
- 报告生成时间: 2026-10-18T00:33:51Z
- 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告
reports/latest.md的基准时间:字段,自 2026-09-08 起连续 9 期未变) - 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-18T00:33:51Z(约 39.6 天);本期新增内容全部落在 2026-10-16T00:32:07Z 之后的约 48 小时(2026-10-17 无报告)
- 数据源: GitHub API(gh CLI)+ mmx web search
- API rate limit 剩余: 4909 / 5000(core,抓取完成后查询)
评论