dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
实时 Token 用量仪表盘 · Real-time token usage dashboard for DeepSeek Harness — live totals, filters by model/day/month/project, smooth trend chart.
English | 中文
DeepSeek Harness 实时 Token 用量与消费金额插件:安装后在 设置 → Token 用量 查看用量(自带设置侧边栏一级入口),页面每 5 秒刷新(页面隐藏时暂停,零轮询浪费)。
面板顶部四个 tab:概览 / 模型统计 / 项目统计 / 配置信息。
dsh-service、dsh、dsh-base、本插件各自的已安装版本 vs 该版本通道(rc/alpha/stable)的最新版)、运行环境(平台版本、Node 版本、进程 PID、监听端口、已运行时长、DSH_HOME),以及健康检查、一键重启与关机(后两者都带二次确认)。node_modules / 锁文件 / 启动图;插件包完整性:入口文件、dsh.bundle.patch、前端 bundle 是否齐全;依赖解析;cordis 是否单实例同版本;服务端 bundle 与正在运行的 CLI 版本是否一致)。装完插件起不来时,这里会直接指出是哪个包、缺什么文件、怎么修。— 标出。「配置信息」底部的两个动作都走同一个全屏过渡:电源环 + 阶段文案(准备 → 正在结束进程 → 恢复中 → 新实例已就绪),占满页面、不遮挡宿主其它区域。
process.argv + 工作目录)原样重新拉起,因此自定义端口、参数都能保持;点击后弹窗二次确认,页面断开约 10-30 秒,恢复后自动重新加载。脚本写在 $DSH_HOME/dsh-token-use/restart.sh,日志在 $DSH_HOME/dsh-token-use/restart.log。dsh web。确认按钮是红色实心,避免误点。金额卡片(总量卡片里的最后一个)右上角有个 ⓘ,鼠标移入即显示完整口径说明:
金额为估算值:按 DeepSeek 官网定价 × 本地记录用量推算,并已按调用时刻区分高峰/空闲单价。受官方调价、缓存计费口径与统计延时影响,可能与实际账单有出入,请以官网结算金额为准。
口径细节:
inputTokens(缓存未命中输入)、cacheReadTokens(缓存命中输入)、outputTokens(含推理);缓存写官方不计费。deepseek 的(claude、gpt、minimax…)不计金额;名字模糊匹配不到官方定价的 DeepSeek 模型也不计,并在 ⓘ 说明里列出。USD(取官网英文页)。你在烧 token,但你说不清烧在哪:哪个项目最贵、哪个模型最吃缓存、这周比上周涨了多少。
dsh-token-use 把这些变成一眼看得懂的数字。 它跟着每一次调用实时累加,把消费金额、总量、输入、输出、缓存命中、推理和调用次数摊开在设置页里,按模型、按天、按月、按项目随手切换,趋势用一条平滑曲线讲清楚。装完即用:不用配置、不用重启会话、不会在你写代码的时候跳出来打扰你。
看不见的成本最贵——把它变成看得见的。

面板顶部四个 tab,下面是各 tab 的实拍(真实数据、默认中文单位)。
金额与总量卡片、用量趋势图(堆叠构成 + 金额柱 + 橙色日均参考线)、使用热力图(近 12 个月,可切「总计 / 金额」)。

所有模型的用量与金额,带范围查询(按天 / 按月 / 按年 / 时间段 / 全部)。

所有项目的用量与金额,同样支持范围查询。

版本信息(按通道对比最新版)、运行环境、健康检查、一键重启与关机(均带二次确认,动作时有全屏过渡动画)。

点「健康检查」后展开的自检结果:接口、客户端 bundle、Harness 自检三段报告。

