Skip to content

Releases: Woo3aN/dsh-peak-bar

Release list

0.3.0

0.3.0 Pre-release
Pre-release

Choose a tag to compare

@Woo3aN Woo3aN released this 09 Oct 13:54

⚠️ pre-release —— 0.x 表示尚未稳定,接口、CSS 变量名与文件结构可能变动。

安装方式见 README,
也可以直接下载下面的 .zip 解压后添加本地目录。

首个公开版本:窗口标题栏居中的一枚小胶囊,显示 DeepSeek API 的峰谷时段、账户余额与今日已用。

新增

  • 窗口标题栏正中的胶囊:注册进 shell.overlay,Windows 上也能和最小化/关闭按钮同一行。
    实测居中(2115px 宽屏幕上中心在 49.9%)。
  • 主区域详情面板:峰谷状态、距下次切换倒计时、余额、今日已用、两条来源与计费规则说明;
    右上角的 ✕ 走 layout.selectPanel(null) 返回对话,没有 layout 服务时不渲染这个按钮。
  • 读取失败不静默:从未读到数值时胶囊写一句短原因(-- 必须有解释);已经有数值时保留旧值、
    只有失败持续超过 2 分钟才挂「余额未刷新」标记。完整原因始终在悬停提示与详情面板里。
  • 失败递退重试:15s → 30s → 60s(正常 60s 轮询);浏览器报告网络恢复(online)
    或窗口重新可见时立刻重试,成功后再回到 60s。
  • 余额两条路:① 账号登录态 remote.account.getBalance();
    ② 账号路不可用时,Host 从 DSH 凭据服务解析 DEEPSEEK_API_KEY,直连官方
    GET https://api.deepseek.com/user/balance,密钥不出 Host。两条路都标注来源。
  • 「今日已用」:按余额下降观测累计(充值/赠金不计入、也不抹除已记消费),按北京时间日分账。
    账本由 Host 半原子写 <DSH_HOME>/.dsh-peak-bar.json(临时文件 + rename),保留 14 天,
    跨重启 / 跨端口 / 多窗口保留;文件损坏时当作空账本继续。
  • Host 半(index.js):本机路由与账本,带 loopback 信任栅栏;没有 HTTP 载体的 profile 仍能激活。
  • 颜色默认跟随皮肤:所有颜色变量的默认值都是宿主语义 token(--dsw-alias-*),
    样式表内不含任何颜色字面值(有回归测试钉住)。动效时长与缓动用主题的
    --ds-transition-duration / --ds-ease-in-out,并尊重 prefers-reduced-motion。
  • 完整 zh/en 本地化:倒计时单位与全部失败原因都走词典;插件卡片带 locale 元数据。

变更

  • 包名与仓库名改为 dsh-peak-bar(原名 dsh-rhine-statusbar)——破坏性变更。
    胶囊的颜色早已与特定皮肤解耦、跟随任意皮肤,所以去掉 rhine。同时改掉全部内部标识:
    客户端模块 id、本机路由(/dsh-peak-bar/spend、/dsh-peak-bar/balance)、
    CSS 变量与类名前缀(--dsh-peak-bar-*、dshPeakBar*)、账本文件名(.dsh-peak-bar.json)、
    环境变量(DSH_PEAK_BAR_BALANCE_URL)。
    升级须知:node_modules 下旧包名目录不再被引用,需删掉 dsh-rhine-statusbar 并重新安装一次;
    账本文件名随之改变,旧的 .dsh-rhine-statusbar.json 不会被读取
    (如需保留「今日已用」历史,手动改名为 .dsh-peak-bar.json)。
  • 图标换成中性配色(不再使用莱茵生命皮肤的橙/棕)。

