Releases
v0.14.0
Compare
Sorry, something went wrong.
No results found
Bruce 0.14.0 发布说明
新功能 (Added)
额度策略请求 / 响应契约 (T14) :新增 schemas/policy-request-v1 / policy-response-v1,额度门禁与回填的入口只接收订阅服务列表与时间等纯数据,拒绝未知字段与任何凭据形态的字段,错误以诊断码返回。该契约先以 Bruce-collector policy 子命令提供给 macOS,T16 起改为 App 进程内调用,子命令在同一版本内退役。
macOS DMG 磁盘镜像安装包支持与 CI/CD 自动发布 (C114) :
DMG 打包工具脚本 (package-dmg.sh) :新增 scripts/package-dmg.sh,将 Universal 2 架构的 Bruce.app 与 /Applications 软链接封装为带卷名 Bruce 的标准 UDZO 压缩 DMG 磁盘镜像,便于用户首次下载后开箱即用、一键拖拽安装;
本地构建联动 :scripts/build-test-app.sh 与 scripts/build-release-app.sh 支持 --dmg 参数,可在组装完成 Bruce.app 与 Bruce.zip 后同步产出 dist/Bruce-<version>.dmg;
CI/CD 流水线附加资产与校验和 :.github/workflows/ci.yml 的 build-release-app 与 release 作业接入 --dmg 构建与镜像完整性校验,并将 Bruce-<version>.dmg 纳入 SHA256SUMS 和 Release 上传清单,与应用内更新依赖的 Bruce.zip 资产并存。
Windows 系统托盘动态配额环与 420px 亚克力微缩实时预览卡 (T12) :
托盘动态配额环与状态指示 :Rust 后端基于聚合快照与视图模型,实时提取最紧俏 Provider 剩余百分比与四色健康状态灯(翠绿/琥珀/科技红/离线灰),纯数学内存绘制 32×32 动态透明配额环图标,动态同步托盘原生 Tooltip(Bruce · 额度剩余 XX% · 运行正常 | 今日 $X.XX);
420px 亚克力微缩实时预览卡 :在任务栏托盘悬停时弹出无边框、卡片级圆角(12px)、半透明 Fluent 亚克力(Mica/Acrylic)微缩子窗口;展示 42px 环形仪表、滑动窗口重置倒计时、今日费用/Token 以及活跃 Agent 状态点阵;
优雅调度与互斥保护 :当主看板已打开时鼠标悬停托盘静默不唤起微缩卡,避免窗口重叠争抢;微缩卡失焦、移出鼠标 350ms 或按 ESC 平滑淡出自动隐藏;点击微缩卡内「展开完整看板」一键无缝唤起主面板;
设置中心开关联动 :设置中心「通用」面板新增「托盘实时预览」开关(状态居左、开关居右),支持自由开启/关闭悬停弹出,配置即时持久化。
修复 (Fixed)
测试版打包冒烟恢复可用 (C129) :C116 改写本机缓存格式后,打包脚本里的「旧缓存重建」冒烟仍按旧文件格式查找 Kimi 缓存条目,scripts/build-test-app.sh 与 CI 的测试版构建在组装完 App 后恒失败;冒烟改为按新格式定位条目并验证旧版本条目会被重新解析。采集端行为不变。
macOS 凭据存储说明更正 (C127) :订阅凭证保存在本机凭据文件(~/Library/Application Support/Bruce/credentials.json),但多处界面仍称「Keychain / 钥匙串」——写入或删除失败时提示「请在 Keychain 中手动检查」会让人去钥匙串里找不存在的条目。界面文案、错误提示与无障碍提示统一改为「本机凭据文件」,配置对话框说明与 Windows 逐字一致,设置页「钥匙串访问」改为「凭据存储」并如实说明旧版钥匙串凭证的自动迁移。
未配置订阅时不再显示「部分失败」(C124) :没有任何订阅凭证(或未同意云端授权)时,采集端此前仍输出两条「CC Switch 云端额度」/「Codex 账号额度」占位,使每一轮纯本机统计都被判为部分失败(Windows 状态灯恒为琥珀色);现不再输出占位。同时更正 Claude Code 行「当前经 CC Switch 路由」与桌面小组件「经 CC Switch 查询 / 按 CC Switch 定价表估算 / 每 30 分钟刷新」等过时说明。
macOS 每轮刷新的主线程卡顿降低约 90% (C121) :保存与读取用量快照时不再把同一份数据反复整体解析与校验(此前每轮约 0.3 秒主线程耗时,界面会短暂卡顿),本机真实快照实测保存 192 ms → 17 ms、读取 71 ms → 0.2 ms;不再额外写一份与上一份快照相同的备份文件。
macOS 新启用的订阅立即查询额度 (C120) :macOS 只检查上一轮已有数据的订阅,重新开启的订阅要等其他订阅到期才会首次查询(最长一个刷新间隔);现与 Windows 一致按当前启用的订阅逐个判断,新启用的立即查询,已停用订阅的旧数据不再触发查询,没有启用任何订阅时不再发起额度请求。两端的判定改由同一份共享用例校验。
移除恒为占位的 Orca 行 (C119) :Orca 内置 Codex 的会话一直计入 Codex 行,Orca 行因此恒显示「未发现会话记录」;现删除该行。Windows 设置页会话探针同步删除 Orca 行,并在 Codex 行注明含 Orca 内置 Codex。
订阅限流与 provider 归属改读显式字段 (C118) :collector 为每条订阅服务显式下发 provider 与 failureKind(此前仅 Codex 带 failureKind),mac 与 Windows 的 429 冷却记账与 provider 归属改读这两个字段,不再从 service id 前缀推断 provider,也不再在提示文案里查找「429 / 限流」;旧版本落盘的 artifact 缺少字段时回退原推断,升级后冷却状态不丢失。
Codex 缓存按文件复用 (C117) :Codex 由「整树一份聚合快照」改为按文件缓存与窗口无关的用量观测,正在进行的会话追加时只重解析该文件,跨日与改窗口长度直接命中,热刷新也不再为全部 rollout 读取头尾指纹(冻结日志实测追加 / 次日首轮 0.04 s → 0.01 s,结果逐字节一致)。SQLite 源经实测评估保留现有缓存方式(全量读取约 60 ms/天,改造会拖慢每轮热刷新)。
本机缓存跨日不再失效 (C116) :JSONL 源(Claude Code / CodeBuddy / Grok / Pi / Kimi Work / Kimi Code CLI)的缓存条目改为只保存与采集窗口无关的用量观测,身份不再包含「今日」与窗口天数,每天首轮刷新与改动窗口长度都直接命中缓存(冻结日志实测次日首轮 0.18 s → 0.02 s,结果逐字节一致)。Kimi Code CLI 并入共享 JSONL 缓存引擎,删除约 1,800 行旧版专用缓存引擎与流式聚合代码,旧引擎遗留的缓存文件自动清理。
Windows 托盘配额环与悬停预览卡读取真实面板字段 (C115) :T12 交付的托盘速览与 420px 预览卡按面板中不存在的字段(subscriptions / totalCostText / agents / resetsIn / status)取数,托盘恒显示「额度剩余 100% · 今日 $0.00」、预览卡恒为 100% / 0 活跃。改为读取真实字段(跳过失败服务,与 mac 菜单栏配额环同口径),无配额窗口时只画底轨并在提示中省略,预览卡改读后端 panel.preview(与托盘同一份数据、状态灯同 C100 判定表);托盘指针移动不再逐次读取设置并重复定位窗口。
软件更新旧版本信息残留治理 (C113) :
Windows 跳过版本追平自动清除 :修复用户跳过版本后升级至新版本时,因 offered 为 None 导致 update_skipped_version 在 settings.json 中永久残留的缺陷;software_update.rs 引入 local_version 比较,在应用启动首检与检查更新中判定本地版本追平或超过跳过版本时自动调用 persist_update_fields 清除跳过记录,严格对齐设计 07 §4.2 R4;
macOS 启动即时比对清空 :SoftwareUpdateService.start() 启动时立即校验 preferences.skippedVersion <= localVersion,满足条件即刻清空 UserDefaults,无需等待 30 秒及联网请求,杜绝离线或关闭自动更新时的偏好滞留;
自替换回滚安全保护 :SoftwareUpdateInstaller 新增 removeWorkingArtifacts(keepBackup: true),在原子替换遭遇极端回滚失败时仅清理临时工作包、保护旧版完整备份目录不被误删。
设置中心统一悬浮极客高斯错误胶囊浮岛与 0px 布局防抖 (C111) :彻底移除原 ScrollView 顶格裸插入的 settingsErrorMessage 导致的面包屑与标题剧烈下沉(CLS +38px 位移彻底归零);右侧内容视口改用 .overlay(alignment: .top) 悬浮挂载 8pt 卡片级连续圆角、420pt 固定宽、42pt 标准舒适高的高斯毛玻璃胶囊;集成关闭按钮外圈 24×24pt 环形微圆环 4 秒平滑倒计时闭合,支持鼠标悬停 (Hover) 自动暂停并高亮 Accent 蓝,支持中心 ✕ 随时手动清除;增加侧边栏切 Tab 瞬时错误自动清除机制,彻底消灭跨 Tab 泄漏残留。
发版前置核实规则 (C105) :docs/devel/design/07-软件更新.md 新增 §4.2 R1.4 —— 打 tag 前必须逐项核实 VERSION 与 tauri.conf.json 的 version 一致、CHANGELOG.md 存在 ## [<VERSION>] - <日期> 版本块、并以 gh secret list 实测 TAURI_SIGNING_PRIVATE_KEY / _PASSWORD 已配置;卡片或文档内声称「已写入 secrets」不作为依据。源于 2026-10-26 v0.13.0 首发事故:T09 卡 check-5 声称密钥已同步写入 GitHub Actions secrets,实际仓库无任何 secret,导致 release-windows 按 fail-closed 退出、Release 停在草稿。
macOS artifact 逐日校验复用 ISO 格式器 (C106) :ArtifactStore 逐日校验不再每轮新建 DateFormatter(解析开销约为复用格式器的 100 倍),热路径 ISO 解析统一走共享格式器,消除每轮刷新约 2 秒主线程 CPU;新增满尺寸(10 agent × 182 天)校验耗时用例。
Claude 单价按 Anthropic 官方校正并按 TTL 计价缓存写入 (C107) :Opus 系列单价由高估约 70% 校正为官方口径,cache_creation 按 5 分钟 / 1 小时 TTL 分别计价(1 小时写价高于 5 分钟),设计 01 计费规则同步回写。
价卡单一事实源 pricing-catalog.json (C108) :设置页展示单价与采集端计费同源,消除 deepseek-v4.1-flash 展示 $0.15 而按 $0.30 计费的漂移;新增 scripts/gen-pricing-catalog.mjs 由单一事实源生成两端价卡。
Windows 出站网络 command 移出主线程 (C109) :设备码登录与订阅额度验证的阻塞式网络调用改为异步 command,不再冻结托盘与界面;设计 05 回写「主线程不得发起阻塞式出站网络」规则。
调整与优化 (Changed)
窗口边界唤醒与刷新退避改为跨端共享 (T17) :macOS 与 Windows 的额度窗口边界唤醒、刷新退避提为共享 collector-policy::refresh 的一份实现(Windows 进程内、mac 经静态库 C ABI 进程内调用),原两端公式删除;新增 tests/fixtures/refresh-policy-parity 双端对拍用例。行为不变,仅统一两处边界口径:重试计数 0 与 1 同为首个重试档、窗口重置时间接受数值小数。
macOS 额度策略改为进程内调用 (T16) :macOS 链接共享策略的 Rust 静态库(Universal 2),额度门禁与回填在 App 进程内计算,单次约 0.06 ms(此前经采集端子命令约 5 ms),App 本体增大约 1.3 MB(+6%)。采集端的 Bruce-collector policy 子命令随之退役。直接 swift build 前需先运行 zsh scripts/build-policy-ffi.sh(验证与打包脚本已自动调用)。
macOS 额度门禁与回填改用共享实现 (T15) :macOS 刷新时的额度查询门禁与回填改为调用与 Windows 相同的 Rust 实现(T15 经采集端子命令,T16 起在 App 进程内),删除 Swift 版本,两端不再各写一份。策略计算失败时本轮不更新也不猜测查询范围,按采集失败重试,界面继续显示上一轮数据;本轮换发的登录令牌照常保存。
订阅额度门禁与回填改为跨端共享的一份实现 (T13) :额度查询门禁与回填从 Windows 端提为采集端共享 crate collector-policy,Windows 改为调用它;新增双端回填共享用例后发现并统一了四处分歧——macOS 查询失败时余额型订阅(如 DeepSeek)不再丢失上次的余额金额;Windows 被跳过查询的订阅卡保持原位置,不再被挪到末尾;成功结果已带的新鲜度标记不再被改写;旧版快照中「查询成功但无数据」的记录可作为失败时的回退值。
Windows 运行时核心按职责拆分 (C128) :runtime_core.rs(1,639 行)拆出窗口激活与快捷键、看板几何、状态灯三个子模块,代码逐字移动、对外路径不变。
采集端本机扫描接口收敛 (C126) :不走缓存的扫描函数只作为测试对拍的参照实现编入测试构建,collector-local 对外只保留缓存扫描接口。
README 与设计索引对齐现状 (C125) :README 版本号更新为 v0.13.0,补充软件更新与用量分析工作台特性、updates/ 数据目录,Harness 数量与设计基线范围按现状更正;设计中心索引的「最后更新」与各设计文档同步;设计文档中的刷新间隔可选值按实现更正为 5 / 15 / 30 / 60 分钟。
采集请求契约清理 (C123) :两端不再发送采集端从未读取的 localPricing 能力与 subscriptionQuotaOnly / subscriptionProviders 标记,凭据白名单移除无人写入的 providerEnv(Windows 旧凭据文件中的该字段读取时丢弃,不影响其它凭据);采集端改为显式拒绝这些字段。
采集端额度执行精简 (C122) :删除从不生效的账号并发许可与两层账号去重(single-flight)脚手架,额度查询的并发上限与结果不变。
设置中心分段选择器高对比浮岛、开关状态居左对齐与模型用量统一更名 (C112) :
分段选择器选中对比度跃升 :浅色模式激活项采用纯白微浮岛 (#FFFFFF) 配合 0.8px 柔和边框与立体软投影,文字转为纯深黑 (#0F172A);深色模式激活项采用明亮灰阶浮岛 (#343946) + 高亮描边 + 微阴影,文字为纯白,彻底解决此前配色模式、界面风格、仪表盘布局、刷新间隔分段选择器与轨道底色差过小(1/255)导致无法辨别激活项的问题;
开关状态文字视线流统一居左 :「锁屏暂停订阅刷新」与「系统预警通知」开关说明文字统一由开关右侧移至开关左侧,规范为 [已开启/已关闭] [Toggle 开关] 统一视线流排布;
概念统一更名为「模型用量」 :双端设置侧栏导航项、面板标题、面包屑、授权配置行等统一更名为「模型用量」,准确表达 Token 深度分析与各模型统计的业务内涵。
本机扫描提速:缓存一次性写盘、解析前字节预筛、次要源并行扫描 (C110) :五处缓存写盘由 serde_json::to_writer 直写未缓冲文件改为 to_vec 后单次 write_all(Claude 冷扫内核态 0.61 s → 0.03 s);行读取复用缓冲、JSONL / Codex 以 memchr::memmem 字节预筛跳过非用量行;8 个次要源改为 local_workers 工作池并行、按固定源序合并。冻结日志副本实测冷扫 2.15 s → 0.17 s,artifact(去 generatedAt)逐字节一致。
本地验证脚本 verify-local.sh 提速 (C104) :17 项 Swift Harness 由 17 次串行 swift run(每次重解析依赖与重编译)改为 swift build --build-tests 一次性多核并行编译 + 经 --show-bin-path 直接运行二进制;find 剪枝由 './.build' 修正为 '*/.build' / '*/node_modules' 递归排除子模块缓存。全量验证耗时 11m39s → 24.3s(约 28.7×),17 项 Harness 覆盖与输出 100% 等价。
You can’t perform that action at this time.