逐请求查看 Token 消耗与缓存命中,并导出账本
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add menglian001/dsh-token-usage该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
- 写入本地文件index.js:682
await mkdir(this.dir, { recursive: true }) - 写入本地文件index.js:685
await appendFile(this.file, line, 'utf8') - 读取本地文件index.js:721
const info = await stat(this.file) - 读取本地文件index.js:737
const stream = createReadStream(this.file, { encoding: 'utf8' }) - 写入本地文件index.js:833
await writeFile(temporary, body, 'utf8') - 写入本地文件index.js:834
await rename(temporary, this.file) - 发起网络请求client.js:1424
fetch(`${LEDGER_URL}?rows=${LEDGER_ROW_LIMIT}`, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-token-usage
Token 用量面板,为 DeepSeek Harness(DSH)的 Web GUI 而做。
逐请求账本 · 四桶计量 · 全年热力图 · 实时并发,外加一份落盘账本——它让用量记录不再随会话滚动而消失。
它解决什么问题
DSH 的 durable session log 里其实已经记着每次调用的 provider 计费用量,但没有任何页面把它摊开:用了多少、花在哪、什么时候用的,都看不见。
更麻烦的是,会话投影每个会话只保留最近 600 行。会话一长、或者会话被删,早期用量就从界面上消失了——数字变小,但数据从来没丢,只是没人再去读它。
这个插件做两件事:
1. 把那份权威数据折成一张请求日志,一次计费尝试一行;
2. 额外落一份盘上账本,不受投影窗口限制,并在启动时从全部会话日志回扫补齐。
功能
概览
- 四张主指标卡:请求数、合计 tokens、缓存命中率、输出速度;「更多指标」展开四桶明细、平均耗时、平均首字
- 趋势图:按桶堆叠的柱子,与同一根 x 轴上的缓存命中率折线。
展开完整文档(README 剩余 1 节)
dsh-token-usage
Token 用量面板,为 DeepSeek Harness(DSH)的 Web GUI 而做。
逐请求账本 · 四桶计量 · 全年热力图 · 实时并发,外加一份落盘账本——它让用量记录不再随会话滚动而消失。
它解决什么问题
DSH 的 durable session log 里其实已经记着每次调用的 provider 计费用量,但没有任何页面把它摊开:用了多少、花在哪、什么时候用的,都看不见。
更麻烦的是,会话投影每个会话只保留最近 600 行。会话一长、或者会话被删,早期用量就从界面上消失了——数字变小,但数据从来没丢,只是没人再去读它。
这个插件做两件事:
1. 把那份权威数据折成一张请求日志,一次计费尝试一行;
2. 额外落一份盘上账本,不受投影窗口限制,并在启动时从全部会话日志回扫补齐。
功能
概览
- 四张主指标卡:请求数、合计 tokens、缓存命中率、输出速度;「更多指标」展开四桶明细、平均耗时、平均首字
- 趋势图:按桶堆叠的柱子,与同一根 x 轴上的缓存命中率折线。两者永远读同一个数据源、同一个窗口——一眼能看出哪次改动把缓存打掉了
- 全年热力图:53 周 × 7 天,铺满卡片宽度,月/周标签齐全
- 渠道排行:占比、四色构成条、请求数、命中率、合计
- 标题下的今日读数(不随筛选变化)与实时并发
请求日志
- 12 列逐请求明细:时间 / 会话 / 渠道 / 模型 / 提示 / 缓存读 / 补全 / 合计 / 耗时 / 首字 / 速度 / 流式
- 按天分组的粘性日期条,表头与日期条都随滚动钉住
- 点任意一行展开该条的四桶明细(含缓存写、推理子集、轮次与步骤)
- 点会话名直接跳到那个对话
- 筛选:时间范围 / 渠道 / 模型 / 全文搜索;暂停冻结表格而顶部数字照常更新
- 列头点击排序、CSV 导出、页码直达
分组视图
模型、渠道、日期三张表共用一套列:占比(带条)、请求、提示、缓存读、补全、合计(带四色构成条)、命中率、平均耗时、速度。
实时并发
标题下的活体指示 ● 运行中 N,数据来自会话列表自带的 running 标志——Host 推送,不是轮询。
一个会话里同时有多个调用在飞时,追加 · M 步在飞:Host 按 step/start → 结算事件计数,turn/end 清空。会话的 running 是布尔值,说不出一段对话里有几个调用在跑,这个计数可以。
安装
插件是一个普通的 DSH bundle,纯 JS,无构建步骤。
git clone https://github.com/menglian001/dsh-token-usage.git ~/dsh-token-usage
1) 装插件自己的依赖(必做,见下)
cd ~/dsh-token-usage && npm install
2) 在 profile 里登记,然后安装
cd ~/.dsh/profiles/web
pnpm install
profile 的 package.json 需要这两处:
{
"dependencies": {
"dsh-token-usage": "link:~/dsh-token-usage"
},
"dsh": {
"profile": {
"bundles": ["...", "dsh-token-usage"]
}
}
}
然后重启 dsh。
为什么第 1 步必做 link: 包按真实目录解析依赖,不经过 profile 的 node_modules。插件目录里没有 node_modules/zod 时,Host 半会以 Cannot find package 'zod' 加载失败——而 Host 半失败会连带 Client 半不注入,表现是侧边栏根本没有这个图标。npm install 只装一个 zod,几秒钟。
Host 半改动需要重启才生效;Client 半热更新,刷新页面即可。
数据从哪来
| 数字 | 来源 |
| 四桶(未命中输入 / 缓存读 / 缓存写 / 补全)与推理 | provider 回包上报,不是估算 |
| 提示 / 补全 / 合计 / 缓存命中率 | 四桶的算术 |
| 耗时 / 首字 / 生成时间 | 本地时钟,含网络往返,不是上游服务端延迟 |
| 输出速度 | 补全 ÷ 生成时间,池化;仅计入补全 ≥ 100 且生成 ≥ 100 ms 的请求 |
链路:provider 响应 → stream.ts 的 usage 事件 → assembler → assistant/message.data.usage → 本插件的 requestLog 投影。
走中转时,"准确"的含义是忠实反映中转上报的数字。中转少报,面板就跟着少报。
落盘账本
每次请求结算时追加一行 JSONL 到 $DSH_HOME/token-usage/requests.jsonl。
- 键:session|turn|step|attempt,读时后写覆盖。崩溃重放、重复回扫都不会重复计数
- 回扫:启动后读遍磁盘上的全部会话日志,把投影窗口早已丢掉的行补回来
- 保留 730 天
- 压实:启动时若文件 ≤ 32 MB 且(总行数 ≥ 2000 且 总行数 > 唯一键数 × 1.25,即重复行占比 > 20%;或存在超 730 天的记录)则压实(写临时文件再 rename)。超过 32 MB 的文件只读、不再压实
数据有两条来源,页脚会说明当前用的是哪条:
- 账本:保留窗口内只增不减,但只有聚合(天 / 模型 / 渠道)与最近若干行明细(服务端留 2000 行,面板按需取 400 行)
- 保留记录:浏览器手里的投影行,能按任意条件切片,但受每会话 600 行窗口约束
切换规则只看完整性:账本尝试数 ≥ 保留行数,且无筛选时读账本。天数跨度不参与判断——图表的天数下限是画图用的,不能拿来仲裁数据源。
已知边界
- 缓存写 / 推理恒为 0:上游若为 OpenAI 口径(prompt 里已含缓存命中),不会单独上报 cache_creation / reasoning。显示 0 是没报,不是漏读
- 速度显示 —:中转把首字和落盘报在同一瞬间时,生成时间≈0,除出来的速度是假的,因此按门槛显示 —。— 表示「没测到」,不是 0
- 请求日志明细受投影窗口约束:明细仍读投影(每会话 600 行);分组视图与趋势在无筛选时读账本聚合,不会缩水
- 热力图空格 = 那天没有记录,不是「那天没用」
- 账本从启用那天开始记:更早且日志已被清理的会话,总数可能补回,明细补不回来
架构
index.js Host 半 ├─ requestLog 会话投影 一次计费尝试一行 ├─ Ledger JSONL 落盘 + 内存聚合(天/模型/渠道/会话) ├─ 磁盘回扫 sessionPersistence.list() → 逐会话 read() → 补写 ├─ LiveSteps 在飞步骤计数 └─ GET /token-usage/ledger 浏览器 cookie 鉴权,失败关闭
client.js Client 半(纯 JS,React.createElement,无构建) ├─ 三个槽位 侧边栏 / 主面板 / 设置页 ├─ 投影补拉 pump 游标轮转,避免老会话饿死 └─ 视图 概览 / 请求日志 / 模型 / 渠道 / 日期
开发与校验
纯 JS,没有构建。校验脚本在 test/,Node 直接跑,不依赖 dsh:
npm install # 装 zod(仅测试/开发需要)
npm test # 跑 11 套离线校验
node test/render-check.mjs # 跑单个
安装验收:把本包当成陌生用户从零装一遍
node test/install-check.mjs
或随套件一起跑
DSH_TU_INSTALL_CHECK=1 npm test
覆盖:投影折叠语义、账本写入 / 覆盖 / 压实 / 回扫幂等、聚合视图切换、pump 覆盖率、面板渲染(含空数据与缺 seat 的降级)、在飞步骤计数。
install-check 单独存在是有原因的:其余 harness 都在本仓库内 import ../index.js,那里 node_modules 已经存在,恰好掩盖了唯一真把人绊倒的失败模式。这个 harness 用 git archive 造出干净树、经 link: 解析、先断言 import 必须失败、装完依赖再断言必须成功。
截图可以重新生成(需要 Playwright 与一个本地 Harness checkout):
node scripts/screenshots.mjs --harness ../deepseek-harness
DeepSeek Harness Web GUI 的 token 用量面板。它把 Harness 自己上报的用量折叠成按请求记账的账本,并在磁盘上留一份持久副本,因为会话投影每会话只保留最新 600 行。
- 概览 — 四张头条卡片、按桶堆叠的趋势图(缓存命中线共用同一 x 轴、同一数据源)、53 周热力图、渠道排行。
- 请求日志 — 一次计费尝试一行(12 列),按天分组并带吸顶日期条,可展开成四桶明细,可排序、可筛选、可暂停、可导出 CSV;点会话名打开对应对话。
- 模型 / 渠道 / 日期表 — 占比、请求数、prompt、缓存读取、补全、总量(带构成条)、命中率、延迟、速度。
- 实时并发 — 会话列表的 running 标记,加上 Host 侧统计的未完成步骤数,这样同一对话里同时在飞的多次调用也能看见。
- 持久账本 — 每个结算完成的请求都追加到 $DSH_HOME/token-usage/requests.jsonl,以 session|turn|step|attempt 为键(后写覆盖先写),启动时从每个已存会话日志回扫,保留 730 天,体量够小时在启动时压实。
安装 — 克隆仓库,在克隆目录里跑 npm install(一个 link: 包从真实目录解析依赖,所以缺了它,Host 那一半会报 Cannot find package 'zod'),把 "dsh-token-usage": "link:~/dsh-token-usage" 加进配置档的 dependencies,再把 dsh-token-usage 加进 dsh.profile.bundles,运行 pnpm install,重启 dsh。
测试 —— 先 npm install,再 npm test,会运行 test/ 里的离线测试装置。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
menglian001/dsh-token-usage
逐请求查看 Token 消耗与缓存命中,并导出账本
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1