统计各工程会话的 token 消耗与花费
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SJTUMalPan/dsh-usage-stats该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 37 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-usage-stats @ 0.1.16
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 17:39:43
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 14 处,展示前 14 条)
- 读取本地文件dsh-usage.mjs:69
return readdirSync(workspace) - 读取本地文件dsh-usage.mjs:86
return statSync(path).isDirectory() - 读取本地文件dsh-usage.mjs:122
const catalog = JSON.parse(readFileSync(options.prices, 'utf8')) - 写入本地文件dsh-usage.mjs:154
writeFileSync(options.out, text) - 读取本地文件lib/html.mjs:147
const css = readFileSync(join(HERE, 'client.css'), 'utf8') - 读取本地文件lib/html.mjs:148
const js = readFileSync(join(HERE, 'client.js'), 'utf8') - 读取本地文件lib/sessions.mjs:38
workspaces = readdirSync(root) - 读取本地文件lib/sessions.mjs:45
for (const session of readdirSync(workspaceDir)) { - 读取本地文件lib/sessions.mjs:60
return statSync(path).isDirectory() - 读取本地文件lib/sessions.mjs:73
return statSync(path).isFile() - 读取本地文件smoke-html.mjs:11
const html = readFileSync(new URL('./usage-dashboard.html', import.meta.url), 'utf8') - 读取本地文件smoke-html.mjs:15
const client = readFileSync(new URL('./lib/client.js', import.meta.url), 'utf8') - 读取本地文件verify.mjs:30
for (const name of readdirSync(cacheDir)) { - 读取本地文件verify.mjs:33
const record = JSON.parse(readFileSync(join(cacheDir, name), 'utf8'))
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 统计缓存与花费
- 单文件仪表盘
DSH 各工程/会话/步骤的 token、缓存与花费统计(零依赖离线工具 + 单文件仪表盘,并作为 DSH 子页面挂载)
README
由 DeepSeek 最新模型翻译生成dsh-usage-stats
统计 DeepSeek Harness 每个工程、每个步骤的 token 开销、缓存命中率和花费。
零依赖:只用 Node 22+ 内置能力读 DSH 已经写好的会话日志,不发任何模型请求,不改动任何会话数据。
快速开始
全部工程,Markdown 报表
node dsh-usage.mjs
单文件可视化仪表盘(推荐)
node dsh-usage.mjs --format html --out usage-dashboard.html
只看某个工程
node dsh-usage.mjs --project abstractAI
逐步骤明细 CSV(工程 / 会话 / turn / step 一行)
node dsh-usage.mjs --format csv --out steps.csv
机器可读 JSON(含每会话的 turn 汇总)
node dsh-usage.mjs --format json --out usage.json
自检:把折叠结果与 DSH 自己的 tokenUsage 投影对账
node verify.mjs
可视化仪表盘
展开完整文档(README 剩余 1 节)
dsh-usage-stats 统计 DeepSeek Harness 每个工程、每个步骤的 token 开销、缓存命中率和花费。 零依赖:只用 Node 22+ 内置能力读 DSH 已经写好的会话日志,不发任何模型请求,不改动任何会话数据。 快速开始 全部工程,Markdown 报表 node dsh-usage.mjs 单文件可视化仪表盘(推荐) node dsh-usage.mjs --format html --out usage-dashboard.html 只看某个工程 node dsh-usage.mjs --project abstractAI 逐步骤明细 CSV(工程 / 会话 / turn / step 一行) node dsh-usage.mjs --format csv --out steps.csv 机器可读 JSON(含每会话的 turn 汇总) node dsh-usage.mjs --format json --out usage.json 自检:把折叠结果与 DSH 自己的 tokenUsage 投影对账 node verify.mjs 可视化仪表盘 --format html 产出一个自包含的 HTML 文件:数据、样式、脚本全部内联,零 CDN、零 npm 依赖、无任何网络请求,直接双击用浏览器打开即可(file:// 可用)。 包含:KPI 概览、各工程花费排行、成本构成环图、主会话/子代理与峰谷堆叠对比、每日花费趋势、可排序可筛选的会话表、点击会话展开逐轮曲线、最贵步骤排行。 图表是手写 SVG(lib/client.js),所以不需要任何图表库。样式在 lib/client.css,两者在生成时被内联进产物——改样式或图表只改这两个文件,重新生成即可。 在浏览器里看(DSH 插件) 配套的 DSH 宿主插件已拆成独立仓库: dsh-usage-dashboard,把报表挂到宿主 Web 服务器的 /usage: http:///usage 用的是宿主自己的登录态——先在同一个地址登录 GUI,/usage 直接就能开,不需要第二个令牌。 安装(插件市场里也能直接装;装完重启 dsh web 生效) dsh plugin --profile web add github:SJTUMalPan/dsh-usage-dashboard 生成报表(本工具负责的部分;插件默认读 /report/usage-dashboard.html) node dsh-usage.mjs --format html --out usage-dashboard.html 本仓库的 dsh-plugin/ 是一个 git submodule 指向那个仓库,本地开发时两边的路径关系不变(git clone --recursive 即可拿到)。 插件靠宿主两个现成接口:ctx.webServer.register() 挂路由, ctx.connection.requestRejection() 复用宿主的 Host/Origin 围栏与浏览器鉴权。 未登录返回 401,报表未生成返回 404。 不修改任何其它工程——报表由本工程自己的插件承载。详见 dsh-plugin/README.md。 输出内容 | 章节 | 内容 | | 一、按工程汇总 | 会话数、子代理会话数、步骤数、未命中输入、缓存命中输入、输出、缓存命中率、花费 | | |主会话 / 子代理拆分 | 每个工程的钱有多少来自子代理 | | |峰谷拆分 | 峰时花费 / 谷时花费 / 未定价步骤数 | | |成本构成 | 输出、缓存命中输入、未命中输入各占多少钱 | | 二、按工程 → 会话 | 每个会话的模型、步骤、命中率、花费、起始时间 | | 三、按工程 → turn | 同序号 turn 跨会话汇总,按花费排序 | | 四、最贵的 N 个步骤 | 全局最贵的单步调用 | 口径 这些口径直接决定数字对不对,改动前请先读: - step = 一次 LLM 调用。 DSH 每个完成的步骤写一条 assistant/message 事件,带 data.usage。只折叠这一条——流式过程中的 usage 采样报的是同一次调用,重复折叠会翻倍。 - inputTokens 是「缓存未命中」部分,不是输入总量。 totalTokens = inputTokens + cacheReadTokens + outputTokens。 两者单价差 50 倍(flash 命中 0.02 元/M vs 未命中 1 元/M),相加再计价会严重失真。 - reasoningTokens 已包含在 outputTokens 里,只做展示,不重复计费。 - 缓存写入不单独计费,DSH 日志中 cacheWriteTokens 恒为 0。 - 峰谷按调用发生时刻判定,不是按跑报表的时刻。高峰 = 北京时间周一至周五(不含中国法定节假日)9:00–12:00、14:00–18:00,其余为空闲;空闲价 = 高峰价的一半。 - 子代理单独列出,但计入所属工程合计。 本项目实测子代理占工程花费的 37%–66%,只统计主会话会严重少算。 - 按 cwd 归属工程(取自会话头),不靠目录名猜。 价目表 prices.json 是数据不是代码,调价只改这个文件。当前取自官方定价页(中文|英文),单位 元 / 百万 tokens: | 模型 | 缓存命中(谷/峰) | 未命中(谷/峰) | 输出(谷/峰) | | deepseek-flash | 0.02 / 0.04 | 1 / 2 | 4 / 8 | | deepseek-v4-pro | 0.15 / 0.30 | 4.5 / 9 | 13.5 / 27 | - deepseek-v4-flash、deepseek-v4-flash-vision-exp 是已下线旧名,请求由 DeepSeek-V4.1-Flash 提供并按 Flash 价格计费 —— 因此它们作为 aliases 映射到 deepseek-flash。 漏掉这层映射会让历史会话的这部分花费算成 0。 - 模型不在表里时,工具按 0 计并在 stderr 报警,不会静默少算。 - 调价后请更新 fetchedAt 与价格;peak.holidays 需要按年份补中国法定节假日(留空 = 不扣节假日;当前统计区间内无节假日,结果不受影响)。 数据来源 $DSH_HOME/sessions///session.v3.jsonl.zstd。 DSH 每追加一条事件就写一个独立的 zstd 帧,所以整个文件是多个帧的拼接。 Node 自带的 zstdDecompressSync 和流式接口都在第一帧后停止,会静默把日志截断成一条事件 —— lib/zstd.mjs 因此自己走帧结构定位边界后逐帧解压。 校验 node verify.mjs 把每个会话的折叠合计与 DSH 自己的 tokenUsage 投影逐会话对账: sessions folded : 112 projection cache size: 112 exact match : 112 lagging (live) : 0 mismatch : 0 no projection entry : 0 投影缓存是周期性快照,正在写入的会话会领先于它,直接比 token 数会在活跃会话上报假失败。 所以脚本按投影的 seq 把两种情况分开:lagging 是快照落后(无法佐证,不算错), mismatch 才是真的折叠错误。只有 mismatch 会让退出码非 0。 已知限制 - 会话日志存在期间才有数据;会话被删除后其花费也随之消失(本工具无自有账本)。 - 逐步骤明细只覆盖 assistant/message 事件可解析的会话;更早的会话格式版本(v0–v2)未验证。 - 高峰期排除中国法定节假日,需要手工维护 peak.holidays。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SJTUMalPan/dsh-usage-stats
统计各工程会话的 token 消耗与花费
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目