DSH 的悬浮 Token 燃烧指数 Dock:汇总全部 session 的 provider usage。收起时是一枚胶囊,显示实时燃烧速率(含 token/s 单位)、内嵌近 60 秒速率曲线和今日总 Token;展开后是完整面板,含大号实时速率 Hero、按模型 / 按小时两种粒度、带真实左侧纵轴的柱状图,以及按真实星期对齐的近 30 天热力图。火焰是 16 帧程序生成的序列帧动画,只在真的有 Token 在烧时播放、速率为 0 时熄灭;日 / 小时分桶按浏览器时区(客户端把 UTC 偏移传给 Host),31 天记录先加载再原子落盘,重启不会再把历史覆盖清空。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-plugin-token-burned
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yuna78/dsh-plugin-token-burned
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README

左侧是展开面板,右侧是收起后的胶囊。真实运行时截图,不是渲染稿。
把 Token 烧成可见的火。
DSH 的悬浮 Token 燃烧指数 Dock:把全部 session 的用量汇成一撮会烧的火——烧得多旺,扫一眼就知道。
为什么值得装
- 一眼知道现在烧得多旺。 收起胶囊直接显示当前火候档位(星火 → 爆燃)、实时
token/s、近 60 秒速率曲线和今日总量——不用展开、不用点开。 - 七档火候,从一撮火苗烧到整面火墙。 每档都是独立的 16 帧程序生成 SVG,各有配色、发光、闪烁速度与火舌布局,形态随档位从单苗小焰长成满宽火墙;全部由代码绘制,无图片资源。没在烧时,它熄灭成静态灰色图标。
- 不抖、不跳档。 升档快(约 0.3s)、落档慢(约 0.9s),速率小幅抖动时火焰稳稳停在当前档位。
- 想深挖时,数据都在。 展开后可按模型 / 按小时切换柱状图,左侧纵轴刻度随数据最大值缓动升高;另有近 30 天热力图与 7 段火候进度条。
- 数字可信,重启不丢。 跨 session 汇总所有可见 usage;日 / 小时按浏览器时区分桶;31 天记录原子落盘,重启不会清空历史。
- 不打扰你。 Dock 可拖动并记住位置;
prefers-reduced-motion下不播放帧;纯本地读取 DSH 用量,不上传任何数据。
火候档位
档位直接按实时速率(token/s)的绝对阈值判定,速率稳定可预期——2 万/s 左右是火海,5 万/s 以上才是爆燃。
实时速率统计的是 provider usage 的全量 token:输入 + 缓存读/写 + 输出一起算。缓存读通常占大头,所以一次正常编码会话就会跑到 1–3 万 token/s,这不是异常。7 档燃烧 + 已熄灭:
| 档位 | 实时速率(token/s) | 火焰 | 一句文案 |
|---|---|---|---|
| 1 星火 | < 100 | 单苗小焰,慢闪 | 一星火苗,刚点着 |
| 2 小火 | 100 – 500 | 火苗 + 内芯 | 小火慢烧,稳稳的 |
| 3 中火 | 500 – 2,000 | 双舌外焰 | 火势上来了 |
| 4 大火 | 2,000 – 3,000 | 三层火舌 + 高光内焰 | 三丛火舌,呼呼作响 |
| 5 烈火 | 3,000 – 9,000 | 宽火团 + 多舌 | 一团烈火,烧穿屏幕 |
| 6 火海 | 9,000 – 50,000 | 三簇并列 + 底部火墙 + 余烬 | 好多丛火,连成一片 |
| 7 爆燃 | ≥ 50,000 | 满宽火墙 + 多舌 + 余烬 | 整面火墙,全屏爆燃 |
没有新增燃烧时显示 已熄灭(静态灰色图标)。

