采集真实用量并估算费用,悬浮球实时查看
27.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/1148281964/dsh-token-stats.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 28 处,展示前 24 条)
- 读取密钥环境变量lib/index.js:48
const PERSIST_DIR = process.env.DSH_TOKEN_STATS_DIR - 读取密钥环境变量lib/index.js:49
? process.env.DSH_TOKEN_STATS_DIR - 读取密钥环境变量lib/index.js:81
if (process.env.DSH_TOKEN_STATS_PRICES) { - 读取密钥环境变量lib/index.js:82
const ext = JSON.parse(process.env.DSH_TOKEN_STATS_PRICES); - 写入本地文件lib/index.js:149
mkdirSync(PERSIST_DIR, { recursive: true }); - 读取本地文件lib/index.js:222
text = readFileSync(PERSIST_FILE, "utf8"); - 写入本地文件lib/index.js:343
appendFile(PERSIST_FILE, line, "utf8").catch((err) => { - 读取本地文件lib/index.js:361
text = readFileSync(PERSIST_FILE, "utf8"); - 请求外部主机openrouter.ailib/index.js:397
const resp = await fetch("https://openrouter.ai/api/v1/models", { - 发起网络请求lib/index.js:397
const resp = await fetch("https://openrouter.ai/api/v1/models", { - 写入本地文件lib/index.js:441
writeFileSync(tmp, rows.map((r) => JSON.stringify(r)).join("\n") + "\n", "utf8"); - 写入本地文件lib/index.js:442
renameSync(tmp, PERSIST_FILE); - 读取本地文件backfill-history.mjs:37
if (!existsSync(LEDGER)) return []; - 读取本地文件backfill-history.mjs:39
for (const line of readFileSync(LEDGER, "utf8").split("\n")) { - 读取本地文件backfill-history.mjs:69
if (existsSync(MARKER) && !FORCE) { - 读取本地文件backfill-history.mjs:70
const m = JSON.parse(readFileSync(MARKER, "utf8")); - 读取本地文件backfill-history.mjs:82
if (existsSync(SESSIONS_ROOT)) { - 读取本地文件backfill-history.mjs:83
for (const projectDir of readdirSync(SESSIONS_ROOT)) { - 写入本地文件backfill-history.mjs:158
mkdirSync(LEDGER_DIR, { recursive: true }); - 写入本地文件backfill-history.mjs:159
writeFileSync(MARKER, JSON.stringify({ importedAt: Date.now(), importedCount: 0, boundaryTs }, null, 2)); - 写入本地文件backfill-history.mjs:166
if (existsSync(LEDGER)) renameSync(LEDGER, backup); - 写入本地文件backfill-history.mjs:167
mkdirSync(LEDGER_DIR, { recursive: true }); - 写入本地文件backfill-history.mjs:168
writeFileSync(LEDGER, all.map((r) => JSON.stringify(r)).join("\n") + "\n", "utf8"); - 写入本地文件backfill-history.mjs:169
writeFileSync(MARKER, JSON.stringify({ importedAt: Date.now(), importedCount: imported.length, boundaryTs, backup }, null, 2));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:openrouter.ai
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 采集真实用量
- 估算费用
- 悬浮球实时查看
DeepSeek Harness 全局 token 用量统计插件 | 真实用量追踪、持久化账本、费用估算(OpenRouter 定价)、可拖拽悬浮按钮与详情面板。
README
由 DeepSeek 最新模型翻译生成dsh-token-stats
全局 Token 用量统计插件(DeepSeek Harness / DSH Web)。
从每一次 llm/stream 调用采集真实 usage(非估算),构建跨重启持久的 JSONL 账本,按供应商 / 模型 / 会话 / 日期聚合,提供估算费用(OpenRouter 实时价格)、缓存命中率、成功率、首字延迟等指标,并通过可拖动的悬浮按钮、居中大屏弹窗和模型工具 token_stats 展示。
运行截图
1. 设置页 · 全局统计
设置页-全局统计
2. 右下角悬浮球 —— 实时展示 token 统计,支持「全局 / 当前会话」切换,可拖动
右下角悬浮球
- 全局统计
全局统计
- 当前会话统计(与会话底部官方统计对齐)
当前会话统计
当前会话统计-对齐
3. 展开明细 —— 大屏弹窗;右上角可手动从 OpenRouter 拉取最新模型价格并重算全部历史费用
展开明细-上
展开明细-下
功能特性
- 真实用量采集:waterfall 包装 llm/stream,记录每次成功调用的输入 / 输出 / 缓存读 / 缓存写 / 推理 tokens,失败与取消调用单独计数(成功率口径)
展开完整文档(README 剩余 1 节)
dsh-token-stats
全局 Token 用量统计插件(DeepSeek Harness / DSH Web)。
从每一次 llm/stream 调用采集真实 usage(非估算),构建跨重启持久的 JSONL 账本,按供应商 / 模型 / 会话 / 日期聚合,提供估算费用(OpenRouter 实时价格)、缓存命中率、成功率、首字延迟等指标,并通过可拖动的悬浮按钮、居中大屏弹窗和模型工具 token_stats 展示。
运行截图
1. 设置页 · 全局统计
设置页-全局统计
2. 右下角悬浮球 —— 实时展示 token 统计,支持「全局 / 当前会话」切换,可拖动
右下角悬浮球
- 全局统计
全局统计
- 当前会话统计(与会话底部官方统计对齐)
当前会话统计
当前会话统计-对齐
3. 展开明细 —— 大屏弹窗;右上角可手动从 OpenRouter 拉取最新模型价格并重算全部历史费用
展开明细-上
展开明细-下
功能特性
- 真实用量采集:waterfall 包装 llm/stream,记录每次成功调用的输入 / 输出 / 缓存读 / 缓存写 / 推理 tokens,失败与取消调用单独计数(成功率口径)
- 跨重启持久账本:每次调用逐条落盘(/data/token-stats/daily.jsonl),启动 / 热重载时从账本重建全部维度,数字只增不减
- 多维聚合:按供应商、模型、会话、日期(当月 / 近 31 天趋势)分布
- 费用估算:内置价格表 + 一键从 OpenRouter 拉取最新价格并重算历史费用(DSH_TOKEN_STATS_PRICES 环境变量可覆盖单价)
- 缓存命中率 / 成功率 / 平均耗时 / 首字延迟(TTFT)等指标
- 可拖动悬浮球:右下角 FAB,位置持久化,展开面板支持「全局 / 当前会话」切换
- 居中大屏弹窗:KPI 卡片、请求占比环形图、趋势、供应商 / 模型表格、近期调用明细(含单次缓存命中率、首字/耗时)
- 当前会话跟随:通过 DOM 探测 UI 选中的会话行([role=treeitem][aria-selected=true])+ host 会话目录标题匹配,自动跟随 UI 切换(执行中/暂停会话均可),失败时回退到最近活跃会话
- 模型工具:token_stats(支持可选 sessionId 参数),模型可直接查询统计
- 历史回扫:backfill-history.mjs 可从 ~/.dsh/sessions 的多帧 zstd 会话文件回扫插件安装前的调用(幂等,自动去重)
安装
方式一:官方 CLI(推荐)——从 GitHub 或 npm 安装:
dsh plugin --profile web add github:/dsh-token-stats
或
dsh plugin --profile web add dsh-token-stats
包内 cordis.patch.yml(dsh.bundle.patch 声明)会让 CLI 自动把 loader 行插入 profile,重启 Web GUI 生效。
方式二:手动放置——将包放入 profile 的 packages/ 目录(如 C:\Users\\.dsh\profiles\web\packages\dsh-token-stats),并在 cordis.yml 的 loader 列表加入:
- id: token-stats
name: dsh-token-stats
重启 Harness 即可。开发期也可用 dsh-super-injector 热注入(免重启)。
该包为纯 JavaScript,无 prepare 构建脚本,github: 安装无需 allowedBuilds 配置。
使用
- FAB 悬浮球(右下角):点击展开面板,可拖动;面板右上角「⛶」打开居中大屏弹窗;「全局 | 当前会话」切换统计范围
- 设置页:设置 → Token 统计,包含同样的面板与大屏弹窗入口
- 大屏弹窗:「↻ 更新价格」从 OpenRouter 拉取最新模型价格并重算全部历史费用;KPI、环形图、趋势(当月/近31天)、表格、明细
- 模型工具:对话中调用 token_stats({"sessionId": "..."} 可选)
配置
| 环境变量 | 说明 |
| DSH_TOKEN_STATS_DIR | 账本目录覆盖(默认 /data/token-stats/) |
| DSH_TOKEN_STATS_PRICES | 价格覆盖 JSON:{"": {"input":0.27,"cacheRead":0.07,"cacheWrite":0.27,"output":1.1}}(USD/1M tokens) |
价格表默认值来自 OpenRouter 公开模型列表(查询日期见 lib/index.js 注释),可通过面板按钮或环境变量校正。
HTTP API
| 端点 | 说明 |
| GET /token-stats/api/query | 统计快照(?sessionId= 查单会话) |
| GET /token-stats/api/sessions | 会话目录(id + 标题),供前端跟随 UI 会话 |
| POST /token-stats/api/refresh-prices | 从 OpenRouter 拉取最新价格并重算账本费用 |
所有端点校验 Origin(仅本机)、HEAD 不返回 body。
历史回扫(可选)
插件安装前的调用不会自动出现。可用回扫脚本从历史会话文件补录:
node backfill-history.mjs # 正式导入(幂等)
node backfill-history.mjs --dry-run # 预览
node backfill-history.mjs --force # 强制重跑
仅补录「成功且带 usage」的调用;耗时 / 首字延迟无法回补;费用按当前价格表重算。导入前自动备份账本。
已知限制
- 浏览器端无「UI 当前会话 id」官方接口:当前会话跟随基于 DOM 探测 + 标题匹配,会话列表不可见或标题歧义时回退到最近活跃会话
- 会话维度的分布(供应商/模型/日期)基于保留窗口(最近 500 条)聚合,总量 totals 为完整账本
- 费用为估算值(按模型单价 × 用量),实际结算以你的网关/厂商账单为准
- 统计口径为真实 usage(计费口径:输入 = 未缓存 + 缓存读 + 缓存写),与 DSH 内置 token-meter 的估算口径不同
License
MIT
发布到社区
1. 推送到 GitHub 仓库
2. 给仓库打 dsh-plugin topic(GitHub → repo → About → Topics),即可被 dsh-plugin 生态 与社区插件市场(如 dsh-plugin-market)搜索发现
3. (可选)发布 npm:npm publish --access public
4. (可选)发 Release:npm pack 后把 dsh-token-stats-.tgz 附到 GitHub Release预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
1148281964/dsh-token-stats
采集真实用量并估算费用,悬浮球实时查看
相关插件 · 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