更新记录Changelog
每个版本的变更记录,与源码仓库 changes/ 目录同源;程序内的新版本提示也链接到本页。
What changed in each release, mirroring the changes/ directory of the source repository. The in-app update notice links here too.
0.1.5上游追平 v0.86.1 + rpiv-todo + 6 轮 RC 验证(2026-09-29)Upstream parity to v0.86.1 + rpiv-todo + 6 RC rounds (2026-09-29)
主线:行为金标准从 v0.85.0+ 升级到 v0.86.1+(19451accd,ADR-0029 + ADR-0031),15 个主机任务恢复行为对拍绿,渲染面首次跑字节等值门(零快照重录);新第六个第一方插件 rpiv-todo;rpi 原生修复 #52/#53/#54/#55。正式版经 6 轮 RC 预发布验证(rc.1…rc.6)与两轮发布前全面审查(rc.3/rc.4),见下方各条。 Highlights: the behavioral gold standard moves from v0.85.0+ to v0.86.1+ (19451accd, ADR-0029 + ADR-0031); fifteen host tasks restore behavioral parity, and the render plane runs the byte-equality gate for the first time (zero snapshot re-records); rpiv-todo joins as the sixth first-party plugin; rpi-native fixes for #52/#53/#54/#55. The stable release went through six RC rounds (rc.1…rc.6) plus two full pre-stable review batches (rc.3/rc.4) — see the entries below.
- 协议与会话:Breaking——mid-conversation system messages:系统提示词与工具清单改由 transcript 携带声明(切换会话/分支重放精确状态,provider 收增量工具变化;TranscriptContext 品牌收窄 provider trait 面,deferred-tools 机制退役);per-model compaction 预算(compaction.modelOverrides);prompt cache warming(cacheWarming 设置 + cache_warming_decision 扩展事件);ctx.sessionToolResults additive ABI(ADR-0030);agent 重试退避封顶(新设置 retry.maxAgentDelayMs,默认 60s);compaction 取消竞态闭环(#8826/#9340/#9777)。 Protocol & sessions: breaking — mid-conversation system messages: the system prompt and tool loadout are declared by transcript-carried entries (switching sessions/branches replays the exact state; providers receive incremental tool changes; the TranscriptContext brand narrows the provider trait surface and the deferred-tools mechanism retires); per-model compaction budgets (compaction.modelOverrides); prompt cache warming (cacheWarming setting + the cache_warming_decision extension event); the ctx.sessionToolResults additive ABI (ADR-0030); agent retry backoff capped by the new retry.maxAgentDelayMs setting (default 60s); compaction cancellation races closed (#8826/#9340/#9777).
- Providers 与模型目录:Meta provider + Muse 订阅 OAuth(/login meta,设备授权铸造 Model API key);内置目录重生成至 v0.86.1 pin(41 目录 / 1502 模型,含期内 2026-09-23 快照重_vendor;Radius 公共目录内置、Anthropic 分层 prompt-cache 寿命);SSE 空闲超时默认改不限(#54,D-103——设 httpIdleTimeoutMs: 300000 可恢复旧默认)。 Providers & model catalog: the Meta provider with Muse subscription OAuth (/login meta; device authorization mints a Model API key); the built-in catalog regenerated at the v0.86.1 pin (41 catalogs / 1502 models after the in-cycle 2026-09-23 snapshot re-vendor; the Radius public catalog ships built-in, per-tier Anthropic prompt-cache lifetimes); the SSE idle timeout now defaults to unlimited (#54, D-103 — set httpIdleTimeoutMs: 300000 to restore the old default).
- 工具 / CLI / 扩展:内建工具默认 strict-prefer JSON-schema 采样;bash 时长可读渲染(1h 3m 4s)+ 信号退出码(128+N);Breaking——user_bash 失败即中止 ! 命令(不再回落本地 shell),RPC bash 同拦截契约;pi.on() 返回退订句柄;ctx.modelRegistry.stream()/streamSimple()(扩展经配置 provider 调模型);RPC steer/follow_up 走扩展 input handler;扩展渲染钩子 theme-mutex 死锁修复(rpi#52 e2e 发现)。 Tools / CLI / extensions: built-in tools default to strict-prefer JSON-schema sampling; bash durations render readably (1h 3m 4s) with signal exit codes (128+N); breaking — a failing user_bash handler aborts the ! command (no local-shell fallback), and RPC-mode bash runs the same interception; pi.on() returns an unsubscribe handle; ctx.modelRegistry.stream()/streamSimple() (extensions call models through the configured providers); RPC steer/follow_up run extension input handlers; the extension render-hook theme-mutex deadlock fixed (found by the rpi#52 e2e).
- TUI:验证式剪贴板写入(平台命令 → WSL interop → OSC 52,100KB 上限;WSL PowerShell 链修复为真正到达 powershell.exe);流式渲染 O(lines²) → 线性(#53:sourcepos 查找表 + 组件复用,200KB 折叠 delta ~227ms → ~8ms,字节不变);ask_user_question 摘要行 + Ctrl+O 展开(#52,替代原始 args JSON 倾倒)。 TUI: verified clipboard writes (platform commands → WSL interop → OSC 52, 100KB cap; the WSL PowerShell chain fixed to actually reach powershell.exe); streaming renders O(lines²) → linear (#53: sourcepos lookup table + per-block component reuse; 200KB folded delta ~227ms → ~8ms, byte-identical); the ask_user_question summary line + Ctrl+O expand (#52, replacing the raw-args JSON dump).
- 插件线(六插件锁步):新第一方插件 rpiv-todo(todo 工具/overlay//todos 命令/会话分支重放——compaction 与 /reload 后存活;registry 键 rpiv-todo 随本版首发);subagents 重定基 v0.70.0(Breaking:fallbackModels 移除——重试不换模型;worktree 准入/预算/allowlist 治理族);mcp-adapter 重定基 v2.34.0+(加密文件 OAuth 凭据库、CIMD、/mcp edit、directTools search、顶层 addedToolNames);ask-user-question 渲染摘要;rpiv-mono pin 0fdf4f8。 Plugin line (six-plugin lockstep): the new first-party plugin rpiv-todo (the todo tool / overlay / /todos command / session-branch replay — survives compaction and /reload; registry key rpiv-todo, debuting with this release); subagents rebased to v0.70.0 (breaking: fallbackModels removed — retries never switch models; the worktree-admission / budget / allowlist governance family); mcp-adapter rebased to v2.34.0+ (the encrypted-file OAuth credential store, CIMD, /mcp edit, directTools search, top-level addedToolNames); the ask-user-question render summary; the rpiv-mono pin 0fdf4f8.
- rc 窗口验证修复(rc.2/rc.4–rc.6,实机验证反馈):todo overlay 交互会话不显示(UI bridge 先于 bind_extensions 挂载,session_start 时插件前台声明不再静默丢失);流式中按 Esc 崩溃驱动线程(abort 改走 spawn_async 回退,无 reactor 的驱动线程不再 panic);空 widget 行渲染为 spacer 行(todo 面板与编辑器边框不再贴合);supervisor asks 重回父会话(#55——fleet 循环按新阻塞 ask 投递 triggerTurn 消息,前台等待遇 ask 分离为后台续跑)。 RC-window verification fixes (rc.2/rc.4–rc.6, field feedback): the todo overlay never appeared in a real interactive session (the UI bridge now mounts before bind_extensions, so session_start no longer silently drops the plugin's foreground claim); Escape during streaming crashed the driver thread (aborts route through the spawn_async fallback — no more reactor panic on the runtime-less driver thread); blank widget lines render as spacer rows (the todo panel no longer glues onto the editor border); supervisor asks reach the parent again (#55 — the fleet loop delivers a triggerTurn message per new blocking ask, and the foreground wait detaches into a background continuation on an ask).
- 发布前审查修复(rc.3):WSL 剪贴板写入链真正到达 powershell.exe(写路径 runner 丢弃 stdout 的缺陷;查询调用返回真实字节、写入调用不给输出管道);零 TTL MCP 服务器连接期间保留 direct tools(live-overlay 条目剥离声明 TTL);RPC bash 跑 user_bash 拦截(与交互 ! 路径同 fail-closed 契约);mcp connect/search 顶层上报 addedToolNames(上游形状);其余修复——OAuth 密钥解码器多字节 UTF-8 fail-closed、macOS 本地网络诊断错误文案、broker-before-grant 顺序钉死、目录默认模型对齐等。 Pre-stable review fixes (rc.3): the WSL clipboard write chain actually reaches powershell.exe (the write-path runner dropped stdout; query calls return real bytes, writer calls get no output pipe); zero-TTL MCP servers keep their direct tools while connected (live-overlay entries strip the declared TTL); RPC bash runs the user_bash interception with the same fail-closed contract as the interactive ! path; mcp connect/search report addedToolNames at the top level (upstream shape); further repairs — the OAuth key decoder fails closed on multi-byte UTF-8, macOS local-network diagnostics match real io error texts, the broker-before-grant order pinned, catalog default models aligned, and more.
- 发布前审查第二轮(rc.4):overlay 组合对齐 applyModelsJson(config.models 改 upsert 进基础目录、apiKey 不再丢失、基础 OAuth 方法保留、动态目录每次重算;流式跟随 streamWith);abort 后不再触发计费 compaction(退避睡眠被取消时 prepare_retry 返回 false);MCP OAuth token 交换/刷新携带同源 service headers;client_credentials 注册 URL 作用域读取、死注册先清;SDK toolExecute 先释放状态锁再跑工具句柄(subscribe/unsubscribe 不再自死锁);其余核心/TUI 修复——complete_summarization biased select、cache-warming 定时器 clear_run 退出、WSL 临时文件 0600 原子创建等。 Pre-stable review round 2 (rc.4): overlay composition matches applyModelsJson (config.models upsert into the base catalog with defaults inheritance, a configured apiKey no longer dropped, the base OAuth method preserved, dynamic catalogs recomputed per call; streaming follows streamWith); no post-abort billable compaction (prepare_retry returns false when an abort cancels the backoff sleep); MCP OAuth token exchange/refresh carry the same-origin service headers; the client_credentials registration is read URL-scoped with dead ones cleared first; the SDK toolExecute route releases the state lock before running a tool handler (subscribe/unsubscribe no longer self-deadlock); further core/TUI repairs — complete_summarization uses the biased select, cache-warming timers exit on clear_run, WSL temp files created 0600 atomically, and more.
0.1.4上游追平 v0.85.0 + 16 轮 RC 验证(2026-09-18)Upstream parity to v0.85.0 + 16 RC rounds (2026-09-18)
主线:行为金标准从 v0.84.1+ 升级到 v0.85.0+(698 commits / 866 文件,ADR-0023),18 个对拍任务(V14-01…18)按「上游锚点→rpi 落点→断言证据」三元组逐条恢复行为对拍绿;M5 收口完成主题校验拆分移植与 fixtures 全量重录。偏离 D-092…D-100 全数闭环。正式版经 16 轮 RC 预发布验证(rc.1…rc.16):实机验证修复、三轮全面审查闭环(rc.5/rc.11/rc.12)、去品牌化(rc.9)、模型目录刷新(rc.13)、高亮引擎根治(rc.14)与 statusline 两轮增强(rc.15/rc.16),见下方 RC 窗口各条。 Highlights: the behavioral gold standard moves from v0.84.1+ to v0.85.0+ (698 commits / 866 files, ADR-0023); eighteen parity tasks (V14-01…18) restore behavioral parity with an "upstream anchor → rpi landing → assertion evidence" triple each; the M5 closeout ports the theme-validation split and re-records every fixture. Deviations D-092…D-100 all closed. The stable release then went through sixteen RC rounds (rc.1…rc.16): field-verification fixes, three full review closures (rc.5/rc.11/rc.12), the de-pi branding pass (rc.9), a model-catalog refresh (rc.13), the highlight-engine eradication (rc.14) and two statusline enhancements (rc.15/rc.16) — see the RC-window entries below.
- 协议与会话:agent loop 的 compaction 触发时机对齐(#6879 Breaking,终轮不再触发);会话管理修复九项(fork compaction 重映射 #8989 / import 同名后缀 #8985 / share 独立临时目录 / RPC abort 取消手动 compaction #8920 等);JSON/RPC 增量(message_update 恢复累计 usage #7982、toolcall_start 附 id/toolName #7953、新命令 clear_queue #8432);流事件契约补全(custom_tool_call 事件族、immediate_retry 计数 #8016)。 Protocol & sessions: compaction trigger timing aligned with #6879 (breaking — terminal turns no longer fire it); nine session-manager repairs (fork compaction remap #8989, import same-name suffix #8985, concurrent-share isolation, RPC abort cancels manual compaction #8920, …); JSON/RPC deltas (message_update restores cumulative usage #7982, toolcall_start carries id/toolName #7953, new clear_queue command #8432); stream-event contract completion (custom_tool_call family, immediate_retry counts #8016).
- Providers 与模型目录:Anthropic 每轮 effort 持久化与 refusal fallback(managed Claude 请求体组合 + providerThinkingLevel 落盘,上游测试逐条移植);OpenAI 系与其余 provider 修复簇(Bedrock 全头转发、openrouter 双 API map);基础设施——严格 schema 自动转换、NO_PROXY 语义重写(#8737 根域/子域/IPv6/host:port)、七 adapter 默认 User-Agent、uuidv7 外部时间戳;模型目录整体重生成至 v0.85.0 数据(GPT-6 Astra、compat 字段等)。 Providers & model catalog: Anthropic mid-conversation effort persistence plus refusal fallback (managed-Claude request composition and providerThinkingLevel persistence, upstream tests ported one by one); OpenAI-family and remaining-provider fix clusters (Bedrock raw headers, the openrouter dual-API map); infrastructure — strict JSON-schema coercion, rewritten NO_PROXY semantics (#8737: root/subdomain, IPv6, host:port), a default User-Agent across seven adapters, uuidv7 external timestamps; the vendored model catalog regenerated against v0.85.0 data (GPT-6 Astra, compat fields, …).
-
工具 / CLI / 扩展:七内建工具 cwd 基准改「执行时会话 cwd」(#8627);skills 三修复(Bash 不消失 #8552、根目录 md 不误报 #7805、嵌套发现 #8255);扩展 API 行为对齐(triggerTurn:false 不 steer #8022、ui_prompt_start/end #8355 等);CLI/设置面——
--分隔符、--use-theme、选择器会话级作用域(#8356 Ctrl+S 才写全局)、Windows/WSL 键位表、配置健壮性(BOM/权限/带路径错误)。 Tools / CLI / extensions: the seven built-in tools resolve cwd at execution time (#8627); three skills fixes (Bash no longer vanishes #8552, root-level plain markdown no longer reports broken #7805, nested discovery #8255); extension-API behavior parity (triggerTurn:false never steers #8022, ui_prompt_start/end #8355, …); CLI & settings — the--separator,--use-theme, session-scoped selector changes (#8356: Ctrl+S persists globally), Windows/WSL default bindings, config robustness (BOM, permissions, errors with paths). - TUI:鼠标分发基础设施全套(归一化事件/click 合成/冒泡命中/指针捕获/overlay 分发)+ 选择修复族(双击选词 joiner、hover 不改列表选择、右键粘贴去重等);全屏 transcript 搜索与跳转指示器(#8800);滚动条重设计(全轨 │/┃/█ + hover/active 态)+ 验证式复制体系(OSC 52 + 回读 + toast);渲染修复族(LaTeX join 符号、表格换行样式重置序列、working indicator 内嵌 editor 边框、thinking 切换就地更新);终端能力与环境变量(库与配置 env 离婚 c505f4c19、能力覆盖三 env + set_capability_overrides、Zed 检测、SSH 下 Alt+Enter 双超时 #7899)。 TUI: the full mouse-dispatch infrastructure (normalized events, synthesized clicks, bubbling hit-testing, pointer capture, overlay dispatch) plus the selection-fix family (double-click word joiners, hover keeps list selection, right-click paste dedup, …); full-screen transcript search with jump indicators (#8800); the scrollbar redesign (full-track │/┃/█ with hover/active states) and verified copying (OSC 52 + readback + toasts); the render-fix family (LaTeX join symbols, table-wrap style resets, the working indicator embedded in the editor border, in-place thinking toggles); terminal capabilities & environment (library/app env divorce c505f4c19, three capability-override envs plus set_capability_overrides, Zed detection, dual escape/sequence timeouts so Alt+Enter survives SSH #7899).
- 收口:主题校验拆分移植(eb3e9feed——库路径改 lenient cast、结构化诊断移入应用层安装式校验器,themes golden 转正全量对拍);fixtures 全量重录钉死 v0.85.0+(session 场景 ×7 + resources golden ×6,runbook 可重复性抽查通过);workspace 版本 0.1.4。 Closeout: the theme-validation split ported (eb3e9feed — the library path becomes a lenient cast while structured diagnostics move into an app-installed validator; the themes golden now compares every case); all fixtures re-recorded and pinned to v0.85.0+ (seven session scenarios + six resource goldens, runbook repeatability spot-check green); workspace version 0.1.4.
-
RC 更新通道(V14-19):
rpi update --rc/rpi update --extensions --rc/rpi install <name> --rc预发布通道旗标(不带--rc恒 stable,全部更新判断由 semver 全序自然导出);新端点api/latest-rc-version.json;registry 解析补通道过滤(stable 排除预发布);build.yml 对-rctag 自动标 prerelease,releases/latest与 install.sh 回退路径保持 stable。 RC update channel (V14-19):rpi update --rc/rpi update --extensions --rc/rpi install <name> --rcopt into the pre-release channel (no flag always means stable; every update decision falls out of the semver total order); a newapi/latest-rc-version.jsonendpoint; registry resolution gains channel filtering (stable excludes prereleases); build.yml auto-marks-rctags as prereleases whilereleases/latestand the install.sh fallback stay stable.
-
插件重定基(TE13–TE27,ADR-0025):双插件 pin 原子切换(subagents v0.48.0→v0.66.0 / mcp-adapter v2.24.0→v2.32.1);Breaking:mcp direct 工具命名(#342/#346/#463/#455——server 前缀保留 provider-valid
-/_,含-/_的 server 名工具名改变,不做新旧双注册,兼容指引见toolPrefix: "none");subagents 语义变更族(worktree preserved、generations/文件门户、锁域边界等)与 mcp 适配器 v2.32 系行为逐条对齐。 Plugin rebases (TE13–TE27, ADR-0025): atomic pin switches (subagents v0.48.0→v0.66.0, mcp-adapter v2.24.0→v2.32.1); breaking: mcp direct-tool naming (#342/#346/#463/#455 — server prefixes keep provider-valid-/_, tool names change for servers containing them, no dual registration; seetoolPrefix: "none"for the migration); the subagents semantic-change family and the mcp-adapter v2.32 line aligned item by item. -
交互式自定义 UI ABI(V14-20–V14-25,ADR-0024/ADR-0027):扩展可挂载交互组件的宿主 ABI(native + wasm 双载体)——7 个 additive
ui.*host-call、行帧合成与输入分发、帧限额与 wasm fuel 预算(trap 结构化错误 + 强制卸载,宿主不崩溃)、七结束路径清理矩阵、ui.editExternal外部编辑器链;新 additive host-callctx.sessionEntries(活动分支 entries 只读,fail-closed;mcp 审批恢复已迁移消费)。 Interactive custom-UI ABI (V14-20–V14-25, ADR-0024/ADR-0027): a host ABI for extension-mounted interactive components (native + wasm) — seven additiveui.*host calls, line-frame composition with input dispatch, frame caps and wasm fuel budgets (traps surface as structured errors with forced unload; the host never crashes), a seven-exit-path cleanup matrix, andui.editExternal; plus the additivectx.sessionEntrieshost call (read-only active-branch entries, fail-closed; the mcp approval restore now consumes it). -
新插件 rpiv-ask-user-question(TE28–TE32):结构化 ask_user_question 工具(上游 rpiv-mono @ v2.9.0+)——模型在需求不清时发起 1–4 题问卷(选项/预览/多选/备注),交互终端渲染底部 tabbed overlay,RPC/ACP 宿主降级为宿主原生逐题 walker;契约面与上游逐字节对拍;对话框高度稳定两轮修复;随宿主 Release 锁步发布并入 registry 索引(
rpi install rpiv-ask-user-question --rc解锁 rc 窗口)。 New plugin rpiv-ask-user-question (TE28–TE32): the structured ask_user_question tool (upstream rpiv-mono @ v2.9.0+) — the model can ask 1–4 questions (options, previews, multi-select, notes) when requirements are unclear; interactive terminals render a bottom tabbed overlay while RPC/ACP hosts fall back to a native per-question walker; contract surfaces match upstream byte-for-byte; two rounds of dialog-height stabilization; shipped lockstep with host releases and indexed in the registry (rpi install rpiv-ask-user-question --rcduring the rc window). - rc 窗口验证修复(rc.1–rc.4,实机验证反馈):editor 上方恒留 1 行间隔(上游恒驻 Spacer(1) 缺口,⠋ Working 不再贴输出);移除全屏鼠标分发两处 DBG 调试打印(+rpi-tui deny(print_*) 结构性防护);settings 列表值列对齐(标签列宽上游 min(36) 误写 min(30));/settings 热切换 TUI 模式后事件驱动刷新失效(「按一次键刷一帧」)——render_handle 改调用时解析当前渲染器;全屏点击 dock 编辑器/选择器后键盘输入死亡——SharedEntry 焦点回到内层共享组件。排查闭环:「横线变两行」为终端 Ambiguous width 渲染(上游同样复现,ADR-0020)。 RC-window verification fixes (rc.1–rc.4, field feedback): a permanent one-row gap above the editor (the upstream ever-present Spacer(1); ⠋ Working no longer touches output); two DBG debug prints removed from the fullscreen mouse path (+ a structural deny(print_*) guard in rpi-tui); settings-list value-column alignment (label width min(36) mistyped as min(30)); event-driven refresh dying after hot-switching TUI modes in /settings ("one keystroke, one frame") — render_handle now resolves the current renderer at call time; keyboard input dying after clicking the dock editor/selector in fullscreen — focus returns to the inner shared component. Investigation closure: "borders wrap to two rows" is the terminal's Ambiguous-width rendering (upstream reproduces it too, ADR-0020).
- rc 窗口全面审查闭环(rc.5,8 路深审 1 Blocker + 6 Major):RPC abort 在手动 compaction/branch summary 在飞期间永久挂起(补齐上游 idle 唤醒全部 4 个调用点);update --extensions --rc 不再降级已装 stable 扩展(双向不降级);pi.getFlag factory 期间可见 pending 默认值;/llama 显式刷新强制联网(RPI_OFFLINE 下不再被 stored 快照覆盖);/model 搜索默认项钉顶语义对齐上游;Box::handle_mouse x 边界守卫;站点 stable 端点预发布护栏;积压修复——并行批次步骤状态实时转换、globalConcurrencyLimit 接线为 run 级并发信号量、belowEditor widget 同 key 原位替换。 RC-window review closure (rc.5; eight-lane deep audit, 1 blocker + 6 majors): RPC abort hanging forever while a manual compaction/branch summary was in flight (all four upstream idle-wakeup call sites restored); update --extensions --rc no longer downgrades installed stable extensions (both directions); pi.getFlag sees pending defaults during factory; /llama explicit refresh forces network (RPI_OFFLINE no longer overwritten by the stored snapshot); /model search default-pinning semantics aligned upstream; Box::handle_mouse x-boundary guards; a prerelease guard on the site's stable endpoint; backlog fixes — real-time step status for parallel batches, globalConcurrencyLimit wired as a per-run concurrency semaphore, and in-place replacement of same-key belowEditor widgets.
- 残余 pi 标识去品牌化(rc.9,ADR-0028):默认系统提示词 operating inside pi→rpi(模型不再以 pi 自我介绍)、"Pi documentation" 段改写、CLI 帮助通篇 Update pi→Update rpi、Provider UA 与 Codex originator、临时文件前缀 pi-*→rpi-*、编排 skill 更名 pi-subagents→rpi-subagents(旧目录升级时自动迁移,用户副本保留)、manifest 键 #pi→#rpi 与 mcp-adapter 事件名、pi-messages api kind 等生态数据面(旧值读兼容自动归一);真缺陷修复——skill 文档 PI_SUBAGENT_WAIT_TOOL_ENABLED 与代码 RPI_ 拼写统一。行为变化:rpi update pi 不再被接受(用 rpi update rpi/self);分享页本地偏好键更换一次。有意保留:radius.pi.dev 网关/OAuth client_id(外部依赖)与「源自 Pi」致谢。 De-pi branding pass (rc.9, ADR-0028): the default system prompt now says operating inside rpi (models stop introducing themselves as pi), the "Pi documentation" section rewritten, CLI help updated from Update pi to Update rpi, provider UA and Codex originator renamed, temp-file prefixes pi-*→rpi-*, the orchestration skill renamed pi-subagents→rpi-subagents (old installs migrate on upgrade, user copies preserved), and ecosystem data surfaces like the #pi manifest key, mcp-adapter event names and the pi-messages api kind (old values stay readable and auto-normalize); one real defect fixed — the skill doc's PI_SUBAGENT_WAIT_TOOL_ENABLED spelling unified with the code's RPI_. Behavior notes: rpi update pi is rejected (use rpi update rpi/self); share-page local-preference keys change once. Deliberately kept: the radius.pi.dev gateway/OAuth client_id (external dependencies) and the "derived from Pi" acknowledgment.
- 发布前审查修复(rc.11):P0——交互模式 panic hook 接线(主屏/alt-screen 双变体,任一 panic 后终端必恢复);P1——read 负 limit 不再 panic、Windows bash kill/超时收敛、subagents syntheticPaths 越界校验、并行工具批 panic 事件配对、mcp adapter Ready/on_ready 竞态消除、8 个 SSE adapter 取消立即中断;P2 加固——wasm 内存上限、SSE/Bedrock 帧上限、auth.json 原子写、会话环防护等(全项见 changes/v0.1.4.md)。 Pre-release review fixes (rc.11): P0 — the interactive mode now installs the panic hook (both renderer variants; any panic restores the terminal); P1 — negative read limits no longer panic, Windows bash kill/timeout converges, subagents syntheticPaths validated against escapes, parallel tool batches keep start/end pairing through panics, the mcp-adapter Ready/on_ready race window eliminated, all eight SSE adapters abort body reads immediately; P2 hardening — wasm memory caps, SSE/Bedrock frame caps, atomic auth.json writes, session-cycle guards and more (full list in changes/v0.1.4.md).
- 发布终态复审修复(rc.12,五域并行全面审查):P1——三处 SSE finish().unwrap() 改错误传播(1 MiB 未换行尾巴 + 不完整 UTF-8 + EOF 的畸形流此前 panic 挂起 turn 无终态事件);codex SSE 体读与取消信号 race(Esc/abort 不再等 httpTimeoutMs)。P2——顺序工具批 panic 防护、SSE 行上限只界未终结尾巴、pi-messages reader 上限、streamSimple toolChoice 八 adapter 补齐、会话换行修复失败传播、--rc range 失配不静默降级、mcp session_tree 门窗口审批恢复、subagents syntheticPaths 采集期 fail-closed 等;rc.11 点名的测试零覆盖面全部钉死。 Final pre-release re-review fixes (rc.12; five-domain parallel review): P1 — three SSE finish().unwrap() sites now propagate errors (a malformed stream — 1 MiB unwritten tail + incomplete UTF-8 + EOF — used to panic inside the adapter task and hang the turn with no terminal event); the codex SSE body read now races the cancel signal (Esc/abort no longer waits out httpTimeoutMs). P2 — panic guards for sequential tool batches, SSE line caps bounded to the unterminated tail only, a pi-messages reader cap, streamSimple toolChoice forwarded by eight adapters, newline-repair failure propagation, no silent --rc downgrade on range mismatch, the mcp session_tree approval restore across the gate window, fail-closed syntheticPaths collection and more; every zero-coverage area rc.11 named now has pinned tests.
- 模型目录刷新(rc.13,catalog-only):内置目录刷新至 2026-09-14 快照——聊天 1354→1397 模型(Bedrock 区域族 +34、GPT-5.4 Codex 退役、DeepSeek Flash 合并、moonshotai 旧 kimi-k2 族退役、Copilot gpt-6-astra 改道 Responses、OpenRouter 批量/别名族扩充等);图片 50→54;行为 pin 保持 v0.85.0+(偏离 D-101,v0.1.5 上游追平后收敛);远程目录同步再生成。 Model catalog refresh (rc.13, catalog-only): built-in catalogs refreshed to the 2026-09-14 snapshot — chat 1354→1397 models (Bedrock regional families +34, GPT-5.4 Codex retired, DeepSeek Flash merged, legacy moonshotai kimi-k2 families retired, Copilot gpt-6-astra rerouted to Responses, OpenRouter bulk/alias families expanded, …); images 50→54; the behavioral pin stays at v0.85.0+ (deviation D-101, converging after the v0.1.5 upstream chase); remote catalogs regenerated in sync.
- 高亮引擎跨语法 panic 根治(rc.14,v0.1.3 起存在非 rc 回归):syntect(fancy-regex)遇 Oniguruma 子程序调用语法 panic——39 个语法(HTML / Markdown→HTML / PHP / Vue / Svelte / QML / JSP / Elixir 等)解析到 <script>、~r 等内容首次命中即 panic(catch_unwind 兜住但 stderr 污染 TUI、整块退纯文本)。build 期剔除 + 21,692 个 Direct 引用全量改写 + 重链接(198→192),引入 vendored fork vendor/syntect(5.3.0 + 两处可见性补丁)。HTML 内嵌 JS 着色恢复;Elixir ~r 行纯文本降级;全仓 mod.rs 清零。 Cross-syntax highlight panic eradicated (rc.14; present since v0.1.3, not an rc regression): syntect (fancy-regex) panicked on Oniguruma subroutine-call syntaxes — 39 grammars (HTML / Markdown→HTML / PHP / Vue / Svelte / QML / JSP / Elixir, …) panicked on first hit when parsing <script> blocks or ~r literals (catch_unwind contained it, but stderr polluted the TUI and whole blocks fell back to plain text). Build-time excision + a full rewrite of 21,692 Direct references + relinking (198→192), with a vendored fork vendor/syntect (5.3.0 + two visibility patches). Embedded JS in HTML regains coloring; Elixir ~r lines degrade to plain text; mod.rs files eliminated repo-wide.
-
statusline live_output 原始材料透传(rc.15):
rpi.live_output新增 6 个 additive 字段——output_tokens(流中 provider 累积)、text/thinking/toolcall(当前消息累积原文)、decode_started_at_ms(TTFT 排除)、message_id(逐消息变化)——脚本可自做语言感知 token 估算,替代单一 chars/token 因子(中文/英文双向偏差)。宿主/ABI/订阅集零改动,原 8 字段逐字节不变。 statusline live_output raw-material passthrough (rc.15):rpi.live_outputgains six additive fields — output_tokens (provider-cumulative during the stream), text/thinking/toolcall (the current message's accumulated originals), decode_started_at_ms (excluded from TTFT) and message_id (changes per message) — so scripts can do language-aware token estimation instead of a single chars/token factor (biased both ways for CJK vs English). Zero host/ABI/subscription changes; the original eight fields stay byte-identical. -
statusline live_output 冻结 decode_ms(rc.16):新增
decode_ms(首 delta→now 流式活更新 / message_end 后冻结为首 delta→end,始终存在、首 delta 前 0)——空闲 tick 重算同一速率,TTFT = elapsed_ms − decode_ms 同钟差;精准 tok/s 脚本从此单快照纯函数渲染,不再需要 per-session state file(resume 孤儿/陈旧两失败模式构造性消除)。原 15 字段逐字节不变。 statusline live_output frozen decode_ms (rc.16):decode_msjoins the payload (first delta→now while streaming; frozen at first delta→end after message_end; always present, 0 before the first delta) — idle ticks recompute the same rate and TTFT becomes the same-clock difference elapsed_ms − decode_ms; precise tok/s scripts now render from a single snapshot as pure functions, with no per-session state file (both the resume-orphan and stale-rate failure modes are structurally eliminated). The previous fifteen fields stay byte-identical.
0.1.3性能与并发治理(2026-09-03)Performance & concurrency governance (2026-09-03)
主线:全仓审计驱动的 7 项性能/并发治理任务(V13-01…07)+ 两支先行 PR 收口(流式请求超时空闲语义 / write 流式渲染 O(n²))。断裂修复:长推理总超时误杀、write 大文件卡顿、扩展 UI 换装撕帧、statusline 双开串数据。零新 ABI、零新 ADR。 Highlights: seven audit-driven performance and concurrency tasks (V13-01…07) plus two lead-in PRs (idle-timeout streaming semantics / O(n²) write rendering fix). Notable fixes: long-inference total-timeout kills, write rendering stalls, extension UI swap tearing, and the dual-instance statusline data-mixup. Zero new ABI or ADR.
-
父会话权威定位:subagents 用
ctx.sessionFile权威值替代目录启发式(双开同 cwd / fork 自污染不再误锁),兜底加 mtime 下界与 stem 形状过滤(关闭 TE-D16)。 Authoritative parent session: subagents now preferctx.sessionFileover the directory heuristic (fixes dual-instance same-cwd / fork self-pollution); the fallback gains an mtime floor and a stem-shape filter (closes TE-D16). - 子进程事件落盘与帧节流:events/transcript 改每 child 单持久句柄 + 50MiB 上限;status.json 100ms 写入门控;update 帧签名门控 + subagent_wait 轮询脏检查——50 个相同事件 toolUpdate 从 50 帧压到 3 帧。 Child event persistence & frame throttling: per-child persistent JSONL handles with a 50MiB ceiling; 100ms status-write coalescing; signature-gated streaming frames and a wait-poll dirty check — 50 identical events now push 3 toolUpdate frames instead of 50.
- smart-fetch 进度节流:下载进度 100ms/64KiB 双阈值门控 + batch 快照 1% 签名短路;终态帧与帧形状零变化(TE08 对拍口径缩减中间帧)。 smart-fetch progress throttling: 100ms/64KiB dual-threshold gating for body progress plus a 1%-granularity batch-snapshot dirty check; terminal frames and shapes stay byte-exact.
-
TUI 换装原子化与热路径:widget/selector 换装单临界区化(不再闪缺失帧/裸 editor);流式 MessageUpdate 队列同帧折叠保尾 + 借用化消除深拷贝。
Atomic UI swaps & streaming hot path: single-critical-section widget/selector swaps (no more missing/bare frames); same-frame MessageUpdate folding plus borrow-based
update_content. -
扩展升级漏掉未跟踪插件:
rpi update --extensions只认 settings 的 packages 条目,而加载器加载安装目录下全部插件——早期版本安装/手工复制的未跟踪插件被静默跳过,多插件场景即“只升级一个”;update 现与加载器发现对齐(identity 去重并入、不回写 settings),rpi update <name>可命中,rpi list标注 (untracked);registry 批量单个失败不再阻断其余,未收录(404)的未跟踪安装降级为跳过提示。 update --extensions missed untracked installs: update/list only iterated the settingspackagesentries while the loader loads every manifest directory under the install roots — untracked installs (legacy versions / hand-copied) were silently skipped, so a multi-extension setup updated just one. update now matches the loader's discovery (identity-deduped, never writes settings),rpi update <name>can target them, andrpi listmarks them(untracked); a failing registry source no longer blocks the rest of the batch, and an untracked install absent from the registry (404) downgrades to a skip note. - edit 误报 Could not find edits[N] 但编辑实际成功:预览竞态(UI 排空滞后于 agent 写盘时,预览对已编辑文件找 oldText 必失败)叠加移植回归——上游 renderResult 回填后就地重建 call 组件,rpi 的 update_display 先建 call 后回填,同帧太迟且此后无重建,红色错误永久残留;修复为 result 组件先构建(回填先落地)、call 后构建,add 顺序不变,竞态伤害降为与上游一致的“一闪而过”(竞态本身上游固有不修)。 edit falsely reported "Could not edits[N]" while the edit landed: a preview race (the UI drains slower than the agent writes, so the preview looks for oldText in the already-edited file) stacked with a port regression — upstream rebuilds the call component in place after backfilling the result diff, while rpi's update_display built the call component before the backfill could land, freezing the error on screen forever. The fix builds the result component first (backfill lands) then the call component, adding order unchanged; the race now self-corrects within one frame, matching upstream (the race itself is inherent upstream and stays).
- /resume 后「🔌 MCP」状态行消失(且 MCP 扩展整体缺失):会话替换(/resume /new /fork /clone /import)重建扩展宿主并按同一路径重载插件 cdylib——dlopen 按路径记忆化,插件进程级静态跨宿主存活,mcp-adapter 第二次 install 撞上 OnceLock 报 "plugin already initialized":新会话里 mcp 工具、flag、事件与状态行全部静默缺失(状态行在旧宿主 session_shutdown 已清空且无人重推)。修复:宿主通道(fn 指针+cookie)改 RwLock 可重绑——rebind 保留进程级 runtime/dispatcher,在新宿主重注册 flag/事件、重置 direct 工具面、按新会话 cwd 重发现配置、重推状态行并重臂 bridge-retry(新宿主 UI 桥后接,直推会被 null bridge 丢弃);所有调用点调用时读当前通道,旧宿主 rebind 后零推送。 "🔌 MCP" footer vanished after /resume (and the whole MCP extension went missing): session replacement rebuilds the extension host and re-loads the same plugin cdylib — dlopen memoizes per path, so plugin statics survive across hosts, and mcp-adapter's second install hit the OnceLock with "plugin already initialized": the mcp tool, flag, event handlers and the footer entry all silently vanished from the new session (the footer was already cleared by the outgoing host's session_shutdown with nothing left to re-push it). The host channel (fn pointer + cookie) is now rebindable: the rebind keeps the process-lifetime runtime and dispatcher, re-registers flags/events on the new host, resets the direct-tool surface, re-discovers config from the new session cwd, re-pushes the footer and re-arms the bridge retry (the new host's UI bridge attaches only after switch_session returns); every call site reads the current channel, so the retired host receives nothing afterwards.
- statusline / smart-fetch 同族修复:statusline 二次 install 早退——新宿主零事件订阅(footer 冻结)、刷新循环持旧通道且 poll 定时器烧悬垂 cookie、旧循环已在 session_shutdown 退出且无人重启;smart-fetch 工具虽重注册但宿主通道冻结在首个宿主——每次 web_fetch 的 ctx.cwd/settings 解析与流式 toolUpdate 推送走旧 cookie。两者随 mcp-adapter 一并改用可重绑通道(事件订阅无条件化 + 重启刷新循环 / STATE.set 失败即 rebind),各补双宿主回归测试(已验证还原修复后变红)。 statusline / smart-fetch same-family fixes: statusline's second install returned early — zero event subscriptions on the new host (the footer froze), the refresh loop kept the retired channel with its unconditional poll timer burning a dangling cookie, and the loop had already exited on session_shutdown with nothing to restart it; smart-fetch re-registered its tools but froze the host channel on the first host, so every web_fetch ctx.cwd/settings lookup and streaming toolUpdate push went through the old cookie. Both now follow the same rebindable-channel discipline (unconditional event subscriptions plus a loop restart / rebind on the second install), each with a two-host regression test verified red against the pre-fix code.
-
低档杂项:mcp-adapter 秘钥解析改阻塞池、无 UI 期免推 status bar、
getAllTools惰性查询;statusline 变化 tick 复用 ctx 取数;TUI 每帧尺寸读取 4→1 次 ioctl。 Misc cleanup: blocking-pool secret resolution, no wasted status-bar pushes without a UI, lazygetAllTools, ctx-fetch reuse on statusline change ticks, and 4→1 terminal size reads per TUI frame.
0.1.2statusline 插件与修复簇(2026-08-19)statusline plugin & fix wave (2026-08-19)
主线:第四个第一方插件 rpi-ext-statusline 落地、一批交互与模型运行时缺陷修复、/changelog 接入真实更新日志、subagents skill 文档按结构化入口本地化(ADR-0021)。
Highlights: the fourth official plugin rpi-ext-statusline, a wave of interactive and model-runtime fixes, a real /changelog, and the subagents skill docs localized to the structured entry points (ADR-0021).
第一方插件(新)Official plugin (new)
- rpi-ext-statusline:CC 兼容脚本式自定义 statusline(L0 原生插件)。
settings.json写statusLine键即启用(命令 + padding/裁剪参数),两档 placement;脚本按 CC statusline JSON 协议 stdin/stdout 驱动,零新增 ABI。含实机追补:切换模型/思考档位/分支即时刷新、新会话 transcript latch 竞态修复、数据指纹轮询自愈。rpi-ext-statusline: a Claude-Code-compatible script-driven statusline (native L0 plugin). Adding astatusLinekey tosettings.jsonenables it (command plus padding/trim options) with two placements; the script speaks the CC statusline JSON protocol over stdin/stdout with zero new ABI. Hardened in the field: instant refresh on model / thinking-level / branch switches, a transcript latch race fix for new sessions, and data-fingerprint polling self-healing.
修复Fixes
/new与/resume切换 session 后 extension host 丢失 UI bridge——mcp 状态栏消失、MCP 工具审批被静默拒绝(#1)。Extension host lost the UI bridge after/new//resumesession switches — the mcp status line disappeared and MCP tool approvals were silently rejected (#1).models.json配置 apiKey 后仍强制要求auth.json——字面 key 被误当环境变量名,改按上游 config-value DSL 解析(#3)。A literalapiKeyinmodels.jsonstill requiredauth.json— literal keys were misread as environment-variable names; now parsed with the upstream config-value DSL (#3)./changelog恒显示 "No changelog entries found."——changelog 资产从未落地;现CHANGELOG.md嵌入二进制 +parseChangelog移植 + onboarding 显示半链(#5)。/changelogalways showed "No changelog entries found." — the changelog asset never shipped.CHANGELOG.mdis now embedded into the binary, with theparseChangelogport and the onboarding display half-chain (#5).model_select事件从未发出——切换后捕获 previous 恒等短路。Themodel_selectevent was never emitted — the post-switch capture short-circuited on an identicalprevious.- onboarding 启动 header 品牌残留:上游 "Pi" 逐字文案改 rpi 实际能力表述,去掉 rpi 未带的 docs 查询承诺、指向官网(#7)。Onboarding header branding leftovers: verbatim upstream "Pi" copy rewritten to Rpi's actual capabilities, dropping the docs-query promise Rpi does not ship and pointing to the website (#7).
内部Internal
- subagents 编排 skill 文档与 prompt 模板按结构化入口本地化(ADR-0021):去除
workflowScript教学与未实现机制段落,安装侧.rpi-layout-versionmarker 自动升级旧版;工具描述补齐tasks/steps组合入口(ADR-0018 决策 5)。Subagents orchestration skill docs and prompt templates localized to the structured entry points (ADR-0021):workflowScriptteaching and unimplemented-mechanism sections removed, an install-side.rpi-layout-versionmarker upgrades older copies automatically; tool descriptions now document thetasks/stepscomposition entries (ADR-0018 decision 5). - registry / package_manager / package_command rustfmt 清账(纯格式化)。rustfmt cleanup across registry / package_manager / package_command (formatting only).
0.1.1插件生态与上游对齐(2026-08-16)Plugin ecosystem & upstream alignment (2026-08-16)
三大主线:对齐上游 Pi v0.84.1(T17–T32,parity freeze)、三个常用 Pi 插件的 Rust 移植落地(TE01–TE11)、扩展分发与安装链路打通。 Three main lines: alignment with upstream Pi v0.84.1 (T17–T32, parity freeze), the Rust ports of three popular Pi plugins (TE01–TE11), and the extension distribution & install pipeline.
扩展分发与安装(新)Extension distribution & install (new)
rpi install <name>[@<range>]:registry 渠道——裸名解析 revpi.dev 索引,semver 选版(精确 /^/~,缺省最新),安装前预检rpiAbi与minHostVersion;下载 GitHub 直连优先、官网边缘代理回退,sha256 以官网索引记录校验,不匹配立即中止不换源。rpi install <name>[@<range>]: the registry channel — a bare name resolves against the revpi.dev index, semver selection (exact /^/~, default latest), withrpiAbiandminHostVersionpreflight; downloads prefer GitHub direct with the site edge proxy as fallback, sha256 verified against the site index and any mismatch aborts without switching sources.rpi install github:<owner>/<repo>[@<tag>]:直指 GitHub Release artifact(未收录/私有插件),校验退化为 Release 自带 sidecar 并明示完整性级别差异。rpi install github:<owner>/<repo>[@<tag>]: points straight at a GitHub Release artifact (uncatalogued/private plugins); verification degrades to the release's own sidecar, with the integrity-level difference stated up front..rpix打包格式:gzip tar,含rpi-extension.json+ 载体 +SHA256SUMS;逐文件校验、原子替换到~/.rpi/agent/extensions/<name>/(或-l项目级)。The.rpixformat: a gzip tar containingrpi-extension.json, the carrier, andSHA256SUMS; per-file verification and an atomic replace into~/.rpi/agent/extensions/<name>/(or project-level with-l).- 信任提示:install/update 展示 author 与 capabilities 全表;L0 原生插件(无沙箱、全 OS 权限)显著警告,需确认或
--yes。Trust prompts: install/update show the author and the full capabilities table; native L0 plugins (no sandbox, full OS access) carry a prominent warning and need confirmation or--yes. remove/list/update全链路支持;RPI_REGISTRY_URL可注入镜像/测试地址,off整体禁用。remove/list/updateacross the whole chain;RPI_REGISTRY_URLcan inject a mirror/test endpoint andoffdisables everything.- 第一方插件随主版本发布:CI 将官方插件各自打成
.rpix(Windows x64 / macOS arm64 / Linux x64 与 arm64 glibc;musl 主机无法加载原生扩展,不出插件包),与本体同一 Release 发布、版本锁步,官网索引自动收录并标「官方插件」。Official plugins ship with each release: CI packs every official plugin as a.rpix(Windows x64 / macOS arm64 / Linux x64 & arm64 glibc; musl hosts cannot load native extensions, so no plugin packages there), published in the same GitHub Release as the binary, version-locked, and auto-listed in the site index as official. - revpi.dev 新增
/api/extensions/索引 API、/extensions/download/下载代理(白名单 + 边缘回源)与插件目录页。revpi.dev gained the/api/extensions/index API, the/extensions/download/proxy (allowlist + edge fetch), and the plugin catalog page.
第一方插件移植(TE01–TE11)Official plugin ports (TE01–TE11)
- rpi-ext-mcp-adapter(pi-mcp-adapter v2.24.0):MCP 客户端——配置三源合并、stdio/SSE/HTTP 三传输、OAuth 全流程、代理与 direct 工具、懒连接与会话恢复、状态行与结果折叠渲染;parity 对拍证据链。rpi-ext-mcp-adapter (pi-mcp-adapter v2.24.0): the MCP client — three-source config merge, stdio/SSE/HTTP transports, the full OAuth flow, proxy and direct tools, lazy connect with session resume, status line and collapsible result rendering; parity evidence chain included.
- rpi-ext-subagents(pi-subagents v0.48.0):
subagent工具——六内置 agents 与四级发现、fresh/fork、组合编排与后台异步、worktree 隔离、acceptance gates、supervisor 通道、流式进度与 TUI 可视化、/run/subagents/subagents-doctor;对拍全 MATCH。rpi-ext-subagents (pi-subagents v0.48.0): thesubagenttool — six builtin agents with four-level discovery, fresh/fork contexts, composition and background async, worktree isolation, acceptance gates, the supervisor channel, streaming progress with TUI visibility, and/run/subagents/subagents-doctor; full MATCH on parity runs. - rpi-ext-smart-fetch(agent-smart-fetch v0.3.17):
web_fetch全管线——batch 并发、meta refresh / alternate 回退、流式下载、进度事件流与组件树渲染。rpi-ext-smart-fetch (agent-smart-fetch v0.3.17): the fullweb_fetchpipeline — batch concurrency, meta-refresh / alternate fallbacks, streaming downloads, progress event streams, and component-tree rendering. - 扩展 ABI 补齐(ADR-0015):
unregisterTool/toolUpdate双载体,完全 additive,RPI_ABI_VERSION保持 1。Extension ABI completion (ADR-0015):unregisterTool/toolUpdateon both carriers, fully additive,RPI_ABI_VERSIONstays 1.
上游对齐 Pi v0.84.1(T17–T32)Upstream alignment with Pi v0.84.1 (T17–T32)
- rpi-ai:v0.84 消息类型与请求选项、流终止语义、provider 修复与 compat 扩展、models refresh 事务化与 OAuth、auth 命令族、新 provider 与模型目录。rpi-ai: v0.84 message types and request options, stream-termination semantics, provider fixes and compat extensions, transactional models refresh with OAuth, the auth command family, and new providers with model catalogs.
- 主路径:JSON/RPC delta 线格式与 stdout 背压、会话行为簇、资源加载与包管理。Main paths: JSON/RPC delta wire format with stdout backpressure, session behavior fixes, resource loading, and package management.
- rpi-agent:agent 循环微行为与 compaction 契约。rpi-agent: agent-loop micro-behaviors and the compaction contract.
- rpi-tui:渲染器 trait 化重构、行为修正簇(即时渲染 / grapheme / OSC8 / 键位 / Windows)、LaTeX 与 Mermaid、布局引擎、全屏渲染(alt screen / mouse / kitty)、UI 模式接线与 parity freeze。rpi-tui: the renderer trait refactor, a behavior-fix cluster (instant rendering / graphemes / OSC8 / keybindings / Windows), LaTeX and Mermaid, the layout engine, fullscreen rendering (alt screen / mouse / kitty), UI-mode wiring, and the parity freeze.
- 扩展 API 面同步上游 12 项(ADR-0013)。12 extension-API items synced with upstream (ADR-0013).
行为变更Behavior changes
- 移除 npm/pnpm/yarn/bun 自更新分支(ADR-0011 修订):二进制为唯一发行渠道,
update --self恒走真自更新;npm:扩展包安装不受影响。The npm/pnpm/yarn/bun self-update branches are gone (ADR-0011 revision): the binary is the only distribution channel andupdate --selfalways performs a true self-update;npm:extension-package installs are unaffected. - CI 构建改为仅 tag 触发,分支推送不再自动构建。CI builds now trigger on tags only; branch pushes no longer build.
修复Fixes
- 主屏渲染器超宽行 panic 杀死运行中会话、满宽行宽度分歧换行漂移花屏——超宽行改截断继续渲染(诊断快照照写
rpi-crash.log并注明渲染已继续);emoji 字体回退按 2 列渲染的风险字符(✓ 类)计入悲观宽度,满宽风险行保守截断消除行漂移(ADR-0020 / D-086)。The main-screen renderer panicked on overwide lines, killing live sessions, and full-width lines drifted into garbled wraps — overwide lines are now truncated with rendering continuing (diagnostic snapshots still go torpi-crash.logwith a note); fallback-glyph risk characters (✓ and friends) rendered two cells wide are counted pessimistically, and risky full-width lines are conservatively truncated to kill the drift (ADR-0020 / D-086). - $$ / \[ 公式块内孤行 =/- 被解析成 setext 标题,公式在进入数学渲染前被切断损毁——修复为 parse 前 shadow source 等长改写(块内孤行运算符替换为等长
.字节喂解析器,渲染与 LaTeX 输入仍用原始源),修复后与上游逐字节对拍一致;关闭 renderLatex 开关时保持原行为(D-078 补记)。Lone=/-lines inside$$/\[blocks parsed as setext headings, corrupting formulas before math rendering — fixed by an equal-length shadow-source rewrite before parsing (the lone operator is replaced with.bytes for the parser while rendering and LaTeX input keep the original source); byte-for-byte parity with upstream after the fix, and the original behavior is kept when renderLatex is off (D-078 follow-up). - LaTeX 遇符号表不认识的命令时整块公式回退原文(单符号一票否决),
\blacksquare(QED 证明结束符,LLM 数学输出高频)即触发——按 KaTeX 清单盘点 270 个常用宏实测 78 项缺口后全量补全:62 条符号映射 + 带参宏与subarray环境的终端降级渲染;映射一律跟随 KaTeX,与上游 ground truth 对拍不破(T29 后续,D-087)。A single unknown LaTeX command made the whole formula fall back to raw text;\blacksquare(the QED marker, frequent in LLM math output) was enough to trigger it — audited 270 common macros against the KaTeX list, found 78 gaps, and filled them all: 62 symbol mappings plus terminal-degraded rendering for parameterized macros and thesubarrayenvironment; mappings follow KaTeX and parity against upstream ground truth holds (T29 follow-up, D-087). - 词级 diff 的 trim 边界以字节索引 +1 推进,token 末字符为多字节 UTF-8(中文/全角)时切片落在字符中间,edit 渲染含此类内容的 diff 即 panic 杀死渲染线程——改按末字符长度推进,补多字节回归用例,与 jsdiff 8.0.4 参考向量对拍保持一致。Word-diff trim advanced its boundary by one byte, so a multi-byte UTF-8 final character (CJK/full-width) put the slice mid-character and rendering an edited diff with such content panicked the render thread — now advances by the final character's length, with multibyte regression cases added and parity against jsdiff 8.0.4 reference vectors preserved.
- 多 native 插件共载失败(abi_stable 按类型 memoize 根因,改 per-path 加载)。Multiple native plugins failed to co-load (abi_stable memoizing by type at the root; now loaded per-path).
- SSE 行上限对齐 10MiB(8KiB 上限误吞大行响应)。The SSE line cap aligned to 10 MiB (the 8 KiB cap was dropping large-line responses).
- 全屏热切换输入失效、/settings 两处卡死。Input loss after fullscreen hot-switching and two /settings freezes.
- file_processor 测试命名竞态;bash 结果截断警告行按终端宽度换行。A file_processor test-name race; the bash result-truncation warning now wraps to terminal width.
官网(revpi.dev)Website (revpi.dev)
- Release 镜像改 Function 边缘代理回源(零存储),404/502
no-store;安装脚本托管站点根。Release mirrors moved to a Function edge proxy with origin fetch (zero storage), 404/502 servedno-store; installer scripts hosted at the site root. - 首页三平台安装面板;docs 快速开始重构;移动端导航与布局修复;favicon。Three-platform install panel on the landing page; quickstart restructured; mobile nav and layout fixes; favicon.
- docs 新增配置参考页:全部设置键、默认值与作用域,含请求超时与重试、隐私开关、环境变量。New configuration reference in docs: every settings key with defaults and scope, including request timeouts and retries, privacy switches, and environment variables.
0.1.0首个版本(2026-08-15)Initial release (2026-08-15)
- 终端 AI 编程助手的完整功能:多轮对话、内置工具、会话管理。The complete terminal AI coding assistant: multi-turn chat, built-in tools, session management.
- 交互 / 一次性问答 / RPC 三种运行模式。Three run modes: interactive, one-shot (
--print) and RPC. - 内置 38 家模型服务商。38 built-in model providers.
- 插件系统:WebAssembly 与原生动态库,支持热重载。Plugin system: WebAssembly and native dynamic libraries, with hot reload.
- 会话导出 HTML 与链接分享。Session export to HTML and link sharing.