dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
统计本机全部 DSH 会话的历史 token 消耗,按 message.id 去重,支持自定义日期区间与按接入方的月度额度剩余。
统计本机全部 DSH 会话的历史 token 总消耗。与 dsh-context(只看单个会话)互补,只回答一个问题:我一共花了多少 token?message.id 消除 v0/v3 与 resume/fork 副本(否则虚高约 3 倍)@deepseek-ai/*$DSH_HOME/dsh-token-usage/ 写自己的缓存与额度配置,不联网数据来自会话日志中每条最终 assistant 消息的 usage 字段:
字段 · 含义 input · 非缓存输入 token output · 输出 token(reasoning 已含在内) cacheRead · 缓存读取 token total · input + output + cacheRead calls · LLM 调用次数
同一步的 streamingassistant/chunkusage 与最终assistant/messageusage 重复,只计后者。该口径已与dsh-usage账本逐项对拍验证(9/8、9/9、9/10 完全吻合)。
本插件是可本地安装的 bundle,无第三方运行时依赖、已内置构建产物;已发布到 npm:@liuguangzhe/dsh-token-usage。
dsh plugin --profile desktop add @liuguangzhe/dsh-token-usage然后重启 DSH Desktop(host 代码与 profile bundle 变更需要重启,刷新页面不够)。
在仓库根目录执行:
dsh plugin --profile desktop add .. 指当前目录;如果你在别的目录执行,把 . 换成仓库路径(例如 ~/Projects/dsh-token-usage)。
也可以先装到一个隔离 profile 验证:
```sh
dsh plugin --profile plugin-lab add .
dsh --profile plugin-lab --dump-config # 应看到 dsh-token-usage 层与插件行
`重启后打开 设置 → Token 统计:
prefers-reduced-motion;坐标轴字号按容器宽度自适应方法 · 路径 · 说明 GET · /dsh-token-usage/summary?range=all&groupBy=auto&series=model&fill=1 · 汇总 + 时间桶 + 维度合计 GET · /dsh-token-usage/quota · 已配置接入方的额度与本周期已用/剩余,附可添加的候选列表 POST · /dsh-token-usage/quota · 保存配置 { providers: { : { enabled, amount, unit, refreshDay, label } } } POST · /dsh-token-usage/rescan · 立即重新扫描 GET · /dsh-token-usage/health · 扫描状态与覆盖信息
range:all|today|7d|30d|month|cycle(本额度周期)。 也可只传 from / to(YYYY-MM-DD),Host 会自动推断为自定义区间——只传 from 表示起始至今,只传 to 表示截止之前全部。 groupBy:auto|5m|15m|30m|hour|3h|6h|day|week|month|model|provider|project|session|family。
auto 是设置页趋势图使用的默认值,按时间窗口自动选桶宽:<=3 天 hour、<=7 天 3h、<=14 天 6h、<=90 天 day、<=700 天 week、更长 month。 显式时间维度(5m 到 month)默认最多 1000 个桶,超出会自动放粗;响应的 groupBy 是实际粒度,只有发生放粗时才附带 requestedGroupBy。
series=model|family|provider|project|session:时间分组时附带每桶的 series 拆分,以及全局 seriesOrder(按总量降序,含 input/output/cacheRead/cacheWrite/reasoning/calls)。project 是工作区:key 为完整路径,label 为目录名;session 为会话 id;family 为模型家族(取模型名的第一段)。fill=1:时间分组时把区间内的空桶补成 0(图表使用;表格使用 seriesOrder,不受影响)。coarsen=0:禁用 1000 桶自动放粗,返回请求的精确分组(scripts/report.mjs 使用)。node scripts/report.mjs # Markdown 全量报表
node scripts/report.mjs --range 30d # 近 30 天
node scripts/report.mjs --from 2026-09-08 --to 2026-09-08 --json
node scripts/report.mjs --group day,model,project多家订阅 / 网关混用时,额度要分开算。卡片里的接入方与「模型」页已添加的接入方严格一致——数据源是同一个 LLM 注册表(ctx.llm.listProviders(),即模型页渲染「已添加」列表时用的那批已注册接入方):
额度配置按 provider id 存在quota.json:某个接入方暂时从模型页移除时,它不会显示,但配置会保留,等它回到模型页时自动恢复。若 LLM 注册表不可用(例如非 Web 组合),则回退为「settings.yaml+ 历史用量」推断。全局用量仍可在上方表格的「按 Provider」分组查看。
配置只保存在本机 $DSH_HOME/dsh-token-usage/quota.json,不上传、不写入会话。示例:datagrand 每月 20 亿、每月 1 日刷新 → 添加该行后额度填 20、单位 亿、刷新日 1;deepseek-official 是官方 API 按量计费,不添加或不启用即可。
旧版单额度配置会在首次读取时自动迁移到用量最大的接入方,不会丢失。
在 cordis.patch.yml 的插件行上可覆盖(整段 config 替换):
- insert:
- id: dsh-token-usage
name: '@liuguangzhe/dsh-token-usage'
config:
timeZone: Asia/Shanghai # 分天时区
scanIntervalMs: 60000 # 后台增量刷新间隔
cache: true # 结果落盘缓存
homes: [] # 额外扫描的 DSH home(默认自动发现)lib/
├── index.js # Host:扫描生命周期 + HTTP 路由
├── client.js # Client:设置页 UI(__ModuleLoader__,仅 require('react'))
└── core/
├── zstd.js # 多帧 zstd 结构解析与逐帧解码
├── paths.js # 发现所有 DSH home
├── scan.js # 会话枚举 + usage 提取 + message.id 去重
├── aggregate.js # 时区分天 / 范围过滤 / 汇总 / 分组
└── store.js # 内存快照 + 磁盘缓存 + 增量刷新难点与对策:
message.id,直接累加约虚高 3 倍。按 message.id 全局去重。assistant/chunk 的 usage,只计 assistant/message。node_modules 不含 @deepseek-ai/*,因此 Host 零内核导入。node --test "test/**/*.test.mjs" # 12 项测试
node scripts/report.mjs # 端到端报表验证矩阵:
验收项 · 方法 · 结果 多帧 zstd 解码 · 单测:两帧拼接解码等于原文 · ✅ message.id 去重 · 单测:v0/v3 副本折叠为 1 条 · ✅ 口径正确 · 实盘 vs ~/.dsh/dsh-usage/usage-ledger.json(9/8、9/9、9/10) · ✅ 逐项吻合 Host 路由 · 单测:注册 4 条路由并返回 JSON · ✅ Client 贡献 · 单测:注册 settings.section · ✅ 自定义区间 · 单测:单边/双边窗口与 cycle 刷新日(含 2 月收敛) · ✅ 按接入方额度 · 单测:已配置/候选项分离、合成 provider 隔离计费、启用开关、配置落盘、旧配置迁移 · ✅ 性能 · 61.6MB / 99 文件全量扫描 · ✅ ~1.4s
本项目按 DSH 插件规范声明,可用 dsh plugin add 安装,也可被插件市场索引:
dsh.bundle.patch 指向 cordis.patch.ymldsh.client.platform = "web",浏览器半通过 exports["./client"] 暴露engines.dsh 声明支持 >=0.1.5-rc.1(不设上限),dsh.compatibility.dshReleases 列出已验证的 DSH 版本(最近验证到 0.2.1-rc.3)keywords 含 dsh-plugin / deepseek-harness,并声明 repository / homepage / bugsdsh-plugin,供市场 discovery 扫描ctx.effect / ctx.webServer.register / ctx.slots 接口。@deepseek-ai/*;Client 只 import React,桌面壳可安全加载。assistant/message 口径;compaction/summary 默认不计(与 dsh-usage 账本一致)。docs/releases/.md 写好中英双语说明(先中文、后英文,格式参考 DSH 的 tag 页面;模板见 docs/releases/TEMPLATE.md)。v* tag 后,.github/workflows/release.yml 会读取该文件并自动创建 GitHub Release(已存在的 release 会跳过)。MIT