AcpAgent Client 1.2.0
v1.1.0 之后 main 上落地的一项功能与两项修订。仍是源码 release:打包轮(R8:Windows zip / 安装器、macOS 构建、干净机验收)还没做,需要自行构建,步骤见下。
新增
深色模式(画板 07)
侧栏标题条右端多了一个 ghost 图标按钮(浅色出月亮、深色出太阳),点一下整个界面换主题,选择持久化在设置的 appearance 段里,下次启动仍是它。
实现上是在 token 层换值,不在 widget 层分支:lib/theme/tokens.dart 的颜色拆成 Theming.lightColors / Theming.darkColors 两套(29 项),中性 / 强调 / 语义 / 表面 / 边框 / 阴影 / 蒙层 / 焦点环等颜色项从 const 改成 getter,widget 里的写法一个字没变。间距 / 圆角 / 字阶 / 控件高度 / 动效时长一份不动——画板 07 只换颜色。
同一类「一次求值就冻住」的缓存一并堵上:代码高亮主题、JSON 高亮主题、终端 token 主题都从常量改成 getter,三个 CustomPainter 的 shouldRepaint 带上字体 / 主题代数(换主题只改颜色,不带它不会重绘)。单测里那条「不得再出现会冻住取值的样式缓存」的源码扫描扩到了 Color / BoxShadow / 色表。
两处顺带对回画板:弹层顶边 1px 提亮改成画一条顶线(Flutter 的 BoxShadow 没有 inset),浅色下它全透明,两套主题同一条代码路径;终端 ANSI 的青从语义 info 改到 accent.text——改之前蓝与青同色,终端里两种前景分不开,浅色主题下的终端配色因此也变了。
变更
UI 文案与前端 Dart 符号从 Thread 收敛为 Session(中文「会话」):默认会话标题 New <agent> Thread → New <agent> Session、+ 弹层的 Threads → Sessions,ThreadHeader / NewThreadEmpty / ThreadMenuPopover 等类与文件名跟着改,+ 加入的转录 URI acp-thread: → acp-session:。起因是协议层与状态层本就是 session/*、中文文案本就是「会话」,只有临摹 Zed 原型留下的几处英文还写着 Thread。零布局、零 token 值改动。Zed 上游的 ThreadEvent / ThreadStore / threads.db / acp_thread.rs 不在收敛范围。
修复
字体扫描结果不通知 UI:把 MiSans / HarmonyOS Sans 的字体文件放进数据目录的 fonts/ 再启动,设置页仍显示「本机未找到」。扫描本身是好的,问题是启动时的 _applyLocally 只在「字体选择变了」时才通知;没存过外观设置时四个轴都是默认,于是扫描结果拿到了却没人知道。扫描结果是 UI 要用的状态,与选择有没有变无关,改为无条件通知一次。
其它
- 三处版本号(
pubspec.yaml、rust/Cargo.toml的 workspace、sidecar/zed-agent-acp/Cargo.toml)一并抬到 1.2.0:exe 元数据、smoke 报告与调试面板的coreVersion、registry 下载的 User-Agent、sidecar--version与它在 ACPinitialize里报给客户端的 agent 版本,都跟着变。
怎么构建
前置:Rust stable、Flutter stable、flutter_rust_bridge_codegen、VS 2022「使用 C++ 的桌面开发」、Node >= 22。详见 CLAUDE.md「本地开发」。
powershell -File scripts/fetch-upstream.ps1 # 按 pins/upstream.json 填充 vendor/upstream/
powershell -File scripts/validate.ps1 # 编译 + 测试 + 契约检查
powershell -File scripts/build.ps1 # flutter build windows --release
powershell -File scripts/build-sidecar.ps1 # Zed Agent sidecar(冷编译约 50 分钟,可选)sidecar 缺了不报错,只是 agent 列表里没有 Zed Agent。Windows 首发,macOS / Linux 在 R8。
许可证
GPL-3.0-or-later(见 LICENSE)。rust/ 与 sidecar/ 里复制改写或转写自 Zed 的文件各自在文件头标注了上游路径与 commit,汇总在 NOTICE——同一份文件也列出 ACP 规范 / rust-sdk / registry(Apache-2.0)、随包字体(OFL-1.1)与图标的来源,以及商标声明。开源、不商用。上游钉版本在 pins/upstream.json。
已知限制(1.1.0 的几条仍然成立):R8 打包与发布未开始;session/load 重放不带回轮边界;sidecar 未带 languages crate(构建机缺 VS Spectre 缓解库组件)。本版新增两条:深色模式属实现先行,画板 07 没画那个切换按钮、画板 70 的「外观」还没有主题这一行、深色页面画板未出,都已记 rounds/BACKLOG.md 的「设计稿补注记」;终端搜索只有一个命中前景色,表达不出画板要的「当前命中另一种字色」。
Full Changelog: v1.1.0...v1.2.0