输入框下方的用量/成本/余额仪表盘:实时指标指示器 + 零依赖 SVG 用量图表,按轮次统计用量、估算成本并实时查询 DeepSeek 账户余额。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-usage-chart
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Max-Samson/dsh-usage-chart
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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
DeepSeek 用量 / 成本 / 余额仪表盘 · DSH Web 插件
English · 问题反馈 · 更新日志(中文) · Changelog (EN)
界面预览:左侧为浅色英文界面,右侧为深色简体中文界面。两者均会跟随 DSH 的主题与语言设置。
图片仅使用虚构演示数据:不含真实会话内容、Token、成本、余额或 API Key。
在 DeepSeek Harness Web UI 的输入框下方实时显示 token 用量、成本估算、模型与账户余额;点击展开用量可视化图表面板(参考 DeepSeek 开发者平台的用量页组织方式),全部使用零依赖 SVG 自绘,不引入任何图表库。成本按官方刊例价(CNY / USD 双币种,区分高峰/空闲时段)估算,支持 USD / CNY 多币种显示(v0.3 / v1.0.1)。
▸ 输入 12.4M · 输出 86.2K · 缓存 72% · 成本 ≈¥0.284 / ≈$0.042 · demo-model · 余额 --
点击 ▸ 展开面板:
- 会话用量汇总 — 输入(未命中/命中)、输出、缓存命中率、上下文占用(均来自官方 adapter 上报的
tokenUsage/contextPressure投影) - 上下文构成与压缩诊断(v1.1.0) — 官方
contextBreakdown投影拆解(系统提示 / 工具定义 / 历史消息 Token 占比与分段条,标注启发式近似);宿主折叠compaction/*事件流(哪一轮被压缩、释放了多少 Token、生成摘要花费了多少成本与对应模型);结合上下文容量占比(≥75% / ≥90%)给出开新会话或精简大文件注入的优化建议 - 成本估算 — 按官方刊例价(CNY/USD 双币种 /1M tokens,高峰/空闲双时段)估算并标注来源与核验日期;支持用户覆盖
pricing.json;内置 Anthropic Claude 官方 API 标准价(美元);未定价模型显式标记「未定价模型」 - 会话成本按轮汇总(v1.1.7) — 按每轮实际模型和计费时段累加宿主成本;新轮进行中,指示器和面板共用“已读取历史+新增 token 的估算”,实时用量暂停更新后刷新宿主历史。两处模型名称采用相同的历史/实时来源顺序。
- DSH 0.1.2+ 与皮肤兼容(v1.1.7) — 新版从独立
chat源读取会话节点,旧版回退到会话快照;皮肤创建 fixed 定位包含块时,展开面板仍贴近指示器。 - 兼容 DSH 0.2.x client SDK(v1.1.8) — client peer 范围同时覆盖 DSH 0.1.x 与 0.2.x(已在 0.2.1-rc.2 上验证),DSH 0.2.x 的插件准入校验在启动时即可通过;已移除退役的
@deepseek-ai/dsh-client-runtimepeer,助手节点模型标识新增读取 0.2.x 的providerMetadata字段(存在 0.1.x 的provenance时仍优先,requestConfig保留为最后回退)。 - 高峰/空闲时段计费(v1.0.1) — 官方高峰时段(北京时间周一至周五 09:00–12:00、14:00–18:00,即 UTC 01:00–04:00、06:00–10:00)价格为空闲时段的 2 倍;其余时段及周末全天为空闲时段;每轮成本按轮次开始时刻自动选用对应时段单价(时刻缺失按高峰保守估算);面板顶部以红/绿 tag 实时标注当前计费时段(红=高峰、绿=空闲),每轮解释卡也显示该轮计费时段
- 双币种官方刊例价(v1.0.1) — 中文定价页(CNY)与英文定价页(USD)的官方报价同时内置:显式 CNY/USD 报价保留原价;Claude 及用户单币种报价使用同一个展示汇率,刷新同步重算历史与实时估算
- 多币种成本(v0.3 / v1.0.1) — 成本区 CNY/USD 一键切换(选择在浏览器记住),指示器、面板、图表与成本徽章全部跟随所选币种
- 轮次用量与来源归因(v1.1.0) — 支持“总量 / 构成 / 成本”三视角;成本视角每根柱显示对应费用数值(逐轮可见,不只在当前轮);柱顶叠加总耗时点线;成本突增轮次加异常标记(归因 chip:输出增长 / 上下文膨胀 / 缓存命中下降);柱底缓存命中迷你刻度;悬浮解释卡(token 分桶 + 成本 + 模型 + 计费时段 + 耗时/TTFT/TPS + 输入来源归因:人工/Agent/续跑 + 结束原因);全部轮次横向滚动查看(固定细柱宽 + 自动滚到最新 + 箭头/渐隐提示),从宿主会话日志折叠完整历史,不可用时回退到本页观测增量(同样按快照估算逐轮成本)
- 成本徽章 — 每条助手消息尾部显示可关闭的「本轮 ≈ ¥0.00xx / $0.00xx」徽章(跟随所选币种)
- 分段细上下文压力条(v1.1.0) — 指示器行内的细压力条(
contextPressure / contextWindow),消费contextBreakdown投影分段展示系统(蓝)、工具(橙)、消息(绿)三段占比,随总占用升高由绿转红 - 账户余额 — 官方
GET /user/balance接口实时查询(经宿主侧代理,密钥不暴露给浏览器) - 中英双语 — 自动跟随 DSH 应用内语言设置,支持运行时切换
zh/en
特性
| 数据 | 来源 | 准确性 |
|---|---|---|
| token 用量 | DSH 官方 adapter 上报的会话投影(tokenUsage / contextPressure) |
✅ 官方真实数据,实时更新 |
| 成本 | 官方刊例价(内置表 + 可选用户覆盖 pricing.json,CNY/USD 双币种 /1M tokens,高峰/空闲双时段)× adapter 上报用量 |
⚠️ 估算值,非官方账单;价格经宿主 /pricing 下发;两侧共用来源优先级和换算规则 |
| 成本币种 | 宿主 /meta 下发配置;双币种保留原价,单币种按共享展示汇率补全 |
⚠️ 折算为展示估值,非历史账单汇率 |
| 轮次明细 | 宿主会话日志折叠(/usage):耗时 / TTFT / TPS / 模型归因 / 输入来源归因 / 结束原因 / 每轮成本。DSH 0.2.x 累计 assistant/message 与失败的 assistant/attempt 用量(含仅在 stream 中的样本);TTFT 取首个携带 token 的片段,TPS 按各次请求生成时长之和计算;0.1.x 保留 chunk/usage 锚点 |
✅ 官方事件流折叠 |
| 上下文与压缩诊断 | 官方 contextBreakdown / contextPressure 投影 + 宿主 compaction/* 事件折叠 |
✅ 官方投影 + 事件流折叠 |
| 余额 | 官方 GET https://api.deepseek.com/user/balance |
✅ 官方实时数据 |
| 模型名 | 宿主历史:request/context → request/header → 最近模型;实时节点:provenance(0.1.x)→ providerMetadata(0.2.x)→ requestConfig |
✅ 官方真实数据 |
技术栈
- 语言:TypeScript 源码,发布为 DSH 可加载的 JavaScript bundle
- 框架:Cordis 插件模型 + React 18
- 构建:esbuild(host 半区 = Node ESM;client 半区 =
window.__ModuleLoader__.load({id, factory})工厂包,外部依赖与 DSH web 的PLATFORM_MODULES完全一致) - 可视化:零依赖手写 SVG(DSH web 未内置图表库;自绘与平台渲染方式一致、体积最小、最稳定)
v1.1.9 — Claude 定价与一致的成本估值
v1.1.9 包含 Claude 标准价格表、写缓存独立单价、更安全的模型名匹配与未定价轮次处理,并统一宿主/客户端覆盖优先级、补齐成本分项及共享汇率估值。所有单币种报价使用同一个展示汇率;显式双币种原价不变。完整说明见 v1.1.9 更新日志。
源码版本不代表 npm 已发布。使用下面的指定版本升级命令前,请先运行 npm view dsh-usage-chart@1.1.9 version 确认版本存在。升级后重启 dsh web 并刷新浏览器;无需迁移会话数据。
安装
前置要求:DSH ≥ 0.1.0-rc.6 · Node.js ≥ 20 · PATH 上有 pnpm(dsh plugin 会把安装命令转发给 pnpm)。
若提示
dsh: command not found(或 PowerShell无法将“dsh”项识别为…),说明只通过npx @deepseek-ai/dsh临时运行过、未安装全局命令——按 FAQ 第一条解决 (全局安装后重开终端,或每条dsh ...前加npx --yes @deepseek-ai/dsh)。
方式一:npm 仓库安装(推荐,预构建产物,无需构建工具)
dsh plugin --profile web add dsh-usage-chart # 安装并自动登记为 profile 插件层
dsh web --profile web # 启动 DSH Web(已在运行时先停止再启动)
v1.1.9 发布后更新:pnpm 对已安装的依赖重新 add 可能显示 Already up to date
而不升级,请用显式版本(推荐)或先卸载再安装:
# 方式①:显式指定目标版本
dsh plugin --profile web add dsh-usage-chart@1.1.9
# 方式②:先移除再重装(回到最新版)
dsh plugin --profile web remove dsh-usage-chart
dsh plugin --profile web add dsh-usage-chart
完成后重启 DSH Web。
⚠️ 升级后必须重启
dsh web进程:宿主在启动时缓存插件代码(无热重载), 新路由(如/pricing、/meta、/rate)只有重启后才生效。详见 更新日志。
⚠️ 未全局安装 dsh(报
dsh: command not found/ PowerShell无法将“dsh”项识别为…)? 把上面每条dsh都写成npx --yes @deepseek-ai/dsh,例如npx --yes @deepseek-ai/dsh plugin --profile web add dsh-usage-chart@1.1.9(原因与解法见 FAQ 第一条)。
方式二:从 GitHub 安装(源码构建)
dsh plugin --profile web add github:Max-Samson/dsh-usage-chart#<commit-sha>
Git 安装会执行包的 prepare 脚本(node build.mjs)从源码构建。pnpm ≥ 10 首次会拒绝运行
prepare,需要在 profile 的 pnpm-workspace.yaml 中放行:
allowBuilds:
dsh-usage-chart: true
放行意味着允许该包源码在安装时于本机执行,请只对可信来源这么做,并固定 commit (
github:Max-Samson/dsh-usage-chart#<sha>)。
方式三:本地目录安装(开发自测)
git clone https://github.com/Max-Samson/dsh-usage-chart.git
cd dsh-usage-chart
npm ci && npm run build
dsh plugin --profile web add "$PWD" # 以链接方式安装当前目录
dsh web --profile web
验证安装
组合配置中应出现插件行:
dsh --profile web --dump-config | grep -A4 'id: dsh-usage-chart'打开 DSH Web,进入任意已有会话:输入框下方应出现「用量」指示器(含 token/成本/模型), 右侧为余额;点击 ▸ 展开可视化面板。未配置 API Key 时余额显示
–,面板内会提示配置方式。
配置余额查询
余额查询需要 DeepSeek API Key,按以下优先级解析(每次请求实时解析,改后无需重启):
- DSH 网页端配置(推荐,需插件 ≥ 0.1.1):在 DSH Web 的「设置 → 模型」中配置
DeepSeek API Key。插件经 DSH 凭据服务读取同一密钥(
.credentials.yaml用户层), 无需额外操作; - 环境变量:启动
dsh web前导出DEEPSEEK_API_KEY=sk-...(凭据服务的 env 层,同样生效); - 插件配置:在 profile 的
cordis.patch.yml中覆盖(Key 会以明文落盘,仅建议用于受保护的本机 profile):
- insert:
- id: dsh-usage-chart
name: dsh-usage-chart
config:
apiKey: 'sk-...' # 留空则回退到网页端/环境变量
baseUrl: 'https://api.deepseek.com'
# pricingFile: '/path/to/pricing.json' # 可选:价格覆盖文件(默认 $DSH_HOME/data/dsh-usage-chart/pricing.json)
# currency: 'cny' # 可选(v0.3):成本显示币种 'usd'(默认)| 'cny'
# cnyPerUsd: 6.76 # 可选(v0.3):单币种报价的统一展示汇率(默认 6.76,可「刷新汇率」)
# fxUrl: 'https://open.er-api.com/v6/latest/USD' # 可选(v0.3):自定义实时汇率源
插件版本 < 0.1.1 时不读取网页端密钥:请用环境变量或上面的
config.apiKey配置。
未配置 Key 时,指示器显示 余额 –,点击可重试;面板内会提示如何配置。
价格覆盖(可选,v0.2+ / v1.0.1 双币种双时段)
成本按「用户覆盖 > 内置刊例价 > 回退估算」解析(价格只在宿主解析,client 经
/dsh-usage-chart/pricing 快照消费,单一价格真相)。默认覆盖文件
$DSH_HOME/data/dsh-usage-chart/pricing.json(无 DSH_HOME 时 ~/.dsh/...),
支持两种形状,文件变更即时生效:
{
"deepseek-flash": {
"offPeak": {
"cny": { "cacheMissInput": 1, "cacheHitInput": 0.02, "output": 4 },
"usd": { "cacheMissInput": 0.15, "cacheHitInput": 0.003, "output": 0.6 }
},
"peak": {
"cny": { "cacheMissInput": 2, "cacheHitInput": 0.04, "output": 8 },
"usd": { "cacheMissInput": 0.3, "cacheHitInput": 0.006, "output": 1.2 }
},
"verifiedAt": 1788998400000
}
}
或 { "models": { "<model>": { … } } }。单价为 双币种(CNY + USD)/ 1M tokens:
peak 为高峰时段(北京时间周一至周五 09:00–12:00、14:00–18:00,即 UTC 01:00–04:00、06:00–10:00),
offPeak 为空闲时段(其余时间及周末全天)。兼容旧格式:平铺
{ "cacheMissInput": …, "cacheHitInput": …, "output": … } 视为高峰/空闲同价、
人民币报价(美元按统一展示汇率折算,默认 6.76)。verifiedAt(epoch 毫秒)可选,用于面板
展示核验日期。单价可选 cacheWrite(写缓存价),缺省按「缓存未命中」价计。
未收录的模型会在 UI 中显式标记「未定价模型」:
- DeepSeek 系列(及模型名缺失)按
deepseek-flash刊例价回退估算,金额带≈; - 型号名含
claude的模型(含 Bedrock 写法anthropic.claude-…、Claude Opus 5.5等显示名) 不估算:单价记为 0、成本不计入,避免套用 DeepSeek 价造成数十倍低估。会话合计含此类 轮次时显示为≥(下限)并在面板提示;成本徽章与压缩成本不显示$0,成本异常检测跳过这些轮次。
Claude 系列
内置 Anthropic 官方价格页 的标准价 (美元 / 1M tokens,2026-11-05 核验),覆盖 Fable 5.1 / 5、Mythos 5.1 / 5、Opus 5.5 / 5 / 4.8 / 4.7 / 4.6 / 4.5 / 4.1 / 4、Sonnet 5.5 / 5 / 4.6 / 4.5 / 4、Haiku 4.5:
- 不分高峰/空闲;写缓存按 5 分钟 TTL 价计(用量无法区分 1 小时 TTL);
- 模型名匹配:
anthropic/前缀与点号版本(claude-opus-5.5)会归一化;带日期快照后缀 (-20261101/-latest)的 ID 按对应型号计价;其余变体(未收录的新版本、-fast、-batch、 Bedrock 写法等)一律视为未定价,不会被套上相近型号的价格; - Claude Haiku 5.5 暂不收录:其价格按单次请求的输入长度分档(≤100K / >100K),按轮汇总无法判定档位;
- 不计入:批处理折扣、地区 /
inference_geo溢价、Fast mode、工具调用费; - 官方只有美元报价,人民币金额按统一展示汇率折算,与所有用户单币种报价共用
cnyPerUsd/上次成功值/手动刷新的实时值。
币种与汇率(v0.3+ / v1.0.1 官方双币种)
成本区可切换 CNY/USD(浏览器记住选择),指示器、面板、图表、压缩成本与消息徽章共用同一展示口径:
- 显式双币种报价:DeepSeek 官方 CNY/USD 价及用户同时填写的两种报价保留原价,不强制按汇率改写。
- 单币种报价:内置 Claude(USD)、用户仅提供
usd或cny,以及旧的平铺人民币格式,都由同一个pricingAtRate函数补全另一币种。写缓存单价也按同一汇率换算。 - 统一汇率来源:初始采用
/meta下发的config.cnyPerUsd(无效/缺省为 6.76);有浏览器持久化的上次成功汇率时优先恢复;手动「刷新汇率」经宿主/rate更新并保存。主源为config.fxUrl或 open.er-api.com,不可达时回退 frankfurter.dev;失败不覆盖上次成功值。 - 刷新后的历史:页面把当前汇率作为
/usage?session=…&cnyPerUsd=…的展示参数,宿主重新计算轮次与压缩成本;实时增量和单价说明同步更新。请求按“会话 + 汇率”去重,旧响应不能覆盖新汇率或另一会话。 - 估算而非账单:历史成本按当前展示汇率重估,不是请求发生时的历史汇率,不修改会话日志。双币种官方报价不随刷新变化。
- 分项完整:成本分项及比例条展示输入(未命中 + 写缓存)、缓存命中、输出,三者之和等于总额;写缓存有独立单价时在面板说明。
单币种覆盖示例(每 1M tokens,两个时段同价):
{
"my-usd-model": {
"usd": { "cacheMissInput": 4, "cacheHitInput": 0.2, "output": 20, "cacheWrite": 5 }
}
}
价格来源优先级在 host 和 client 完全一致:用户文件 → 内置表 → 未收录处理;每个来源内先精确匹配,再选最长有效前缀。因此用户文件的前缀覆盖也优先于内置精确键。
卸载
⚠️ 未全局安装 dsh(报
dsh: command not found/ PowerShell无法将“dsh”项识别为…)? 把下面每条dsh都写成npx --yes @deepseek-ai/dsh,例如npx --yes @deepseek-ai/dsh plugin --profile web remove dsh-usage-chart(原因与解法见 FAQ 第一条)。
dsh plugin --profile web remove dsh-usage-chart # 移除依赖并自动从 profile 插件层注销
dsh web --profile web # 重启后指示器/面板消失
remove 会同时清理 node_modules 中的包并把它从 dsh.profile.bundles 移除(无残留)。
彻底清理(按需):
- 若曾在 profile 的
cordis.patch.yml中写过config.apiKey/baseUrl覆盖块,删除该段; - 若为 GitHub 安装加过
allowBuilds,可移除pnpm-workspace.yaml中对应的dsh-usage-chart条目; - 网页端配置的 DeepSeek API Key 存于 DSH 凭据文件(
~/.dsh/.credentials.yaml), 不要删除——DSH 自身的模型服务仍在使用该密钥;只有确定不再使用 DSH 的 DeepSeek 服务时才考虑移除。
常见问题(FAQ)
Q:dsh 命令找不到(command not found / PowerShell 无法将“dsh”项识别为…)?
A:npx @deepseek-ai/dsh 是临时运行、不产生全局命令。请 npm install -g @deepseek-ai/dsh
并重开终端(Windows 还需确保 npm config get prefix 目录在 PATH);或把每条 dsh ...
换成 npx --yes @deepseek-ai/dsh ...。pnpm 缺失同理:npm install -g pnpm。
Q:安装时提示 WARN missing peer react@^18.2.0?
A:正常且无害——react 由 DSH Web 平台在浏览器端内置,profile 无需安装。插件 ≥ 0.1.1
已把 react 标记为可选 peer,不再报警;0.1.0 的该警告可忽略。
Q:DSH 0.2.x 提示 dsh-usage-chart@1.1.7 与 DSH 0.2.1-rc.2 不兼容(要求 @deepseek-ai/dsh-client-locale >=0.1.0-rc.6 <0.2.0, ...)…,是插件不兼容吗?
A:该警告来自 DSH 0.2.x 的插件准入校验,不是 DSH 装坏了,也不会丢数据:当插件的 @deepseek-ai/dsh* peer 范围不匹配当前运行时版本时 DSH 会拒绝加载,而截至 1.1.7 的插件声明的是仅 0.1.x 的范围。把插件升级到 ≥ 1.1.8(dsh plugin --profile web add dsh-usage-chart@1.1.9)后重启 dsh web;若 DSH Web 页面已打开,再刷新页面即可。DSH 本身未受损,会话数据、成本记录与凭据均未丢失——插件只是没有被加载。
Q:网页端配了 API Key,余额仍显示 – 或「未配置」?
A:请确认插件版本 ≥ 0.1.1(0.1.1 起余额查询才走 DSH 凭据服务读取网页端密钥);
升级后重启 dsh web。临时方案:先设环境变量 DEEPSEEK_API_KEY 或 config.apiKey。
Q:add 时报 dsh-usage-chart is not in the npm registry?
A:先检查包名、指定版本与 npm registry 的连通性。Git 中的版本不一定已发布到 npm:用 npm view dsh-usage-chart version 查看当前发布版本,用 npm view dsh-usage-chart@<version> version 检查指定版本。尚未发布的源码可按「方式三:本地目录安装」构建后测试。
参与开发
git clone https://github.com/Max-Samson/dsh-usage-chart.git
cd dsh-usage-chart
npm ci
npm run verify # typecheck + build + node:test
npm pack --dry-run # 检查最终发布内容
本地自测安装见上文「方式三」;贡献前请阅读 CONTRIBUTING.md, 安全问题请按 SECURITY.md 私下报告。
可视化验证脚本(可选)
scripts/ 下有基于 playwright-core 的探测脚本,针对已运行的 DSH Web(默认
http://127.0.0.1:3080,需要本机 Chrome/Chromium),通过环境变量与你的环境解耦:
| 环境变量 | 默认 | 说明 |
|---|---|---|
DSH_PROBE_URL |
http://127.0.0.1:3080 |
目标 DSH Web 地址 |
DSH_PROBE_CHROME |
平台常见位置 | Chrome/Chromium 可执行文件路径 |
DSH_PROBE_SESSION |
内置常用标题 | 目标会话标题片段(逗号分隔多个备选) |
DSH_PROBE_ARTIFACTS |
<仓库>/artifacts |
截图输出目录(已 gitignore) |
node scripts/shot.mjs # 收起/展开两张截图
node scripts/probe-panel.mjs # 面板是否被容器裁剪
node scripts/probe-popover.mjs # 悬浮面板边界与开合
node scripts/verify-render.mjs # 完整渲染验证(含明暗主题、中英文界面)
维护者发布
版本号为 1.1.9,内容已定稿。具体 npm 发布时间由维护者决定;源码版本或有日期的更新日志不代表 npm 已发布。两条发布路径择一执行,不要并行。
手动发布 npm(本次方式)
发布内容当前位于 fix/pricing-currency-consistency,尚未合并 main。请在你自己的仓库副本、工作区干净的前提下执行:
git fetch origin
git switch fix/pricing-currency-consistency
git pull --ff-only origin fix/pricing-currency-consistency
git status --short # 应无输出
node -p "require('./package.json').version" # 应为 1.1.9
npm ci
npm run verify
npm pack --dry-run
npm view dsh-usage-chart versions --json # 确认 1.1.9 尚不存在
# 以下仅由维护者在检查无误后自行执行
npm publish --access public
npm view dsh-usage-chart@1.1.9 version # 发布后应返回 1.1.9
如果工作区/版本不符合预期,或 npm 已存在 1.1.9,应停止,不要自动递增版本或尝试覆盖。prepublishOnly 会重跑验证,prepare 会重建被忽略的 lib/;检查包内运行时入口、类型声明和 README 图片,不要上传旧 tgz,也不要从之前的实现提交发布。npm 登录及可能的 2FA 提示由你直接处理,不要将凭据粘贴到聊天中。
双语日志的版本记录日期为 2026-11-10(北京时间);若实际发布跨日,请在发布前同步调整。各支持版本线的干净 profile 安装结果应单独记录,单元测试或隔离合成宿主浏览器验证不能代替安装验收。用户升级后须重启 dsh web 并刷新浏览器;无需迁移会话数据。
可选:GitHub Release 自动发布
现有 release.yml 在 GitHub Release published/edited 事件或手动触发 workflow 时,可通过 npm Trusted Publishing 发布。因此本次选择手动 npm 时,不要先发布 GitHub Release。不需要为本文改动任何凭据或 publisher 设置。若改走 workflow,应先将 tag 指向最终验证提交并等待 CI,再发布 Release。手动 npm 发布成功后,后续 Release workflow 会跳过 npm 上已存在的版本。仅推送分支或合并代码不会发布 npm。
仓库发现标签继续使用 dsh-plugin、dsh、deepseek-harness。
插件结构
dsh-usage-chart/
├── package.json # dsh.bundle(安装层)+ dsh.client(浏览器半区)+ exports["./client"]
├── cordis.patch.yml # 插件行插入(config.apiKey / baseUrl / pricingFile / currency…)
├── build.mjs # esbuild 双产物(+ client 纯模块测试束)+ tsc 类型声明(lib/types)
├── src/
│ ├── index.ts # host 半区:/balance 余额代理 + /usage 轮次折叠 + /pricing 价格快照
│ │ # + /meta 币种配置下发 + /rate 实时汇率代理(多源回退)
│ ├── pricing/
│ │ ├── calc.ts # 纯共享计算(成本分拆/多币种格式化;两个半区 bundle 同一份)
│ │ ├── source.ts # PricingSource 接缝:builtin 刊例价 + pricing.json 文件适配器
│ │ └── resolve.ts # PricingResolver:覆盖 > 内置 > 回退,未知模型显式标记
│ ├── usage/
│ │ ├── rounds.ts # RoundFold:耗时/TTFT/TPS/模型归因/来源归因/结束原因/每轮成本(纯函数)
│ │ └── compactions.ts # CompactionFold:压缩裁剪范围/释放Token/summarize双币种成本(纯函数)
│ └── client/
│ ├── index.ts # client 入口:注册 composer.dock + assistant-actions 槽位
│ ├── context.ts # 自包含 slots/locale Context 类型(不再依赖退役 runtime)
│ ├── UsageIndicator.tsx # 输入框下方一行指示器(含三段着色细压力条)
│ ├── UsagePanel.tsx # 可视化面板(汇总 / 诊断 / 成本 / 每轮图表 / 余额)编排根
│ ├── charts.tsx # 零依赖 SVG/HTML 原语(堆叠条/图例)
│ ├── chart/RoundBars.tsx # 深模块柱状图(三视角 + 耗时叠加 + 异常标记 + 来源归因 + 解释卡)
│ ├── rounds/ # observed.ts(本页观测)/ history.ts(宿主历史)/ types.ts
│ ├── diagnose/
│ │ ├── anomaly.ts # 成本突增判定(图表与徽章共享的纯模块)
│ │ └── context.ts # ContextReport:上下文构成拆解/压缩统计/优化建议(纯模块)
│ ├── badge/CostBadge.tsx # assistant 消息尾部可关闭成本徽章
│ ├── pricing-api.ts # usePricing:/pricing 快照消费(client 唯一价格输入)
│ ├── currency.ts # 币种/汇率 store(/meta 配置 + 切换 + /rate 刷新)
│ ├── balance.ts # 余额读取 hook(经宿主代理)
│ └── styles.ts # 注入样式(<style data-plugin>)
└── types/ # 宿主 Cordis 最小类型声明;客户端类型在 src/client/context.ts
数据与安全边界
- token 与上下文数据来自当前 DSH 会话投影;每轮图表优先读取会话日志,读取失败时会明确标注并回退到本页观测。
- 成本为官方刊例价估算(支持用户覆盖
pricing.json);价格只在宿主解析,client 经/pricing快照消费,官方价格调整后可通过覆盖文件即时修正。 - 币种与汇率:
/meta下发显示配置;/rate经宿主代理拉取汇率(浏览器不直连外部汇率源);汇率源强制 HTTPS(仅回环放行 HTTP)。 - 余额经宿主同源路由代理(浏览器直连官方 API 有 CORS 与密钥暴露问题)。
- Host 路由只接受同源 GET 请求,并为 JSON 响应设置
no-store;插件不会把 API Key 发送到浏览器。 - 自定义 API 地址必须使用 HTTPS;仅回环地址允许 HTTP,便于连接本地代理。
兼容性
| 组件 | 支持范围 |
|---|---|
| DSH | 声明的 peer 范围:>=0.1.0-rc.6 <0.3.0-0(0.1.x / 0.2.x)。DSH 0.2.x 在声明 engines.dsh 时优先按它判断,否则回退到匹配 @deepseek-ai/dsh* peer 范围;本插件有意保留 peer 回退,使每个客户端 SDK 包分别受版本门禁约束。/usage 优先通过 snapshotEvents() 读取事件,保留旧版 events 属性回退(Session.events 自 0.1.2-rc.1 起移除)。验证范围见下文。 |
| Node.js | ≥ 20 |
| Web UI | React 18 / conversation.composer.dock + conversation.chat.assistant-actions |
| 系统 | macOS、Linux、Windows(纯 JavaScript,无原生依赖) |
v1.1.9 验证范围:Node 20.19.5 / 22.17.0 / 24.22.2 各 85 项测试通过、0 跳过,包括发布版本一致性测试;打包及隔离合成宿主浏览器回归通过(配置/实时汇率、保存后重载、CNY/USD、完整成本分项与英文窄屏)。这些都不是实际 DSH/干净 profile 安装验收。历史证据单独保留:v1.1.8 兼容性 PR 作者报告了 DSH 0.2.1-rc.2 链接构建冒烟,Claude PR 作者报告了 0.2.2-rc.1 应用包/接口/日志检查,均不等于当前版本在两条支持线上的干净 profile 安装认证。移除退役 runtime 注入后,仍未重跑 0.1.x 实机安装。
社区与开源
License
MIT
链接
同类插件
bowenliang123/dsh-context★ 4963
DSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
Han-1413141/dsh-cost-meter★ 675
会话与当日 API 费用统计、预算图框(已用%)、官方余额、历史看板,支持峰谷计价与官方价格一键同步。
wssfk12138/dsh-damage-pulse★ 290
在 DSH Web 界面追踪 DeepSeek Token 用量、单次与会话费用及账户余额,并显示缓存感知的扣费动画。
zh667/TokenLedger★ 204
侧边栏用量面板:把 Token 归属到实际服务该请求的中转站,站点从已有的 provider 配置中读出,无需额外配置;含今日/本月/累计三窗口、按站点与模型下钻、一年活跃度热力图,以及 New API / Sub2API / DeepSeek 余额。
Ychris12138/dsh-usage-stats★ 188
多供应商用量看板:按供应商/模型统计 Token 与日期下钻,统一展示账户余额,并追踪 OpenCode Go / Z.ai 订阅额度。
Mt-Youya/dsh-plugins#sessions-insight★ 126
按工作目录浏览 Claude Code、DSH 和 Codex 会话日志,查看每轮上下文构成、token 用量、压缩点和费用估算。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。