reports 20 entries 1 years
调研周报
由 daily-research agent 自动扫描 GitHub 开源项目后生成的每周调研报告。
扫描窗口、仓库清单、分析方法见
daily-research 仓库。
20 期
- GitHub 调研周报 2026-10-20
扫描窗口:2026-09-08T09:23:29Z → 2026-10-20T00:30:19Z(共 41.7 天)| 基准来源:上次报告 2026-10-19
- · **vectori
- GitHub 调研周报 2026-10-19
扫描窗口:2026-09-08T09:23:29Z → 2026-10-19T00:30:18Z(共 40.6 天)| 基准来源:上次报告 reports/2026-10-18.md
- · **earendil-works/pi**: `48909d9` 把 `pi-telemetry` 从「只有 span 契约」补成完整的可观测性底座——**TelemetryPropagation(inject/extract + opaque carriers)、span links、TelemetryMetrics(counter / up-down counter / histogram)、typed metric schemas(`createTypedMetrics`)、in-memory measurement log、propagation 与 metrics 的 conformance tests**(+140 行 `metrics.ts`、+135 行 `propagation.test.ts`、README +123/-4)。`chord/context` 同步拿到 `Context.telemetry`(NOOP 默认)、`withTelemetry`、`traceIn`。
- · **earendil-works/pi**: 包 README 自己写死了立场——**「no exporter, global current-span state, or dependency on a telemetry backend」**,可观测性是显式注入的契约,不是全局埋点。`durable` 只加了 `HarnessOptions.telemetry` 的**类型**,changelog 原文:「adds the configuration type only; Durable instrumentation and persisted carriers are not yet implemented.」
- · **earendil-works/pi**: `91b33ca` 让 durable 的失败面从字符串变成类型。`ReportInfo.type` 有 9 种取值(`session_failed` / `task_faulted` / `task_parked` / `migration_failed` / `task_outdated` / `task_error` / `extension_error` / `host_error` / `listener_error`),`restart_limit` 与 outdated 定义不再是 `error.cause` 里的一段文本,`host_error` 点名是哪个 `HarnessOptions` 回调炸的。
- GitHub 调研周报 2026-10-18
扫描窗口:2026-09-08T09:23:29Z → 2026-10-18T00:33:51Z(共 39.6 天)| 基准来源:上次报告 2026-10-16
- · **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 里释放内存。
- GitHub 调研周报 2026-10-16
扫描窗口:2026-09-08T09:23:29Z → 2026-10-16T00:32:07Z(共 37.6 天)| 基准来源:上次报告 2026-10-15
- · **earendil-works/pi**: **v1.3.0 发布**(10-15 19:17:33Z),五条 headline 里有三条是关于「不要弄坏缓存 / 不要弄脏上下文」的:`/share` 的上传目的地可选 `auto` / `gist` / `radius`(#10870);**在 OpenAI GPT-6 上会话中途改 thinking level 保住 prompt cache**(#10853);**kimi-coding 改走 OpenAI Chat Completions**(`https://api.kimi.com/coding/v1`,#10720),使「会话中途新增的工具不再让 prompt cache 失效」。另两条是上下文卫生:**切换模型时丢弃上一个模型的 thinking,而不是当纯文本发给新模型**(#10995)、**恢复的会话保留其原有 active tools**(`--tools +name/-name` 叠加而非替换)。
- · **earendil-works/pi**: **发布当天 headline 就被打了一枪,而修复方向和发布说明指向相反。** #10992:`~/.pi/agent/models-store.json` 一旦从 `https://pi.dev/api/models/providers/kimi-coding` 拉到新鲜条目,所有 kimi-coding 模型调用 100% 失败于 `404 resource_not_found_error`——根因是**内置 provider 硬接 Anthropic Messages(SDK 追加 `/v1/messages` → `/coding/v1/messages`,能通),而远端 catalog 条目写的是 OpenAI 协议(`baseUrl` 已含 `/v1`),两条路径对 `/v1` 的归属互相矛盾**。#10985 是同一个根因的 Nix 表现(构建失败:stale Kimi catalog 仍用 anthropic-messages)。#11003 是另一个 P0:`google-shared.ts` 在 Gemini 4 模型未填 `thinkingLevelMap` 时,`off` 仍发 `thinkingBudget: 0`、`minimal` 仍发非零值,Vertex 直接 400。
- · **earendil-works/pi**: **上期 #10959 的跨主机信任边界漏洞在 26 小时内被修掉。** `9a3ca68`「fix(chord): remote references refuse a foreign ctx」由 Mario Zechner 提交——远端 Chord 引用现在拒绝来自无关主机的 `Ctx`,与本地引用的 `invalid/foreign_ctx` 行为对齐。同日还有 `4a5d372` 把 `OutputBuffer` 与 `Progress` 移到 `@earendil-works/chord/output`,以及 #10937(@christianklot
- GitHub 调研周报 2026-10-15
扫描窗口:2026-09-08T09:23:29Z → 2026-10-15T00:34:46Z(共 36.6 天)| 基准来源:上次报告 2026-10-14
- · **agentclientprotocol/agent-client-protocol**: **上期「协议本体零改动、新 issue 为零、tag 停在 v1.11.0」的静默期在一天内结束**。10-14 有 **13 个 PR 由 Ben Brandt 合并**(10:43Z → 18:41Z,八小时内),全部是 v2 规范的文字与规范性修订,**每一个都声明不动 wire format**,但其中至少三个改变了规范性强度。PR 正文反复点名同一个来源:**Codex 团队的 v2 实现反馈**与 **Claude adapter 的反馈**。
- · **agentclientprotocol/agent-client-protocol**: **取消语义被向下修正。** #2389 把 cancellation RFD 里「取消必须级联(cascade)」的要求从 MUST 改成对齐协议里已发布的 **MAY**——正文原话:*「发送取消通知并不保证接收方会停止嵌套活动或撤回它自己发出的请求」*,动因是 Codex 团队反馈。#2388 把完成上报里的 stop reason 从 MUST 降为 **SHOULD**(Agent 说不清为什么停时也必须能报 idle),同时要求 Client 在 stop reason 缺失、null、格式错误或未知时**仍须识别 idle,且不得假定成功或失败**。#2390 明确列出取消的 MUST 义务只剩三条:确认取消成功、更新顺序、取消引发的错误。
- · **agentclientprotocol/agent-client-protocol**: **「什么算完成」「什么算插入」第一次被写成规范术语。** #2387(+148/−45,本批最大)定义 foreground / background work,并要求**无论工作由 prompt 还是 agent 主动发起,都走同一条 running→idle 生命周期**;#2392(+133/−49)把 insertion 定义进规范生命周期——**foreground `running` 可以早于插入发生且不等于「已接受」**,prompt 响应与 user-message 更新可以乱序但不得早于插入,插入前的拒绝是 request error 且不带 user-message 更新。#2385 定义 `session/close` 与取消的交互:close 取消前台工作时,其最终更新与带 `stopReason: "cancelled"` 的 idle 必须先于成功的 close 响应;close 若阻止了某条待处理 prompt 的 user message 插入,该请求回 **`-32800` (Request Cancelled)**,已插入的消息仍回成功并带 `messageId`。
- GitHub 调研周报 2026-10-14
扫描窗口:2026-09-08T09:23:29Z → 2026-10-14T00:30:22Z(共 35.7 天)| 基准来源:上次报告 2026-10-13
- · **vectori
- GitHub 调研周报 2026-10-13
扫描窗口:2026-09-08T09:23:29Z → 2026-10-13T00:33:30Z(共 34.8 天)| 基准来源:上次报告 2026-10-12
- · **agentclientprotocol/agent-client-protocol**: **#1237「Client-Provided System Prompt」RFD 于 10-12 10:12 合入**(作者 @wpfleger96,开于 2026-05-18)。提案理由写得很直白:ACP 是当前唯一没有 system prompt 机制的 agent 协议——MCP、OpenAI、Anthropic Messages API 都有,每家 ACP 实现都各自造了非标准变通(`_meta` 扩展、user-message 注入、文件系统中转)。方案是 `sessionCapabilities.systemPrompt` 在 `initiali
- GitHub 调研周报 2026-10-12
扫描窗口:2026-09-08T09:23:29Z → 2026-10-12T00:36:43Z(共 33.6 天)| 基准来源:上次报告 2026-10-11
- · **anomalyco/opencode**: 1.x 最后一个功能型 release 到来了——v1.19.0(10-11)把 `opencode upgrade --major` 和 `/update` 变成通往 OpenCode 2 的唯一通道,并且**取消自动安装更新**;同一版把 PTY 检查改成「先校验 origin 与 ticket,再判断 PTY 是否存在」。升级通道打开的当天,V2 侧就收到一份标为 SECURITY 的报告 #54632:plan mode 在 V2 只是**建议性**而非强制执行——Plan agent 拒绝 `edit`/`write`/`patch`,却对 `shell` 没有任何规则,于是落到默认 allow;`external_directory` 自 #53585 起也默认 allow。维护者 bot 确认这是已知问题并把报告判为 #53955 的重复,修复 PR #54165(10-09 提交)**至今 open 未合**。
- · **earendil-works/pi**: durable code mode 在一天内落成 6 个 commit。`sandbox.start()` 让脚本带虚拟时钟与种子随机数**确定性重跑**,每次调用的结果先写 journal 再投递;重跑时 nested call 按 key `c<id>` 重新挂接,journal 缺的调用会被扣住直到 replay 结束,再与历史尝试的 key 对账;divergence、模块版本变化、sandbox 指纹变化、deadline 超时都会终止调用并存下错误。`bench:codemode` 把对比写进了 commit message:1,000 次并行调用 0.82 vs 0.78 ms/call,串行 1.52 vs 1.10 ms/call(每次调用多两个 commit:journal 条目和计数)。
- · **earendil-works/pi**: compaction 从「静默失败」改为「显式失败」。89e5c2c 记录的场景是——一次 blocking compaction 失败后,生成仍然照发请求,context 仍高于阻塞阈值,1M 窗口下 996K 的 session **每一轮都拿到空的 length 回答,而界面上看不到任何错误**。现在 compaction 失败/fault/orphan/被中止会让生成以 `model_error (Compaction failed: …)` 结束,`pi.live.compactionFailure` 保留最近一次失败直到产出摘要。15e7bdc 同时修掉一个 1.38M-token 的 summari
- GitHub 调研周报 2026-10-11
扫描窗口:2026-09-08T09:23:29Z → 2026-10-11T00:36:43Z(约 32.6 天)| 基准来源:上次报告 2026-10-10
- · **opencode 的 v2 成为主线**:`5caf1f9`(10-10 14:58Z,@Dax Raad)的说明是「取 v2 的树,把 `packages/console`、`packages/web`、`packages/stats`、`packages/function`、`infra`、`sst.config.ts` 与最新 dev 合并,并把 V2 的发布与部署目标从 `v2` 分支改到 `dev`」。同一次改动新增 `V2_HTTP_API_AUDIT.md`:**139 个 HTTP endpoint、10 组全部审完**,每个 endpoint 必须选一个 disposition(Keep / Change / Remove / Experimental-only)并写理由,稳定性分级为 public / experimental / internal。两条线仍在并行:v1 的 GitHub Release 停在 **v1.18.35**(10-06),v2 只有 git tag(`v2.0.26` → commit `release: v2.0.26`,10-08)**而没有对应的 GitHub Release 条目**,只在 npm 上发。
- · **分支提升的成本由 bot 结算,而不是维护者**:`opencode-agent[bot]` 的原话是「`v2` branch was promoted to `dev` on 2026-10-10, and v2 work now happens on `dev`. This pull request targets a branch we no longer use, so it's being closed. Please open a new pull request … with `dev` as the base」——10-10 19:34 到 10-11 00:32 之间 20 个 base=v2 的 PR 被这样关掉,kitlangton 一人占了 5 个(他自己也还在往 v2 上开)。另一条独立的规则来自 `github-actions[bot]` 的 "Automated PR Cleanup":**创建超过 1 个月 + 正向 reaction 少于 2 个**,10-10 起关掉 45 个。
- · **pi 把 codemode 沙箱搬上 Cloudflare Workers**:`748b351` 把 host 拆成「与传输无关的执行逻辑 + VM driver」,于是同一套 codemode 有三种落点——worker 线程里的 `CodemodeSandbox`、调用线程里的 `InlineCodemodeSandbox`、跨 isolate RPC 的 `RemoteCodemodeSandbox`;新增 `/portable`(不含 Node import)与 `/cloudflare` 入口,配套 `CodemodeSandboxDurableObject` 部署成独立 Worker,「让脚本永远不阻塞调用方线程」;不 await 工具的纯计算脚本由 interrupt budget 限界,且在 drain promise job 时也轮询。紧接着 `4130bd5` 修 Node 24/26 `--watch` 往 worker channel 发的 `watch:import` / `watch:require` 消息把整条 bridge 判为损坏(nodejs/node#65044,closes #10725)。
- GitHub 调研周报 2026-10-10
扫描窗口:2026-09-08T09:23:29Z → 2026-10-10T00:30:28Z(约 31.6 天)| 基准来源:上次报告 2026-10-09
- · **ACP 一日内完成两个 RFD 的稳定化**:`v1.11.0` / `schema-v1.25.0` / `schema-v2.0.0-alpha.8` 同在 2026-10-09T14:17Z 发布(#2280 chore: release)。**Session Notices**(`notice` 这类「fire-and-forget」的提示事件,no id / no ack / 不进 replay,展示与关闭完全由 Client 决定)与 **Session Compaction**(`compaction_update` + `compaction_summary_chunk`,ID-addressed 的上下文压缩实体,首个 update 固定时间线位置,后续同 ID 更新原位 patch)从 Preview 升到 Completed 并进入正式 schema。v1 侧投递与 replay 仍需 `clientCapabilities.session.compaction` / `.notices`;v2 侧不需要 capability。官方 RFD 更新页已记录这两条。
- · **同一批次里 ACP 把一批「宽容解析」字段改成严格拒绝**(#2333,benbrandt,是 #1583 的后续):`terminal/create` 的 `args`/`env`/`cwd`/`outputByteLimit`、`fs/read_text_file` 的 `line`/`limit`、`session/{new,load,resume,fork}` 的 `mcpServers`/`additionalDirectories`、v2 `session/resume` 的 `replayFrom`,畸形输入一律回 `-32602`。PR 自带的对照表很说明问题:`args: ["serve","--port",3000]` 过去会被执行成 `serve --port`;`line: "120"` 过去会从第 1 行开始读;某个 server 的 `env` 值为 `null` 会让该 server **静默不启动而会话照常开始**。作者的判据是:宽容解析只该用在「fallback 意味着**信息更少**」的字段上(无 metadata、不支持的能力、缺失的展示项),一旦 fallback 本身有含义,收窄就等于接收方替发送方做了另一个决定。
- · **ACP v2 补上「prompt 之后才发生的失败」的表达方式**(#2281,标为 unstable):v2 的 `session/prompt` 在用户消息插入后就返回,错误响应不再能报告本轮后续失败。实现改为发一个 idle 的 `state_update`,带 `stopReason: "error"` 与可选的 JSON-RPC error 字段。同时 v2 明确**不新增 compaction capability**(v2 整体仍由 `unstable_protocol_v2` opt-in),以及 v2 的 entity id 是「按实体类型唯一」而非全局唯一(#2332)。
- GitHub 调研周报 2026-10-09
扫描窗口:2026-09-08T09:23:29Z → 2026-10-09T00:32:57Z(约 30.6 天)| 基准来源:上次报告 2026-10-08
- · **agegr/pi-web v0.11.0 是本窗口第一件必须立刻升级的事**(2026-10-08T16:50:58Z):**0.11.0 之前密码保护可被绕过**。根因在 `cf3ebfb`——已发布的 npm tarball 带着 `.next/prerender-manifest.json`,其中 `preview.previewModeId` 每个 release 都一样;Next.js 对 `x-prerender-revalidate` 等于该 id 的请求**跳过 middleware(proxy.ts)**,于是密码门与 Host / Origin / Fetch-Metadata 检查一并失效,能直接执行命令、读写文件。修法是每次启动在 `bin/pi-web.js` 里用随机值重写三个 preview secret(id / signing key / encryption key),且放在 guaranteed launch path 而非 postinstall,`--ignore-scripts` 绕不过去;安装目录只读则告警。同批还有 Windows 目录联接(junction)跨出允许目录读文件的 git diff 端点(#1039)与 Next.js 16.3.8。
- · **opencode Zen 免费层后端迁移在 24h 内收尾**:#53959 把 `fledge-alpha-free` / `jev-1.13-free` / `ling-3.0-flash-fin-free` / `longcat-2.5-preview-free` / `mimo-v2.6-flash-free` / `muse-spark-1.2-contributor-free` / `nemotron-3-ultra-free` 移到新 inference;#53963 把最忙的三个(`big-pickle`、`muse-spark-1.3-contributor-free`、`space-bunny-free`)也移过去,并修掉一个可读性问题——新 inference 返 404 时 SolidStart 会把响应替换成自己的 `Cannot find any route matching [POST] …/
- GitHub 调研周报 2026-10-08
扫描窗口:2026-09-08T09:23:29Z → 2026-10-08T00:32:36Z(约 29.6 天)| 基准来源:上次报告 2026-10-07
- · **earendil-works/pi v1.1.0 发布**(2026-10-07T22:26:31Z):① **Program status reporting via OSC 7501**(`503c605`,Mario Zechner,closes #10607,由 @badlogic 提案,源自 Mitchell Hashimoto 的 Program Status Protocol)——支持该协议的终端 / agent 面板能直接看到 pi 是 `working` / `blocked:question` / `blocked:permission` / `blocked:auth` / `done` / `error` / `idle`,`msg` 永不含 prompt 或助手文本,`PI_PROGRAM_STATUS=1|0` 可强制开关;② **`--tools` 接受 `+name/-name`**(v1.0.4 加 glob 后再补 modifiers,`pi -t +codemode,-write`);③ **Claude Haiku 5.5**(`f76c1db`,prompt-length 分档 100k 以上、adaptive thinking 到 `xhigh`/`max`、Bedrock 上带 prompt caching);④ **OpenAI Decisions 分类器 + GPT-6 Luna**(`ce8972a`,bool 问题映射为 predicates,codemode `models.classify()` 接受 images);⑤ **llama.cpp 0.6.0+ 的 Julia-1 / Laya / Kev / lev / OpenJev 走原生 `/v1/systemone` classifier**,不再当 chat model 列举。
- · **pi v1.1.0 的其余 20 余条修复集中在「长尾环境」**:MCP OAuth 登录可 Esc 取消且 shutdown 不再空等 15s(#10565)、`pi update` 只保留新旧两个 release(#10392/#10511)、Anthropic 浏览器登录在 53692 被 Hyper-V/WSL 预留时回落自由 loopback 端口(#10571)、`node --watch` 下 Node 24.19+/26.x 的 `{ "watch:require": [...] }` 消息被当成 worker 回包导致图片「could not be resi
- GitHub 调研周报 2026-10-07
扫描窗口:2026-09-08T09:23:29Z → 2026-10-07T00:30:35Z(约 28.6 天)| 基准来源:上次报告 2026-10-06
- · **earendil-works/pi Durable 24h 三连击**(2026-10-06,Mario Zechner):① **每条 conversation 的 context 在内存中常驻**(`da866ad` `feat(durable): keep each conversation's context in memory; Durable Object SQLite adapter`)——`runtime.context()` 缓存每条 conversation 最后读到的 range 与 derived view,下次任一 task 再读只需扫描之后的 entries;busy conversation 永远保留,idle 保留 `settings.contextRetentionMs`(默认 10 分钟)。**新增 Cloudflare Durable Object SQLite adapter**(`openDurableObjectSqliteStorage(ctx.storage)`,无 per-row copy)。② **scan conversations / entries / tasks / submissions 的顺序解耦**(`4dd2af4`)——之前必须按 conversation → entry → task → submission 的固定顺序,现在任意顺序扫,依赖关系由数据驱动。③ **读 conversation context 早于某个 entry 的快照**(`76f6c06`)——可在历史 entry 处取回当时的 context,对 fork / subagent 拉分叉前视图至关重要。
- · **earendil-works/pi AI 层 hardening 24h 一批**:① **把 bundled Radius catalog 换成 gateway catalog**(`43d3763`,Armin)——之前 fetched catalog 与 shipped default catalog 合并导致组织 owner 禁用的 model 仍然列出。② **`--tools` 接受 `+name/-name` modifiers**(`ddaa0a0`,Armin)——纯 `+`/`-` 列表按 `defaultTools` 那样改默认工具集合,例如 `pi -t +codemode`;混入普通条目 / 修饰符带 glob 一律 reject;`/reload` 保留 `-name` 的移除。③ **llama.cpp classifier models 走 native path**(`f6127a1`,Armin,#10382)——`Julia-1` / `Laya` / `Kev` / `lev` / `OpenJev` 等 classifier model 不再当 chat model 列举,类型化为 `typesafe-system-one` classifiers;只有 HTTP 501 / 404 才回落到 `llama-cpp-classify`,从 model store 恢复后会重检。④ **Bedrock Converse 给 OpenAI model 发 reasoning effort**(#10142,@jsanter27)——之前 `reasoning_effort` 只发到原生 OpenAI endpoint,Bedrock 转发时丢失。⑤ **pi-ai `AssistantMessageEventStream` 用单调时钟记 `durationMs`**(`36a686e`,#10549)——agent loop / durable tool task / coding-agent bash renderer 都拿到真耗时,reload 后仍可见。⑥ **package artifact validation 统一**(`23cf2b9`,#10197,Christian Klot
- GitHub 调研周报 2026-10-06
扫描窗口:2026-09-08T09:23:29Z → 2026-10-06T00:35:52Z(约 27.6 天)| 基准来源:上次报告 2026-10-05
- · **earendil-works/pi**:**v1.0.3 + v1.0.4 同日连发**(2026-10-05)——v1.0.3 = **A
- GitHub 调研周报 2026-10-05
扫描窗口:2026-09-08T09:23:29Z → 2026-10-05T00:30:35Z(约 26.7 天)| 基准来源:上次报告 2026-10-04
- · **earendil-works/pi**:**v1.0.2**(2026-10-04)—— v1 stable 第一个 1.0.x 补丁。**`samplingParamsByThinkingLevel`** 进 `models.json`(#9776 cherry-pick),让 OpenAI-compatible API 可以为每个 thinking level 独立配 temperature / top_p 等采样参数——`Unreleased` 周期的 PR 在 v1.0.1 之后被 cherry-pick 上 stable,标志 v1 patch 线开始吸收跨版本特性。
- · **earendil-works/pi-durable**:窗口期最活跃的子项目。Mario Zechner 一周内连发 **FileSystem.watch**(a845108)、**bounded read tool via BinaryReader.scanLines**(a19c09d)、**windowed shell output with counted skips**(cdf7979)、**configurable progress commit intervals**(674d64f)、**bounded binary and directory readers, argv exec with stream info**(4748c62);同时补齐 **Windows 兼容**(864777b / 1543dd8)——`pi-durable` 已经从"实验性框架"走到"自我实战"的阶段。
- · **earendil-works/pi 主线 v1.0.2 收尾后的小修**:**codemode `image()` 输出改为保存到 temp files**(d677d0e,#10463);**dead terminal stdin errors 不再被上报为 crash**(4c6b724);**OAuth 轮换 token 持久化**(bde882c);**`pi update` / 安装更新后 codemode 仍可用**(1b09414)——v1.0.2 之后所有 commit 都是"post-stable hardening"。
- GitHub 调研周报 2026-10-04
扫描窗口:2026-09-08T09:23:29Z → 2026-10-04T00:30:48Z(约 25.6 天)| 基准来源:上次报告 2026-10-02
- · **earendil-works/pi**:**v1.0.1**(2026-10-03)—— 4 项新功能(**Nix flake** `nix run github:earendil-works/pi/stable`、`oauth.clientRegistration: "cimd"`([Client ID Metadata Documents](https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata/))、`pi.registerToolRenderer()` 给未注册的 MCP tool 也能渲染、Cloudflare Clef / Clef-Flash 分类器进 codemode);**项目级 MCP 覆盖**:`.pi/mcp.json` 不带 `command` / `url` 的条目只覆盖 `enabled` / `exposure` / `toolExposure`,`/mcp` 可在当前项目一键开关;**`Anthropic mid-conversation tool 改为 inline 定义**——同一名字重定义保留 prompt cache 而不重发整张工具表**;**`pi update` 推荐从 npm 全局迁移到 managed installer(npm shrinkwrap 移除)**;**Codemode 脚本输出加 16 Mi 字符 / 100000 item 上限**(#10283),防止 print 循环 OOM host;`brace-expansion` 钉到 5.0.12(GHSA-q2hr-2g5m-vwhr 等 3 个 CVE,#10288);Kitten / We
- GitHub 调研周报 2026-10-02
扫描窗口:2026-09-08T09:23:29Z → 2026-10-02T00:30:51Z(约 23.6 天)| 基准来源:上次报告 2026-10-01
- · **earendil-works/pi**:**v1.0.0 stable**(2026-10-01)—— TUI 改为 fullscreen 默认;codemode prompt 缩减约 40%(GPT-5.6 从 ~5,300 → ~3,800 token),错误信息直接提示恢复动作;**`models.generateImages()` 进 codemode**(OpenRouter 等图像模型走 session 凭据);`/login` 新增 **Radius**(同时配 MCP server 一条龙)与 **Anthropic copy-code login**(无头浏览器);MCP OAuth 加 **RFC 9207 `iss` 校验**、per-server 凭据、step-up 保留 granted scopes;`quietStartup: "header"`。**durable** 实验线落"vacation planner demo"、`pi-durable` 端口、async SQLite(`#10232`)、实验 harness 从 `pi-agent-core` 移除。
- · **vectori
- GitHub 调研周报 2026-10-01
扫描窗口:2026-09-08T09:23:29Z → 2026-10-01T00:30:41Z(约 23 天)| 基准来源:上次报告 2026-09-30
- · **earendil-works/pi**:v0.99.2 把 **MCP 提升为一等公民**——默认 `codemode` exposure 的 MCP 服务器从 prompt 与 codemode 描述里"消失",改由 `searchTools()` / `describeNamespace()` 在 sandbox 内按需加载;同步加 `oauth.clientName`、`auth.provider` provider 凭据透传、`ANTHROPIC_FEDERATION_RULE_ID` 工作负载身份联邦、copy-code OAuth 登录。**durable** 实验线一日两推:Package 20 `compaction and overflow` + Package 21 `extensions and per-conversation agents`,并把 SQLite 存储改异步(christianklot
- GitHub 调研周报 2026-09-30
扫描窗口:2026-09-08T09:23:29Z → 2026-09-30T08:33:09+0800(约 22 天)| 基准来源:上次报告 2026-09-29
- · **earendil-works/pi**:v0.99.0 把 **codemode + MCP** 做成内置扩展(QuickJS 沙箱里跑 JavaScript 并行调工具),并引入 virtual models / Sign in with ChatGPT / 系统主题默认 / `ModelRuntime` 图像生成 / TypeScript 7.0 构建;v0.99.1 把 **GPT-6.1 Sol** 设为 OpenAI Codex 默认;同日下午起 Mario Zechner 启动名为 **durable** 的实验线(Package 15–18,inbox / reset / usage / conversation view / abort / ownership cascades / subagent handles)。
- · **vectori
- GitHub 调研周报 2026-09-29
扫描窗口:2026-09-08 → 2026-09-29(共 21 天)| 基准来源:首次运行(无历史 baseline,自动按 21 天窗口扫描)
- · **earendil-works/pi**:v0.87.0 引入 `ContextEditEntry`(session 与 model context 解耦)+ 5 项 breaking changes;同时 v0.87.1 上架 Claude Opus 5.5 / GPT-6 Sol & Luna / Grok 4.7 三套新模型;v0.86.x 加入 Meta Muse provider。
- · **vectori