@deepseek-ai/dsh-usage-dashboard
Usage dashboard plugin for DeepSeek Harness: per-day token/cost aggregation with a TokenScope-style web panel
AI 분석
提供直观、美观的 Token 消耗与费用可视化看板。适合想要一目了然掌握自己 AI 使用额度、模型分布和活跃度的用户。
설치
검증된 bundle이 없거나 호환성 검사에 실패했습니다. 먼저 저장소 설명을 읽어 주세요. 전체 README 읽기 ↗
@deepseek-ai/dsh-usage-dashboard
DeepSeek Harness 的用量仪表盘插件:在 Web GUI 的设置弹窗里以「用量」小节呈现,按「今日 / 本周 / 本月」展示 Token 总量、估算花费、缓存命中占比、按模型分布、工具调用排行与全年活跃热力图。交互语言参考 TokenScope(hero 计数动画、双色缓存拆分条、堆叠柱状图、费用环图、sparkline 与 GitHub 风格热力图),视觉完全遵循 dsh 设置面板的设计语言:IconDataOutline16 图标、模块卡片(layer-1 表面 + 细边框 + 圆角)、14/22 正文字号与 --dsw-* 主题 token,深浅主题自动适配。
插件是双面(dual-half)包:Node 侧聚合 session/event 事件流并注册 GET /api/usage-dashboard 路由;浏览器侧通过 settings.section 插槽注册面板。遵循 dsh 客户端插件规范(dsh.client 清单、window.__ModuleLoader__ 闭包产物、CSS Modules + --dsw-* 主题 token、slots.inject 声明期注入)。
国际化:全部文案与时间轴标签跟随 harness 的语言设置(设置 → 通用 → 语言)实时切换中文/英文——词典注册在 usage 命名空间,宿主只下发语言无关的时间键(YYYY-MM-DD / YYYY-MM-DDTHH),刻度与悬停标签由客户端按当前语言格式化。
功能
| 区域 | 内容 |
|---|---|
| 头条 | 本时段总 Token(计数动画)、环比涨跌、估算花费;时段切换器右侧提供截图按钮(TokenScope 同款:modern-screenshot 2x 光栅化整段面板,按当前主题底色导出 PNG 下载,截图按钮自身被过滤,toast 反馈) |
| 缓存拆分 | 已缓存 / 新输入 双色占比条 + 命中率;蓝色系双色调(TokenScope 同构:深=已缓存、浅=其余) |
| 趋势图 | 按小时(今日)/ 按天(本周、本月)的堆叠柱状图,悬停提示;横轴沿用 TokenScope 刻度约定:今日每 4 小时一个刻度(04/08/…,跳过 0 点)、本周逐日标注周一 |
| 模型分布 | Token 份额排行(最大余数法保证占比合计 100.0%)与花费环图;无价格模型仅统计 Token 并在脚注注明。颜色遵循「用量越多颜色越深」:排行第 1 最深品牌蓝,逐级变浅 |
| 迷你指标 | 请求数、会话数、花费趋势 sparkline |
| 工具调用 | 按调用次数的排行(默认前 5,可展开) |
| 热力图 | 每日活跃度热图:与 TokenScope 同口径 —— 约 26 周、周日对齐开头,四等分色阶(f<0.25/0.5/0.75 分档),悬停提示与 Less/More 图例;月份标注与文案随语言切换 |
数据口径
- 来源:
session/event事件流。仅折叠assistant/message的最终usage(流式assistant/chunk的 usage 采样是该步的预览,不重复计数);无效 usage(缺失或非有限数的 input/output)跳过。 - 时间:按宿主进程本地时间落桶(天桶 + 最近 48 小时的小时桶),与用户看到的日历一致。本周为自然周(周一
周日)、本月为自然月(1 日月末),环比基期为上一自然周/自然月,与 TokenScope 口径一致。 - 模型归属:每会话记录最近一次
request/header的config.model;无归属计入unknown。 - 持久化:聚合每 30s 原子写入
$DSH_HOME/usage-dashboard.json(tmp+rename),启动时恢复,因此重启不丢历史。种子历史不触发事件,统计自插件挂载起累计。 - 保留:天桶保留
keepDays(默认 400 天,需覆盖热力图窗口);小时桶保留 48 小时。热力图窗口固定为约 26 周(周日对齐,同 TokenScope)。
价格与成本估算
价格算法与 TokenScope 完全一致(移植自其 pricing.rs):
- 数据源:models.dev 公开目录(
https://models.dev/api.json,USD/百万 token),24h 定时刷新,缓存原始 payload 到$DSH_HOME/usage-pricing.json(离线用快照),目录解析零模型时拒绝写入缓存防止污染。Config.pricing可按模型覆盖。 - 计价公式(四种 token 各按自己的单价,缺省即 0,不做输入价兜底):
cost = input×输入单价 + output×输出单价 + cacheWrite×缓存写单价 + cacheRead×缓存读单价 - 选价规则(目录中同一模型 id 出现在多个供应商名下):按「官方供应商优先 → 含缓存价的条目优先 → 裸 id 优先」稳定排序后首写者胜(与 TokenScope 的
is_first_party/has_cache/bare排序一致;官方映射含国际+国内双键,套餐键排除);全零价格条目不作为计价来源。 - 匹配:精确 id → 裸 id 别名 → 规范化键(小写 +
.→p版本分隔统一,如glm-5.1⇄glm-5p1)。匹配不到只统计 Token、不计花费,UI 脚注列出。 - 所有金额标注「估算 (est.)」。与 TokenScope 的差异仅在兜底来源:TokenScope 另有 LiteLLM 补缺 + 内置快照,本插件当前只接 models.dev(DSH 常用模型均被覆盖;如需 LiteLLM 层可再加)。
安装
插件包需对 dsh 的 Loader 可见,并在用户补丁层挂一行:
## 配置
Loader 行 `config` 字段,全部可选(Schemastery 校验):
| 键 | 默认 | 说明 |
|---|---|---|
| `pricing` | — | 按模型覆盖价格(每 token 美元):`{ input, output, cacheRead?, cacheWrite? }`,覆盖拉取目录 |
| `pricingUrl` | `https://models.dev/api.json` | 价格目录地址 |
| `pricingRefreshMs` | `86400000` | 拉取间隔;`false` 完全禁用网络(离线部署) |
| `pricingCacheFile` | `usage-pricing.json` | `$DSH_HOME` 下的价格缓存文件 |
| `keepDays` | `400` | 天桶保留天数(183–800;热力图窗口固定为 26 周) |
| `flushIntervalMs` | `30000` | 聚合落盘间隔 |
| `snapshotFile` | `usage-dashboard.json` | `$DSH_HOME` 下的聚合快照文件 |