🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

词元用量统计 GIN0076/dsh-token-usage

DeepSeek Harness
GIN007638 天前有提交已提供中文文档扫描:含敏感能力

在设置面板查看各模型每日词元消耗与趋势

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add GIN0076/dsh-token-usage
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/29·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 38 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
  • 发起网络请求
    client.js:272
    res = await fetch(RPC, {
  • 写入剪贴板
    client.js:995
    navigator.clipboard.writeText(text)
  • 读取本地文件
    host.js:570
    mtime = statSync(PRICES_PATH).mtimeMs
  • 读取本地文件
    host.js:571
    raw = readFileSync(PRICES_PATH, 'utf8')
  • 读取本地文件
    host.js:630
    mtime = statSync(CONFIG_PATH).mtimeMs
  • 读取本地文件
    host.js:631
    raw = readFileSync(CONFIG_PATH, 'utf8')
  • 删除本地文件
    host.js:721
    try { unlinkSync(CONFIG_PATH) } catch { }
  • 写入本地文件
    host.js:724
    writeFileSync(tmp, text, 'utf8')
  • 写入本地文件
    host.js:725
    renameSync(tmp, CONFIG_PATH)
  • 删除本地文件
    host.js:773
    try { unlinkSync(PRICES_PATH) } catch { }
  • 写入本地文件
    host.js:776
    writeFileSync(tmp, text, 'utf8')
  • 写入本地文件
    host.js:777
    renameSync(tmp, PRICES_PATH)
  • 读取本地文件
    client.i18n.fixtures.mjs:15
    const source = readFileSync(join(here, 'client.js'), 'utf8')
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 查看各模型词元消耗
  • 按日周月统计
  • 折线柱状图展示

README

由 DeepSeek 最新模型翻译生成
📊 词元用量统计 · Token Usage for DSH 给 DeepSeek Harness 的设置面板装一块「油耗表」——每个模型每天 / 每周 / 每月烧掉多少 token,打开设置一眼看清。 License: MIT DSH Plugin Version Zero Deps Local Only English · 简体中文 ✨ 为什么需要它 DSH 很能干活,但它花了你多少 token?账户页只给余额,原始日志是一坨 JSONL—— 现在,打开 设置 → 📊 词元用量,答案直接画在你面前: ┌───────────────────────────────────────────────────────────────┐
展开完整文档(README 剩余 1 节)
📊 词元用量统计 · Token Usage for DSH

给 DeepSeek Harness 的设置面板装一块「油耗表」——每个模型每天 / 每周 / 每月烧掉多少 token,打开设置一眼看清。

License: MIT
DSH Plugin
Version
Zero Deps
Local Only

English · 简体中文

✨ 为什么需要它

DSH 很能干活,但它花了你多少 token?账户页只给余额,原始日志是一坨 JSONL——

现在,打开 设置 → 📊 词元用量,答案直接画在你面前:

┌───────────────────────────────────────────────────────────────┐
│ 📊 词元用量统计 ( 日 | 周 | 月 ) [近 30 天 ▾] [↻ 重新统计] │ ├───────────────────────────────────────────────────────────────┤ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ 总词元 🧮 │ │ 输入 ⬇️ │ │ 输出 ⬆️ │ │ 请求数 📞 │ │ │ │ 9.9 亿 │ │ 6.1 亿 │ │ 840 万 │ │ 947 │ │ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ 📈 趋势折线图 ✦ 悬浮任意一天 → 当天各模型逐个拆开 │ │ 80M ┤ ╭─╮ │ │ 40M ┤ ╭──╮ ╭──╯ ╰──╮ ─── 合计 │ │ ┼───┴──┴──┴───────┴─── ─── alpha-chat │ │ 06-02 06-06 06-10 ─── beta-reason │ │ │ │ 🏆 模型排名柱状图 │ │ alpha-chat ████████████████░░░░ 62.4% │ │ beta-reason █████░░░░░░░░░░░░░░░ 31.8% │ │ gamma-mini ▍ 5.8% │ └───────────────────────────────────────────────────────────────┘

🖼️ 界面示意图(schematic)。实际渲染跟随 DSH 主题 token,明暗模式都好看。

🎯 功能一览

| 分组 | 能力 |
| 📅 粒度 | 日 / 周 / 月 一键切换——周一起始、自然月;只存日桶,切粒度零成本即时生效 |
| 🗓️ 时间自定义 | 预设(近 7 天 / 30 天 / 12 周 / 12 个月 / 全部)+ 自定义起止日期,任意范围出图 |
| 📈 折线图 | 合计粗线 + 每模型细线,悬浮十字线逐日拆明细,图例点击开关单个模型 |
| 🏆 柱状图 | 模型总量横向排名 + 占比%,一眼看出谁是吞金兽 💸 |
| 🔁 重新统计 | 一键全量重扫重建——幂等,水位防双计、防漏计 |
| 🛡 统计口径 | 脏数据 fail-closed 跳过、重试的请求照样计费、fork 继承不双计、compaction 也入账 |

🚀 安装

方式一 · GitHub 一键(推荐,DSH 标准通道)

dsh plugin --profile web add github:GIN0076/dsh-token-usage

方式二 · 克隆后本地安装(离线可用,本仓开发期实测通道)

git clone https://github.com/GIN0076/dsh-token-usage.git

然后在 DSH 执行 plugin_manager install_bundle,target 选克隆目录;或用 GUI 插件页 → 安装 Bundle。
(装完报 ambiguous-install?先 remove_bundle 再装即可——残留 link 的已知坑。)

装完 硬刷新页面(Ctrl+Shift+R)→ 打开 设置 → 📊 词元用量 🎉

卸载:plugin_manager remove_bundle → @local/token-usage —— 宿主零残留,数据目录可留可删。

🤔 它怎么工作

~/.dsh/sessions 会话日志(唯一事实源,只读) │ ① 实时折叠 session/event ② 启动回填(水位幂等,文件没变直接跳过) ▼ Host 半 ──▶ 日 × provider/model × 六桶计数 ──▶ storage-domain 持久化 │ (坏了也不慌:备份跳过 + 一键重建) ▼ /token-usage-rpc 🔒 连接鉴权 + 回环 Host + 同源 Origin 三重栅栏 ▼ 同源 fetch(数据不出本机) Client 半 ──▶ 设置面板分区 + 纯 SVG 双图(无图表库、无构建、零依赖)

明细口径(stats.js 纯函数,46 项夹具把关):

- ✅ 计入:assistant/message(含流内 usage)、assistant/attempt——重试也花钱!、compaction/summary
- 🏷️ 路由归属:消息自带 provider/model;尝试/压缩归最近一次请求头
- 🚫 跳过:非安全整数、负数、reasoning > output、total 与分桶矛盾的脏数据
- 🕐 时间桶落宿主本地时区;fork 继承前缀按 inheritedEventCount 截断——不算两遍祖先的账

🔒 隐私

- 只读本地:统计完全来自本机 ~/.dsh/sessions,绝不联网、绝不上传
- RPC 三重栅栏:连接鉴权(cookie)+ 回环 Host + 同源 Origin
- MIT 许可,无遥测、无账号、无后门

🧩 架构(给想改代码的你)

~/.dsh/sessions 会话日志(唯一事实源,只读) │ ① 实时:ctx.on('session/event') 折叠 post-commit 事件 │ ② 回填:sessionQuery.listSessions + readSession(水位幂等;字节未变快跳) ▼ Host 半 host.js
· storage-domain 域 token_usage(per-record + backup-and-skip;行键 path-safe base64url)
- daily:日 × provider/model × 六桶计数
- watermark:会话水位 { seq, route, bytes }
· /token-usage-rpc 精确路由(连接鉴权 + 回环 Host + 同源 Origin 三重栅栏)
- stats {granularity, fromDay, toDay} → 聚合(stats.js 纯函数)
- status → { backfill, rebuilding, storageOk, dataSpan }
- rebuild → 清空全量重扫(暂停折叠 + 缓冲补折防竞态) ▼ 同源 POST fetch Client 半 client.js(静态 bundle,__ModuleLoader__)
· settings.section 分区(id: token-usage, order: 50)
· 日/周/月分段 + 预设区间(近7天/30天/12周/12个月/全部/自定义起止日期)+ 重新统计
· 汇总卡 → 趋势折线图(合计粗线 + 每模型细线 + 悬浮十字线明细 + 图例开关)→ 模型排名柱状图

| 文件 | 职责 |
| stats.js | 纯聚合函数;node stats.fixtures.mjs 跑 46 项夹具(口径/去重/周月桶/自定义范围/滚算一致性) |
| host.js | Host 半:折叠、回填、重建、存储、RPC |
| client.js | Client 半:分区、控件、两张 SVG 图表 |
| cordis.patch.yml | bundle patch 行(相对文件符 ./host.js) |
| locale/{zh,en}.json | Plugin Manager 展示元数据;分区文案内联在 client.js |

🛠️ 开发者速查

| 想干什么 | 怎么做 |
| 改 Client 半(界面/图表) | 编辑 client.js → 硬刷新页面即生效(client-hmr 换 rev) |
| 改 Host 半(统计/RPC) | 编辑 host.js → 重启 DSH;运行中不重启热改受 Node ESM 按 URL 缓存所限,需换文件名强制换代(见下) |
| 跑测试 | node stats.fixtures.mjs(46 项) |
| 语法检查 | node --check host.js && node --check client.js && node --check stats.js |

Host 半热更流程(运行中不重启时):改 host.js → Copy-Item host.js host2.js → cordis.patch.yml 行 name 改 './host2.js' → remove_bundle + install_bundle。
原理:Node ESM 按 URL 进程内缓存,新文件名 = 新 URL = 强制加载新代码;全新安装 / 重启无此限制。

⚠️ 踩过的坑(都已修复,写此备查)

| 坑 | 现象 | 根因与修法 |
| connection 未 inject | RPC 全 400 空 body | Cordis Context 是严格代理,访问未 inject 服务直接抛错,被 webserver 兜底成 400。修:inject 加 'connection'(open-in-app 同款) |
| disposer 中断 | 每次 remove 后域永久 already-open | ctx.inject() 返回 fiber 不是函数,offRoute() 抛 TypeError 掐断 dom.close() → reserved 泄漏。修:逐 step try/catch + close 优先,子 fiber 交给父 ctx 级联清理 |
| 错误判定不一致 | 重试一次就放弃 | DomainError.code='already-open'(连字符)vs message="… is already open"(空格)——code/message 必须双查 |
| 失败即永久内存态 | storageOk:false 不再恢复 | 加懒恢复:请求时重试 attachStorage;内存已有数据时跳过 hydrate(防双计)直接覆盖磁盘 |
| 幽灵域占坑 | 死代际占住 reserved | storageDomain.get(name) 取泄漏 handle 直接 close()(同 facility 单例 → 持有者必是死 fiber),已内建到重试路径 |

📦 本体更新后怎么装回来

结论:能,一条命令。 插件源码在你的工作区,不随 ~/.dsh 卸装丢失;更新清掉的只是 profile 注册——重跑安装命令即可(报 ambiguous-install 就先 remove 再装)。
兼容性:零依赖 bundle 未声明 @deepseek-ai/dsh- peer,不会被兼容门拦下;用到的 API(settings.section / sessionQuery / storageDomain / webServer / connection / session/event)都是上游稳定面,更新后跑一遍验收即可:

1. list_plugins 看 include:token-usage 是否 fiberPhase: active
2. RPC 未认证 401 / 认证 200
3. 硬刷新页面 → 设置分区两张图正常
4. 若改过 Host 半,确认 cordis.patch.yml 指向的文件名存在

数据面:统计是派生数据。即使 ~/.dsh 被清,会话日志还原后启动回填自动重建全部用量历史;不放心就点「重新统计」全量重扫。事实源丢不掉,聚合表随时能长回来。

📜 许可

MIT © 2026 GIN0076 —— 欢迎 issue / PR。

灵感来源:ZCode Usage Stats 的用量面板,以及 ccusage / tokscale / token-history 等本地优先统计工具的口径设计。*
预览分享卡片长什么样 ↓GIN0076/dsh-token-usage
分享 · DeepSeek Harness Hub
GIN0076/dsh-token-usage

在设置面板查看各模型每日词元消耗与趋势

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部