dxxo77/dsh-plugin-quota-balance:在 DSH 用量行最左侧显示账户余额

前言

DSH 桌面版在输入框下方有一行官方用量行:轮次、步数、采样速度、Token 用量、缓存命中、上下文占用,都在。唯独账户里有多少钱,界面上看不到。要确认余额得另外打开 DeepSeek 的网页账户页,切窗口、看数字、再切回来,和当前会话的消耗对不上。

dxxo77 维护的插件 dsh-plugin-quota-balance 解决的就是这件事:把余额放到用量行最左侧,和官方那几组数字同一行、同一字号、同一灰度,不额外占位;点一下原地展开明细,能看到普通余额和赠送额度分项。下面是它的功能、安装方式和实现要点。

这是什么

一句话定位:DSH 的 Host + Client 双半边插件,新增一个 HTTP 接口把 deepseekAccount 的余额读出来,再往客户端输入框的用量行里塞一个单元格。

  • 维护者:dxxo77
  • 许可证:MIT
  • 仓库:https://github.com/dxxo77/dsh-plugin-quota-balance
  • 目录页:https://www.skillhub.cn/plugins/dxxo77/dsh-plugin-quota-balance
  • 目录页上的分类是「客户端」,星标 1(以目录页为准)
  • README 里提交给 awesome-dsh-plugin 的市场条目分类是 usage

前提是宿主要具备 deepseekAccount 服务,也就是需要 DSH 桌面版,并且当前已登录 DeepSeek 账号。只装浏览器插件环境跑不了。

核心功能

从 README 的功能描述看,覆盖这几件事:

  1. 用量行最左侧显示当前账户余额(¥),和官方数字同一行、同一字号、同一灰度。
  2. 点击徽标原地展开明细浮层:账户余额、普通余额、赠送额度、更新时间,以及「刷新」和「去充值」。
  3. 未登录或读取失败时整块隐藏,不占位。
  4. 徽标与浮层全部读取宿主暴露的表面 token,不做自己的一套配色,因此自动跟随 dsh-plugin-wallpaper-engine 的玻璃参数、明暗主题和壁纸切换;没装壁纸引擎时它是普通的深色浮层。

显示规则细节:

  • 同币种的多个钱包(普通余额 + 赠送额度)合并求和,例如 ¥10.47;多币种时用 · 连接。
  • 徽标为 order: -10,排在 conversation.composer.dock 的最左侧。
  • 浮层底边对齐徽标上方 6px,直接盖在输入框上,窗口缩放时重新贴靠。
  • 收起方式:Esc、点击卡片外部、再点一次徽标。
  • 字体与颜色跟随用量行:font: inherit、12px、--dsw-alias-label-tertiary。
  • 悬停有浅色圆角底、按下更深、focus-visible 有强调色描边;底衬用「内边距 + 等量负外边距」实现,悬停文字不位移。
  • 卡片挂在 document.body 上并用独立样式表,原因是输入框卡片自带裁剪与层叠上下文,放在插槽里的悬浮层会被它盖住。

安装与启用

README 给的安装方式不是命令行一条命令,而是先拿到代码,再在插件管理里挂载目录:

git clone https://github.com/dxxo77/dsh-plugin-quota-balance

然后在 DSH 的插件管理里安装该目录,install_bundle 指向仓库路径。安装后即时生效,输入框下方用量行最左侧出现余额,点它展开明细。

卸载:在插件管理里移除 dsh-plugin-quota-balance 即可。

仓库自带的文件分工:

文件 作用
index.js Host 半边:注册 GET /plugin/quota-balance/status,通过 deepseekAccount.getBalance() 读取余额并做 30s(失败 5s)缓存
client.js Client 半边:往 conversation.composer.dock 注册一个 order: -10 的单元格,每 60s、以及窗口重新可见时刷新
cordis.patch.yml 安装时插入 quota-balance 这一行
locale/*.json 插件在「插件」列表里的标题与描述
icon.svg 插件图标,由 package.json 的 dsh.client.exports 导出

package.json 里跟安装相关的字段:

"dsh": {
  "bundle": { "patch": "./cordis.patch.yml" },
  "client": {
    "platform": "web",
    "immediately": true,
    "inject": ["@deepseek-ai/dsh-client-ui-conversation"]
  }
}

inject 声明了客户端依赖的宿主模块,immediately 为 true 意味着随客户端一起加载。

接口与本地数据

插件内部接口:

GET /plugin/quota-balance/status
{"ok":true,"wallets":[{"currency":"CNY","balance":"5.40"},...],"normal":[...],"bonus":[...],"links":{"usageUrl":"...","topUpUrl":"..."},"fetchedAt":1793627086526}
{"ok":false,"reason":"unavailable"|"signed-out"|"failed"}

余额只在本地回环地址上暴露,且响应不带 CORS 头,网页无法跨源读取。这条限制可以放心:余额不会因为你装了这个插件而传到别的站点。

典型用法:改代码后怎么生效

  • 改 client.js:保存后页面会热更新,README 注明本插件实测即时生效。
  • 改 index.js:在插件管理里把本插件禁用再启用即可重载 Host 模块,不必重启应用(已实测);之后点卡片里的「刷新」取一次新数据。

与壁纸引擎的关系

这里的做法值得单独说:壁纸引擎不是给插件一套「浮层样式」,而是把宿主自己的表面 token 就地改写成玻璃配方,--dsw-alias-bg-layer-*、--dsw-alias-bg-overlay、--dsw-alias-border-* 全部被重映射。官方那些浮层(Token 用量、会话统计)读的就是这些 token,所以这个插件直接读同一个宿主 token,而不是抄壁纸插件的参数:

用途 取值
面板底色 var(--dsw-alias-bg-overlay, #26272b)
毛玻璃 backdrop-filter: blur(var(--we-blur, 13px)) saturate(var(--we-saturate, 1.3))
边框 --dsw-alias-border-l2
文字 --dsw-alias-label-primary/secondary/tertiary
强调色(去充值) var(--we-accent, var(--dsw-alias-brand-primary, #7db3ff))

README 里记了两个坑值:--dsw-alias-bg-base 在壁纸引擎下是 transparent,--dsw-alias-border-l1 的 alpha 是 0,拿这两个去铺底不会得到预期效果;--we-panel-color 这类实色会变成不透明板子。

另有一条值得抄的思路:样式注入到 <style id="quota-balance-css">,热更新时旧节点还在页面上,injectPanelCss() 必须覆盖 textContent,不能发现节点就 return;样式表原先只在浮层首次展开时注入,导致刷新页面后徽标没有样式,现在改为在 ctx.slots.inject(...) 里先调一次 injectPanelCss()。

适用场景与注意

适合这几类人:

  • 常驻桌面版跑会话、需要边看边算消耗的开发者;
  • 账户里有赠送额度,想看普通余额和赠送额度分项的人;
  • 已经在用 dsh-plugin-wallpaper-engine,希望浮层样式自动跟上主题和壁纸的人。

注意几点:

  • 插件以当前 DSH 进程的权限运行,能读到宿主已登录账户的余额。装之前建议先打开 index.js 和 client.js 看清楚,认同之后再启用。许可证是 MIT,作者是 dxxo77。
  • 余额数据只在本地回环暴露、无 CORS 头,本地脚本或浏览器控制台理论上可读,页面外无法跨源取。如果在意,装之前要确认这个边界符合你的预期。
  • 依赖两个宿主条件:DSH 桌面版(Host 有 deepseekAccount 服务)和已登录 DeepSeek 账号。只装客户端半边、不满足这两个条件时插件不会显示任何东西(未登录或读取失败整体隐藏,不报错也不占位)。
  • 这个插件不是官方出品,README 中列出的市场条目也投放在社区维护的 awesome-dsh-plugin 仓库,站点与市场会自动读入,和 DeepSeek / 幻方没有官方从属关系。

最后回顾:它做的事很窄,就是把余额从网页账户页挪到用量行里,顺带复用宿主表面 token 让浮层跟着壁纸引擎走。如果你已经在桌面版上长期使用,这是一条低成本的信息补全。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