dsh plugin --profile web add dsh-token-use
# 或从源码安装:dsh plugin --profile web add github:huangyuheng/dsh-token-use
重启 dsh web 后生效。下载 zip 解压后的本地目录安装:
dsh plugin --profile web add /解压路径/dsh-token-use
session/event 事件总线做 O(1) 增量累加(每条 assistant/message 一次字典加法 + 一次金额乘法)。$DSH_HOME/sessions/**/session.jsonl.zstd(node:zlib 原生 zstd),每读一个文件主动让出事件循环(scheduler.yield()),不阻塞会话处理;重建与实时事件用「会话 seq 水位」去重,任意先后顺序都不会重复计数。$DSH_HOME/dsh-token-use/pricing.json(原子替换,最多保留 30 份快照);进程重启时同步读缓存,不重复联网;联网失败自动退回内置快照,面板照常显示。no-store):GET /dsh-token-use 数据快照、GET /dsh-token-use/config 版本与运行环境、GET /dsh-token-use/health Harness 自检、POST /dsh-token-use/restart 重启服务、POST /dsh-token-use/shutdown 关机(后两个都需前端二次确认,且不接受 GET)。rev 拉真实 URL(插件 URL 带构建版本号,只有启动清单拼得对);Harness 自检读 profile 目录、按 exports["."] / exports["./client"] / main 找真实入口、从各插件目录向上解析 @deepseek-ai/cordis 判断是否重复——全程只读,不加载也不执行被检查的插件。报告里只有结构化字段与路径/版本,文案由前端按语言渲染。/config 读 npm registry 的精简 packument(versions + dist-tags),按当前版本所属通道(rc / alpha / stable)取该通道最高版来对比——@deepseek-ai/dsh-web-app 的 latest 标签长期停在 0.0.1-rc.1,按通道比较才不会误报。结果缓存 6 小时,写在 $DSH_HOME/dsh-token-use/versions.json。# 全部
curl http://127.0.0.1:3080/dsh-token-use
# 指定日期 / 月份 / 年份 / 时间段
curl 'http://127.0.0.1:3080/dsh-token-use?month=2026-09'
curl 'http://127.0.0.1:3080/dsh-token-use?day=2026-09-10'
curl 'http://127.0.0.1:3080/dsh-token-use?year=2026'
curl 'http://127.0.0.1:3080/dsh-token-use?from=2026-09-01&to=2026-09-15'
# 指定模型(可与 day/month/year/from+to 组合)
curl 'http://127.0.0.1:3080/dsh-token-use?model=deepseek-v4-flash'
# 版本与运行环境(配置信息 tab)
curl http://127.0.0.1:3080/dsh-token-use/config
# Harness 自检(配置信息 tab 的「健康检查」)
curl http://127.0.0.1:3080/dsh-token-use/health
# 重启服务(配置信息 tab 的按钮;2 秒后断开并原样拉起)
curl -X POST http://127.0.0.1:3080/dsh-token-use/restart
# 关机(配置信息 tab 的按钮;停掉且不再拉起)
curl -X POST http://127.0.0.1:3080/dsh-token-use/shutdown
响应里每个桶都带 cost(估算金额),pricing 是当前价目表、抓取时间与下次刷新时间,modelPricing 是各模型匹配到的单价或未计价原因;trend 覆盖最近 366 天(趋势图取尾部 7/30/90 天,热力图用整段)。
pnpm install # 仅开发需要(esbuild + echarts)
pnpm run build # 重新生成 client/client.js(= 精简 ECharts + client/src.js)
client/client.js 是已提交的构建产物,使用者无需安装依赖或构建。
开发环路(把本仓库以 link: 装进 profile 后:dsh plugin --profile web add /path/to/dsh-token-use):
client/src.js → pnpm run build → 浏览器里的面板自动热更新(宿主侧会轮询每个插件行的 client bundle,变化时通过 SSE /plugins/events 推 rebuilt,浏览器侧热替换),不用重启 dsh web、也不用刷新页面;实测换装延迟 < 1s。lib/*.js(宿主侧,如 pricing.js)→ 仍需重启 dsh web。apply() 幂等:重载会把新 fiber 装进来,若它直接重复注册同一个 locale 命名空间 / 槽位就会抛错,整个设置分区会消失直到刷新页面。本插件的字典、导航样式与 settings.section 注册都是「接管式」的(先退掉旧注册再登记),因此可以安全热重载。界面用 DSH 自带的组件库 @deepseek-ai/dsh-client-ui-primitives(Button / Pill / Input / Menu / Tooltip / StateDot 与图标集):打包插件里直接 require("@deepseek-ai/dsh-client-ui-primitives") 即可;老版本 shell 上组件缺失时逐项降级为原生控件。创造模式预览动态 cordis 插件时无法引入外部依赖,可改用 window.__DSH_MODULES__.import("@deepseek-ai/dsh-client-ui-primitives")(该模块属于 shell 的静态模块,普通 Web GUI 里没有 window.__DSH_MODULES__)。
已发布到 npm(包名 dsh-token-use,repository 指回本仓库,因此官方市场会自动关联并显示下载量)。升级流程:改 version → npm publish → 用户 dsh plugin update 或市场一键更新。
input / output:API 上报的输入/输出 tokens。cacheRead / cacheWrite:提示词缓存读/写 tokens(API 计费口径中缓存读也计入输入侧)。reasoning:推理 tokens。cost:按上面的字段与当时单价算出的估算金额;缓存写不计费,推理已含在输出内,不重复计。auxiliary:本期未计入金额的辅助调用次数(search 联网搜索、title 会话标题)。request/header 的 model;标题生成等无 usage 记录的小调用不在统计内。cwd(实时事件读 session.header.cwd,历史扫描读日志头);子会话/分叉会话继承父会话的项目;极少数暂时无法归属的调用先挂起,归属明确后自动回填,30 秒仍未明确才记入 (no cwd)。给他人安装前,这些差异都已处理:
| 维度 | 说明 |
|---|---|
| 运行环境 | 需要 dsh web ≥ 0.1.0-rc.6(设置侧边栏 settings.section 槽位;package.json 的 engines.dsh 已声明 >=0.1.0-rc.6,插件市场与 AxzoStore 都据此显示并校验宿主要求)。宿主侧只用 Node 内置模块;zstd 解压依赖 node:zlib(Node ≥ 22.15 内置,dsh 自身要求 ^22.19 || >=24,故必然满足)。 |
| 数据目录 | 按 $DSH_HOME(环境变量,缺省 ~/.dsh)解析,与 dsh 官方 dsh-home-paths 规则一致;自定义 home 同样有效。历史用量只读;唯一写入的是定价缓存 $DSH_HOME/dsh-token-use/pricing.json(原子替换,可用 pricing.enabled: false 完全关闭联网与写盘)。 |
| 设置导航图标 | 应用按 section id 硬编码导航图标,未知 id(含本插件与插件市场)都回退成同一个齿轮,槽位没有 icon 选项。插件用「结构选择器 + mask」把自己的柱状图图标画在齿轮位置:只依赖自身 label 里的标记类名,不依赖应用 CSS 模块的哈希类名;若应用改版导致结构变化,选择器失配即回退为默认齿轮(不会出现两个图标),功能不受影响。 |
| 会话格式 | 同时支持 session.jsonl[.zstd](多帧 zstd,含 checksum)、带版本号的新一代 session.v<N>.jsonl[.zstd](dsh 迁移后会与旧文件并存),以及明文 .jsonl;同一会话只读最高版本那一代,不会重复计数;.bak/.corrupt-*/session.lock 自动跳过,个别损坏帧只计入 scan.skipped。 |
| 目录布局 | 兼容官方 JSONL 持久层的 sessions/<项目目录>/<会话目录>/ 结构;会话按项目目录、会话 ID 独立读取。 |
| 统计口径 | 部分 provider(如 pi-ai 适配)会把推理 token 并入输出,此时「推理」列为 0 属正常;标题生成、联网搜索等不落 usage 的调用不计入;模型归属取该会话最近一次 request/header。 |
| 网络访问 | 接口默认仅回环。局域网部署(配置了 trustedHosts)时在 profile patch 里开 allowRemote: true,且仍只接受同源请求;客户端遇到 403 会直接提示原因。出网只有一个用途:每天 12:00 抓一次 api-docs.deepseek.com 官方定价页(可用 pricing.url 换源、pricing.enabled: false 关闭)。 |
| 性能 | 历史重建在 Worker 线程执行,不阻塞宿主事件循环;期间新事件先缓冲、扫描完成后回放,靠会话 seq 水位去重。之后只做事件增量。 |
| 多实例 | 每个 $DSH_HOME 独立统计;同一 home 下的多个 profile 共享 sessions 目录,统计会合并显示。 |
- id: dsh-token-use
name: 'dsh-token-use'
config:
endpoint: /dsh-token-use
scanAtBoot: true # false 则只统计插件启动之后的实时用量
allowRemote: false # 局域网(非回环)访问时设为 true,仅接受同源请求
pricing:
enabled: true # false 则关闭每日定价抓取,只用内置/已有快照
currency: CNY # CNY(官网中文页,元)或 USD(官网英文页,$)
refreshHour: 12 # 本地时间每天几点抓取
# url: https://api-docs.deepseek.com/zh-cn/quick_start/pricing # 自定义定价页
dsh web(bundle 成员变化必须重启才生效);curl 'http://127.0.0.1:3080/dsh-token-use?month=2026-09'。