前言¶
用 DSH 做智能体开发和日常对话时,往往不止一个 DeepSeek 官方账号,还可能接了 new-api 类的中转站。DSH 本身不展示 API 用量:想确认余额、今天花了多少、当前是高峰还是空闲时段,只能逐个打开各站点后台,切账号、翻账单。侧栏虽然常驻,却缺一块直观的用量指示。
dsh-usage-panel 处理的就是这件事:在 DSH 左侧边栏底部嵌入一块面板,轮播显示官方账号(或手填 key)与各中转站的余额、今日消耗,官方站点额外标注当前处于高峰还是空闲时段。插件由 InkiChang 维护,属于客户端分类。
这是什么¶
dsh-usage-panel 是 DeepSeek Harness 的一个客户端插件。它不改 DSH 本身,而是在侧栏底部追加一块常驻面板;面板位于「记忆」这类底部入口之下、账号行(头像与用户名)之上,采用嵌入排版而非浮层覆盖。
它解决三类信息查询:官方账号余额、new-api 中转站余额与今日/本月消耗、以及当前计价时段(官方高峰为空闲的 2 倍,面板用「峰 / 闲」标记)。
核心功能¶
| 能力 | 说明 |
|---|---|
| 侧栏常驻块 | 嵌入侧栏底部,位于底部入口之下、账号行之上,宽度与左缩进同相邻入口一致 |
| 多站点轮播 | 官方账号、多个官方 key、多个中转站可同时存在,按间隔轮播 |
| 不遮挡其它入口 | 面板占据侧栏内的实际位置;其它插件新增底部入口时向上排布,两者不重叠 |
| 余额 + 今日消耗 | 每个站点两行数字,未配置或出错时给出原因与入口 |
| 峰 / 闲字块 | 仅官方站点显示,颜色随主题自适应 |
| 悬停浮层 | 余额与今日消耗;中转站另有本月已用、本月起算日,官方另有高峰/空闲分账 |
| 手动刷新 | 点击面板上的时间即可立即刷新 |
| 设置浮层 | 增删站点、测试连接、显示开关、刷新间隔,全部在面板内完成 |
| 只存本机 | 令牌与 key 落在 ~/.dsh/usage-panel/config.json,不外发 |
核心的实现方式是:插件不注册到 DSH 的插件入口表,因此不与「记忆」「导入会话」等入口竞争位置;它定位侧栏底部的账号行,在该行之前插入一个透明占位元素,占位高度等于面板自身高度,宿主布局会把占位下方内容下移,形成面板空间,面板绘制于占位区域。宿主重绘侧栏时占位可能被清除,插件每 900 毫秒检查一次并在缺失时补回。
这带来三个直接后果:
- 其它插件在底部新增入口时,面板位置不随之移动,不会重叠。
- 窗口尺寸、主题切换、站点轮播均不影响停靠位置,面板始终位于账号行上方。
- 侧栏底部高度增加约 56 像素(等于面板高度),会话列表可见行数相应减少。
安装与启用¶
插件以本地目录作为 bundle 包安装,而不是用包名拉取。先把本仓库目录下载到本机,然后在 DSH 会话里让插件管理器安装:
# 在 DSH 会话里让插件管理器安装本地目录(换成你的绝对路径)
plugin_manager action=install_bundle target="C:\path\to\dsh-usage-panel"
安装或卸载插件后,需完整退出并重启一次 DSH,否则侧栏不会显示该面板。原因是 DSH 在进程启动时读取插件清单并注册后端入口与前端资源,运行中的进程不会因重装而重建这份清单,仅刷新页面(Ctrl+R)同样无法加载新安装的代码,实测表现为前端资源返回 404、侧栏对应位置为空。
生效规则需要记清:
- 插件已安装且只修改
client.js(界面部分)时,刷新页面(Ctrl+R)即可生效。 - 修改
index.js(后端),或重装、卸载插件后,必须完整退出并重启 DSH。
典型用法¶
安装并重启后,按下面顺序配置即可开始读取用量。
- 左栏底部出现用量面板后,点击面板上的「设置」(尚未配置时显示「去设置」),或从
设置 → Usage 面板进入。 - 配置官方站点:默认「数据来源」为 DSH 已登录账号,处于登录状态即显示余额,无需填 key。如需单独跟踪某个 key,将来源改为「手填 API key」并填入 key。
- 添加中转站:填写站点地址(例如
https://<中转站域名>)与访问令牌。部分站点还需填写数字用户 ID(响应头New-Api-User),填写后可正常取数。 - 点击「测试连接」确认可读取余额后保存。
数据口径上,官方站点余额取自 GET /user/balance,今日消耗则由本机采样推算:官方只提供余额接口、没有用量明细,插件记录余额随时间的变化,用「当日首个样本余额 − 当前余额」估算今日消耗,并按采样时刻判断该笔消耗落在高峰还是空闲时段。因此 DSH 未运行的时段不计入统计,插件首次使用的当天从启动时刻起算。
中转站按 new-api 的接口形态读取:余额来自 GET /api/user/self 的 data.quota 除以 /api/status 提供的 quota_per_unit;今日/本月已用按 /api/data/self、/api/log/self/stat、/api/log/self 三种接口的优先级尝试,取到即止。「本月起算」显示自然月首日。
配置项集中在设置浮层:
| 配置 | 位置 | 说明 |
|---|---|---|
| 刷新间隔 | 设置浮层 | 默认 300 秒,最小 60 秒 |
| 显示哪些站点 | 设置浮层 | 关闭后该站点不参与轮播 |
| 数据来源 | 官方站点卡片 | DSH 已登录账号 或 手填 API key |
| 用户 ID | 中转站卡片 | 站点要求 New-Api-User 时填写 |
| 今天算节假日 | 设置浮层 | 强制把今天按空闲时段计价 |
配置文件为 ~/.dsh/usage-panel/config.json(站点与令牌)与 ~/.dsh/usage-panel/samples.json(余额采样,保留 4 天)。
适用场景与注意¶
适合需要同时盯着官方账号与 new-api 中转站用量、又希望少离开 DSH 界面的场景。本着「一切皆插件」的理念,这类能力本就应由外部插件补齐。
使用前注意以下几点:
- 插件以当前 DSH 进程权限运行,安装前应先检查源码与许可证(本插件为 MIT)。
- 手填官方 API key 是未验证路径:官方目前只对外提供
/user/balance,本机没有可用的官方 key,这条分支未经实测;遇到问题时先改回「已登录账号」来源再排查。 - 官方今日消耗是采样估算,精度等于刷新间隔,插件未运行期间的消费不会被记录。
- 中转站只按 new-api 的接口形态适配,其他面板(如 one-api 的不同分支)字段不一致时可能需要改
index.js里的取数函数。 - 不做跨站汇总:侧栏按站点轮播,浮层只显示当前站点自己的数字,不同站点的余额与单位不可直接相加。
- 嵌入定位通过读取 DSH 侧栏现有 DOM 结构实现,不属于官方接口;宿主调整侧栏结构后表现为面板回退为贴在「记忆」入口上方,其余功能正常。
- 隐私方面,所有请求只发往设置里填写的站点以及
api.deepseek.com,没有第三方统计上报;令牌只写本机配置文件,界面上只显示前三位与后四位。
小结¶
dsh-usage-panel 把多站点 DeepSeek 用量压缩成侧栏底部一块常驻面板:余额、今日消耗、峰/闲时段都能直接看到,增删站点与测试连接在面板内完成,改动不会与其它侧栏入口抢位置。对于同时使用官方账号和 new-api 中转站、且希望少切后台的场景,算一个直接可用的补充。
目录页:https://www.skillhub.cn/plugins/InkiChang/dsh-usage-panel
GitHub:https://github.com/InkiChang/dsh-usage-panel