Skip to content

v0.9.9

Choose a tag to compare

@ayuayue ayuayue released this 31 Oct 08:47
· 373 commits to main since this release

这一版把 ACP 从「能连上」推进到「日常可用」:配置按工具记忆并在新会话重放、回合中排队与独立停止、用量与 diff 对齐 pi/DSH,Web 与 MCP 也能驱动 ACP;外观重构为「样式 × 配色」两维并移植 pi TUI 终端皮肤,会话分组升级为宿主核心能力,大列表虚拟化与长回复展开的卡死一并收口。

🚀 新功能

  • 外观拆成「样式 × 配色」两维,终端皮肤成套移植 pi TUI — 形状(classic / terminal)与配色(内置色板 + 自定义主题包)可自由组合;终端样式全界面等宽、方角、⏺/❯ 消息标记,代码高亮按皮肤切 pi TUI 色板;自定义主题包新增 Markdown 语义 token 与字体组。旧 themeSkin 自动映射到新模型,升级后观感不变。
  • 会话分组成为宿主核心能力(插件 v3) — 分组树(分组 → 目录 → 会话)接入侧栏活动 / 聊天 / 项目分段顶部,数据落在 userData/session-groups.json;内置 session-groups 插件升 v3 改走宿主 API,支持工作区级分组与分页,旧 v2 私有存储启动时一次性迁移。
  • 收藏整个会话 — 收藏页新增「会话」筛选,侧栏与会话 Tab 右键即可收藏;点击跳回原会话,原会话删除或归档后显示失效,不复制正文、不改置顶排序。
  • 草稿本支持项目 / 全局作用域 — 项目作用域按项目分桶,只合并本项目与全局草稿;选择器改为可搜索并按「本项目 / 全局」分组,旧草稿零迁移。
  • ACP 按工具记住思考 / 模式 / 权限并自动重放 — 每个 ACP 工具单独记忆上次选择,新建会话握手后自动下发,不再每次重选。
  • ACP 工具级「新会话默认 Bypass 权限」与 Qoder CLI 预设 — 新会话握手后按 agent 自己的 mode 枚举挑 bypass 档(Claude 的 bypassPermissions / Qoder 的 yolo 等),下发失败不阻断开会话;预设新增 Qoder 全球版与 CN 版。
  • ACP 代理独立开关 — ACP 代理与 pi 分开配置,spawn 时注入 HTTP(S)/ALL_PROXY、NO_PROXY 与 NODE_USE_ENV_PROXY,关闭则继承系统环境;代理页改为 Pi / ACP / 桌面三段式。
  • 通过 MCP 新建并驱动 ACP 会话 — 新增独立写开关 allowAcpInvoke(默认关),开启后暴露 acp_tools_list / sessions_create / sessions_send / sessions_wait / sessions_messages / sessions_stop;只能引用设置里已登记的 acpToolId,不接受命令、参数或环境变量。
  • Web 端支持 ACP 会话 — ACP 实时流接入 Web,后端选择器新增「ACP → 具体 CLI」分组,可新建 ACP 会话;Web 同时支持 Pi 会话安全等级切换。
  • ACP 用量面板补齐 token / 时延 / TPS — 解析 session/prompt 的 usage 并跨回合累计,给出 TTFT、总耗时、TPS 与缓存命中率;agent 未上报的字段不显示假 0。
  • ACP 会话补齐待办与子代理 — ACP 只在 agent 主动发 plan 帧时才有待办、子代理根本没有对应字段,而 CodeBuddy / Qoder / Claude / Codex 都把两者当普通工具调用上报,改前两条始终为空;现在按工具名与参数形状把工具卡推导成待办与子代理(plan 帧仍是规范真源),归档的 ACP 会话同样能重建。

