Repository navigation
Bruce v0.16.0
Bruce 0.16.0 发布说明
调整与优化 (Changed)
- 采集请求退役
localScanSeconds(C177):该超时字段只被校验、从未生效(本机扫描一直只受整轮moduleSeconds约束),mac 与 Windows 不再发送;Collector 仍兼容接受旧请求中的该字段。设计文档登记两端各自的超时预算(mac 90 / 10 s,Windows 150 / 30 s)。
修复 (Fixed)
- Windows 前端安全加固 (C178):Windows 应用的看板、设置、悬停预览与额度预警窗口启用严格内容安全策略(只允许加载应用自带脚本,不允许内联脚本与远程资源);每个窗口只能调用它实际用到的后端命令(例如预警气泡只能收起自己或唤出看板,不能触碰凭据或更新安装),两个没有界面入口的凭据写入命令不再对任何窗口开放。预警气泡显示服务名等字段前做转义。界面与功能不变。
- 本机采集内存与缓存体积大幅下降 (C176):Collector 扫描 JSONL 会话时改为逐文件聚合,不再把全部观测同时留在内存;缓存条目改为紧凑格式(项目名按文件存一次、模型名按文件去重、去重键缩短、字段名缩写)。2,000 个 Claude 会话(40 万条观测)的热扫描峰值内存由 251 MB 降到 57 MB,缓存目录由 102 MB 降到 39 MB,热扫描由约 0.6 s 降到约 0.36 s,统计结果逐字节不变。升级后首轮会重建一次缓存。
- 本机冷扫描提速约 4 倍 (C175):Collector 写可再生缓存时不再逐条目强制落盘(macOS 上每条一次 F_FULLFSYNC)。2,000 个 Claude 会话(289 MB)的冷扫描由 18–20 s 降到约 4 s,产出逐字节一致;版本升级后全量重建缓存不再逼近 90 s 的整轮预算。掉电后若缓存条目为空或被截断,下一轮按损坏重建,统计结果不受影响。
-
mac 软件更新校验发布签名 (C174):mac 应用内更新此前只比对与安装包同源的 SHA256,随后剥离隔离属性,替换 Release 中的
Bruce.zip与latest.json即可推送任意代码。现在安装前以内置公钥校验发布签名(与 Windows 更新同一把密钥,发布门禁断言两端一致),签名缺失或不通过时拒绝安装并提示「签名校验不通过」,不解压、不剥离隔离属性。已发布的 v0.15.0 安装包的真实签名可通过校验。发版作业本身被利用时签名仍会通过,这一残余风险不变。 -
删除订阅凭据后不再残留在备份文件 (C173):mac 删除账号时,被删的密钥此前会作为「上一版」留在
credentials.json.bak,直到下一次改配置才被覆盖。现在删除后主文件与备份都不再含该账号;凭据文件损坏时留下的现场副本只保留最近一份。 - Windows 保存 Claude 刷新后的新令牌 (C172):Windows 版此前只回写 StepFun 的新令牌,Claude 订阅额度刷新换得的新令牌被直接丢弃,访问令牌一过期就只能重新导入登录态。现在与 mac 同口径写回(包括本轮采集失败时带回的新令牌),自动跟随本机 Claude 登录态的账号首次刷新后会自动保存;两端合并结果由共享对拍用例锁定。
- 订阅额度刷新换得的新令牌不再随失败丢弃 (C171):Claude 与 StepFun 的刷新令牌是一次性的,刷新成功后服务端即作废旧令牌。此前若紧接着的额度查询失败(如 429 限流、5xx、网络错误或超时),或本轮本机扫描失败 / 超时,新令牌没有写回,下一次刷新只能失败并要求重新登录。现在刷新成功即保留新令牌:查询失败的结果与整轮失败的错误响应都会带回新令牌,mac 先写回凭据再决定是否发布本轮结果;mac 采集外层超时也改为晚于采集进程自身的截止时间(默认 90 → 102 秒),确保到期时的响应能送达。另修复 mac 首次为本机 Claude CLI 登录态保存新令牌时写成采集进程读不到的格式,导致下一轮仍用已作废的旧令牌。Windows 侧的 Claude 写回见 C172。
-
CI 验证作业补齐 ripgrep 依赖 (C170):push 级「本地验证套件」在 macOS runner 上因缺少
ripgrep失败——check-bundle-resources.zsh把「命令不存在」误判成「打包脚本未调用共享资源函数」,报错与事实相反;check-collector-fixtures.sh则静默跳过 fixture 凭证扫描(rg 未执行也输出通过)。CI 验证作业显式安装ripgrep,两个脚本改为先command -v rg预检并明确报错,新增check-ci-tool-deps.mjs契约检查守住 CI 安装与脚本预检的一致性。 -
正式版打包补装 Nothing 主题字体 (C168):Developer ID 正式版脚本
build-release-app.sh此前漏拷Assets/Fonts,用它打出的包在 Nothing 主题下会静默回退为系统字体(当前 CI 发版走build-test-app.sh,已发布版本不受影响)。两个打包脚本改为共用runtime-manifest.zsh的同一份资源清单投放并校验,本地验证新增check-bundle-resources.zsh防止再次漂移。 - mac 自定义刷新间隔点别处即保存 (C167,修正 C160):设置页「刷新间隔 · 自定义」输入后点击别处或切走窗口即生效(此前只认回车,点别处后数字仍显示在框里却没有保存);非法输入回到当前生效值,未改动时不重启刷新计时。
-
Agent / 模型品牌徽章补漏 (C166,修正 C161):Windows 端补登记 Cline 模型图形(此前 Cline 模型在 Windows 仍显示色点,mac 已是徽章);Windows 真彩位图加载失败时改为显示矢量图形或字标,不再留下空白徽章;mac
AgentBrandBadge消除编译告警。两端品牌表新增共享对拍用例tests/fixtures/agent-brand-parity,防止再次各改各的。 -
模型用量时序趋势图缩放 / 平移 / 刻度修复 (C165,修正 C162 / C163):
- 不再劫持页面滚动:鼠标悬停在图表上时,普通滚轮照常滚动设置页;缩放改为 mac ⌘ + 滚轮或触控板捏合、Windows Ctrl + 滚轮或触控板捏合,放大后水平滑动或拖拽平移;
- mac 捏合不再一捏到底:捏合倍率相对手势起点计算,此前叠乘导致轻捏即跳到 4.0x 或 1.0x;缩放统一以视口中心为锚点;
- Windows 拖拽:一次拖拽可连续平移(此前只能移一格);点击两次后不再卡在拖拽态导致悬停探针失效;后台刷新不再把缩放复位,只有切换时间范围才回到全景;
- 刻度:按可见点数选 1 / 2 / 3 小时步长并锚定整点,平移时标签随数据移动;轻度放大不再退化成 4 小时步长;🔥 峰值胶囊两侧相邻刻度都会让位,不再与相邻标签贴住;
- 费用维度:🔥 胶囊与底部峰值 / 均值摘要改按费用计算,此前标的是 token 峰值;
- 刻度与视口计算新增双端共享对拍用例
tests/fixtures/timeline-axis-parity。
-
订阅额度自动查询最短 3 分钟 (C164):C160 允许把刷新间隔设到 1 分钟后,订阅额度接口会跟着每分钟被查询一次,容易触发 429。现在额度查询周期取「刷新间隔」与 3 分钟中的较大值(双端共用
collector-policy门禁,跳过回填的 fresh / stale 标注同一口径),本地 Token 统计仍按所选间隔采集;手动刷新、单 Provider 定向刷新与窗口重置后的重查不受此限。设置页「刷新间隔」说明同步注明。 -
设置中心「模型用量 · 时序趋势」X 轴拥挤修复与峰值胶囊高亮 (C162):
-
修复分类轴全量挤占:修复 macOS Swift Charts 对
String离散分类轴忽略.automatic(desiredCount:)导致今日 24 小时及近 30 天全量标签首尾紧贴、边缘被截断为00:.../23:...的问题,改为通过WorkbenchAnalytics.timelineAxisTicks显式传入刻度集合; -
方案 A1 等步长 + 防撞吸附:今日 24 小时采用 3 小时严格等步长(
00:00, 03:00 ... 21:00),长周期按固定步长采样并收口末点;非网格峰值点若距最近基准刻度$\le \text{minGap}$ 则自动替换邻近刻度防撞,否则追加; -
S2 峰值胶囊徽章(双端同构):X 轴峰值刻度渲染为
🔥 <时刻>(如🔥 15:00)圆角胶囊徽章,文字与半透明胶囊底/细边框自动跟随峰值处主导曲线系列色(Agent / 模型 / Token 构成 / 费用切换时实时同步)。
-
修复分类轴全量挤占:修复 macOS Swift Charts 对
新功能 (Added)
-
更新 GPT-6.1 系列模型官方基准定价 (C169):
- 更新 OpenAI GPT-6.1 系列模型定价:
gpt-6.1-sol调整为 $2.00 输入 / $10.00 输出 / $0.10 缓存读取;补齐gpt-6.1-terra($1.00 输入 / $5.00 输出 / $0.05 缓存读取)与gpt-6.1-luna($0.10 输入 / $0.50 输出 / $0.01 缓存读取); -
config/pricing-catalog.json事实源、macOSBuiltinModelPricingCatalog、Windowsmodel_catalog与 Rust Collector 计费引擎全链路锁定与同步对齐。
- 更新 OpenAI GPT-6.1 系列模型定价:
-
模型价格表远端同步与维护页卡片 (T19–T21):
-
价格表抽离与动态价卡契约 (T19):内置模型价格表从代码深层解耦至顶层
config/pricing-catalog.json,补充schemaVersion与updatedAt元数据;Collector 核心实现parse_and_validate校验与PricingTable::with_catalog动态构造,支持通过context.pricingCatalog动态注入,并严格校验版本防倒退与格式完整性; -
macOS 远端同步服务与维护页卡片 (T20):
BruceAppCore实现PricingCatalogSyncService,支持后台按计划自动拉取远端价格表、SHA256 哈希完整性校验、原子更新与故障回滚;设置中心维护页新增「模型价格表」状态卡片,展示当前版本、发布日期与「立即同步」操作入口;新增PricingCatalogSyncHarness自动化验收套件(12 项测试,51 条双端对齐断言全绿); -
Windows 远端同步与维护页卡片 (T21):Windows 端
bruce-win-viewmodel与 Tauri 后端实现动态价卡读取、远端同步状态同步与维护页交互对齐;跨端单元测试、集成测试与前端对拍测试全部通过。
-
价格表抽离与动态价卡契约 (T19):内置模型价格表从代码深层解耦至顶层
-
模型用量时序趋势图手势缩放、水平平移与动态 LOD 刻度步长自适应 (C163):
- 手势交互与双端同构:设置中心「模型用量 · 时序趋势」折线/面积图支持鼠标滚轮滚动(向上放大、向下缩小)与触摸板双指捏合缩放(1.0x ~ 4.0x),并在放大后支持水平左右拖拽平移视口;
-
快捷缩放控制组:顶部操作栏集成紧凑型
[−] 1.0x [+]缩放按钮组;放大或平移时右上角浮现↺ 全景复位按钮,双击图表区域亦可一键复位; - 动态 LOD 分级刻度自适应:基于视口切片模型(Slicing Viewport Model),全景(>18h)保持方案 A1 3h 严格等步长,中度放大(10h~18h)自动细化为 2h 等步长,深度放大(≤10h)展开逐 1 小时全量刻度;
-
峰值跟随与手势探针解耦:全局最大峰值仅在当前视口包含该时刻时高亮显示
🔥 <时刻>系列色胶囊(移出视口不产生虚假峰值);拖拽平移期间自动隐藏竖线探针与 tooltip 避免抢占焦点;图表底部提供 2pt 视口指示条实时呈现可视时间段在全周期中的绝对位置。
-
Agent / 模型身份升级为品牌徽章 (C161):
- 真彩优先:设置「Agent 表现」行首、归并模型行、模型 chip、时间线图例与仪表盘「Agent 用量」图例/逐小时行的色点,全部换成品牌徽章——有官方 App 位图的用真彩(ZCode / Codex / CodeBuddy),其余用品牌底色 + 官方图形(Claude clay 标记、Kimi、OpenCode、Grok);
- 逐档降级:≥14pt 走真彩档并带 1.2pt 系列色环,保留「图表色 = 哪个 Agent」的映射;<14pt(模型 chip)落系列色瓷砖 + 白图形,避免位图缩糊;无素材退字标(Pi 的 π),Nothing 主题保持单色方角 + 绿阶档色;
- 模型顺带消歧:模型 chip 改为厂商图形,消掉 glm=ZCode、gpt=Kimi Code CLI、kimi 模型=Codex 的撞色歧义;未登记厂商仍保留原色点;
- 素材纪律:位图取自本机已安装应用内置图标并登记 SOURCES.json,生成器统一投放双端运行时目录并纳入 --check 字节比对;图表折线、堆叠柱、占比条配色一行未改。
-
刷新间隔预设与自定义、移除测试气泡入口 (C160):
- 预设收敛:设置页刷新间隔由 5/15/30/60 分钟四挡改为「3 分钟 / 6 分钟 / 自定义」三项;
- 自定义分钟:自定义值默认只读显示「X 分钟」并提供「编辑」入口,点击分段或「编辑」后才展开数字输入并聚焦;合法区间 1–1440 的整数分钟,超出区间或非整数输入还原为当前生效值且不写盘;打开设置时不再有输入框抢占初始焦点;
- 历史值不丢:既有的 5/15/30/60 等非预设值回显为「自定义」并保留原值,未配置仍默认 30 分钟;
- 测试入口退役:移除 macOS / Windows 设置页「额度预警气泡」行的「测试气泡」按钮及其 mock 触发通道。
-
订阅额度预警由系统通知升级为双端图标锚定气泡 (C159):
- 交互升级:全面退役操作系统系统通知弹窗(UNUserNotificationCenter 与 Windows Toast);额度紧缺时在 macOS 菜单栏图标及 Windows 托盘正下方弹出轻量非激活无焦点微卡气泡(280pt 方案 A,鼠标悬停常亮,6s 静默淡出,点击直达主看板,不打断前台键入);
- 三档阶梯与倒计时:升级为 [50%, 80%, 95%] 三档阶梯评定与跨档去重,支持 R3-A 电子表秒级倒计时跳动与用量平滑增长弹簧动效;
- Nothing 极客点阵与全主题适配:深度适配 Nothing 主题(点阵字体、14 段方块点阵迷你进度条、方正微卡与高对比度边框)与经典/Fluent 毛玻璃圆角卡片;
-
排版防折行与零空格:周期标签规范为「每5小时」零空格 Chip,声明
.fixedSize()刚性约束并提升排版优先级,杜绝长服务名下的意外折行; - 设置项:原「系统通知」平滑演进为「额度预警气泡」并复用配置键。
-
订阅卡空状态与 Tab 回退修正 (C157):
- 两态空态:未配置任何仪表盘可见订阅时订阅卡不再整张消失,显示「未配置」空态(尚未添加订阅 → 添加订阅);已有启用且验证通过的订阅但本次采集没有返回额度时显示「无数据」空态(暂未获取到额度 → 刷新额度)。仅添加未验证、验证失败、需重新登录、已停用与临时屏蔽的 Jev 一律归入未配置,不引入第三态;
- Tab 不再错卡:Tab 模式选中订阅页签时显示空态卡,不再回退成 Token 用量卡;
-
直达配置:「添加订阅」直接打开设置「订阅额度」页(macOS
SettingsWindowController.present(category:);Windows 经同源localStorage深链,打开失败自动撤回); - 双端同构:判定口径、文案、虚线空位框与折叠行为 macOS / Windows 一致。
-
额度条与余额数字的更新动效 (C158):
- 量条:刷新带来的用量变化从旧值增量过渡到新值(0.85s 临界阻尼弹簧,零过冲),三档颜色交叉淡入,增长时右缘高光加一次扫光;Nothing 分段逐段点亮,动画期前沿段提亮;
-
数字:百分比与量条同拍逐位滚动,可用余额与 Credits 胶囊 0.6s 逐位滚动;
--占位与首次出现不滚动; -
门控:面板隐藏、动效总开关关闭或系统减弱动态效果时全部直接落值,时长 / 曲线 / 门控由
MeterMotionPolicy单点裁决; - Windows:全量重建 DOM 后按稳定 key 用 Web Animations 从旧值补间,数字列静止态与改动前逐像素一致(真实 Chromium 内核对拍无几何差异)。