B
dsh-token-heatmap-wyz
beiluoqu/dsh-token-heatmap-wyz
dsh web 的 Token 用量热力图:固定近 26 周(周日起始对齐)按天着色、GitHub 风格、深色/浅色自适应;今日/本周/本月/累计四个总量 chip 点击即把明细表锁定到对应时段,可再点选单日;明细按 provider/model 拆分(输入/输出/缓存读/缓存写/占比)。数据全部来自本机会话日志,增量聚合 + 磁盘缓存。
설치
dsh plugin --profile web add github:beiluoqu/dsh-token-heatmap-wyzREADME
dsh-token-heatmap-wyz
DeepSeek Harness(dsh web)插件:Token 用量热力图 + 按模型的 token 用量明细。
- 热力图:近 26 周按天着色(GitHub 风格,深色/浅色主题自适应,窄屏横向滚动),格点为对数刻度。
- 总量:今日 / 本周 / 本月 / 累计 四个总量 chip,点击即把明细表锁定到对应时段(再点一次取消)。
- 明细:热力图下方是按
provider/model归属的 token 用量表(输入 / 输出 / 缓存读 / 缓存写 / 合计 / 占比 + 占比条)。 - 点选热力图中的某一天或任一总量 chip,明细表切换到该范围;点「全部」恢复当前视图的窗口聚合。
- 数据完全来自本机:聚合所有会话的事件日志(
assistant/message的data.usage与assistant/chunk的 usage 样本),增量折叠 + 磁盘缓存,稳态开销 O(新增事件)。
使用
安装到 web profile(本地目录):
dsh plugin --profile web add <本目录路径>
# 例如:
dsh plugin --profile web add C:\path\to\dsh-token-heatmap
或发布到 npm 后:
dsh plugin --profile web add dsh-token-heatmap-wyz
重启 dsh web 后,打开 设置 → Token 热力图 即可看到面板;API 端点:
GET http://127.0.0.1:<port>/api/dsh-token-heatmap-wyz/usage
返回 {ok, days:[{date, inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, tokens, models:[...]}], models:[...], total:{...}, updatedAt},仅允许回环地址访问(peer-socket fence)。
更新
重新运行安装命令会取到最新发布版本(npm 安装路径):
dsh plugin --profile web add dsh-token-heatmap-wyz
卸载
dsh plugin --profile web remove dsh-token-heatmap-wyz
结构
| 文件 | 说明 |
|---|---|
lib/index.js | Host 入口:注册 /api/dsh-token-heatmap-wyz/usage 精确路由,增量聚合 live + persisted 会话 |
lib/usage.js | 纯聚合逻辑(无依赖,可单测):样本替换语义、per-day/per-model 分桶 |
client/client.js | Client 入口:设置页 section 注册 + 热力图/明细表 UI(纯 JS,无构建) |
cordis.patch.yml | profile bundle 挂载声明 |
聚合语义参考 Ychris12138/dsh-usage-stats(MIT,同一事件模型的成熟实现)与官方 dsh-token-meter 的 tokenUsage 投影:同一 (turn, step) 的重复样本会替换而非累加早期样本。
实现约束(Dsh Plugin 生态约定)
- 纯 JS,无 JSX/TypeScript;React 一律
React.createElement。 - Services:Host 用
ctx.get()/inject:声明(webServer、sessions、sessionPersistence);Client 注入slots、locale,通过settings.section插槽注册面板。 - 不写业务持久化到 plugin 目录;统计缓存在
~/.dsh/storages/dsh-token-heatmap-wyz-cache.json(与 dsh-usage-stats 相同约定)。
开发
无构建步骤,测试仅依赖 Node(≥ 20),不需要 dsh 运行时:
npm test
test/cache-prune.mjs:缓存裁剪端到端测试(自包含,使用临时DSH_HOME);test/render-smoke.cjs:渲染冒烟测试(以 fake React 驱动组件并检查元素树);test/harness-client.cjs:客户端 bundle 装配 + 纯函数单测(需要本机已全局安装 dsh CLI,以解析其中的react)。