✨ 改进

  • ACP 模型下拉可搜索 — 模型枚举改为带搜索的浮层,匹配显示名与模型 id;打开自动聚焦、当前模型滚入视野,几十个模型不再只能一路滚;悬停可看完整模型名,当前项始终高亮。
  • ACP 回合中发送排队,忙碌时补独立停止钮 — 回合进行中再发送进入队列、回合结束自动排空,不再需要先清空输入框才能看到停止入口;初始化握手期间显示加载态并禁用发送。
  • ACP 工具表改为折叠行 — 默认只显示名称 / 命令 / 环境变量条数摘要,点名称行展开编辑;新增行与预设行自动展开,保存失败自动展开出错行;保存统一走设置页头部。
  • 轮尾操作栏按「按钮 | 耗时 | 模型」三分区 — 模型名与操作按钮同字号并限 28 字符,长模型名不再挤乱整行。
  • 输入框补全支持 Tab 采纳(#416) — 命令 / 技能、@ 文件、& 会话共用同一分支,Tab 与 Enter 等效;修饰键组合不拦,底部提示同步改为「Enter/Tab 确认」。
  • 长列表渲染补齐虚拟化(#406) — 通用虚拟栈接入 11 处长列表,模型表改为渐进渲染,上百行模型不再全量平铺卡顿。
  • live 流只给可见会话下发 — 主进程按引用计数只推送当前与分屏会话的正文 / 思考流,状态补丁按签名去重并保留 5 秒心跳,几百路并发流式会话不再打满渲染进程。
  • 设置页更新日志默认只渲染最新版本 — 400KB 的整本 CHANGELOG 不再一次进渲染管线,「查看全部 N 个版本」才渲染全文,展开后按块渐进挂载。
  • 多实例本地服务 — 状态面板列出每个存活实例(pid 与各自的本地 UI 地址),service.openUi 可按 pid 打开指定实例;插件只能指向实例,不能注入地址。
  • 桌宠与桌面通知接入 ACP / DSH — 回合真正成功收口时触发,用户停止 / 失败回合不算;Ask 通知开关关闭时不占用每轮去重位。
  • 打赏入口 — 接入「请作者喝咖啡」。
  • 读屏与键盘可达性补齐 — 运行态 / 等待态指示、MCP 连接状态点、快捷键提示对读屏与键盘可见。
  • 思考强度滑条支持滚轮调档 — 鼠标停在滑条或刻度行上直接滚轮即可调档,一格一档、空闲 150ms 重置;Ctrl/Cmd + 滚轮仍交给系统缩放。
  • 会话 Tab 拖拽按显示顺序落位 (#453) — Tab 栏缝隙、末尾空白与「+」按钮都能作为落点,落点按屏幕位置解析,跨项目插队这种顺序表达不了的情况不再出现「数组改了画面没动」。
  • 输入框合成期不再抖动、丢草稿 (#455) — 编辑器扩展与初始内容保持稳定引用,不再每次渲染重设选项;合成被失焦或合成标志丢失打断后草稿恢复同步,底栏空数据按同高占位不再突增。

🐛 修复

  • 外部手改 settings.json 不再被写盘覆盖 (#433) — 运行期间的手改与内部 update 做键级合并,不再整份回写旧快照。
  • Windows 停止 pi 先优雅退出,启动时回收孤儿进程 (#450) — 停止不再直接杀进程树,先让 pi 自行退出;上次异常退出留下的孤儿进程在下次启动时清理。
  • 长回复展开爆栈与秒级冻结 — 205KB 级回复把预览换成全文时,打字机入队不再一次性展开十几万 grapheme(RangeError: Maximum call stack size exceeded);展开全文按约 32K 顶层块渐进挂载,已挂块零重解析。
  • ACP 回合状态机收口 — 回合结束后不再覆盖 idle(修复预测采纳后的误排队)、停止时收口残留 running(修复「结论已出却停不下来」)、握手期间可正常发送、切换后端或工具立即作废进行中的激活、不再用 30 秒投递窗口误判「已提交但未确认」。
  • ACP 回合超时改为「无进展静默上限」 — 截止时间随 session/update 滚动,在途工具调用只刷新 stall 基准;默认上调为 15 分钟 / 180 秒,长时间持续输出的回合不再被墙钟掐断。
  • ACP 工具调用 diff 与 pi / DSH 归一 — {type:"diff"} 块转成标准 edit 工具消息,兼容 oldText/newText 与 oldValue/newValue;多文件补丁不再只剩第一个,轮末「本轮修改的文件」恢复完整,只上报路径的编辑(Qoder 等)也能进列表。
  • ACP 空白回合与配置拒绝可诊断 — 空白回合带出 CLI stderr、非标准通知与响应原文;配置切换被拒时提示原因与变通方案;启动参数已定档 bypass 时不再被记忆里的旧模式覆盖。
  • ACP 在 Windows 下找不到新装的 CLI,预设官网链接在应用内打开 — 检测与启动前刷新注册表 PATH 差集;预设官网链接强制走系统浏览器。
  • 微信 / 飞书忙时丢消息(#427) — 忙时改为排队;附件真正落盘并把绝对路径交给 Agent,单文件上限 50MB→200MB、暂存 20→50 个;微信语音有 ASR 转写时按正文处理;飞书卡片尊重 hideThinkingBlock(#425)。
  • Web 端 SSE / ETag 与跨域问题 — 兜底 tick 不再绕过版本键、/api/state 的 ETag 真正下发;workspace 路由补 CORS 响应头(#435);写会话后广播 catalog 刷新,删除会话不再留幽灵行(#436)。
  • AI 回复里的 ~/… 链接打不开 (#426) — 先做家目录展开再做文件识别。
  • 智谱老套餐只显示 MCP 月额度 — 5 小时窗口额度恢复展示。
  • 文件树 Git 着色用错路径 — 改按项目相对路径查表。
  • 子代理状态不实时、子会话读不全 — record 条件补拉、DSH 转录分页、子会话首屏 40 轮。
  • 侧栏标题行与 Tab 栏细节回归 — 两种导航模式统一 40px、折叠按钮右对齐、移除前进 / 后退箭头;简洁模式 Tab 栏给 Windows 窗口控件让位;Windows / Linux 品牌区靠左对齐。
  • 新建会话默认后端仍沿用上次选择,输入预测切 Tab 丢失 — 默认后端只取设置项(含 DSH 安装态钳制),冷启动不再预选 ACP;输入预测文案按会话保存。
  • 轮末耗时把排队时间算进去 — 按真实结束时间计算,实时秒表只留在状态条。
  • 瞬态重试口径与桌面端不一致 — 过载标 rate limit、空响应 400/413 降级 4xx;Cloudflare 530/52x/1033 纳入瞬态重试。
  • 分组插件未启用仍显示分组会话,停在定时任务页点分组没反应 — 入口与会话列表按启用态过滤,点分组先退出当前页面再导航。
  • macOS 暗色主题文字发虚,部分对比度与行高回归 — 不再强制灰阶抗锯齿;自定义主题目录路径与空态提示对比度、设置说明行高修复。
  • 侧边任务会话栏底部被裁 — 会话容器改为 flex 列,会话组只吃会话头以外的剩余高度;提问卡提交钮、折叠卡与输入框下方统计行不再被切掉。
  • 抓包类 MCP 工具不再被说成截屏 — 时间线词典不再把裸 capture 当成截图,只认 screenshot / screen_capture / capture_screen / cua_capture,其余含 capture 的工具回落原样工具名。
  • CodeBuddy 2.178.1 的配置项可用 (#451) — boolean 型配置渲染成开关 chip、写入带上 agent 声明的类型(否则回 -32602),单值 select 不再点不动;bypass 档按优先级匹配 fullAccess;写入被拒后回滚本地快照,chip 不再假显示已切换。
  • 多开模式下点系统通知不再多开一个窗口 — 多开不再等于无锁:锁降级为深链激活的路由目标,点通知先交给已运行实例,无人响应才开窗,持有者退出后其余窗口自动接回。

🙏 致谢

感谢 hetingyi 修掉 ACP 代办任务列表渲染(#429)、settings.json 外部手改被覆盖(#434)与本地服务多实例支持(#439);感谢 op15066212 把通用虚拟栈补齐到 11 处长列表(#432);感谢 sunCloud998 统一侧栏标题行高度(#441)并修掉 macOS 暗色主题文字发虚(#443)🎉

特别感谢 罪、橙子、微时 为软件开发提供的模型服务 🎉