修复

  • 点击胶囊打不开面板:layout 从未被注入,而代码却直接读 props.ctx.layout ——
    cordis 拒绝读取未注入的服务(读取即抛错),错误从 React 的 onClick 里逃出去,
    表现就是点了完全没反应。现在 layout 走自己的可选注入作用域(与 remote.account 同一套写法),
    调用包在 try/catch 里,并且只在真的能打开时才在提示里写「点击查看详情」。
  • 余额永远显示 --:账号返回是两层 {ok, value},旧代码直接从外层取钱包。
  • remote.account 不是 remote 的子属性:它是独立的 cordis 服务,旧代码只注入 remote,
    会抛 cannot get property "remote.account"。
  • 胶囊丢失描边与底色:颜色变量曾声明在 html 上,而主题把 --dsw-alias-* 挂在 body 上,
    导致 border 求值成非法值;改为在使用处 var(--dsh-peak-bar-x, 主题 token) 惰性回退。
  • 悬停时提示每秒闪一次:原生 title 里含每秒变化的倒计时;倒计时只留在可见文字里。
  • 悬停提示重复面板标题:原先是 峰谷 · 余额: 谷时 · 余额 ¥20.79 …,同一个词出现两次
    还夹着半角冒号;现在按「每个数字只出现一次」拼装,并把「本次运行统计」的长括号收成一个词
    ((未持久化))。
  • 胶囊被窗口右缘截断:失败原因动辄几十字,而它那个 span 设了 flex:none 不会收缩。
    现在胶囊只放短句,note 改为可收缩省略(flex:0 1 auto),完整原因移到悬停提示与面板。
  • 详情面板只占中间一栏:面板自己设了 max-width:520px;现在占满主区域(width/height:100%),
    阅读宽度改加在正文(rows 680px、段落 72ch)上。
  • apply() 抛错会让胶囊无声消失:现在注册一个显示失败原因的兜底条目
    (该分支不依赖已注册的词典,自带 zh/en 两行并按活动语言选择)。
  • 节假日表到期后不再「自信作答」:超过覆盖范围(2026-12-31)时面板提示峰谷判定可能不准。
  • API key 路回传 is_available=false 时,面板注明该余额被平台标记为不可用。
  • 未配置 API key 时不再写成 API key 余额不可用(no-key),改成短语「未配置 API key」——
    配置事实不该长得像报错。
  • 皮肤自定义示例里的 var(--dsw-radius-sm) 补上字面量兜底
    (莱茵生命皮肤并未定义 --dsw-radius-*,裸引用会整条失效)。

文档

  • npm test 跑全部三套测试(此前漏了 tests/host.test.mjs,改坏 Host 半边也不会报红);
    files 一并收录 tests/ 与 docs/,发布后测试可复现。
  • 补上实机截图(docs/:标题栏整条、胶囊特写、详情面板),
    并把「位置」一节写成可直接抄的覆盖写法。
  • 截图脱敏:只重绘数值(余额、今日已用、倒计时),换成同一套示意值
    12小时30分 / ¥42.00 / ¥1.25,排版、字体、配色、菜单与窗口按钮都是原样。
  • 增补「致谢」一节;「已知限制」如实写明未覆盖的平台与节日表年份。
  • 补 repository / bugs / homepage 字段。

说明

  • 只在 Windows 官方桌面客户端 + DSH 0.2.0-rc.2 实测过;macOS / Linux 与纯浏览器模式未测。
    纯浏览器模式下没有标题栏,胶囊会浮在应用顶部居中。
  • 「今日已用」是按余额差观测的推算值,不是平台账单:它看不到余额之外的花费
    (例如赠金消耗与充值在观测口径下会互相抵消的部分),也不含其他厂商渠道的消费;
    「余额上升」一律视为充值、不计为负消费。
  • 请求里带的客户端版本是 'unknown':DSH 官方客户端在构建时内联 DSH_CLIENT_VERSION,
    第三方插件拿不到,只能兜底(实测可用)。
  • 账本只在本机写文件、不联网;Host 路由不可用时退化为「本次运行统计」——
    丢的是历史,不是功能。