联系表由
npm run preview离线生成,直接调用真实client.js的绘图层;19px 是胶囊里的真实火焰尺寸(展开面板 34px),无图片资源。
绝大多数时间,你看到的就是胶囊里 19px 的那一撮火——所以每一档都单独画了 16 帧。
面板里有什么
展开之后:
- Hero 区:大号实时速率、相对日均的涨跌 chip、近 60 秒速率 sparkline。
- 两个标签页:按模型 / 按小时切换;柱状图带真实左侧纵轴刻度,刻度随数据最大值缓动升高,柱体高度平滑过渡。
- 近 30 天热力图:按真实星期对齐,色阶按相对强度归一。
- 7 段火候进度条:当前档位,配那一档的一句文案。
- LIVE / OFFLINE 状态:正在烧还是已熄灭,面板上直接写清楚。
数据说明
统计范围为当前 DSH Host 中可观察到的全部 session。数据来自 assistant/message 的 provider usage:输入、缓存读写和输出 Token。没有可用 usage 时不会伪造账单数据。
- "今日"与"某小时"按浏览器时区分桶:客户端把自身 UTC 偏移(
?off=,分钟)传给 Host,Host 用固定偏移计算日/小时边界。这样即使 Host 进程跑在 UTC 下,柱子也不会落到错误的小时标签上(历史 bug:Host 用getHours()按进程时区分桶,与浏览器标签不一致)。 - 持久化是原子的:状态写入
storages/dsh-token-burned.json(先写.tmp再rename),且写入前一定等待历史加载完成。旧实现存在竞态:重启后新进程若先写入,会用仅含最新事件的 Map 覆盖整个文件,导致历史被清空。 - 记录保留 31 天,读取时按 30 天窗口聚合;更早的条目会在加载时清理。
安装
在 DSH 的插件安装界面搜索:
dsh-plugin-token-burned
装完刷新页面即可,无需重启。
开发
npm install
npm test
回填历史用量
0.2.0 之前的版本每次重启都会丢状态文件,历史天数因此缺失。可以一次性从本机会话日志里补回来:
npm run backfill # 只报告(默认 dry-run)
npm run backfill -- --write # 写基线文件,然后重启 DSH
它只写 ~/.dsh/storages/dsh-token-burned.baseline.json(约 30 个数字,不到 1 KB),不碰状态文件;今天的数据始终来自实时事件,不会被回填覆盖。
发版
发布到 npm 由维护者手动执行(没有 CI 自动发布)。一次发版 = 改版本 + 记 CHANGELOG + 打 tag + 发 GitHub Release + npm publish。
确认干净:工作区没有未提交改动,
npm test全绿(prepublishOnly也会再跑一遍)。记 CHANGELOG:在
CHANGELOG.md顶部新开## [x.y.z] — YYYY-MM-DD,按 Added / Changed / Fixed 写清楚。bump 版本并打 tag(tag 带
v前缀,与版本号一致):npm version patch --no-git-tag-version # 或 minor / major git add package.json CHANGELOG.md README.md README.en.md git commit -m "chore(release): x.y.z" git tag -a vx.y.z -m "x.y.z" git push && git push --tags打包自检(只打不发布,确认包内容):
npm pack --dry-run npm pack --pack-destination dist包内只该有
files白名单里的 9 个文件(index.js、client.js、cordis.patch.yml、icon.svg、README.md、README.en.md、CHANGELOG.md、LICENSE、package.json),约 27 kB;verify/与docs/下的大图不进包。发 GitHub Release:tag 选
vx.y.z,正文直接贴 CHANGELOG 的对应小节。README 的联系表图片走raw.githubusercontent.com/.../main/docs/preview-tiers.webp,所以先 push 再发 Release,否则 npm 页面上图片会 404。发布(需要 npm 2FA):
npm publish发布后核对:
npm view dsh-plugin-token-burned version dist.tarball npm pack dsh-plugin-token-burned@x.y.z --pack-destination /tmp tar tzf /tmp/dsh-plugin-token-burned-x.y.z.tgz
已发布的版本号不能覆盖,出问题只能再发一个 patch 版。
prepublishOnly已绑定npm test,即使忘了手动跑测试,npm publish也会先被 smoke / baseline / tiers 三套测试拦下来。
License
MIT
装一个,下次下班前看看今天烧了多少。
链接
同类插件
bowenliang123/dsh-context★ 3973
DSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
Han-1413141/dsh-cost-meter★ 597
会话与当日 API 费用统计、预算图框(已用%)、官方余额、历史看板,支持峰谷计价与官方价格一键同步。
wssfk12138/dsh-damage-pulse★ 282
在 DSH Web 界面追踪 DeepSeek Token 用量、单次与会话费用及账户余额,并显示缓存感知的扣费动画。
zh667/TokenLedger★ 202
侧边栏用量面板:把 Token 归属到实际服务该请求的中转站,站点从已有的 provider 配置中读出,无需额外配置;含今日/本月/累计三窗口、按站点与模型下钻、一年活跃度热力图,以及 New API / Sub2API / DeepSeek 余额。
Ychris12138/dsh-usage-stats★ 187
多供应商用量看板:按供应商/模型统计 Token 与日期下钻,统一展示账户余额,并追踪 OpenCode Go / Z.ai 订阅额度。
PolinniZhong/dsh-personal-center★ 115
DeepSeek Harness 个人中心:跨会话用量统计(按供应商/模型分别统计,自动读取已配置模型)、按模型成本估算、全局自定义指令、数据驱动的桌面宠物(位图/矢量皮肤)与会话状态概览,纯本地离线运行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。