2026 2026年10月30日 39 min · 11.8k chars by yxc023

GitHub 调研周报 2026-10-30

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

2026-10-30 GitHub 调研周报

扫描窗口:2026-09-08T09:23:29Z → 2026-10-30T00:30:00Z(共 51.6 天)| 基准来源:上次报告 2026-10-29 本轮新增内容全部落在 2026-10-29T17:35:00Z 之后的约 7 小时(同日 01:26 的上一轮已覆盖至 2026-10-29T17:35Z,本文件为合并后的完整版)

本期速览

  • anomalyco/opencode: 同日第二个版本 v2.2.2 把实验性生图正式转正——experimental_image_generate 在连接的 provider 支持图像模型时默认开启(#60258),v2.2.1 release notes 里「opt-in」的措辞在 24 小时内失效;同日 process-daemon v0.4.0 / npm @opencode/pty@0.4.0 上架(protocol 7),并新增 terminal 重命名(#60324)与桌面端 terminal 迁到持久 PTY(#60346)。
  • anomalyco/opencode: 定时任务有了第二种条件闸门——#60140 让 schedule 支持 Code Mode JavaScript 检查(if: { code } / until: { code }):创建时用 Acorn AST 静态扫描出 tools.<path>(...) 调用、拒绝动态索引与别名、一次性授权这些工具(不落项目级授权表),检查过程不调用模型。这让 OAuth 凭据在 OpenCode 内的 Slack / Linear / MCP 集成也能用结构化 JSON 游标状态驱动唤醒。
  • anomalyco/opencode: 「长任务不许阻塞会话」成为主线——#60367(steer 时把阻塞中的 shell / subagent 转到服务端后台)已在 dev 落地,#60375(shell / execute / subagent 超过 yield_after 默认 30 秒自动转后台,配套 job_list / job_output / job_wait / job_stop 工具)仍是 open PR;两者都修掉「foreground shell 2 分钟被杀」与「后台任务跑着会话却显示 idle」的老问题。
  • anomalyco/opencode: 额度投诉仍在增长(新增 32 个 issue、关闭 91 个),并第一次出现社区主动要求「只显示免费模型」——#60392 提内置 free-only 模型过滤、#60383 要 OPENCODE_ONLY_FREE_MODELS 环境变量;官方侧对应动作是 integration.connect / integration.use 策略(#60315),可用 MDM 策略把签名外的免费层、个人账号与其它 org 全部 deny 掉。
  • agentclientprotocol/agent-client-protocol: v2 正式移除 JSON-RPC batching(#2625,跟随 MCP「2025-03-26 加、2025-06-18 删」的先例),理由是双向连接上无法区分「一批请求」与「一批响应」;接收方对数组回一个 id: null 的 -32600。同日新增 v2 background work RFD(#2452):后台 shell / 监控 / 定时唤醒 / 后台 subagent 不新增实体,而是让 tool call 在会话 idle 后仍保持 pending/in_progress,state_update 增加可选 background 列表,tool call 可单独 tool_call/cancel。
  • agentclientprotocol/agent-client-protocol: 单日 59 个合并 PR(上一轮 29),依然全部由 benbrandt 一人提交,社区侧仍是 0 新 issue、0 新讨论;本期新增内容集中在「v1→v2 迁移指南」逐条落地(batch 移除算 framing 变更、initialize 可重复调用、cancel_request 对未知或已应答请求忽略、currency 约束放宽到 credits 等)。
  • vectorize-io/hindsight: MCP 的 recall 对齐 HTTP API(#6195),接受同一个 rerank: { prune, dedup } 对象,缺省时依次回落到 bank 配置与服务端环境变量;官方博客同步发布 OpenBot 集成(2026-10-29),OpenBot 上的一队常驻 agent 通过 MCP 共享同一份记忆。
  • vectorize-io/hindsight: 插件生态的问题开始集中爆出来——本轮 8 个新 issue 里有 4 个来自第三方插件:openclaw 复制版把未解析的 SecretRef 直接发成 Bearer [object Object] 导致全部 401(#6201)、API 不可达时 retain 被静默丢弃而非排队(#6196)、默认 recallTypes: ["observation"] 下回填/导入的记忆在 consolidation 之前完全不可见(#6198)、Codex 的 OAuth token 刷新后 embeddings 401(#6200)。
  • earendil-works/pi: 本轮 9 个提交几乎全是细节修复(TUI 换行处样式空格与删除线复位、Windows 路径大小写不敏感比较、-e 扩展的临时 git/npm 源刷新、项目 trust 记忆);7 个新 issue 多是 Windows / WSL 路径与剪贴板类问题,没有新增功能面。
  • agegr/pi-web: v0.13.0 发布后约 11 小时无新提交、open issues 仍为 3、新 PR / 新 issue 全为 0——上一轮「9 天空窗后单日 65 提交」的爆发暂未延续成持续节奏。
  • anomalyco/opencode: v2.2.1 把「让会话继续干一件事」做成产品——/goal(模型自审 + pause/resume/clear)+ /schedule(opt-in 定时提示词 + client.experimental.schedule.* API),但发布后当天就把 image 工具默认打开并改名 experimental_image_generate(#60258),release notes 里的「opt-in」措辞随即过期。
  • anomalyco/opencode: 定时任务在发布次日补上「shell 检查」闸门(#60137,until: {run} / if: {run, changes:true}),用外部命令的结果决定是否唤醒会话——这正是上一期第三方分析指出「本次发布不包含」的那块能力。
  • anomalyco/opencode: 免费额度问题升级成集群。窗口内新 issue 147 个,按评论排序的前 60 个里有 23 个在谈 free/quota/limit;#60124「重置时间自己从 10-29 推到 10-30」、#60062「重置计时器多加 24 小时」、#60173「到点没重置」等,全部被关闭。
  • anomalyco/opencode: npm 双线仍未收敛——opencode-ai latest 仍是 1.19.5,而 @opencode/cli latest 已是 2.2.1;上一期「release notes 说已发 npm、npm 上没有」的 @opencode/pty 本期已实地上架 0.3.3(2026-10-29T15:49Z)。
  • earendil-works/pi: 本期几乎全部产能投在 Chord v2 slice 7a/7b——依赖模型落地(feat(chord): Chord v2 slice 7a, the dependency model),并用 10 余条 decision 文档固化「不做环探测、改用 parked_long 诊断」「getters 由 reviewer 投票」「用 hostAddress 取代 placement」。
  • earendil-works/pi: 长会话的性能问题被用户量化报上来——#11570(V8 OOM / SIGABRT:flatMap 里对巨型 ConsString 做 flatten+regex-replace)、#11567(getSessionName() 每次渲染都全量扫描);另一个长期项 #11554 是 Responses 中转账号轮换后 invalid_encrypted_content 让会话不可恢复。
  • agegr/pi-web: 9 天空窗结束,2026-10-29 单日 65 个提交并发布 v0.13.0(上一期还在记录「停更了?」的公开质疑);open issues 从 9 降到 3,新 issue 4 个且全部当天闭环。
  • agegr/pi-web: v0.13.0 大量条目直接以「与 pi 的 TUI 一致」为验收口径(用量行 ↑1.2k ↓567 R8.9k W12 $0.0036 · took 10s、用户消息里的 HTML 按原文显示、压缩期消息排队、代码块长行换行、附件图片不前端压缩);CI 改为 Trusted Publishing 从 CI 发 npm(#16f195c)。
  • vectorize-io/hindsight: #6176 放弃 native tool calling,所有 provider 的工具调用改走一条 response schema 路径——理由是 20 来个 provider 各修一遍仍会漏:vLLM 的 gemma4 解析器不执行 required/具名 tool_choice 的语法,导致 reflect 被强制的后续检索有 75% 直接返回 stop 信号。
  • vectorize-io/hindsight: 托管版叙事继续推进(10-27 博客:Hindsight 1.0「API 是一个承诺」、Memlake 已跑在大部分 Cloud 上、bank 文档 zip 可导入导出、reflect 展示证据);代码侧同期加了 decision-model 托管 provider 与管理员 sign-in 命令(#6169,opt-in、暂未写进 --help)。
  • agentclientprotocol/agent-client-protocol: 单日 29 个合并 PR、全部是 v2 协议语义(session/resume 的 cwd 必须与 session 一致、session/list 的 cwd 匹配、stdio MCP 启动环境与唯一 server 名、prompt 响应与 update 无固定顺序、初始化完成前的消息、未声明的 prompt 内容必须拒绝、保留 $/ 前缀与未知方法处理);社区侧仍是 0 新 issue、0 新讨论。
  • agentclientprotocol/agent-client-protocol: 合并速度从上一期的 17 升到 29,但依然几乎全部由 benbrandt 一人承担;本期唯一非 bot 的外部贡献是 #2592(把 SpurCode、SpurLab 加进 clients registry)。

各仓库详情

anomalyco/opencode

开源编码 agent(CLI + Desktop + HTTP API + SDK)| 赛道:AI 编程工具 | stars: 223060 | open issues: 3794 | 默认分支: dev | 最近 push: 2026-10-29T23:57:31Z | 主页: https://opencode.ai

近 51.6 天 release 重点(窗口期新增 4 个):

  • v2.2.2(2026-10-29T18:43Z)— 生图默认开启 + worktree 选择器 + 引用/标注统一编辑器

    • Image Generation by Default:连接的 provider 支持图像模型时,experimental_image_generate 直接可用,无需额外配置;偏好模型仍用 experimental.image_generate.model 指定(#60258)——这正是把 v2.2.1 里「opt-in」的措辞改口
    • 新会话页点击当前 Git 分支即可直接打开该项目的 “Run session in” worktree 选择器(#60263)
    • 时间线引用、终端引用与浏览器标注共用同一个带可选评论的编辑器,source highlight 仍附着在本地草稿上(#60164)
    • Core:记录每次会话最近一次执行的开始时间;拒绝 cwd 已不存在的持久终端请求;会话 fork / import 时保留媒体;把生图通知关联到正确的后台任务
    • TUI:保留已捕获附件及其原始来源路径(#60222,社区贡献);极窄终端下中间截断路径不再溢出;Go 用量上限提示带上重置时间与账号页链接,并修正 Go / ChatGPT 用量上限错误的类型与显示
    • Desktop:恢复经典问答卡片为默认(新增 Settings → Experimental → New question UI 切换到键盘向新 dock,#59723);侧边栏页签菜单、溢出时保留关闭按钮;排队 prompt 内容变大时不再掉帧;inbox 的 Working 分区按执行开始时间排序;切换目录时保留每个 tab 的时间线
    • SDK:client.experimental.schedule.create 新增 if / until 入参与检查结果、输出字段(#60137);暴露 SessionInfo.time.busy;prompt 文件附件可选来源元数据
    • 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v2.2.2
  • process-daemon v0.4.0(2026-10-29T22:01Z)— opencode-pty 0.4.0(protocol 7),已发布为 npm @opencode/pty@0.4.0

  • v2.2.1(2026-10-29)— 目标驱动会话 + 生图 + 新模型选择器

    • Breaking:@opencode/ai 移除 fal / Black Forest Labs / Replicate / Stability 四个 provider 及其入口(#59977);5 个旧入口路径改名(./providers/amazon-bedrock-mantle → ./providers/amazon-bedrock/mantle,./providers/google-vertex-{chat,interactions,mistral,responses} → ./providers/google-vertex/*,#59506);每个 provider 的 configure() 入参类型统一改名 Config(Groq.LanguageModelOptions → Groq.Config,#59765)。不影响 CLI / Desktop / HTTP API,只影响直接 import @opencode/ai 的代码。
    • /goal <objective>:会话持续工作直到 reviewer 确认目标达成,配 /goal pause|resume|clear(#59437)
    • image_generate 工具(当时为 opt-in):后台生成/编辑图片,可用 experimental.image_generate.model 指定默认模型(#59939、#60096)
    • 定时提示词:/schedule、agent 工具与 experimental.schedules,并暴露 client.experimental.schedule.{create,list,get,pause,resume,delete}(#59401、#59457)
    • 新增 GPT Image 2(Codex 登录后)、MiniMax 与 Meta Muse 生图(#60085、#59929、#60081);OpenRouter / DigitalOcean / Venice 支持 Responses API(含 freeform 工具,#59991、#59963)
    • 修复:工具输出塞进上下文时保留更多 headroom(#59934);provider 限流改为正确重试而不是报成 context 溢出(#59649);OpenRouter / Google / Vercel Grok 的图片编辑参考图与尺寸按各自期望格式发送(#60067、#59927);凭证元数据与 prompt cache 设置不再混进 model settings(#60057、#59500);split index 仓库的 Git snapshot 修复(#59417)
    • TUI:显示首个模型步骤之前就发生的执行失败(#60079);续跑 subagent 时保持 activity spinner(#59950)
    • Desktop:/reload 不重启即可重载配置(#59887);重做后的可搜索模型选择器成为默认(#59997);后台 shell 可在活动 pill 里看实时输出并停止(#59496)
    • 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v2.2.1
  • process-daemon v0.3.3(2026-10-29)— opencode-pty 0.3.3(protocol 7),已发布为 npm @opencode/pty@0.3.3

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

  • c784d17 定时任务支持 shell 闸门 (#60137) — until: { run: "gh pr checks 123" } 一次性等待,if: { run, changes: true } 给循环计划加条件;静默轮询不消耗模型调用,ends.times 只计真实唤醒
  • d4e48f5 生图工具默认开启并改名 experimental_image_generate (#60258) — 只要连上的 provider 有图像模型就出现;关闭方式改为权限规则 "experimental_image_generate": "deny",旧的 true/false 值仍兼容
  • f74b141 release: v2.2.1 (#60113);87a35fa process-daemon release 0.3.3 (#59969)
  • c1b5f1b 新增 session_part 表并从它读取历史 (#58915)
  • fbb47c9 agent、/schedule 与 experimental API 三条入口都能排定时提示词 (#59457)
  • d9ecbbc / 3eb834b Go 与 ChatGPT 用量上限类型化,并展示重置时间与页面链接 (#60284、#57897)
  • 756f832 拒绝 cwd 缺失的持久终端 (#60300);ccd406b 小宽度下 truncateMiddle 不再溢出 (#60287);6b9f214 切换目录时保留每个 tab 的时间线 (#59168)
  • aaa0d7c 告诉 Code Mode 模型内建工具仍在顶层 (#57627);ecc075a for…in 遍历继承的可枚举键 (#59933)
  • 2f3e56d / f023f7c 生图工具描述与开关字段的重写 (#60090、#60096)

本轮(17:35Z → 00:30Z)新增的 commits / PRs:

  • c24c5af feat(core): schedule 支持 Code Mode 检查与静态工具扫描 (#60140) — 创建时用 Acorn AST 扫描 tools.<path>(...) 调用,拒绝动态 tools[x] 与别名,一次性授权这些工具(不写项目级授权表),无人值守 tick 只暴露这些工具且不含 fetch;state / now / runs 作为全局变量直接读
  • b2bd02e feat(core): integration.connect / integration.use 策略 (#60315) — 组织可只靠 MDM 策略强制使用自家 Console workspace,无需维护 provider 列表或 OPENCODE_DISABLE_FREE_MODELS;策略形如 {"action":"integration.connect","resource":"*","effect":"deny"},随后只放行目标 org 的连接
  • 8609cc5 refactor(core): 把 shell 权限检查彻底移出 tree-sitter (#60332);055a2a9 code check 抛异常时创建 schedule 失败并立即暂停无效检查 (#60349)
  • 06bf854 删除会话时同时移除其持久终端 (#60322);756f832 拒绝 cwd 缺失的持久终端 (#60300)
  • b6f82bf execute 进度最多每 100 ms 推送一次 (#60120);b653a62 MCP 工具失败时保留权限理由与反馈 (#60102)
  • 84aed13 TUI 按引用加载已存图片,与桌面端一致 (#60116);c24760c 高亮没有开标签的 PHP 代码块 (#60359)
  • d09e2c6 桌面端新增问答通知与提示音 (#60358);83e3999 设置页里对新增项目分组 (#60221);51625f7 打开会话时保留 inbox 滚动位置 (#60356)
  • dc0bfc5 检查重定向、PowerShell 方法调用与动态目录变更 (#60376)
  • f7b4d50 页脚挂上实时系统状态链接 (#60223);3e8e974 /go 增加 Go Teams 套餐与限额 (#60308)
  • 仍为 open、尚未合并的方向性 PR:#60367(steer 时把阻塞工作转到后台)、#60375(工具超过 yield_after 默认 30 秒自动转后台,配套 job_list / job_output / job_wait / job_stop)、#60351(实验性 artifacts,可插拔存储 provider)、#60342(task-parallel 并发子任务工具,2–5 个)、#60360(子代理 idle 时把结果报告回父代理)、#60346(桌面端 terminal 迁到持久 PTY)

社区讨论 / 行业方向:

  • OpenCode v2.2.1 adds /goal and image generation(RepoJournal): 第三方把 2.2.1 与 Goose 1.57.0 并列解读——Goose 同一版收紧 allowlist(必须 HTTPS、校验重定向、策略失败即阻断);提到 gemini-cli 修掉 Auto 别名被误标 preview 导致 /model 里消失的问题
  • OpenCode adds goal-driven coding and opt-in scheduled prompts(RohitAI): 第三方实测结论值得记——goal 的完成判定由会话自己的模型来做,不是人,也不是另选的 reviewer 模型;连续 3 轮停滞或 50 轮上限才暂停,恢复后重置轮次额度;goal 没有专门的 token 预算。schedules 默认关闭,需要在配置里显式开 experimental.schedules;定时器跑在 OpenCode server 侧,本机关机就不会继续。这篇文章发布于 2.2.1 当天,因此「本次不含条件式 shell 检查」的说法已被次日 #60137 推翻
  • OpenCode Changelog(官方): 官方确认 v2.2.1 与 process-daemon 0.3.3 两个版本同日出
  • opencode-gpt-imagegen(npm): 第三方插件复用 OpenCode 已有的 ChatGPT 订阅通道做生图,走 Codex 后端的 images 端点并把 PNG 落盘——说明「image_generate 工具」在第三方生态里已经有插件抢跑
  • OpenCode Changelog(官方,v2.2.2): 官方把 v2.2.2 的首条列为 Image Generation by Default,并把 client.experimental.schedule.create 的 if / until 写进 SDK 变更
  • anomalyco/opencode v2.2.2 on GitHub(NewReleases): 第三方镜像站把三块 Highlights(生图默认、worktree 选择器、引用/标注统一)与 SDK / Extensions 变更完整列出
  • AI Coding Tool Releases — Timeline(Havoptic): 按天追踪各家 AI 编码工具发版,把 OpenCode v2.2.1 与 v2.2.2 记为 10-29 同日两版,并与 Codex CLI rust-v0.166.0、Amp 2026.10.29 并列——同日发两版在这一层级的工具里已不算异常
  • AI Agent 动态(AgentMaps 中文): 中文视角的解读——“同日两版把实验性图像工具在 provider 支持处转正为零配置默认,从实验转正正是功能成为标配的标志”;并指出引用与标注统一后,评审产物可在整个会话中移植

信号观察:

  • 额度类投诉已成集群而非个案:窗口内新 issue 147 个,按评论排序前 60 个里 23 个谈 free/quota/limit;#60124 描述「设备整夜未用,重置时间却从 10-29 推到 10-30」,#60062 标题直指「重置计时器多加 24 小时」,#60173「到点没重置」,#60149「重置后仍被封」。这些全部被关闭,说明修复速度赶上了投诉速度,但根因描述高度一致
  • 发布即改口:v2.2.1 的 release notes 写 experimental.image_generate 是「opt-in」,但 tag 之后 10 分钟的 #60258 就把它改成默认开启并改名,把「开启」这件事从配置项挪到权限规则。同一天内发布说明与实现不一致,是本期最刺眼的一处
  • npm 双线仍未收敛:opencode-ai latest = 1.19.5、@opencode/cli latest = 2.2.1,两者仍是两套版本线;周下载量 445.8 万(2026-10-22 ~ 10-28)
  • 「条件式唤醒」补齐:上一期第三方指出的缺口(schedule 只按时间发 prompt,不看条件)本期以 shell 闸门补上,且明确把静默轮询与真实唤醒分开计数;本轮又补上 Code Mode 检查(#60140),把「条件」从「跑一条命令」扩展到「跑一段能被静态审计的脚本」——条件闸门开始变成一个可组合的子系统,而不是一次次打补丁
  • 「实验 → 默认」的节奏明显加快:v2.2.1 写 opt-in、v2.2.2 就默认开启,中间只隔 21 小时;同期还有 4 个新 PR(#60351 artifacts、#60342 task-parallel、#60367、#60375)以「先开开关再观察」的方式进入 dev
  • 额度信任从「计时不准」走向「默认给什么」:除了重置时间不准,本轮出现两条社区诉求——要内置 free-only 模型过滤(#60392)与 OPENCODE_ONLY_FREE_MODELS(#60383);官方反手给出的 integration.connect / integration.use 策略(#60315)是把「用谁的账号」也做成了可下发策略。免费额度问题正在被重新定义为「默认可见性与默认账号归属」问题
  • 会话不再等长任务:steer 即转后台(#60367)+ 30 秒自动转后台(#60375)+ SessionInfo.time.busy(v2.2.2 SDK)三件一起,指向同一件事——会话的「忙」与工具的「忙」必须能分别表达

earendil-works/pi

AI agent 工具包:统一 LLM API、agent loop、TUI、coding agent CLI(外加独立的 Chord 应用组合运行时)| 赛道:agent 框架 / SDK | stars: 118808 | open issues: 353 | 默认分支: main | 最近 push: 2026-10-29T21:11:08Z

近 51.6 天 release 重点(窗口期内无 release):

  • 窗口期内无 release。最新为 v1.4.0(2026-10-21),其中与本期相关的是 Chord v2 以 @earendil-works/chord/next(experimental)导出,以及 slice 8 的 registries / writables / host.root。
  • 本期新增能力集中在 packages/chord/CHANGELOG.md 的 [Unreleased] 段(Breaking Changes):traceIn(options, fn, context) 改为 context 在后;watch 监听器改为接收一个 change 对象 { value, ops, retired };新增 SqliteExecutor.runCounted(返回 SQLite changes() 计数);退休从「结束」改成一个标志位(advance({ value, ops, retired: true }) + endAfterDelivery());watch 调用带 tag({ kind: "value" | "failed" });WatchEnd 用 kind 而非 reason,cancelled 更名 aborted。

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

  • 339847e feat(chord): Chord v2 slice 7a, the dependency model — 本期唯一的功能性 feature 提交,落地 slice 7 的依赖模型
  • 5ec2418 用 hostAddress 取代 placement:远程类型仍需声明 placement,但只有带地址的 host 才能服务远程类型,且 hold 永远携带自己的地址
  • 601461e / b857fbd / adfa8f3 / 972d701 slice 7b 的四份 brief:插件布局与构建加载、资源、HTTP、app kit、度量;决策是插件依赖默认内置、外部依赖 opt-in,reload 在 kernel 内进行
  • a5609aa 决策:不做环探测,改用 parked_long 诊断与编写规则
  • 249f24b / a54f250 getters 由 reviewer 投票决定,getter 在 waiting 状态里一直等到自己的 readyTimeout
  • e7a0df2 缩放图片时在 PNG 与 JPEG 里挑更小的 (#11577) — 对应 issue #11550「缩放后 PNG 比 JPEG 大约 10 倍」
  • 0d23d53 npm 包更新后若安装版本没变则给出警告 (#11571)
  • c719d5b Zhipu 用量上限错误(code 1308)不再重试 (#11572)
  • f14813e skill 诊断信息统一标为 [Skill warnings] (#11566);19ce805 普通模式不再写 OSC 133 prompt 标记 (#11565)
  • 6fed3cf SDK 流在生成摘要时可自行完成鉴权 (#11556)

本轮(17:35Z → 00:30Z)新增的 commits / PRs:

  • f09d01b fix(tui): 把 Orca terminal 识别为支持 Kitty 图像的终端 (#9329) — 本地终端能力的探测范围被明确扩展
  • 1be312b fix(coding-agent): Windows 下路径比较大小写不敏感 (#11588);31ade0e 对没有需要信任资源的项目也遵守已保存的项目 trust (#11589)
  • bec60c5 刷新临时 git 源中被 branch ref 钉住的版本;cd6a8f7 临时 npm 扩展未钉版本时,发现有更新版就刷新 (#11590)
  • 2ce9d52 fix(tui): 换行边界处去掉样式词后的空格,行尾重置删除线 (#11591)
  • 86dc686 fix(tui): 原生 Shift 下的 ESC+Return 识别为 Shift+Enter (#11586)
  • 新 issue(7 个,均已关闭):#11583 把非活跃会话从会话选择器移到当前目录;#11587 会话目录 0700、会话文件 0600;#11592 WSL 下 cwd 较深时剪贴板图片粘贴静默失败(PowerShell interop 撞 MAX_PATH);#11593 远端目录元数据被重置后缓存模型消失;#11594 Alibaba 端点上的 reasoning 模型因 developer role 报 400;#11595 内容型编辑在 context handler 里会中途坍缩 system message;#11597 Windows 下 pi update 的 git clean -fdx 应改为 -ffdx

社区讨论 / 行业方向:

信号观察:

  • 本期几乎全部产能是设计文档:packages/chord 的提交里 10 余条是 docs(chord): 决策与 brief,功能提交只有 slice 7a 一条。slice 顺序被显式写死为「7b, 7c, 10, 11, telemetry last」
  • 「同一语义只写一份」的第三种形态:Chord 的 watch 体系在本期把「值 / 失败 / 退休 / 结束」四种状态彻底拆开——退休不再是终止而是一个标志位,失败有独立 kind,结束也有独立 kind。这与上一期观察到的 opencode「免费即默认可见」、hindsight「把在服务的 reranker 写进 trace」是同一类动作:把原本混在一起的多义状态拆成互斥的、可组合的显式状态
  • 长会话性能成为用户可量化的投诉:#11570(V8 OOM / SIGABRT:flatMap 内对巨型 ConsString 做 flatten+regex-replace)、#11567(getSessionName() 每次渲染扫描全部条目)。这两条都不是新功能,是「用了两个月的项目开始暴露出规模问题」
  • 不可恢复的失败仍存在:#11554 报告 Responses 中转账号轮换后 invalid_encrypted_content 会让整个会话不可恢复;#11552 提出对不支持的 tool-result 图片格式做可恢复处理的提案(本期未合并)
  • 本轮的 9 个提交全是细节修复,没有新的功能面(TUI 换行样式、Windows 路径大小写、临时扩展缓存刷新、项目 trust)。与上一轮「几乎全部产能投在 Chord v2 设计文档」相比,节奏从「写设计」切回「修边角」——典型的发版前后节奏:v1.4.0(10-21)之后的静默期
  • 跨平台细节开始占用真实工作量:#11588(Windows 路径大小写)、#11592(WSL 深层 cwd 下的剪贴板图片)、#11597(Windows git clean 参数)都指向同一个事实——pi 的用户里 Windows/WSL 占比不低,而这些坑在 issue 区是「一次一个」被报出来的
  • 临时扩展的更新语义仍不稳定:#11590(未钉版本的临时 npm 扩展有新版就刷新)与上一轮的 #11571(安装版本没变则警告)指向同一个未完成的机制——「临时装的扩展到底该不该自动升级」还没有定论

agegr/pi-web

pi coding agent 的本地浏览器界面(读本机 pi 会话文件,非云端 agent)| 赛道:agent 前端 / Web UI | stars: 7907 | open issues: 3 | 默认分支: main | 最近 push: 2026-10-29T13:25:43Z

本轮(17:35Z → 00:30Z)增量:无。 新提交 0、新 PR 0、新 issue 0、open issues 仍为 3;最近一次 push 停在 v0.13.0 发布当天的 13:25Z。

近 51.6 天 release 重点(窗口期新增 1 个):

  • v0.13.0(2026-10-29)— Debug 面板、工具参数逐行显示、SVG 代码块预览、公式复制 LaTeX、Markdown 音视频播放
    • Debug 面板(只读,工具栏虫子图标):显示本页与服务器之间的连接(每页 SSE 数量 vs 浏览器每源 6 连接上限、轮询往返、事件流与租约倒计时),以及服务器持有的会话、子代理、MCP、终端与文件监听,并列出当前连接的所有页面。打开面板不会启动、恢复或续期任何东西(#1443、b5acfe8、3a01952、e368baf)
    • 工具卡片参数改为逐行显示,shell 命令保留真实换行(#1324、#1396)
    • ```svg 代码块像 mermaid 一样渲染成图片(可切源码、放大、下载 SVG)(#1455);块级公式带复制按钮,复制模型写的 LaTeX 源码(#1380、#1454)
    • Markdown 里的音频与视频直接渲染播放器(#1281)
    • 压缩期间发送的消息改为排队,压缩结束后按序发出,与 pi 的 TUI 一致(#1426)
    • 顶栏 Agents 徽标显示运行中的子代理数量与转圈;子代理列表显示实际使用的模型与思考深度(#1311、#1415、#1450、#1440)
    • 模型设置:自定义模型可单独设 Base URL(#1288)、anthropic-messages 新增 Claude adaptive thinking 开关(#1331)、支持图片的自定义模型可设图片大小上限(ec9f38a)、搜索可匹配 provider id 与 provider/modelId(#1308)
    • 用量行与 pi 的 TUI 对齐:形如 ↑1.2k ↓567 R8.9k W12 $0.0036 · took 10s,零值省略,箭头与时钟改用 SVG 绘制(Windows 上不再变形)(#1417、#1449、3383ba6)
    • 代码块长行自动换行,与 TUI 一致(#1369);手机端 diff 改单栏(#1325);附件图片原样交给 pi,由 pi 按模型限制缩放,前端不再压缩(#1442)
    • 完成通知改为整组代理(含主代理)都结束后才发(#1437、#1361)
    • 后台标签页释放空闲事件流;页面读取会话状态时不再带上系统提示词(大 AGENTS.md 时每次可达数百 KB,#1306)
    • 子代理等待可设上限:前台 Agent 与 get_subagent_result 新增 wait_timeout(秒,默认 30 分钟)(#1448)
    • 修复:会话目录被删时不再报误导的 “Model error”(#1453);发送失败的消息退回输入框(#1457);二进制文件显示下载提示而非乱码(#1401、#1452);用户消息里的 HTML 按原文显示(#1444);Ctrl+Alt+N 在 macOS 上生效(#1337)
    • 完整 release notes: https://github.com/agegr/pi-web/releases/tag/v0.13.0

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

  • 16f195c ci(release): 用 Trusted Publishing 从 CI 发布到 npm(取代本地发版凭据)
  • d128bae Release v0.13.0
  • f78c672 自定义 provider 从延迟模型缓存中排除 (#1458)
  • 6b8005d PI_CODEMODE_MAX_WORKERS 默认值改为 8
  • 02eee05 服务器从未收到的 prompt 退回输入框 (#1457);246e625 子代理可配置等待预算 (#1448);9ccde25 已有分支的 worktree 命名 (#1456)
  • 377c012 SVG 围栏按图片预览 (#1455);5e2d92d 公式复制按钮 (#1454);95d0c9d 二进制文件下载提示 (#1452)
  • 6c9dbbe 三行列表中显示子代理实际模型与思考深度 (#1440);ed3f8cb 整组子代理与主代理结束后再发完成通知 (#1437)
  • a295025 压缩期间排队的 prompt (#1426);1fefdf0 斜杠命令补全优先匹配命令名 (#1414);f3bd2a7 导航恢复时保持工具顺序 (#1405)
  • 158e914 区分「不可用的选项」与「非法条目」 (#1427);80a61d7 Models 侧栏按名称列出 models.json 中的模型 (#1408)
  • e368baf / 3a01952 / b5acfe8 Debug 面板三件套(SSE 计数、页面清单、面板改双栏)

社区讨论 / 行业方向:

信号观察:

  • 上一期的「停更」质疑在本期被正面回答:2026-10-20 之后到 2026-10-29 之间无提交,10-29 单日 65 个提交 + v0.13.0。窗口内合并 PR 计数(Search API)显示 16 个新建 / 53 个合并,说明大量 PR 是集中 rebase 后一次性合并
  • 单维护者特征没有变:本窗口内提交作者仍以 agegr 为主,但 v0.13.0 的 release notes 逐条标注了外部贡献者(Brynne Taylor、Vlad Sirenko、TossPig、xcg、maximilize、draxxris、沈青川、Delthin、jiangzhangg 等),并为多项功能附了 issue/PR 号——这是「小项目用 issue 编号替代传统 changelog 治理」的典型形态
  • 「与 pi 的 TUI 一致」被当作可验收的规格,出现在 HTML 显示、压缩期排队、代码块换行、用量行格式、附件不压缩、斜杠命令补全等多处。这是前端 agent 与 CLI agent 之间的对齐成本第一次以「一致性条款」的形式出现在 release notes 里
  • Debug 面板明确写了「打开它不会启动、恢复或续期任何东西」——把「只读观测」写进功能语义,是对上一期「静默丢弃 / 静默触发」类问题的反向规避
  • 「沉默后爆发」尚未变成节奏:v0.13.0 发布后约 11 小时无新提交。上期「9 天空窗 → 单日 65 提交」是存量集中 rebase 后一次性合并的产物,目前看不到后续持续投入的证据

vectorize-io/hindsight

Agent 记忆系统:retain / recall / reflect、mental models、knowledge pages | 赛道:agent 记忆基础设施 | stars: 56193 | open issues: 191 | 默认分支: main | 最近 push: 2026-10-29T18:52:58Z | 主页: https://hindsight.vectorize.io/

近 51.6 天 release 重点(窗口期内无 release):

  • 窗口期内无 release。最新为 v1.1.0(2026-10-21):Hindsight 1.0 变更日志、Memlake 发布、1.0 文档快照;decision-model 的 per-operation override(#5607)、Cloudflare Clef 与 OpenAI Decisions API 作为 decision-model provider(#5613)、recall 默认偏好 observations(#5617)等均在该版本内。
  • 本期新增能力记在 hindsight-docs/blog/ 与提交里(无根级 CHANGELOG.md)。

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

  • 6c425f1 feat(llm): 每次工具调用都走 response schema,放弃 native tool calling (#6176) — 理由是 native tool calling 在约 20 个 provider 里各有一份实现、各有各的 workaround(只接受 tool_choice: "auto" 的端点、拒绝 reasoning effort 与 tools 共存的模型、丢 tool 定义的网关、Gemini thought signature、Anthropic 的 tool_result 顺序);且部分服务端解析 tool call 时不强制 tool_choice——vLLM 的 gemma4 解析器 supports_required_and_named = False,跳过 required 与具名选择的语法,导致 reflect 被强制的后续检索在多租户负载下有 75% 直接返回 stop 信号,收尾的 done 调用约 1/20 把 section 的 blocks 当字符串送出而被拒重问。现在所有服务端都强制 response schema,于是统一成一条路径
  • 0333ad7 feat(consolidation): 每条事实一条 answer entry,为小模型而建 (#6164)
  • 3411088 feat(decision-model): 新增托管 provider 选项与 sign-in 命令 (#6169) — opt-in,浏览器登录经带 state 校验的 127.0.0.1 回调,key 以 0600 存本地;尚未写进文档或 --help
  • c8a7b4e fix(refresh): delta 编辑保留表行、移除已离开的成员、拒绝溢出的操作 (#6171)
  • a6ee1bc feat(recall): decision-model reranker 的实时去重开关,按请求 prune 与 dedup (#6139)
  • 0764971 fix(recall): decision model 能看到每条记忆的日期;recall eval 可大规模重放冻结的 bank (#6168)
  • 120d90e fix(db): 要求 asyncpg>=0.32,避免连接掉线后卡死 worker (#6107)
  • 9213dba / 8210947 OpenBot 集成页与 Hindsight Memory skill (#6160、#6161)
  • ff9d223 release(coding-agents): v0.8.3;c12f294 说明 OpenCode 2.2 如何找到 v2 入口,把 exports['.'] 钉在 v1 (#6170)

本轮(17:35Z → 00:30Z)新增的 commits / PRs:

  • 4af9878 feat(mcp): MCP 的 recall 也接受 rerank prune/dedup,与 HTTP API 对齐 (#6195) — 请求体接受 {"query": "...", "rerank": {"prune": true, "dedup": true}};缺省时依次回落到 bank 的 recall_decision_model_prune / _dedup,再回落到服务端环境变量;RerankOptions 从 api/http.py 移到 engine/response_models.py 供两边共用,OpenAPI 重新生成后无差异
  • 8e8e9dc blog: OpenBot 集成与基于 MCP 的共享记忆(新增 hindsight-docs/blog/2026-10-29-openbot-persistent-memory.md)
  • 新 issue(8 个)集中暴露插件生态与嵌入端的真实问题:#6201 openclaw 复制版把未解析的 SecretRef 当成 Bearer [object Object] 发出,导致每次调用 401;#6196 openclaw 在 Hindsight API 不可达时把已完成的 turn 直接丢弃(“client not initialized, skipping retain”)而不是排队;#6198 openclaw 默认 recallTypes: ["observation"] 时,回填或导入的记忆在 consolidation 追上之前完全不可见;#6200 OpenAI-Codex 的 OAuth token 刷新后 embeddings 401,而 Codex LLM 调用正常;#6199 reflect 的 done() 路径崩溃(HindsightConfig 缺 llm_supports_max_items);#6197 llama.cpp 忽略 dimensions,HINDSIGHT_API_EMBEDDINGS_OPENAI_DIMENSIONS 无法缩小 Matryoshka 模型;#6202 希望给视觉模型单独设 reasoning level(HINDSIGHT_API_VLM_REASONING_EFFORT);#6203 Hermes 插件的参考实现(回应 #5375 / #5426 / #6145 / #5639 提出的 recall 控制项)

社区讨论 / 行业方向:

  • What’s New in Hindsight Cloud: The API Is a Promise Now(官方博客,2026-10-27): 托管版叙事——Hindsight 到 1.0 后「API 是一个承诺」;Memlake(Rust 写的对象存储记忆引擎)已跑在大部分 Cloud 上,服务 1 亿条记忆、p99 < 100 ms、每次写入在被确认前已持久化;bank 的文档 zip 可导出也可导入(facts 重新嵌入并关联到目标 bank);reflect 展示证据并能把手册排在闲聊之上;一个 bank 可有多个名字;成员可审批 AI 客户端,访问权撤销时连接随之结束
  • Hindsight — Open Source Agent Memory(OSSroster): 第三方对其定位的复述——「可自托管的记忆层,agent 可 retain 事实与经验、按语义/关键词/关系/时间 recall,并 reflect 出长期记忆」
  • Ways to run Hindsight(官方文档): 三种运行方式共用同一记忆引擎(retain / recall / reflect、mental models、knowledge pages、同一套 API 与 SDK)
  • 仓库 Discussions 窗口期内无新帖(最近 10 条为 2025-12 起的旧帖)。
  • OpenBot Shared Agent Memory with Hindsight(官方集成页): 官方文档页——OpenBot 在本机跑一队常驻 agent(Claude、Codex、Grok、Gemini、OpenCode 等),接上 Hindsight 作为 MCP server 后,每个 agent 都能 recall 早前线程里学到的东西、并在工作时 retain 新事实
  • Three AI Agents Sharing One Memory(智柴论坛): 中文社区的实测——把工作偏好告诉一个 Codex 实例,另一个实例能通过 Hindsight 取到,跨设备、跨 agent 的共享记忆已被普通用户验证
  • Hindsight 共享记忆指南(CSDN): 中文教程梳理 tags / tags_match 六种可见性模式与 temporal_window(排序而非硬过滤),并强调 bank 边界与访问规则仍然生效

信号观察:

  • 「每个 provider 各修一遍」被换成「一条路径」:#6176 是本期最有分量的一次收敛——不是修 bug,而是把 20 份分散实现换成统一的 response schema 路径,代价是必须显式处理各家 schema 严格度差异。issue #6187 立刻反证了这个成本(Anthropic 非严格 structured output 把 per-request schema 塞进被缓存的 system block,污染 prompt cache)
  • 测试基建债开始被系统性记账:单日新开 4 个 flaky-test issue——#6175(并发 append 触发 ModifyTable 错误)、#6178(两个 schedule 同时到期时全量 refresh 赢)、#6189(test_invalid_shape_index_is_rebuilt 死锁)、#6191(test_shared_document_id_folds_sync_large_batch 删除 bank 数据时死锁),全部由维护者自己开
  • 托管版与开源版的节奏差:博客讲的是 Memlake、1.0 承诺、zip 导入导出、reflect 证据面板;代码窗口期内的主线却是 decision-model(托管 provider + sign-in)、refresh 的 delta 语义、recall 的去重与日期可见性。「记忆的正确性」正在从架构叙事挪到可观测的字段上
  • 两个 provider 形状的问题同源:#6174(Gemini thought_signature 在 OpenAI 兼容 tool call 中丢失 → Reflect HTTP 400)与 #6172(Responses-API provider 仍发 chat/completions 格式的 content part)都是「把一种 provider 的消息形状硬套到另一种上」的残留,与 #6176 试图消除的正是同一类问题
  • 本轮的 8 个新 issue 里有 4 个来自第三方插件,且形状一致:插件层把「对象」当「字符串」用、把「失败」当「无事发生」用(#6201 把 SecretRef 对象拼进 Authorization 头;#6196 把 retain 静默丢弃;#6198 把回填记忆在 consolidation 之前归为不可见)。MCP 接口的参数校验与失败语义,没有在第三方集成里被完整继承
  • 「同一能力开两个入口」的维护成本再次显现:#6195 把 RerankOptions 从 api/http.py 移到 engine/response_models.py 让 MCP 复用,OpenAPI 重新生成后无差异——这是「HTTP API 先长出来、MCP 后跟上」模式的标准补账流程

agentclientprotocol/agent-client-protocol

连接任意编辑器与任意 agent 的协议(JSON-RPC 2.0 over stdio)| 赛道:agent 互操作协议 | stars: 4539 | open issues: 29 | 默认分支: main | 最近 push: 2026-10-29T23:04:01Z | 主页: https://agentclientprotocol.com

近 51.6 天 release 重点(窗口期内无 release):

  • 窗口期内无 release。最新为 Rust Crate v1.13.0 / Schema v1.27.0 / Schema v2.0.0-alpha.10(2026-10-27):v2 的 terminal size、ResourceLink.size 无符号化与未知 tool kind、DiffPatch / ToolCallPermissionSubject / Icon / cancelled 的 _meta、禁止 null request id、available commands 的类型判别、version mismatch 错误定义;v1 的 session message view 与 chunk 身份分离;v2 侧修了 nextCursor 与目录解析、非法值不清空替换列表、未知变体保留可选字段原样、elicitation schema 根类型非对象即拒绝、ToolCallLocation.line 改为 1-based、terminal exitCode 改有符号整数。
  • 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/schema-v2.0.0-alpha.10

其他重要 commits / PRs(按重要性挑选,本期几乎全是协议语义文档):

  • 2bb9fac fix(unstable-v2): usage_update 的 cost 改为 patch 字段 (#2617) — 协议面本期唯一的字段语义变更
  • 5750db5 session/resume 的 cwd 必须与 session 一致 (#2612);5fea479 定义 session/list 的 cwd 匹配 (#2609)
  • 76ff0e4 定义 stdio MCP 的启动环境与唯一 server 名 (#2608)
  • 26d7570 prompt 的响应与 update 之间无固定顺序 (#2607);f83692c 定义初始化完成前的消息 (#2606);85a4551 定义 session/new 响应之前发出的 session 消息 (#2603)
  • 25c127f 未声明的 prompt 内容在插入前必须拒绝 (#2601);d9a9e2e 保留 $/ 前缀并定义未知方法的处理 (#2600);fbfe296 列出 v2 的封闭 union (#2599)
  • 86dd3a4 指定 slash command 的名字与调用方式 (#2598);97c7381 说明 Client 在 elicitation/complete 时该做什么 (#2597);0b32ae1 plan_update 无论 type 如何都整体替换 plan (#2596)
  • 4d54e09 澄清 authMethods 的义务、terminal gating 与 auth/login 错误 (#2589);64819c7 报告 subagent 工作目录 (#2593)
  • 361d1d4 为已定义的 error data 增加 schema 类型 (#2605);b3ab19d elicitation content 接受其它 JSON 值 (#2595)
  • 20dfb9a resume 的 mcpServers 即 Client 提供的完整集合 (#2614);6ed72bb 迁移指南说明 replay 覆盖保留的历史 (#2613);ad3ce89 把 v2 变更清单与迁移指南对齐 (#2615);c71b127 记录按类型的 message ID 唯一性 (#2616)
  • 1f3e03d 把 SpurCode(CLI/TUI orchestrator)与 SpurLab(notebook)加入 clients 列表 (#2592,kevintruong) — 本期唯一非 bot、非维护者的合并

本轮(17:35Z → 00:30Z)新增的 commits / PRs(本轮全部由 benbrandt 提交):

  • bf529a9 feat(unstable-v2): v2 移除 JSON-RPC batching (#2625) — 跟随 MCP(2025-03-26 加、2025-06-18 删);理由是双向连接上无法区分「一批请求」与「一批响应」、数组混两者、batch 是否可在初始化完成前发送。规范改为:每条消息必须是单个 JSON-RPC 对象,发送方 MUST NOT 发数组,接收方回一个 id: null 的 -32600
  • a7855aa docs(rfd): 新增 v2 background work RFD (#2452) — 告诉客户端「前台工作结束后仍在跑的工作」:后台 shell / 监控 / 定时唤醒 / 后台 subagent;不新增实体,而是让 tool call 在会话 idle 后仍保持 pending(尚未开始)或 in_progress(运行中),tool call 可单独 tool_call/cancel,state_update 增加可选 background 列表(每次整表替换,缺省=不报,[]=无运行中)
  • 6746228 / d2b1fcf / f94571d / 21384d7 / 40fd3d6 / d7b9754:迁移指南逐条落地——batch 移除属于 framing 变更、held prompt 与 cancel 的 -32800、terminal size、chunked replay primer、更宽的 cancelled 权限结果
  • be10657 新实体的默认字段取协议默认值而非 Client 默认值 (#2652);b69e3d5 replay ID 规则适用于所有实体类型 (#2654);51daf5c 命令名后必须有边界 (#2646);a7d1a51 Client 不得发送空 prompt (#2647);b0f99bc close 与 pending prompt 对齐 (#2648)
  • 301cdc9 session/resume 的 cwd 必须与 session 一致 (#2640);468a71a SessionInfo.additionalDirectories 不允许 null (#2638);28684aa $/cancel_request 后允许正常响应 (#2636);c248248 对未知或已应答的请求忽略 cancel_request (#2672)
  • e348016 定义 AbsolutePath 语法并拒绝相对 cwd (#2629);9ae19bf subagent 的 cwd 与 additionalDirectories 用 AbsolutePath (#2660);22797ad MCP 的 lastModified 对齐 ISO 8601 (#2661);521c328 elicitation 的 requestedSchema 必须有 type 与 properties (#2645);effce04 currency 允许非 ISO 单位(如 credits)(#2621)
  • c4aa60d 允许在第一个其它请求之前重复 initialize,以最后一次成功为准 (#2639);0cf6fc1 恢复终端鉴权重连的成功门槛 (#2623);3e332d3 URL elicitation 的用户检查限定为已认证用户 (#2641);7fd3dae session 命名请求限定为其 owner (#2642)
  • 9d4c7d5 / 97ff714 / 9e5e0dd / bf529a9:session update 用 active 而非 attached;前台工作结束时 Agent 收尾 tool call;end-turn 的 Usage 字段限定在已完成的工作;v2 scope 的 transports
  • 8eba6ef / 41afcef:registry agents 更新(bot)与降低 registry 同步噪声

社区讨论 / 行业方向:

信号观察:

  • 合并速度回升但仍是单人产出:本期 29 个合并 PR(上一期 17),其中 28 个由 benbrandt 提交,且全部是 docs(protocol) / docs(schema) / docs(rfd) 语义定义;窗口内新 issue 0 个、新讨论 0 个
  • v2 的收敛方式可见:RFD(提案)→ schema 变更 → 迁移指南三件在同一批提交里对齐(#2613、#2615),说明 v2 的变更正在被当作「有迁移路径的协议升级」而不是「草稿」
  • 社区侧的沉默仍是最大结构性风险:31 个 open issue 是历史累计,本期没有新 issue 进来,也没有外部实现者提交协议语义改动(唯一外部 PR 是往 registry 加名字)。协议规范的推进速度与使用者的反馈之间,仍没有形成回路
  • 本轮的 59 个合并 PR 比上一轮又翻了一倍(29 → 59),且 100% 来自 benbrandt:内容包括 v2 移除 batching、background work RFD、以及一整批迁移指南条目。协议本身在加速,但「谁来用」这条线依然空白
  • 「移除 batching」是一次跟随式决策,而非独立设计:PR 正文直接引用 MCP 的时间线(2025-03-26 加、2025-06-18 删)作为理由。ACP v2 在多处采用「跟随 MCP、但收紧语义」的路线:收紧到接收方必须用单个 -32600 拒绝数组
  • background work RFD 选择了「不加新实体」:复用 tool call 与 subagent 实体,靠 pending / in_progress 语义拉宽 + state_update.background 列表 + tool_call/cancel 表达。这与 opencode 本轮的 SessionInfo.time.busy、hindsight 的 rerank prune/dedup 是同一个思路——用已有字段表达新语义,而不是新增一套结构

yxc023/yxc023.github.io

个人博客 / 报告站(承载本调研的公开版本)| stars: 1 | open issues: 27 | 默认分支: master | 最近 push: 2026-10-29T00:49:08Z

近 51.6 天 release 重点:

  • 窗口期内无 release。

其他重要 commits / PRs:

  • 1b7a56a auto(reports): 同步 daily-research 2026-10-29(2026-10-29T00:49Z)——本期唯一提交,为上一期报告的自动同步
  • 其余 4 个 open PR 均为 dependabot 的依赖升级(astro、sharp、devalue),全部未合并
  • 本轮(17:35Z → 00:30Z)无新提交——本报告自身的同步要等本次部署步骤完成

社区讨论 / 行业方向:

  • 无(窗口期内无新讨论、无外部报道)

信号观察:

  • 该仓库是本调研的发布载体,本期无独立信号

跨项目观察

  1. 「实验 → 默认」的节奏明显加快,而发布说明不再是最终事实。 opencode v2.2.1 的 release notes 写 experimental.image_generate 需手动开启,21 小时后的 v2.2.2 就把它改成默认开启并把开关从配置挪到权限规则;v2.2.2 自己也把 v2.2.1 的内容重写进 Highlights(“Image Generation by Default”)。当一个项目一天出两版,release notes 只能当作「某一刻的实现快照」读。

  2. 「不阻塞会话」从工程细节升为产品契约,并且三家给出了三种粒度。 opencode 在同一晚提出 steer 即转后台(#60367)与工具 30 秒自动转后台(#60375),并用 SessionInfo.time.busy 暴露“会话在忙什么”;ACP 用 background work RFD(#2452)把同一件事写进协议(tool call 可在 idle 后继续、state_update.background 列表、可单独 cancel);pi 则反向处理——长会话的性能债(#11570 V8 OOM、#11567 全量扫描)仍在被用户量化投诉。opencode 在往前跑,pi 在补陈账,ACP 在把追不上的语义写成规范。

  3. 「同一能力开两个入口」的维护成本,本周在三个仓库重复出现。 hindsight 的 MCP recall 补上 HTTP API 的 rerank prune/dedup(#6195,RerankOptions 从 api/http.py 搬到 engine/response_models.py);opencode 的 schedule 同时服务 CLI、agent 工具与 SDK(#59457、#60137、#60140);ACP 的同一语义同时要写进 schema、RFD 与迁移指南(#2613、#2615、#2620)。“多写一份”的成本不会消失,只会从代码转移到文档与参数映射上。

  4. 社区反馈的形状继续分化,而且本轮出现一个值得注意的反差。 opencode 窗口内新增 32 个 issue、关闭 91 个,关闭速度远快于新增速度,但新增内容里开始出现“要内置 free-only 模型过滤”这种产品诉求型 issue(#60392、#60383),而不是单纯的报错;ACP 合并 PR 翻倍到 59、仍是零外部反馈;hindsight 的 8 个新 issue 里有 4 个来自第三方插件,全部是集成层的语义错误。三家的社区信号分别是“用户在提要求”“用户没出现”“用户在别人的集成里报错”。

  5. 边界项目开始暴露边界问题。 hindsight 的插件生态问题(SecretRef 被当字符串发出 #6201、API 不可达时 retain 被丢弃 #6196、默认 recallTypes 下导入记忆不可见 #6198、Codex OAuth 刷新后 embeddings 401 #6200)都不是核心引擎的 bug,而是**“接口的语义有没有被完整继承”**的问题;pi 的 Windows / WSL 坑(#11588、#11592、#11597)同理。当一个项目从库变成产品,bug 会从“函数不对”变成“边界不对”。

  6. “只复用、不新增”正在成为共同的设计偏好。 ACP 的 background work 拒绝新增实体;hindsight 的 rerank 参数从 HTTP 层搬进共享的 response model;opencode 的 SessionInfo.time.busy、hindsight 的 RerankOptions 都是把新语义压进已有字段或已有类型。三家都选择了“先压扁语义,再扩结构”。

元信息

  • 报告生成时间: 2026-10-30T00:30:00Z
  • 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告 reports/latest.md 的 基准时间: 字段,自 2026-09-08 起连续 20 期未变)
  • 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-30T00:30:00Z(约 51.6 天);本轮新增内容全部落在 2026-10-29T17:35:00Z 之后的约 7 小时(同日 01:26 的上一轮已覆盖至 2026-10-29T17:35Z,本文件为两轮合并后的完整版)
  • 数据源: GitHub API(gh CLI + Search API)+ mmx web search + npm registry(registry.npmjs.org)+ 仓库内 CHANGELOG / blog 目录校验
  • API rate limit 剩余: 见 tmp/2026-10-30/_rate_limit_remaining(core 4927 / 5000;Search API 单独限流,计数请求已分批 sleep)
  • 抓取结果: 6 / 6 仓库 × 4 endpoint 全部成功(opencode 的 Discussions endpoint 返回「Discussions are disabled for this repo」,已跳过);本轮增量统计口径为 created:>2026-10-29T17:35:00Z / merged:>2026-10-29T17:35:00Z 的 Search API 计数(opencode:60 新 PR / 32 合并 PR / 32 新 issue / 91 关闭 issue;pi:8 / 6 / 7;pi-web:0 / 0 / 0;hindsight:2 / 2 / 8;ACP:56 / 59 / 0;blog:0 / 0 / 0);本轮新增 release 为 opencode v2.2.2 与 process-daemon-v0.4.0(npm @opencode/cli latest 已是 2.2.2、@opencode/pty 已是 0.4.0,而 opencode-ai 仍停在 1.19.5,双发布线未收敛);pi / pi-web / hindsight / ACP 本轮无新 release

评论