前言¶
DeepSeek Harness(命令行名 dsh)把模型、工具、会话和界面都做成插件。官方仓库 deepseek-ai/deepseek-harness 的口号是「Everything is a Plugin」:开发者不用改 Harness 源码,就能在配置层增删能力。日常跑 dsh web 时,真正不好盯的往往不是会话本身,而是用量——今天烧了多少 Token、缓存命中率怎样、DeepSeek 账户还剩多少、同一模型走官方路由和中转时分别花了多少。
默认网页界面并不把这些数字摊开。社区插件 dsh-usage-stats 做的就是这块:在侧边栏底部加一个「用量/余额」入口,用月历热力图和分模型明细看本地 Token 聚合,同时按当前供应商拉账户余额或 Token Plan 额度。
本文按插件目录页、GitHub README / package.json / GitHub API 交叉核对后整理。社区目录 deepseek-harness-plugin.com 是独立站点,用来发现和安装社区插件,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
这是什么¶
dsh-usage-stats 是一款界面增强插件,由 GitHub 用户 Ychris12138 维护,源码在 Ychris12138/dsh-usage-stats。package.json 中的当前版本是 0.2.0,主要语言是 JavaScript,许可证为 MIT。GitHub 仓库在 2026-08-17 核实为 56 stars。
目录页给它的定位是:给 DSH 网页界面提供 Token 用量热力图、分模型明细与 DeepSeek 账户余额。仓库 README 写得更完整——它监测的是多供应商账户,不只 DeepSeek:API 供应商显示余额,Token Plan 显示分窗口额度;Token 用量分析不依赖额外凭据。
它解决的是这类问题:
- 网页端看不到今日 / 本月 / 累计 Token,也不知道缓存命中率
- 多个 provider 混用时,同一模型名会混在一起,分不清钱花在哪条路由上
- DeepSeek、OpenRouter、Moonshot 等账户余额,以及 Z.ai、Kimi For Coding、MiniMax Coding Plan 这类订阅额度,要分别打开上游控制台才看得到
- 不想把 API Key、Cookie 或管理 PAT 送到浏览器里
README 说明:展示图使用脱敏演示数据;插件不会把 API Key、Cookie、管理 PAT 或上游原始响应发送到浏览器。
核心功能¶
统一账户卡片¶
面板一次只呈现当前供应商。API 供应商走余额模式,Token Plan 供应商走分窗口额度。没有公开账户接口的供应商仍会正常统计 Token,账户卡片会明确显示「不支持」,不会猜测余额。
README 列出的内置适配包括:
- 余额:DeepSeek(
/user/balance)、OpenRouter(/api/v1/credits)、Moonshot / Kimi API、New API - 订阅 / Token Plan:OpenCode Go、Z.ai / 智谱、Kimi For Coding、MiniMax Coding Plan
- 自动判别:Sub2API / Passion(钱包响应显示余额;带
quota_limited或subscription的响应切到额度窗口) - 自定义:通用余额模板,以及声明式 JSON Pointer 查询(只支持受限 GET + JSON,不执行 JavaScript)
浏览器只请求当前选择的 provider。后台刷新与面板是否打开无关。手动刷新会更新用量、供应商列表,并强制刷新当前账户,不会批量强制请求其他供应商。
Token 用量分析¶
用量面板提供今日、本月、累计、缓存命中率、月历热图,以及按日期 / 供应商 / 模型下钻。界面支持中文和英文。
统计口径来自 assistant/chunk 或 assistant/message 里 provider 上报的 usage,不是本地估算。相同 turn/step 的后续样本会替换旧样本,并按 provider/model 归集。因此同一模型走不同 provider 时会分开统计,例如 deepseek-official · deepseek-chat 与 ark · deepseek-chat。
「最近 14 天」按本地日历计算,只显示窗口内存在用量的日期;未来时间戳不会计入。
后台监测¶
服务端启动即刷新,之后每五分钟更新全部已配置账户与本地 Token 聚合。用量缓存写在 ~/.dsh/storages/usage-stats-cache.json,只保存聚合 Token、会话 id、不透明 revision 与折叠游标,不保存提示词、回复或文件路径。
本机安全边界¶
五个 HTTP 端点只接受回环 GET,并同时校验 peer socket 与 Host:
| Method | Path | 作用 |
|---|---|---|
GET |
/api/usage-stats/usage |
按日期 / provider / model 聚合的 Token 与缓存命中率 |
GET |
/api/usage-stats/providers |
provider 列表、account mode、adapter、状态与预警摘要 |
GET |
/api/usage-stats/account?provider= |
当前 provider 的余额或 Token Plan 快照;refresh=1 强制刷新 |
GET |
/api/usage-stats/balance?provider= |
0.1.x 余额兼容路由 |
GET |
/api/usage-stats/subscriptions |
0.1.x Token Plan 兼容路由 |
非 GET 返回 405,非回环请求返回 403。凭据只在服务端解析,并发往校验后的供应商地址。自定义 monitor 默认要求 HTTPS、同源相对路径、手动 redirect 和 JSON 响应,body 上限 1 MiB。
安装与启用¶
目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:
dsh plugin add github:Ychris12138/dsh-usage-stats
仓库 README 写明:插件需要 DeepSeek Harness 的 web profile,并要求 @deepseek-ai/dsh >= 0.1.0-rc.6。更明确的写法是带上 profile:
dsh plugin --profile web add "github:Ychris12138/dsh-usage-stats"
装完后重启已经运行的 dsh web,并在浏览器中硬刷新。侧边栏底部会出现「用量/余额」(Usage/Balance)入口。
如需可复现安装,目录页建议固定 commit 哈希。2026-08-17 核实的 main 最新提交是 24e6d0ff9b2cb98495f3f362958d7f6ef586e8c0:
dsh plugin add github:Ychris12138/dsh-usage-stats#24e6d0ff9b2cb98495f3f362958d7f6ef586e8c0
升级或卸载(README):
dsh plugin --profile web update dsh-usage-stats
dsh plugin --profile web remove dsh-usage-stats
无法使用 dsh plugin 时,README 提供兼容安装器:
npx --yes github:Ychris12138/dsh-usage-stats
安装器会把运行文件复制到 ~/.dsh/profiles/node_modules/dsh-usage-stats,并在 profiles/web/cordis.patch.yml 中幂等启用插件。设置了 DSH_HOME 时使用该目录。dsh plugin 与 npx 是两条独立安装路径,选择其中一种即可;不要同时保留手工 Cordis entry 和 bundle 注册,否则会重复挂载。
目录页和 README 都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。
典型用法¶
1. 打开面板并下钻¶
README 给出的操作步骤:
- 点击侧边栏「用量/余额」。
- 用「当前供应商」切换账户卡片;一次只显示一个 provider。
- 使用
‹/›切换月份,点击热图日期查看当天的 provider / model 明细。 - 标题栏刷新会更新 Token、provider 列表,并强制刷新当前账户。
2. 配置账户凭据¶
凭据由 Harness 从 ~/.dsh/.credentials.yaml 解析。安装器不会读取、创建或修改该文件。不要把真实 Key、Cookie 或管理令牌提交到 Git、公开 issue,或粘贴给编码 Agent。
DeepSeek、Moonshot 等默认复用对应 provider profile 的 apiKeyEnv。例如:
# ~/.dsh/.credentials.yaml
DEEPSEEK_API_KEY: sk-your-key-here
OpenRouter 是明确的例外:官方账户 credits 接口要求 Management Key,不能复用普通推理 OPENROUTER_API_KEY。未配置时显示「未配置」,不会拿推理 Key 试探:
# ~/.dsh/.credentials.yaml
OPENROUTER_MANAGEMENT_KEY: sk-or-v1-your-management-key
插件按 total_credits - total_usage 显示 OpenRouter 余额。普通 Key 的 /api/v1/key 只描述单个 Key 的 spending limit,不会被当作账户余额。
Token Plan 类供应商使用各自的环境变量名,例如 OPENCODE_GO_API_KEY、ZAI_API_KEY、KIMI_API_KEY、MINIMAX_API_KEY。中国区 Z.ai 可设 ZAI_API_REGION: bigmodel-cn;中国区 MiniMax 可设 MINIMAX_API_REGION: cn。OpenCode Go 还会依次尝试 Harness credential 和本地 ~/.local/share/opencode/auth.json。
3. 给中转站加 monitor¶
monitor 配置要合并进现有的 name: dsh-usage-stats Cordis entry,不要追加第二个插件 entry。monitor 键必须是 Harness 中真实存在的 provider id;未知 provider、adapter 或非法映射会在路由和 timer 注册前阻止插件启动。
New API 默认用 provider 推理 Token 查询 /api/usage/token/:
# ~/.dsh/profiles/web/cordis.patch.yml
- insert:
- id: usage-stats
name: dsh-usage-stats
config:
monitors:
relay-a:
adapter: new-api
声明式自定义查询只支持受限 GET + JSON Pointer。warning.warnBelow 与 warning.criticalBelow 是余额绝对值阈值。具有总额度的余额和 Token Plan 会自动产生 normal / warning / critical 剩余比例状态(默认 30% / 10%)。
适用场景与注意事项¶
适合这些人和场景:
- 日常使用
dsh web,需要在本机看 Token 消耗和缓存命中,而不是打开上游控制台 - 同时配置了 DeepSeek、OpenRouter、Moonshot、Z.ai、Kimi、MiniMax 或多条中转,想按供应商看余额或订阅额度
- 同一模型名走了多条路由,需要按
provider/model拆开对账
使用时注意下面几条,都来自目录页和仓库文档,不是额外发挥:
- 插件以当前 dsh 进程权限运行。 安装前检查源码与 MIT 许可证;需要可复现安装时固定 commit。
- 不要把端点经反向代理暴露到局域网或公网。 五个接口只为回环设计。本机反向代理会让插件看到代理自身的回环地址,从而绕过这层限制;确需代理时必须在代理层增加认证与访问控制。
- 凭据只放在 Harness 的 credentials 文件里。 安装器不碰
.credentials.yaml。OpenRouter 必须用 Management Key。报告问题或让 Agent 协助安装时,不要粘贴 Key、Cookie、原始日志或未脱敏余额。 - Harness 仍是开发者预览。 README 写明当前版本
0.2.0,依赖客户端模块加载器、Cordis 服务与 session persistence;预发布接口变化时可能需要同步适配。 - 不要混用两条安装路径。
dsh plugin和npx安装器二选一。自定义 monitor 必须挂在已有 entry 下,未知 adapter 会直接阻止启动。 - 安全问题按 SECURITY.md 私下报告。 不要在公开 issue 里附带可利用细节或真实余额。
小结¶
dsh-usage-stats 给 dsh web 补了一块本机用量面板:热力图和分模型明细看 Token,账户卡片看余额或订阅额度,后台按五分钟刷新,浏览器拿不到凭据。对已经在网页里跑 DeepSeek Harness、又需要盯消耗的人来说,它把「打开上游控制台对账」收成侧边栏里的一次点击。
相关地址:
- 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-usage-stats/
- GitHub:https://github.com/Ychris12138/dsh-usage-stats
- DeepSeek Harness 官方仓库:https://github.com/deepseek-ai/deepseek-harness