2026 2026年11月5日 30 min · 8.7k chars by yxc023
GitHub 调研周报 2026-11-05
扫描窗口:2026-11-04T00:30:00Z → 2026-11-05T00:30:00Z(共 1 天,增量口径 = 上次报告生成时间)|基准来源:上次报告 2026-11-04
2026-11-05 GitHub 调研周报
扫描窗口:2026-11-04T00:30:00Z → 2026-11-05T00:30:00Z(共 1 天,增量口径 = 上次报告生成时间)|基准来源:上次报告 2026-11-04
本期速览
- anomalyco/opencode: “显式状态机”成为主线——56 个合并 PR 的标题里带
state machine,Hona 一人贡献 60 个合并 PR;#61718 把 18 台状态机的迁移经验写成packages/app/AGENTS.md的新章节(State Machines),并列出六条”规则 → 它防住的 bug”对照表。这是 opencode 第一次把架构约束写进 AGENTS.md 而不是留在 PR 里。 - anomalyco/opencode: MCP 连接池
pool: true(#61185)——一个 server 托管 10 个目录时,原本每个目录都各开一条 MCP 连接(10 个 cloudflare 连接、10 份 3765 个 tool;cua-driver 起 10 个进程占 189MB);新开关让设置相同的目录共用一条连接、一份工具表。 - anomalyco/opencode: background compaction 改为固定提前量(#60049)——不再按窗口的 85% 触发,而是固定在阈值前 60k token 启动摘要。原因是 1M 窗口下 85% 会提前 128k(摘要被反复替换,很多会话根本到不了阈值),而 128k 的 GPT 窗口只提前 13k(太晚),阈值低于 64k 时永远不启动。
- anomalyco/opencode: 新增
websearch.use策略动作(#61557)——Console 禁用 web search 时原本只把opencode从/api/v2/config里去掉,Exa / TinyFish 因为不需要 API key 仍可被调用;现在按 provider ID 一并封禁,策略清空后websearch工具会从模型可见的工具列表里消失。旧客户端按未知动作丢弃(文档注明 2.2.6 之前的客户端忽略它)。 - earendil-works/pi: 默认模型全线换代——
anthropic默认从 Claude Opus 4.8 换成 Claude Opus 5.5;其余 provider 统一”同价或更低价换新模型”:amazon-bedrock → Opus 5.5、azure → GPT-6.1 Sol、google/google-vertex → Gemini 4 Argon、minimax → MiniMax-M3、qwen-token-plan → Qwen3.8 Max、moonshotai 等 → Kimi K2.7 Code、opencode-go → Kimi K3.1 Pro。 - earendil-works/pi: read 工具改为流式读取(#11750)——原先
read先把整个文件读进内存再按 offset/limit 切片,200MB 日志读一行峰值 638MB RSS、--max-old-space-size=256直接 OOM;现在只保留要显示的行。同期 MCP 的大 stdio 消息改为线性时间读取(#11791,12MiB 消息分帧从 ~350ms 降到一次 join)。 - earendil-works/pi: p2 实验线一天内长出一整套 agent 协作原语——
/tree(主会话分支作为 Durable fork)、给 agent 的 terminal 工具(tmux 风格 argv,仅 code mode)、subagent 可用 code mode、工具声明”谁可以调、在哪可以调”(origin/scope)、MCP OAuth 登录、<sender>块与 peer message、粘贴图片、artifacts 内联渲染。README 仍写着 EXPERIMENTAL / will be gone soon。 - vectorize-io/hindsight: 一次外部性能审计刷出 8 个量化 issue——#6323 knowledge folder 删除 10.71s → 27.22ms(393×)、#6325 复用 freshness 检查 8.66s → 5.44ms(1593×)、#6326 判定待 consolidation 不再全表计数 530ms → 0.68ms(778×)、#6330 先过滤实体名再计数 8.51s → 26.83ms(317×),均附可复现步骤与 patch 链接。
- vectorize-io/hindsight: Postgres JIT 编译拖垮 recall(#6317)——
source_memory_ids @> ARRAY[...]的行数只有运行时才知道,Postgres 固定猜 0.5%(实际约 1 行),估算代价 1.13M 超过 JIT 阈值,于是每次调用都重新编译(~950ms 编译 + ~80ms 执行);现在所有连接jit = off。 - agegr/pi-web: 发布节奏停摆、外部 PR 涌入——本窗口 0 commit、0 合并 PR,但新开 9 个 PR、13 个 issue,全部来自外部贡献者(jianYanZhiX7 的会话状态筛选与目录选择器、dingxiaobo 的
reasoning_levels/ input modalities、GaryCCCC 的 HTML 导出可发现性与说话人标注、vergram 的/compact保持输入焦点)。仓库有 19 个 open PR、33 个 open issue。 - agentclientprotocol/agent-client-protocol: 窗口内仅 1 个 commit(文档:把 AionUi 写进 Desktop/Web 客户端列表);新 PR 2 个(skylands client)。协议层继续把工作让给实现层。
各仓库详情
anomalyco/opencode
开源 coding agent,赛道是终端 / 桌面 / Web 的通用 AI 编码代理| stars: 224595 | open issues: 4013 | 默认分支: dev | 最近 push: 2026-11-05T00:30:44Z | 主页: https://opencode.ai
近 1 周 release 重点:
- 窗口期内无 release。最新为 v2.2.5(2026-10-30T23:17Z):桌面端 worktree / base branch 快捷键(
⌘⌥O/⌘⌥B)、shell mode 快捷键⌘⇧X;quote 弹窗按住⌘/Ctrl直接发送引用;compaction.buffer支持百分比("20%");stdio 超过 10MiB 的 MCP 消息不再被断开;LiteLLM 的 context window 错误改为触发 compaction 而不是终止会话。- 完整 release notes: https://github.com/anomalyco/opencode/releases/tag/v2.2.5
- 窗口期内 dev → production 的 promote 已合并(#61522,26 个 commit),含 #61461:公开 stats 同步从 AWS ECS 迁到 Cloudflare Workflow + Cron,ECS 服务提前缩到 0。
其他重要 commits / PRs(按重要性挑选):
- #61718 架构约束成文 —
docs(app): require explicit state machines for lifecycle state(@Hona)。在packages/app/AGENTS.md新增 State Machines 一节,desktop/gui-plugins/session-ui/ui各自链接到它。附带的规则表把每个 bug 归因到一条规则:- 第一个
await之前先认领工作 → Enter 然后 Send 会把 prompt 发两次(#61581) - 每条异步路径都要落到一个状态,且有有界兜底 → 启动时白屏、终端永远 “Loading”、时间线不显示(#61580 / #61650 / #61591)
- 过期结果按 attempt id 在状态机里拒收 → 登录时按 Back 仍报 “connected”(#61610)
- 晚到的结果仍可以有副作用 → 按 Back 之后保存的 key 从未刷新 catalog(#61610)
- 同一份数据上的操作走同一个队列 → steer/remove 与 reorder 竞争把 prompt 拽回来(#61592)
- 身份变化时换 target 和 attempt → session 错误跨 tab 卡住、凭据被拒后无限重试、deep link 重放(#61585 / #61595 / #61648)
- 第一个
- #61185 MCP 连接池 —
feat(core): share MCP connections across locations with pool: true(@rekram1-node)。每个 server 可选pool: true,设置相同的目录共用一条连接和一份工具表;不改配置则行为完全不变。 - #60049 compaction 触发时机 —
fix(core): start background compaction a fixed lead before the threshold(@neriousy,关 #58818)。三条规则同时改:固定在阈值前 60k 启动(丢掉 64k 下限)、小窗口时提前量封顶为”本轮首个响应以来剩余空间的一半”、摘要写作期间对话增长超过阈值时的行为另有定义。动机是”85% 提前量只在 200k 窗口上恰好正确”。 - #61557
websearch.use策略 —feat(core): add a websearch.use policy action(@adamdotdevin)。资源是 web search provider ID(opencode/exa/firecrawl/parallel/tavily/tinyfish或插件添加的)。策略清空 provider 时,websearch工具的 context / compaction / generate 三个 hook 会把该工具从模型可见列表里去掉。文档新增policies.mdx的 Web search 一节与specs/v2/provider-policy.md。 - #61583 Console 配置在 prompt 时刷新 —
feat(core): refresh Console config before prompts and add a console.poll server option(@adamdotdevin)。上一次拉取超过一分钟(笔记本睡眠、Durable Object 休眠)时,prompt hook 重新拉配置,最多等 3 秒;fetchConfig5 秒超时由SharedCache当作瞬时失败重试。加了Config.Interface.snapshot()同步快照,修掉”reload 跑在旧文档上”的问题。主机可关掉一分钟轮询。 - #61533 GUI 插件渲染 code block —
feat(app): let GUI plugins render and add actions to code blocks(@Hona)。新增CodeBlock/CodeBlockActionregistry,插件可以把 Mermaid / LaTeX / CSV 或任意 fenced 语言渲染成自己的 Solid UI,并加 “Run in terminal” 这类按钮。与 TUI 的ctx.markdown.registerCodeBlockRenderer(language, render)是同一套模型。 - #61701 URL 权限绕过 —
fix(core): reject URL credentials and ignore fragments in web permissions(@rekram1-node)。deny https://evil.com/*会被https://user@evil.com/x绕过,deny https://evil.com/x会被https://evil.com/x#a绕过。 - #58916 逐行落盘 —
perf(core): write each assistant part as its own row instead of rewriting the message(@Hona)。不再每次重写整条消息。 - #61683 基准改造 —
chore: bench with strobe 0.6.0(@Hona)。桌面”首次启动”基准改为真实的首次启动(无 GPU shader cache),并把 install(cold)与常驻(warm)分成两个 case。 - #61582 嵌入方自定义 fetch —
feat(server): let embedders supply the fetch for OpenCode's HTTP and MCP requests(@adamdotdevin)。 - #61709 Go 线加 Hy4 —
feat(go): add Hy4(@opencode-agent[bot]),Go / Go Plus / Go Teams 三档同步更新限额(Teams 上限 $65)、隐私表与各语言 banner。 - #60791 shell 扫描器 —
fix(core): stop repeated zsh q flags from freezing the shell scanner(@yangguan-xue)。反复的 zshqflag 会卡死 shell 扫描器。 - #61537 工具入参规范化 —
fix(core): normalize and validate tool input schemas at registration(@rekram1-node)。 - #61546 symlink 快照 —
fix(core): capture snapshots for a Location opened through a symlink(@Hona)。
社区讨论 / 行业方向:
- opencode Go 模型 Hy4 文档 PR #61709: 腾讯混元系模型的 Go 接入继续扩列;TypingMind 的 Hy4 preview 使用指南 显示第三方客户端已经开始跟进这条模型线。
- #61672 desktop/web: project sidebar 只列出活跃 session,闲置 session 缺失(API 能返回)(8 条评论,本窗口讨论热度最高的一条):多会话并行时的会话发现仍是桌面端的痛点。
- #61688 desktop: renderer 启动时卡在 ~100% CPU,“server thrashing” 崩溃循环,UI 永不渲染(v2.2.5,Linux):Linux 桌面端启动路径的严重回归。
- #61827 / #61842 go: deepseek-v4.1-flash 拒绝图像输入把会话卡死:模型声明的能力与引擎实际能力不一致,仍在集中爆发(open issues 从 3990 涨到 4013)。
- #61716 / #61782 / #61553 / #61599 免费额度相关 issue 反复出现且多为 closed:免费供给侧的配额口径仍是社区高频投诉源。
- #61694 流式响应失败后重试时 tool call 已经执行过,但模型被告知已中止:重试语义与模型认知不一致。
信号观察:
- 状态机不是重构洁癖,是 bug 分类法:#61718 的规则表把 18 台状态机(#61581–#61661)各自修掉的 bug 归到 6 条规则,每条规则都能指回具体 PR 号。这是把”偶发的异步竞态”变成”可检索的架构条款”的尝试。
- Hona 一人占 60 个合并 PR,其中 56 个带
state machine——本期 opencode 的节奏由单一作者的状态机迁移主导。 - compaction 与 MCP 连接这两处都在做”同一份工作只做一次”:compaction 提前量固定化、MCP 连接池化、assistant part 逐行写入,三者指向同一类成本。
- Console(托管版)的策略面在变厚:
websearch.use策略动作、prompt 时配置刷新、embedder 自定义 fetch、console.poll开关——托管服务正在从”能连上”走向”能精确控制模型看到什么”。
earendil-works/pi
AI agent 工具包:统一 LLM API、agent loop、TUI、coding agent CLI| stars: 120066 | open issues: 264 | 默认分支: main | 最近 push: 2026-11-05T00:05:54Z | 主页: (仓库未填写)
近 1 周 release 重点:
- 窗口期内无 release。最新为 v1.5.0(2026-11-02T11:05Z):扩展包更新后可显示 changelog;大工具调用增量解析、流式渲染更快;
PI_SELF_UPDATE_COMMAND自定义更新命令;GPT-6.1 Terra(OpenAI / Azure OpenAI Responses / OpenAI Codex,Codex 提供 500K 上下文);breaking:工具参数校验改由@earendil-works/pi-schema执行,TypeBox 的Type.Refine()/Type.BigInt()/ codecs 等不再作用于工具参数,普通 JSON Schema(含 MCP 工具)现在获得与 TypeBox 工具相同的类型强转。- 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.5.0
[Unreleased]段已有实质内容(packages/coding-agent/CHANGELOG.md):GrepOperations.readFile被移除是 breaking(grep 的 context 改由 ripgrep 提供);Anthropic message threads 已在 1.5.0 进入[Unreleased];新增pi.registerMarkdownTransformer({ messageTypes })可选面(custom / summary / changelog);默认 Anthropic 模型改为 Claude Opus 5.5 及一批 provider 默认模型换代;read 工具改为流式;grep 不再自己读文件。
其他重要 commits / PRs(按重要性挑选):
- d84123b + b425754 模型默认换代 —
feat(coding-agent): move provider defaults to newer models at the same or a lower price/feat(coding-agent): default Anthropic model is Claude Opus 5.5。CHANGELOG 明确列了每个 provider 的新默认:amazon-bedrock → Claude Opus 5.5、azure → GPT-6.1 Sol、google 与 google-vertex → Gemini 4 Argon、vercel-ai-gateway 与 baseten → GLM 5.3、minimax 与 minimax-cn → MiniMax-M3、qwen-token-plan 与 -cn → Qwen3.8 Max、opencode-go → Kimi K3.1 Pro,moonshotai / moonshotai-cn / huggingface / opencode / openrouter / cloudflare-workers-ai / cloudflare-ai-gateway → Kimi K2.7 Code(原 Kimi K2.6)。 - #11750 read 工具流式化 —
fix(coding-agent): stream the read tool instead of loading whole files(@petrroll)。原先ops.readFile→toString("utf-8")→split("\n"),一次读一行也要把整个文件存三份。实测 200MB 日志(236 万行):offset:1, limit:1峰值 638MB RSS,--max-old-space-size=256在Runtime_StringSplit里 OOM;>512MB 报Cannot create a string longer than 0x1fffffe8 characters,>2GB 报ERR_FS_FILE_TOO_LARGE。自定义ReadOperations可通过新的可选createReadStream一同流式化。 - #11791 MCP 大消息线性读取 —
fix(mcp): read large stdio messages in linear time(@robopipi[bot])。JsonRpcLineReader.readStdout原先每收到一块就Buffer.concat全部缓冲并从头找换行;12MiB 的工具结果按 64KiB 切块时,光是分帧就要 ~350ms。改为把未完成消息的字节按块列表保存、只在新块里找换行、命中时一次 join。 - #11789 minimatch 安全升级 —
fix(coding-agent): update minimatch to 11.0.3 for GHSA-g3hv-75wg-m249(@robopipi[bot])。pi 锁在minimatch@10.2.6,该 advisory(globparts 放大导致的 ReDoS)覆盖所有 <11.0.1 的版本且 10.x 没有修复版,因此必须跨大版本跳到 11.0.3;副作用是每个安装 pi-coding-agent 的项目npm audit都会失败。新增传递依赖@isaacs/nonrecursive-glob-match@1.0.3(无安装脚本),brace-expansion升到 ^5.0.12。 - e885255
feat(p2): /tree, branches of the main conversation as Durable forks— 主会话的分支即 Durable fork,每个分支是从某个 entry 顶层 fork 出来的会话。 - 07c9e5b
feat(p2): tools declare who may call them and where, turn origin from the run's inputs, agents give their own tools—P2Tool增加origin(any / owner)与scope(any / main / subagent);turn origin 从 run 的输入推导;agent 可以给自己发工具。 - 47005db + 474416d
feat(p2): terminal tool for the agent, tmux-style argv, code mode only/feat(p2): subagents can use code mode— agent 驱动与 owner 面板共享的 session terminal,subagent 可以选 code mode 并把它写进默认工具集。 - 43fb4e3
feat(p2): <sender> block for the model, peer messages as p2.peer-message entries, legacy speaker reader removed— 模型侧用<sender>块标识消息来源,peer 消息成为一等条目。 - 386db61
feat(p2): MCP OAuth sign-in, MCP sheet and TUI command, footer menu— 没有 Authorization header 的 HTTP server 走 OAuth 登录。 - 04f672a / 707888e / d6339fb
feat(p2): render artifacts inline at the tool call site/paste images into the composer/TUI side panel; /artifacts opens artifacts beside the chat。 - 8889e62 + fabf916
feat(chord): group commit in the store (decision S18)/feat(durable): SqliteStorage commits a group in a few statements— 排队中的 commit 步骤共享下一步的后端;durable store 的分组提交压到几条语句。 - 80c42c0 / 596523e / ff33ef4 / 0efe50c chord telemetry — 页面与 worker 的遥测由服务端存储,span 记录”它为谁而记”,并配了一个小型 trace viewer 教程。
- #11812 OAuth 刷新落盘 —
fix(coding-agent): wait for a started OAuth refresh to be saved before exit(@petrroll,关 #11692)。RPC 模式下启动时的 catalog 刷新会顺带刷新过期凭据;若在 token 请求发出后、写入前退出,provider 已经消耗掉那个一次性的 refresh token,auth.json 只剩旧的,下次请求invalid_grant。 - #11813 bash 超时 —
fix(coding-agent): report the shell exit code when bash times out after the shell exited(@petrroll)。命令其实已退出、但它起的后台进程还在写输出导致超时时,错误里现在会带上 shell 的退出码与退出时刻。 - #11810 模型选择器 —
fix(coding-agent): keep model selector selection when the catalog refresh lands(@petrroll)。打开选择器会触发后台 catalog 刷新,回来时选择被重置回当前模型或搜索结果首行。 - #11757 / #11780 / #11777 / #9441 一组 TUI 与文本正确性修复 — 截断不切半代理对(surrogate pair);Windows 与 WSL 下
ctrl+v恢复为粘贴键(默认改为["alt+v","ctrl+v"]);无TERM_PROGRAM时识别 Alacritty 的 OSC 8 超链接;防止光标标记泄漏。 - #11811(未合并)
fix(coding-agent): read and edit handle UTF-16 and non-UTF-8 files without corrupting them(@petrroll)。
社区讨论 / 行业方向:
- p2 README(apps/p2):仍以 EXPERIMENTAL / will be gone soon 开头,明说”不是服务端文件系统隔离”,但 owner 在服务器与 worker 上拥有完整的 agent 与 shell 控制权,下载的 TUI facet 跑在访客机器的受限 worker 里。本期 p2 一天内新增
/tree、terminal 工具、code mode subagent、工具授权模型、MCP OAuth、artifacts ——实验线的功能密度已经超过主线,但它的生命周期仍被明确标为短。 - CHANGELOG
[Unreleased]段:v1.5.0 之后的破坏性变更继续用这一段承接(grep 的readFile移除、pi-schema 校验、模型默认值变更),说明 breaking change 的节奏由 CHANGELOG 而非版本号控制。 - #11773 Upgrade Token Plan branding and gateway setup compatibly(2 条评论):国内 provider 接入方与上游模型换名同步的摩擦。
- #11804 / #11805 insertThinkingLevelMessages 产生相邻 output_config 指令 → OpenRouter 400:均已 closed,说明这一类 provider 兼容问题由社区直接提 PR 修。
- #11803 coding-agent: tool_search misses parameter descriptions behind local schema refs:schema 迁移到 pi-schema 之后,间接引用的参数描述在 tool_search 里丢失。
- #11808 SIGILL in Worker thread(1.4.0 linux,headless)、#11809 Termux/Android: findExecutableOnPath 在调用方线程上 spawn 可能冻结:均为 closed(分别对应 #9350 的 fork-free 可执行文件查找)。
- Pi Agent 使用小技巧(华为云 bbs,2026-11-02)、Pi vs Claude Code: Price, Models and Permissions Compared (Oct 2026):中文与英文两侧对 pi 的讨论仍集中在”如何接自架 LLM / 与 Claude Code 的价格与权限差异”,本期默认模型换代会直接改变这两类对比表的结论。
信号观察:
- pi 的”性能叙事”从 grep 转到 read 与 MCP:上一期 grep 改用 ripgrep 的
--context解决 OOM,本期 read 改成流式、MCP 改成线性分帧——三处都在拆掉”先整体读入再切片”的模式,这已经成为 pi 处理大文件的一致策略。 - 模型默认值换代遵循”同价或更低价”,而不是”更强”:Opus 4.8 → Opus 5.5、Gemini → Gemini 4 Argon、GLM 5.3、MiniMax-M3、Qwen3.8 Max、Kimi K2.7 Code。这是一个明确的成本侧判断(升级即降价或等价)。
- p2 已经在做多 agent 的权限模型(origin: any/owner;scope: any/main/subagent;turn origin 从 run 输入推导),而主线 pi 的 subagent 仍在修”进度与失败不可靠”(#8250)。两层 agent 架构的成熟度差距在拉大。
- 安全响应速度快于常规节奏:minimatch 的 advisory 让每个下游项目的
npm audit失败,pi 直接跨大版本跳到 11.0.3 并同步 regenerate install-lock——这类”因为没有补丁版而必须跨 major”的处理在 agent 项目里并不常见。
agegr/pi-web
pi coding agent 的 Web 工作区(桌面 / 手机浏览器 UI)| stars: 8036 | open issues: 33 | 默认分支: main | 最近 push: 2026-11-04T08:40:15Z | 主页: (仓库未填写)
近 1 周 release 重点:
- 窗口期内无 release。最新为 v0.15.0(2026-11-03T16:26Z,已在上一期报告覆盖):运行中切换模型(从下一次请求起生效)、侧聊标签随主会话恢复、右侧面板标签拖动重排、扩展 UI 使用 pi 的 ANSI 调色板;修掉 pi 1.5.0 升级后 HTML 导出全部失败(
sortChildren expected 1 match, found 0)与 ChatGPT 登录 “requires a device ID”。- 完整 release notes: https://github.com/agegr/pi-web/releases/tag/v0.15.0
其他重要 commits / PRs(按重要性挑选):
- 窗口期内 0 个 commit、0 个合并 PR(最近一次 push 为 2026-11-04T08:40,是分支 push 而非 main 合并)。以下为窗口内新开、尚未合并的外部贡献 PR:
- #1554
feat(sidebar): filter the session list by status and time(@jianYanZhiX7)— 按状态与时间过滤会话列表。 - #1553
feat(tabs): show the selected chat's run in the tab title(@jianYanZhiX7)— 标签标题显示当前会话的运行状态。 - #1550
feat(sidebar): let the directory picker follow the typed path(@jianYanZhiX7)— 目录选择器跟随输入路径。 - #1547
feat(models): read reasoning_levels and input modalities when fetching models(@dingxiaobo)— 拉取模型时读取reasoning_levels与 input modalities。 - #1552
feat(api): allow an operator-set origin allow-list for cross-origin access(@pizhicheng-9realms)— 运维侧设置跨域来源白名单。 - #1558
Make session HTML export accessible and label transcript speakers(@GaryCCCC)— 让 HTML 导出可被发现,并给 transcript 的说话人加标签。 - #1564
fix(extensions): honor session shutdown requests in the web UI(@GaryCCCC)。 - #1556
fix(chat): preserve composer focus through /compact(@vergram)。 - #1546
feat(sidebar): add a session activity view(@zhangdxchn)。
- #1554
社区讨论 / 行业方向:
- 窗口期内新开 13 个 issue,均为外部用户/贡献者提出:
- #1555 支持用户注入自定义的 CSS / JavaScript(@szdxdxdx)——把 web 工作区当”可定制前端”用的诉求。
- #1559 跨浏览器,新消息角标不同步(@huang-haha63)——多标签页之间的未读状态没有共享。
- #1562 Expose priority service tier in custom model settings(@jiege6-66)。
- #1561 Windows: MCP command values select WSL Bash when Git is installed on a non-default drive、#1560 Windows: terminal cleanup passes unsupported SIGKILL to node-pty(@sm23444)——Windows 侧的 MCP 与终端细节是当前主要痛点。
- #1563 Honor extension-requested session shutdown for finish-and-discard workflows(@GaryCCCC)。
- #1557 Make saved-session HTML export discoverable from the session menu——与 PR #1558 同题,说明该需求已被独立提出两次。
- pi-web Discussions:加入中文微信群 / WeChat Community(8 赞)仍是社区的主要聚集点,窗口期内无新帖。
- 仓库积压:19 个 open PR、33 个 open issue。
信号观察:
- 本周 pi-web 的角色从”作者驱动”变成”外部 PR 驱动”:作者一天内未合并任何 PR,但 9 个新 PR 全部来自外部贡献者,集中在会话管理(筛选 / 活动视图 / 目录选择器 / 标签标题)与模型元数据两处。
- 功能缺口集中在”发现性”而非”能力”:HTML 导出的入口(#1557 / #1558)、未读角标的跨浏览器同步(#1559)——都是已有能力找不到入口或状态不互通,而不是新能力缺失。
- Windows/WSL 是 pi-web 的持续痛点:MCP 命令选错 shell、node-pty 收到不支持的 SIGKILL,都由同一贡献者(@sm23444)在同一天提出。
vectorize-io/hindsight
Agent 记忆系统:分层认知架构 + 混合检索,让 agent “学会”而非只是”记住”| stars: 58837 | open issues: 203 | 默认分支: main | 最近 push: 2026-11-04T17:51:05Z | 主页: https://hindsight.vectorize.io/
近 1 周 release 重点:
- 窗口期内无 release。最新为 v1.2.0(2026-11-03T11:38Z,已在上一期报告覆盖):Hindsight Models 三个自研模型公开(
hs-decide-1-flash/hs-rerank-1/hs-embed-1),官方口径 memory 便宜 2.5x、快 2x。- 完整 release notes: https://github.com/vectorize-io/hindsight/releases/tag/v1.2.0
- 窗口期内另有两次组件级发布:coding-agents v0.8.5(13:33Z)与 hermes v1.2.4(11-03T15:26Z)。
其他重要 commits / PRs(按重要性挑选):
- #6317 Postgres JIT 关闭 —
perf(db): run every pool connection with JIT off, so recall stops compiling its observation lookup(@nicoloboschi,关 #6306)。根因:source_memory_ids @> ARRAY[cs.source_id]的匹配行数只有运行时才知道,Postgres 固定猜 0.5%(报告者约 740 行,实际约 1 行),估算代价 1.13M 超过 JIT 阈值,于是每次调用都重新编译:~950ms 编译 + ~80ms 执行。因为猜测值固定,统计信息也救不了。修法是在每个连接上设jit = off(与statement_timeout同处设置),API 与 worker 都覆盖。 - #6323–#6330 一组外部性能审计 issue(@harshitgupta31415,均附可复现步骤与 patch 链接):knowledge folder 删除 10.710s → 27.22ms(393×);consolidation 重复扫描已 recall 的 observation 266µs → 39.77µs(6.69×);复用同 scope 页面的 freshness 检查 8.66s → 5.44ms(1,593×);判定有无待 consolidation 不再全表计数 530.76ms → 0.68ms(778×);scoped retain 时批量读 document tag 3.04s → 84.82ms(35.89×);列 observation scope 时复用 tag count 2.01s → 190.46ms(10.57×);shared source token 只计一次 63.17ms → 4.40ms(14.35×);先过滤实体名再计数 mentions 8.51s → 26.83ms(317×)。
- #6318 bank 别名接管 —
fix(banks): clone, transfer import and rename-bank can no longer take over an alias(@nicoloboschi,关 #6280)。clone / transfer import 写进别名名时会被接受:带 bank config 的 restore 会写入归档的banks行本身,绕过 create 路径上的别名检查,新真实 bank 赢得解析,所有使用该别名的调用方静默读到写入副本。rename-bank同样有缺口(改成自己的别名会留下(new,new)自别名行);删除 bank 后别名还留在 resolver 缓存里,TTL 内写入被释放的名字会重建这个已删除的 bank。修法是统一用一个 409 检查(bank_aliases.refuse_alias_as_bank_id_on_conn)覆盖创建、事务内 restore 与提交前检查。 - #6301 store_document_text 语义 —
fix(retain): a store-owned bank with store_document_text off keeps no chunk text(@nicoloboschi,关 #6301)。#6270 修了 SQL 侧的 document / chunk writer,但 store 拥有文档存储的路径仍把每个 chunk 的文本写进 store,且 metadata-only 的 re-retain 会把完整original_text重新 put 进去。MemoriesExtension.put_document新增keep_chunk_text: bool = True,store 仍收到真实 chunk 文本(delta retain 的 diff 依赖真实文本的哈希),但只留哈希、丢文本。 - #6289 CI 换模型 —
ci: run CI's LLM on Gemma 4 (Hindsight Inference Dev), with prompt fixes so it passes(@nicoloboschi)。CI 主 LLM 从 Vertex Gemini 换成 Hindsight Inference Dev 上的 Gemma 4(gemma-4-26b-a4b),通过修 prompt 而不是放松测试让 Gemma 通过全部 Core LLM 测试。HINDSIGHT_API_LLM_OPENAI_COMPATIBLE_JSON_MODE=false:用json_object模式时 Gemma 约 1/3 的情况下开头 key 为空、不返回任何 fact(#6295),把 schema 放进 prompt 则 20/20 通过。回退重试改为 8 次、从 2 秒起(dev GPU 服务所有 CI,短促的 429 “capacity busy” 原本会让 job 失败)。图像/PDF 走 VLM slot、测试评委、provider 矩阵、cache-ratio 测试与 perf 基准仍留在 Gemini。 - #6306 → #6317 的 issue 链 — #6306 Observation probe from #4790 gets JIT compiled on every recall (likely the cause of #4802)。
- 947350a / 841979d / ac6c0f7 一组 Hermes 修复 — clone、transfer import 与 rename-bank 的别名问题(#6280);store-owned bank 的 chunk 文本(#6301);hermes 侧:找出控制面反代后面的 server 版本(#6137)、告诉被拉起的 daemon 用户的数据库在哪(#6093)、在所有模式下重试 keep-alive 连接失效的 recall(#5734)、不在每次 append 时重写 session 的 memories(#6241)。
- 9486680
fix(api): one id rule for banks, aliases and mental models; bound page max_tokens(#6282)——把 bank / alias / mental model 收敛到同一套 id 规则。
社区讨论 / 行业方向:
- Hindsight 官方博客:最近三篇为 Hindsight Models(2026-11-03)、Version 1.2.0(2026-11-03)、Openbot persistent memory(2026-10-29)。窗口期内无新博客。
- #6337 Two concurrent retains of the same document with the same content store its facts twice(@skybleak333)—并发 retain 的幂等性问题。
- #6335 Two whole-bank restores into the same new bank id merge and duplicate every fact(@skybleak333)—与 #6318 同属 bank 身份/别名语义问题。
- #6339 HTTP PATCH for document tags replaces all tags instead of a partial update、#6340 Add tag housekeeping endpoints: merge and prune tags per bank(@benfrank241)—标签体系正在被当作一等对象治理。
- #6331 Flaky: test_reflect_cites_real_ids(真实 LLM 不引用 id)、#6332 Flaky: test_load_large_batch 超时(>240s) —换 CI 模型(#6289)之后,依赖真实 LLM 行为的测试立刻暴露出不稳定性,两条都由 #6289 的作者自己挂出。
- #6320 coding-agents: search crediting instruction causes circular self-attribution on same-session initiative、#6319 Antigravity PreInvocation hook re-injects
<hindsight_knowledge_refresh>on every intra-turn(@m4thnerd)—coding-agents 侧的循环引用与重复注入。 - #6321 Reflect fails with HTTP 400 on MiniMax(openai-compatible):strict json_schema 含 nullable 数组 —与 opencode 侧的 provider 能力声明不实是同一类问题。
- #6322 Upgrading from v0.3.0 fails: migration f4d1c2b3a5e6 can’t replace mental_models_with_cron()(已 closed)—长期升级路径仍有断点。
信号观察:
- 一次外部审计贡献了 8 个带量化指标的 issue,且每个都附可复现步骤、patch 链接与 before/after 数字(393× / 1593× / 778× / 317× …)。这批 issue 的共同模式是**“查询范围比需要的大”**:先全量统计再过滤。性能问题的性质高度一致。
- bank 身份与别名语义成为本周主线:#6318 修掉了别名接管(真实的安全/一致性问题:别名会让调用方静默读到副本),#6335 是同类问题的另一半(restore 合并导致事实重复),#6282 把 bank / alias / mental model 收到同一套 id 规则。记忆系统的边界正在从”检索准不准”移到”对象身份是否唯一”。
- CI 从 Vertex Gemini 换到自家 Hindsight Inference Dev 上的 Gemma 4,理由是 prompt 需要修而不是测试需要放松;同时显式关掉
json_object模式。这让”记忆系统自己的 CI 依赖谁”从外部大厂变成内部服务——同时把 LLM 行为不稳定的问题暴露成了自家 issue。
agentclientprotocol/agent-client-protocol
面向编辑器与 coding agent 之间的 JSON-RPC 协议,赛道是 agent 接入层标准| stars: 4576 | open issues: 33 | 默认分支: main | 最近 push: 2026-11-04T09:36:46Z | 主页: https://agentclientprotocol.com
近 1 周 release 重点:
- 窗口期内无 release。最新为 v1.15.1 / schema-v1.29.1 / schema-v2.0.0-alpha.13(均 2026-11-02T10:51Z,已在上一期报告覆盖),内容只有一条:reconcile v1.15 spec text、unstable RFDs 与 proxy-chains RFD(#2743)。
其他重要 commits / PRs(按重要性挑选):
- 734309d
docs: describe AionUi in the Desktop and Web clients list(#2757,@IceyLiu,窗口期内唯一合并)— 客户端目录继续以”文档登记”的方式扩张。 - #2758
Add skylands client(@autodidaddict,未合并)— 窗口期内新开的第二个 PR。
社区讨论 / 行业方向:
- 窗口期内未检索到新的公开讨论。Discussions 中最近更新的帖仍是 2026-10-12 的几条(“Can ACP be more generic?”、“Model selection”、“Should the Python SDK be considered?”),说明协议层的讨论活跃度已经低于实现层。
- 客户端目录(Desktop / Web / Connectors)在本期与上期各新增一项(AionUi、Happier、Remote ACP Bridge、Coincide),扩张方式仍是”文档登记”而非”能力协商”。
信号观察:
- 1 个 commit、2 个 PR,是本窗口六个仓库里最低的动静。协议层的推进节奏明显慢于实现层——本期 opencode、pi、hindsight 各自新增了成体系的能力,ACP 侧只有目录条目。
- 客户端目录仍在增长,但增长的是名字不是能力。窗口内 ACP 的实际变更全部是文档与客户端登记,唯一涉及语义的是 11-02 的 spec 文本 reconcile。
yxc023/yxc023.github.io
本项目的报告分发站点(blog)| stars: 1 | open issues: 28 | 默认分支: master | 最近 push: 2026-11-04T05:23:44Z | 主页: (未填写)
近 1 周 release 重点:
- 窗口期内无 release。
其他重要 commits / PRs(按重要性挑选):
- 9390844
auto(reports): 同步 daily-research 2026-11-04— 上一期报告的自动同步。 - 48389f8 / 8c86fb0 / 1192ffa / 965ae24(11-02)新增并三次修改《当代码可以随便生成,抽象还值不值钱?》——把引子前两件事合并,视角统一为”接手 / 回看既有代码”。
- 窗口期内新开 1 个 PR(#31 dependabot:Bump devalue from 5.9.0 to 5.9.2),未合并。
社区讨论 / 行业方向:
- 窗口期内无外部讨论(本站为报告分发站点)。
信号观察:
- 站点仍保持”每次报告自动同步一次”的行为,无人工内容变更。
跨项目观察
-
“显式状态机”从一个仓库的做法变成一类做法。 opencode 用 56 个合并 PR 把生命周期状态重写为显式状态机,并把规则写进
packages/app/AGENTS.md(#61718);pi 的 p2 用origin/scope声明”谁可以调、在哪可以调”(commit 07c9e5b),本质是同一件事的另一面——把隐式约束变成可声明、可查询的条款。两边的落点都不是代码风格,而是”约束要能被检索到”。 -
三家仓库同期在拆”先整体读入再切片”的模式。 pi 把 read 改成流式(#11750,200MB 日志读一行从 638MB 峰值降到只留显示行)、MCP 大消息改成线性分帧(#11791);opencode 把 compaction 提前量从窗口百分比改成固定 token(#60049)、把 assistant part 逐行写入而不是重写整条消息(#58916)、给 MCP 加连接池(#61185);hindsight 把 recall 路径上的 JIT 编译关掉(#6317)并砍掉 8 处”查询范围比需要的大”(#6323–#6330)。共同的成本模型是”同一份工作只做一次”。
-
性能问题的性质在这批仓库里高度一致:范围过大,而非算法不足。 hindsight 那 8 个带量化指标的 issue 全部是”先全量统计再过滤”(1593×、778×、393×、317× 的改善全部来自把过滤提前)。opencode 的 compaction 与 MCP 池化是同一逻辑的应用侧版本。这是数据规模问题,不是算法问题——对应的修复都在”缩小作用域”而非”换实现”。
-
模型能力的”声明 vs 实际”仍是最大的单点故障源。 opencode 侧 deepseek-v4.1-flash 声明支持图像却拒绝图像输入并卡死会话(#61827 / #61842)、gemini-4-argon 返回 403(#61845);pi 侧 minimatch 的 advisory 让每个下游项目
npm audit失败,只能跨 major 跳到 11.0.3(#11789);hindsight 侧 reflect 在 MiniMax 上因strict json_schema含 nullable 报 400(#6321)。上游的能力声明与下游的严格校验之间的缝隙,正在制造大量跨仓库的重复劳动。 -
“身份唯一性”取代”检索质量”成为记忆系统与多租户服务的新主线。 hindsight 修了 bank 别名接管(#6318——别名会让所有调用方静默读到副本)、restore 合并导致事实重复(#6335)、bank/alias/mental model 三套 id 规则(#6282);opencode 修了 URL 凭据与 fragment 绕过 deny 规则(#61701)并加了
websearch.use策略按 provider ID 封禁(#61557)。边界一旦被多个调用方共享,身份唯一性就比单点性能更影响正确性。 -
供给侧的不稳定仍然每天产生新的用户报告。 opencode 的 Go 模型线新增 Hy4(#61709)的同时,Go 模型的图像能力与 403 问题在同一天出现(#61827 / #61845),免费额度类 issue(#61716 / #61782 / #61553 / #61599)反复出现,Linux 桌面端还有 renderer 100% CPU 的崩溃循环(#61688);open issues 从 3990 涨到 4013。pi 一侧则用”同价或更低价换新模型”(d84123b)在成本侧对冲。
-
社区贡献的重心从”提 issue”转向”提带 patch 的量化报告”。 hindsight 的 8 个性能 issue 每个都附了可复现步骤与 patch 链接;opencode 收到 zsh
qflag 卡死 shell 扫描器的外部修复(#60791);pi 收到 Ubuntu 系列 provider 兼容修复(#11781 Azure Foundry 1.05M 上下文、#11785 glm-5.3、#11793session-id而非session_id)。上游开始把”如何复现”当成 issue 的必要条件。
元信息
- 报告生成时间: 2026-11-05T00:30:31Z
- 基准时间: 2026-11-01T00:30:00Z(按 spec 读取自上次报告
reports/latest.md的基准时间:字段) - 扫描窗口: 2026-11-01T00:30:00Z → 2026-11-05T00:30:00Z(共 4 天);本期新增内容全部落在 2026-11-04T00:30:00Z 之后的 24 小时(增量口径 = 上次报告生成时间 2026-11-04T00:30:00Z)
- 数据源: GitHub API(gh CLI core + Search API)+ mmx web search + npm registry + PyPI + 仓库内 CHANGELOG / release notes / p2 README 校验
- API rate limit 剩余: 4963 / 5000(core,抓取完成后查询);Search API 独立限流 30 / 30(计数请求已分批 sleep 3s)
- 抓取结果: 6 / 6 仓库 × 5 endpoint(repo / releases / commits / pulls / issues)全部成功;discussions 5 / 6 成功(opencode 返回「Discussions are disabled for this repo」),pi / hindsight / ACP / pi-web / blog 的 discussions 返回的均为历史帖,窗口期内无新讨论
- 增量统计口径(2026-11-04T00:30:00Z 之后,Search API
committer-date:>/merged:>/created:>):opencode 104 commits / 105 合并 PR / 189 新 PR / 128 新 issue;pi 90 commits / 37 合并 PR / 29 新 PR / 25 新 issue;pi-web 0 commits / 0 合并 PR / 9 新 PR / 13 新 issue;hindsight 4 commits / 4 合并 PR / 9 新 PR / 25 新 issue;ACP 1 commits / 1 合并 PR / 2 新 PR / 0 新 issue;blog 1 commits / 0 / 1 / 0 - 窗口期内的 release: 无。pi 最新 v1.5.0(11-02)、opencode 最新 v2.2.5(10-30)、pi-web 最新 v0.15.0(11-03)、hindsight 最新 v1.2.0(11-03,另有 coding-agents v0.8.5 与 hermes v1.2.4)、ACP 最新 v1.15.1 / schema-v1.29.1(11-02)、blog 无 release
- npm / PyPI 校验:
@earendil-works/pi-coding-agent仍为 1.5.0、@agegr/pi-web仍为 0.15.0(dist-tags: latest 0.15.0 / beta 0.8.12-beta.1)、@opencode/cli仍为 2.2.5 但 dev 构建持续发布(0.0.0-dev-646,11-04T23:58Z),PyPIhindsight-client仍为 1.2.0 - 仓库元信息对比上次报告(2026-11-04):opencode stars 224357 → 224595 / open issues 3990 → 4013;pi stars 119843 → 120066 / open issues 312 → 264;pi-web stars 8015 → 8036 / open issues 14 → 33;hindsight stars 58503 → 58837 / open issues 176 → 203;ACP stars 4575 → 4576 / open issues 32 → 33
评论