Repository navigation
Bruce v0.13.0
Bruce 0.13.0 发布说明
新功能 (Added)
-
macOS 应用内软件更新 (T10):
- 维护页「软件更新」卡(方案 B):设置中心「维护」页顶部新增分组,三行(自动检查更新开关 / 当前版本 / 检查更新 + 上次检查时间)+ 底部状态区,结构与逐字文案对齐高保真 demo
apps/win/demo/win-settings-update-flow-demo.html;有可用更新时「维护」导航项尾部出现 6pt 蓝色发光角标;通用页原「版本」行移除,侧栏底部版本号带v前缀。 - 检查与自动检查:仅请求 Releases latest-download 直链
latest.json(不调用 GitHub API,超时 10 秒),semver 纯函数比较;自动检查默认开启、启动 30 秒后首查、此后每 24 小时一次,失败完全静默,仅手动检查失败在状态区与状态行告警;「跳过此版本」持久化,远端出现更新版本时自动恢复提醒;裸swift run等无 bundle 版本场景降级为「开发版本」且不发起网络请求。 - 下载校验与自替换安装:下载到
~/Library/Application Support/Bruce/updates/(进度可取消),SHA256 对照清单、ditto解压并xattr -cr剥离 quarantine,复核包内 bundle 标识与版本(须等于清单且高于本地)后才进入就绪;「安装并重启」同卷原子替换并把旧版本移入备份,替换失败自动回滚;重启采用先退后起的等待器,避免新旧实例同时占用菜单栏与全局快捷键;从 DMG / 随机只读挂载等不可写位置运行时降级为引导手动下载。 - 双端文案对拍 fixture:8 态状态区与各失败分支的逐字文案落
tests/fixtures/update-copy-parity/cases.json,新增SoftwareUpdateHarness(44 项)纳入verify-local.sh,Windows 实现 (T11) 同读该文件。
- 维护页「软件更新」卡(方案 B):设置中心「维护」页顶部新增分组,三行(自动检查更新开关 / 当前版本 / 检查更新 + 上次检查时间)+ 底部状态区,结构与逐字文案对齐高保真 demo
-
经典风格升级高斯模糊(方案A 柔光云母高斯)与全风格 1:1 紧凑圆角体系 (C102):
- 紧凑圆角体系 1:1 统一 (macOS & Windows):主面板外框圆角全风格(Classic / Liquid Glass / Nothing)统一收敛至
10pt(旧 Classic 22pt),顶部 1px 发线内缩对齐至8pt;主卡片容器(PanelCardContainer/.card)统一收敛至4pt(旧 Classic 16pt),顶部 1px 折光边内缩对齐至4pt;卡片内细分子槽、分段统计格、操作按钮、状态指示芯片、品牌徽章与多账号子卡统一收敛至3pt(旧 Classic 8~10pt);顶栏 Tab 切换器外框为3pt,滑动胶囊为2pt,彻底消除原 Classic 风格大圆角对卡片内部内容排版的挤压感,与 Nothing 极客精密桌面美学彻底对齐。 - 方案 A 柔光云母高斯光学质感:深色模式采用高透高斯底板(macOS
.hudWindow,Windowsrgba(18, 20, 26, 0.48)+backdrop-filter: blur(36px) saturate(185%)),搭配面板顶部 1px 发线;卡片采用0.085纯白浮岛、0.18描边与顶部 1px 晶体折光边;浅色模式重构为系统.popover+ 暖瓷云母底板(rgba(243, 245, 250, 0.72))托底,纯白浮岛卡片(rgba(255, 255, 255, 0.62))显著拔高视觉层级,搭配外冷灰暗界(0.085)与内纯白折射边(0.88)双层复合轮廓,图表与状态色适配高对比度森林绿(#0E6245)与深海蓝(#184E77),消灭浅色发灰发脏与无层次感问题。 - 风格隔离与跨端一致性:设置中心窗口保持 Fluent 平面风格(遵循既有
C067契约,不引入毛玻璃与圆角覆盖);Windows 端同步镜像 CSS 样式与几何参数,双端测试全绿通过。
- 紧凑圆角体系 1:1 统一 (macOS & Windows):主面板外框圆角全风格(Classic / Liquid Glass / Nothing)统一收敛至
-
双端仪表盘顶栏三图标 Tab 切换、角标融合与水平滑动动效 (C088):
- 顶栏三图标导航与角标融合:在仪表盘顶部 HUD Header 右侧以三图标导航(Token 用量
chart.bar.xaxis/ 订阅配额creditcard/ Agent 活跃waveform.path.ecg)替代原N AGENTS ACTIVE / STANDBY文本;Agent 运行状态作为绿色呼吸小点无缝融合于第 3 个图标右上角(悬停展示实时活跃数量与状态提示)。 - 单卡轻量呈现与方案 1 方向感知水平滑动动效:Tab 模式下仪表盘只展示当前激活卡片,卡片切换遵循方向感知水平滑动(左→右从右侧推入,右→左从左侧推入)配合药丸滑动指示条与卡片高度弹性过渡,保留键盘
1/2/3快捷切卡;既有三张卡片内部视觉、指标与布局 100% 原样保留。 - 卡片停留状态记忆与通用设置开关:最后停留的 Tab 分页自动持久化并在下次唤醒面板时无缝恢复;通用设置中新增「看板卡片布局」分段选择器(
纵向级联vs顶栏 Tab),macOS 与 Windows 11 双端 1:1 对齐交付。
- 顶栏三图标导航与角标融合:在仪表盘顶部 HUD Header 右侧以三图标导航(Token 用量
-
面板底栏新增外观切换按钮 (C098):仪表盘底栏「刷新」按钮右侧新增一个仅图标按钮,单击在「跟随系统 → 浅色 → 深色 → 跟随系统」间循环,图标即当前态(
circle.lefthalf.filled/sun.max/moon),无需打开设置窗口即可在面板内即时切换配色。与设置中心「通用 → 配色模式」共用同一持久化偏好OnboardingConfiguration.appearanceMode与「先存后生效」语义(保存失败不变更运行态外观),循环顺序由AppearancePreference.next单一纯函数给出,避免两处顺序漂移。该能力为 mac 独有(Windows 恒深色、无配色模式偏好,底栏有意不镜像,已在apps/win/src/index.html注释登记分歧)。 -
双端仪表盘顶部状态牌改为四色状态灯 (C100):
- 形态收敛与品牌字统一:删除 HUD 顶部左侧的
SYS.OK文字牌(macMenuBarViews.swift与 Windowsindex.html#runtime-status),顶部左侧收敛为「状态灯 + 品牌字」;品牌字在所有主题(Classic / Liquid Glass / Nothing)统一为Bruce(移除// HUD后缀与 Nothing.hud-brand的uppercase转换)。 - 四色语义与双端同口径聚合:新增纯函数判定源
DashboardStatusToneResolver.resolve(macBruceAppCore与 Windowsapp.jsresolveDashboardStatus共享tests/fixtures/status-tone-parity/cases.json对拍),聚合「采集健康度」与「订阅服务健康度(sections[].status)」按error > warn > ok > neutral取并:绿(正常)、黄(partial/stale/authRequired)、红(failed/error/unavailable)、中性灰(notConfigured/empty首次无数据),刷新中呈呼吸脉冲(遵循 C044 面板可见性门控)。 - Windows 托盘角标同源:托盘图标角标色与提示文案改由与 HUD 状态灯同一判定表计算(Rust 端第三份实现,同读共享 fixture 对拍),不再出现托盘显绿「数据已更新」而看板亮红灯的分歧;提示为「Bruce · 原因」。
- 触碰按需展开原因:状态灯绑定悬停提示与无障碍标签(mac
.help+.accessibilityLabel,Windowstitle+aria-label+role="status"),健康态显示「运行正常」、刷新中显示「正在刷新…」、异常态按「态名 · 具体原因」展开:采集侧决定灯色时取采集详情(Windowsruntime.error机器码先转为中文释义,未登记的码不外露),订阅侧更严重时点名对应服务(如「失败 · Codex」)。
- 形态收敛与品牌字统一:删除 HUD 顶部左侧的
-
Windows API Key 类五家专属配置对话框逐字对齐 mac (C083):Kimi / DeepSeek / Z.ai / Cline 统一为
API Key单字段、火山引擎为Access Key+Secret Key双字段,字段标签、引导文案、控制台外链与脚注逐字对齐 mac 对应对话框(如 Kimi「在 kimi.com/code 申请 Kimi For Coding API key」、Cline「在 Cline 控制台 Settings > API Keys 创建 API Key」,Cline 另带 ClinePass 三窗口脚注)。火山引擎新增「从 CC Switch 导入」:以SQLITE_OPEN_READ_ONLY只读打开 CC Switch 本地库执行SELECT meta FROM providers WHERE name='火山Codingplan' LIMIT 1,取usage_script.accessKeyId/secretAccessKey(回落顶层同名键)并对 SK 逐层 base64 解码,导入前先拉起只读确认;库不存在时按钮隐藏、行缺失时给出可诊断错误,全程不回写外部库。Z.ai 由自由输入站点改为国内站 (open.bigmodel.cn)/国外站 (api.z.ai)单选并据此派生base_url。保存成功后立即执行该 Provider 的结构校验(DeepSeek 额外一次真实余额试查,关闭重定向以避免 Bearer 随重定向外泄),并新增「重新验证」按钮。 -
Windows 订阅额度页文案与交互细节对齐 mac (C096):底部提示位置移到两张卡下方且措辞逐字对齐(含「统一」);空态补「尚未配置任何订阅 Provider」+ 副标题「从下方添加服务」;对话框在验证通过时追加「 · 验证通过」后缀(对齐 mac
APIKeyProviderConfigDialog);「添加服务」改为「选择 → 点『添加…』」两步交互(对齐 macProviderPopUpPicker,选中仅暂存、点确认才落库);必填字段未填齐时「保存并验证」置灰、填齐即启用;账号移除前弹出「移除 <名称> 账号?」二次确认。 -
Windows Codex 设备码登录与本机账号只读发现 (C084):
- 设备码三步登录:设置页新增「登录新账号」,按 mac
CodexDeviceFlow同一契约走POST /api/accounts/deviceauth/usercode(JSON{client_id})→ 在https://auth.openai.com/codex/device输入验证码 → 轮询POST …/deviceauth/token(403/404 待授权、其余非 200 fail-closed,超expires_in报过期,服务端未给code_verifier时本地 PKCE 回落)→POST /oauth/token换id/access/refresh三令牌齐备才成功;只解析不验签id_token取chatgpt_account_id(namespaced → 顶层 →organizations首项)与email,缺账号标识 fail-closed 不写半成品。验证页由ShellExecuteW打开(不新增 opener 插件),打不开时前端仍展示验证码与地址供手动访问。 - 本机账号只读发现:
发现本机 CLI 账号只读%USERPROFILE%\.codex\auth.json(取tokens.account_id+ email),发现 CC Switch 账号只读%USERPROFILE%\.cc-switch\codex_oauth_auth.json(取accounts.*.email);两者一律只写元数据(authorization_state = reauthRequired,不导入任何令牌),已有记录不覆盖、外部文件绝不回写。 - fail-closed「已配置」判据:
codexQuotaAccounts的access_token必填放宽为「元数据记录可缺令牌」,并新增逐账号「完整可用凭据记录」判定经 IPC 下发(usable);UI 的「已配置」、启用开关禁用态与对话框横幅据此排除元数据记录 —— 发现账号在行上呈现为「需要重新授权」,但不会让看板去查询必然失败的额度。
- 设备码三步登录:设置页新增「登录新账号」,按 mac
-
Windows Claude / Grok / OpenCode GO 对话框对齐 mac (C085):
- Claude 高级入口收拢:零配置只读跟随仍是主路径,手工粘贴令牌与凭证 JSON 收进「高级」折叠区(默认折叠),状态行、重新检测与移除服务保持不变。
- Grok 本机只读跟随:新增
%USERPROFILE%\.grok\auth.json只读跟随(取带非空key的https://auth.x.ai::*/*/sign-in作用域条目,按expires_at判过期),提供「重新检测」与「从本机导入」;本机跟随计入「已配置」(与 Claude 同范式),采集与定向刷新前同样自动注入grok-cli账号,全程只读不回写。 - OpenCode GO 引导与身份:粘贴引导逐字对齐 mac(
打开 opencode.ai → 登录 → 开发者工具 → Application → Cookies → 复制 auth 值 (Fe26.2**...) 与 workspace URL 中的 wrk_ ID),账号身份改由workspaceId派生 —— 同一工作区重新粘贴即 upsert 到同一账号;缺键文案改为「OpenCode GO 凭证不完整, 请重新粘贴」。 - 三家验证语义:Claude 访问令牌过期但刷新令牌仍有效时按「待刷新」照常放行、刷新令牌亦失效才判需重新登录;Grok 按作用域条目
expires_at判定;OpenCode GO 按auth+workspaceId双非空判定。
-
Windows 订阅额度页骨架 1:1 对齐 mac (C082):页面收敛为「订阅服务(已添加行 + 配置按钮 + 拖拽重排)+ 添加服务(只列尚未添加项)」;新增按 Provider 的专属配置对话框基座与 Provider 验证状态存储(
enabled/lastVerifiedAt/verificationStatus/failureReason),「保存并验证」写入成功后立即跑结构校验并按结果落状态,ok 触发该 Provider 定向刷新。 -
Windows StepFun 配置对话框与网页登录自动捕获 (C086):
- StepFun 对话框:Oasis-Token 字段 + 引导文案(
可点击上方一键登录自动绑定(支持国内/国际站),或控制台按 F12 复制 Cookie)+ 控制台外链 + 脚注 + 网页登录自动绑定区(🇨🇳 登录国内站/🌐 登录国际站)。 - 内置网页登录窗口:独立
WebviewWindow+WebviewUrl::External加载站点订阅页;导航栏(标题 + 站点切换 + 取消)+ 工具栏(后退/前进/刷新/订阅页/平台首页/当前 URL)+ 底部(清除登录缓存 / 我已登录,立即绑定);UA 用桌面 Chrome 串 —— 用户在内置窗口登录即可,无需外部浏览器与 devtools。 - cookie 捕获与远程校验:cookie 变更 + 2s 轮询双轨;仅在当前页面 URL 属目标站点域名时自动捕获,取
Oasis-Token且长度 >10 且 cookie 域含目标关键字;捕获后 POSTQueryStepPlanRateLimit(带Oasis-Token/Oasis-appID10300|20700 /Oasis-Platform/Oasis-Language/Oasis-Webid),200 才回填绑定并持久化;「清除登录缓存」删除该域全部 cookie 后重载。 - 实现约束与平台退路:cookie 读取必须经 async command 或独立线程(Windows 同步 command 会死锁);若真机无法稳定读取,退化为「外部浏览器登录 + 手动粘贴 Oasis-Token」并按设计规则 24 登记为平台差异。
- StepFun 对话框:Oasis-Token 字段 + 引导文案(
-
Windows 看板订阅段按 Provider 验证状态过滤 (C087):看板订阅段只保留
verificationStatus == ok的 Provider 的 service(对齐 mac),未验证 / 验证失败 / 需重新登录一律过滤;本地用量(agents)与总成本不受影响;过滤点落在视图模型 / 面板组装层,不在前端做猜测。
移除 (Removed)
- Windows 删除三张 mac 没有的遗留凭证卡片 (C095):在 C084–C086 三个专属录入通道就位后,移除「添加或更新账号凭证」「导入账号」「高级:完整凭证字段维护」三张卡与整页「检查已保存账号连接」—— 凭据只能经专属对话框(保存即验证)写入,不再保留绕过验证与「已添加」步骤的旁路入口。
修复 (Fixed)
- 浅色经典风格视觉重构(方案A 苹果纯净白)与全主题 8pt 呼吸感圆角体系升级,修复视口腰斩、坐标下沉与布局塌陷 Bug (C103):
- 经典浅色配色重塑(方案 A Apple Studio Pro Light):经典浅色卡片告别 0.45 塑料白与透黑水泥灰,消费纯白浮岛磨砂玻璃(
rgba(255, 255, 255, 0.96))搭配冷灰精密微边框;底板通过 AppKit 原生NSVisualEffectView挂载tintView实现纯正rgba(246, 248, 252, 0.92)柔白云母雾面;Token 与金额数据色彩升级为高对比度森林墨绿(#047857)与冷光蓝调(#0284C7),背景噪点弱化 65%,消除视觉脏感。 - 现代呼吸感圆角体系平滑化 (8pt,全主题覆盖):主面板外框统一升级至
14pt(macOS & Windows);主卡片容器(PanelCardContainer与.card)统一升级至8pt(覆盖 Classic、Liquid Glass 以及 Nothing 主题);内部细分子槽、双槽位卡、账号卡、操作按钮等按黄金比例平滑对齐至6pt;进度条与指示量条收敛为4pt,彻底消除原 4pt 直角给桌面带来的局促压迫感。 - 视口与布局防越界修复:修复当内容高度溢出时视口生硬硬截断导致双槽位卡被腰斩的问题,在卡片滚动区底部注入平滑渐隐 Mask;修复
resizePanel丢失下边界吸附致窗口下沉穿透屏幕的坐标计算缺陷,补齐max(unclampedY, minimumY)安全 Clamp;对多模型行引入弹性截断压缩,防止极端长模型名称顶破换行。
- 经典浅色配色重塑(方案 A Apple Studio Pro Light):经典浅色卡片告别 0.45 塑料白与透黑水泥灰,消费纯白浮岛磨砂玻璃(
- Windows 订阅凭据载荷形状与「已配置」判据修正 (C081):Claude / Grok / OpenCode GO 三家手工录入的载荷改为采集端可解析的原生形状(
claudeAiOauth包装 / 作用域条目 /{auth, workspaceId}),形状不合法时在写入前即拒绝;「已配置」改为 fail-closed —— 只有完整可用的凭据记录才算数,形状不合法或被读取侧丢弃的账号不再计入;出站注入仍只下发采集端需要的字段并剔除reauthRequired账号。 - Windows「移除服务」只删已添加条目不删凭据 (C089):移除改为后端
remove_provider_credentials在凭据存储锁内一次原子写删除该 Provider 全部凭据(含读取侧已丢弃、界面不可见的不合规账号,以及 Claude / Grok 遗留的整体 OAuth 字段),再移出已添加集合并派生收敛启用态;删除失败即中止、不改已添加集合(fail-closed),杜绝半删状态;删除前二次确认,失败以就地错误给出可诊断原因;重加服务不再复活旧账号。 - Windows 订阅行状态尾件不读验证结果与本机登录态 (C091):行尾件判据改为「配置判据 × verificationStatus」两维,输出未配置 / 已配置 / 验证失败 / 需重新登录四态;本机只读跟随的 Claude 登录态计入「已配置」(对齐 mac
claudeAppOrLocalProbe),该判据由行尾件、启用开关禁用态、对话框横幅与「重新验证」入口、授权摘要共用;未发现或已过期的本机登录态仍算未配置。 - Windows 接受 mac 拒绝的密钥格式 (C092):
validate_credential_payload按 Provider 补齐格式校验——含空白字符一律拒绝;火山 AccessKey / SecretKey 长度 ≥8;Cline ≥16;Z.ai 必须id.secret形式且站点主机为open.bigmodel.cn/api.z.ai;Kimi 非空无空白。写入与验证共用同一套判据,拒绝时指出具体不合规字段。 - Windows StepFun 站点由对话框默认值决定而非令牌 (C093):站点不再预选默认值,仅当用户显式选择时才写入
site,未选择则只存 token、由采集端按令牌推导;采集端is_stepfun_global明确「用户显式选择 > 令牌推导」优先序,保存值等于自动推导结果时视同未指定,避免国际站令牌被默认值查错站点。 - Windows「授权与隐私」摘要列出全部启用 Provider (C094):摘要改取「已启用 ∧ 已配置」交集(与行尾件共用同一判据,含规则 21 fail-closed 与本机跟随),未配置或未启用的 Provider 不再出现,空集保留兜底文案,并随验证结果 / 启用开关 /
settings-updated一起重绘。 - Windows 全局快捷键唤出看板焦点闪退、重复触发与设置页录制器键码缺陷 (C099):
- 唤出焦点保护期与防抖状态机 (
DashboardActivityState):新增 180ms 唤出焦点保护期(过滤 Windows 前台切换瞬态Focused(false)并补发set_focus,杜绝按快捷键闪退)、250ms 热键防抖(距上一次生效切换不足 250ms 的触发一律忽略;global-hotkey 以MOD_NOREPEAT注册,长按本身不会连发)、以及 300ms 被动失焦防重开(防止修饰键或托盘点击先触发失焦隐藏后紧接着反向重开面板)。 - 多显示器光标定位与移除冗余写盘:扩展托盘
Move/Enter/Click事件自动缓存托盘矩形;托盘唤出贴托盘弹出,快捷键唤出始终在当前鼠标光标所在显示器弹出(托盘不在该屏时按该屏任务栏角落贴靠,不再借用别屏托盘坐标,也不会因悬停过托盘而被钉在托盘屏);移除每次失焦收起时无意义的panel_x/panel_y磁盘写入。 - 设置页物理键码规范化与录制态挂起:录制器改按
event.code(回退event.key)规范化主键(彻底修复Ctrl+Shift+1被录成Control+Shift+!、Alt+Space被录成Alt+导致注册失败的问题),小键盘键原名保留(Control+Alt+Numpad1不再被录成主键盘的Control+Alt+1),无法解析的键直接提示不支持;拦截系统保留热键(Alt+Tab/Alt+F4/Control+Escape等)与纯Shift+非功能键。录制期间真正注销已生效热键(RegisterHotKey会截走组合键,否则设置页录不到当前热键),退出录制或关闭设置窗口即恢复注册、恢复失败给出提示;录制中再次点击「录制热键」即取消(对齐 mac),也可Esc或失焦退出并恢复原值。
- 唤出焦点保护期与防抖状态机 (
- Windows 看板右侧滚动条与 mac 不一致 (C101):主看板卡片滚动区
#scroll原有一条半透明细滚动条(scrollbar-width: thin+ 4px::-webkit-scrollbar),而 mac 看板恒隐藏滚动指示条(.scrollIndicators(.hidden)+ C044 看门狗)。现改为scrollbar-width: none+::-webkit-scrollbar { display: none }不再显示滚动条,滚轮 / 触控板滚动照常;内容溢出时卡片也不再因让出滚动条宽度而变窄。设置窗口的滚动条不在本次范围内。 - Windows 订阅启用开关不再跟随验证结果 (C090):
subscription_providers[].enabled升为该 Provider 启用态的唯一事实源(enabled_providers降级为兼容读入),验证ok即启用、failed/needsRelogin即禁用(fail-closed),与 macapplyingVerification同语义;启用开关恒取已保存的启用态渲染(移除重绘前勾选的沿用),验证结果与settings-updated后开关即时跟随;全新安装的订阅集合默认不在已添加/启用集合内(不再默认全开),既有用户配置按迁移规则保留、不做批量关闭。 - Windows 无法配置 Cline,保存恒报「凭证字段不受支持」(C097):
clineQuotaAccounts并入api_key类分支(alloweddisplay_name/api_key,requiredapi_key),与 Kimi / DeepSeek / Jev 同形;合法 Cline 凭据可保存并读回,过短仍按 C092 的长度下限规则拒绝。