DeepSeek Harness 的 Token 用量统计:近 7 天/30 天按模型的柱状图、饼图,外加近一年每日活跃热力图。
安装
# npm 包(预构建)
dsh plugin --profile web add @duke-dsh-plugins/dsh-token-stats
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:MoonlitDropOfBlood/dsh-token-stats
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
为 DeepSeek Harness(DSH) Web UI 打造的 Token 消耗统计插件:在设置面板里一目了然每个模型每天、每个统计区间的 token 用量。
功能
| 功能 | 说明 |
|---|---|
| 📊 两个 Tab | 近 7 天 / 近 30 天,两个区间都包含今天 |
| 📈 堆叠柱状图 | 统计区间内每个模型每天的消耗(悬停查看具体数字) |
| 🥧 饼图 | 统计区间内每个模型的总消耗占比 + 图例(精确值 + 百分比) |
| 🔥 GitHub 风格热力图 | 「近一年」每日活跃;天数随容器宽度自适应,最多显示 365 天(一年) |
| 🗂 汇总卡片 | 区间总 Tokens / 输入(含缓存) / 输出 |
| 💾 本地持久化 | 聚合结果落盘 <DSH_HOME>/data/dsh-token-stats/stats.json,冷启动只扫描新会话、秒开;删除该文件可强制全量重扫 |
| ⏱ 自动刷新 | 页面打开期间每 30s 刷新;历史回填期间每 2s 轮询进度 |
| 💰 套餐余额 | 输入框工具行(model 选择器左侧)内联显示当前 provider 的余额/套餐用量,跟随当前模型自动切换;支持 minimax / deepseek / kimi / openrouter / zhipu / mimo(小米);60s 轮询,点击立即刷新 |
| 🌗 主题适配 | 全部使用 DSH 设计 token,明暗主题自动跟随 |
套餐余额功能参考自 dsh-musage(MIT),API Key 直接复用 DSH 模型设置里已配置的凭据(
credentials服务),无需重复配置。
安装
标准安装(推荐)
本插件是标准 DSH bundle:package.json 声明 dsh.bundle.patch,包内自带 cordis.patch.yml,用官方 dsh plugin 命令安装:
# 本地开发:pnpm 软链到本仓库,改代码即生效(无需重新复制)
dsh plugin --profile web add /path/to/dsh-token-stats
# 正式发布:从 GitHub Release tarball 安装
dsh plugin --profile web add https://github.com/MoonlitDropOfBlood/dsh-token-stats/releases/download/v1.4.0/duke-dsh-plugins-dsh-token-stats-1.4.0.tgz
重启 DSH 后,打开 DSH Web UI 的设置(侧栏底部),左侧导航会出现 Token 统计 页。
dsh plugin add把插件装成 profile 的 npm 依赖并追加到dsh.profile.bundles,启动时 DSH 自动应用包内的cordis.patch.yml挂载插件。卸载:dsh plugin --profile web remove dsh-token-stats。
使用
- 打开 设置 → Token 统计。
- 在 近 7 天 / 近 30 天 两个 Tab 间切换:
- 柱状图展示区间内每天、每个模型的消耗(堆叠)。
- 饼图展示区间内每个模型的总消耗占比。
- 顶部卡片给出区间总 Tokens / 输入 / 输出。
- 下方 每日活跃 热力图展示更长时间范围:格子越多 = 容器越宽,最多覆盖近一年。
- 会话输入框工具行(model 选择器左侧)内联显示当前 provider 的套餐余额:
- DeepSeek / OpenRouter 显示余额(如
¥43.97/$12.50); - MiniMax / Kimi / 智谱 显示
5h X% | 7d Y%(5 小时 / 7 天窗口已用百分比,悬停查看重置时间); - 小米 MiMo 默认显示
今日 X · 7d Y(本地用量统计,零凭据、永不过期);若在「套餐余额」里填了 dashboard 登录 Cookie,则升级为官方剩余 X%+ 周重置倒计时(见下); - 切换模型时自动切换 provider;每 60s 自动刷新,点击读数立即强制刷新;
- 未配置对应 API Key 或拉取失败时显示
⚠(悬停查看原因);当前 provider 不在支持列表时不占位。
- DeepSeek / OpenRouter 显示余额(如
MiMo(小米)配置:默认零配置——读数来自本插件自己的会话日志聚合(今日 / 近 7 天消耗 token 数),不发任何 MiMo 请求、不会过期。缺点是拿不到套餐百分比(官方没开放任何 API Key 配额接口:
token-plan-*与api.主机只有 OpenAI 兼容的/v1推理 API,实测所有 Bearer 配额路径均 404;key 还与区域强绑定,CN key 在 SGP/AMS 主机一律 401)。想要官方剩余用量百分比,唯一路径是 dashboard 账号会话:打开 platform.xiaomimimo.com 登录后,F12 → Network 任一
/api/v1/*请求 → 复制完整Cookie请求头(含api-platform_serviceToken与userId)→ 粘到「设置 → Token 统计 → 套餐余额 → MiMo 官方剩余用量(可选)」保存(写入XIAOMI_MIMO_COOKIE)。插件内置最小 cookie jar:服务端若在响应里Set-Cookie续发会话会被自动吸收并写回凭据库(跨轮询、跨重启生效);Cookie 彻底失效时自动静默退回本地用量,不会报错。composer 读数按 route id 匹配(xiaomi-mimo/xiaomimimo/xiaomi-token-plan-cn/ 名字含 xiaomi 或 mimo 均可)。
工作原理
DSH 会话日志(唯一权威数据源)
├─ LIVE : session/event → assistant/message(usage) [插件启动后实时累计]
├─ HISTORY: sessionQuery.readSession() → 回填历史 [仅扫描从未回填过的会话]
├─ DEDUP : 按 session+seq 水位线去重,绝不重复计数
└─ PERSIST: 聚合 + 水位线落盘 stats.json(防抖写盘 + 停止时 flush)
│
▼
TokenStatsService.getStats() ← ctx.remote.tokenStats.getStats()(Client 调用)
TokenStatsService.getQuota() ← ctx.remote.tokenStats.getQuota(provider, force)
│
├─ getStats → 设置面板「Token 统计」页(柱状图 / 饼图 / 热力图)
└─ getQuota → composer 工具行内联读数(conversation.input.right,
紧贴 model select 左侧;跟随当前会话模型自动切 provider)
- 数据按本地日历天 × 模型(
provider::model)聚合;total = input + output + cacheRead + cacheWrite。 - 历史回填只统计插件启动前发生的调用,实时监听只统计启动后的,两者通过每个会话的事件序号水位线合并,不会重复。
- 模型/模型来自
assistant/message的message.source(kind = 'model'),无需自行解析请求头。 - 套餐余额:Host 半经
credentials服务解析用户在模型设置里已配置的 API Key(引用命名遵循<ROUTE>_API_KEY约定),GET provider 官方端点(宿主全局 fetch 优先,无 fetch 时回退subprocesscurl);30s 缓存 + 失败指数退避(5s→30min),不落盘。小米 MiMo 是例外:它没有 API Key 配额接口,默认用本地会话日志聚合出用量,填了 dashboard Cookie 才升级为官方剩余用量 %。
目录结构
dsh-token-stats/
├── index.js # Host 半:TokenStatsService(Remote 服务,采集 + 回填)
├── client.js # Client 半:设置页「Token 统计」UI bundle
├── typert.host.js # Typert Host manifest(tokenStats/getStats 描述)
├── cordis.patch.yml # dsh bundle patch(挂载行)
├── .github/workflows/ # GitHub Actions 发布
├── AGENTS.md # 面向 AI agent 的开发指南(含踩坑)
└── LICENSE # MIT
开发
npm run check # node --check index.js client.js typert.host.js
dsh plugin --profile web add /path/to/dsh-token-stats # 安装/重装到本机 DSH profile
详见 AGENTS.md——记录了 DSH 正式插件(Host/Client/Typert 三件套)的完整机制和踩坑。
License
本项目遵循 MIT License。
本项目是基于 DeepSeek Harness 构建的社区插件,并非 DeepSeek 官方产品。
链接
同类插件
bowenliang123/dsh-context★ 1880
DSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
Han-1413141/dsh-cost-meter★ 375
会话与当日 API 费用统计、预算图框(已用%)、官方余额、历史看板,支持峰谷计价与官方价格一键同步。
wssfk12138/dsh-damage-pulse★ 245
在 DSH Web 界面追踪 DeepSeek Token 用量、单次与会话费用及账户余额,并显示缓存感知的扣费动画。
zh667/TokenLedger★ 204
侧边栏用量面板:把 Token 归属到实际服务该请求的中转站,站点从已有的 provider 配置中读出,无需额外配置;含今日/本月/累计三窗口、按站点与模型下钻、一年活跃度热力图,以及 New API / Sub2API / DeepSeek 余额。
Ychris12138/dsh-usage-stats★ 170
多供应商用量看板:按供应商/模型统计 Token 与日期下钻,统一展示账户余额,并追踪 OpenCode Go / Z.ai 订阅额度。
PolinniZhong/dsh-personal-center★ 118
DeepSeek Harness 个人中心:跨会话用量统计、按模型成本估算、全局自定义指令、外观全局字号、数据驱动的桌面宠物(位图/矢量皮肤)与会话状态概览,纯本地离线运行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。