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

用量成本仪表盘 Max-Samson/dsh-usage-chart

DeepSeek Harnessv1.1.8
Max-Samson12 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek 用量 / 成本 / 余额仪表盘 · DSH Web 插件

40.7/100
综合分
9
GitHub 星标
733
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-usage-chart
npm 源 · dsh-usage-chart 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-usage-chart @ 1.1.8
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:49:37

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 17 处,展示前 17 条)
  • 读取本地文件
    lib/index.js:212
    const text = await readFile(filePath, "utf8");
  • 发起网络请求
    lib/index.js:859
    const res = await fetch(`${baseUrl}/user/balance`, {
  • 发起网络请求
    lib/index.js:910
    const res = await fetch(url, {
  • 读取密钥环境变量
    lib/index.js:944
    return (process.env.DEEPSEEK_API_KEY ?? "").trim();
  • 发起网络请求
    lib/client.js:141
    const res = await fetch("/dsh-usage-chart/meta", { headers: { Accept: "application/json" } });
  • 发起网络请求
    lib/client.js:185
    const res = await fetch("/dsh-usage-chart/rate", { headers: { Accept: "application/json" } });
  • 发起网络请求
    lib/client.js:501
    const promise = fetch(`/dsh-usage-chart/usage?session=${encodeURIComponent(sessionId)}`, {
  • 发起网络请求
    lib/client.js:633
    const res = await fetch("/dsh-usage-chart/balance", { headers: { Accept: "application/json" } });
  • 发起网络请求
    lib/client.js:670
    const promise = fetch("/dsh-usage-chart/pricing", { headers: { Accept: "application/json" } }).then((res) => res.json()).catch(() => ({ ok: false })).
  • 发起网络请求
    src/client/balance.ts:38
    const res = await fetch('/dsh-usage-chart/balance', { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/client/currency.ts:72
    const res = await fetch('/dsh-usage-chart/meta', { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/client/currency.ts:125
    const res = await fetch('/dsh-usage-chart/rate', { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/client/pricing-api.ts:36
    const promise = fetch('/dsh-usage-chart/pricing', { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/index.ts:239
    const res = await fetch(`${baseUrl}/user/balance`, {
  • 发起网络请求
    src/index.ts:311
    const res = await fetch(url, {
  • 读取密钥环境变量
    src/index.ts:359
    return (process.env.DEEPSEEK_API_KEY ?? '').trim()
  • 读取本地文件
    src/pricing/source.ts:234
    const text = await readFile(filePath, 'utf8')
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 实时查看Token用量
  • 费用估算
  • 查看API余额

DeepSeek Harness 网页插件,实时看 token 用量、费用估算、每轮图表和 DeepSeek API 余额。

v1.1.82026-10-22
· 更新重点 本次主要修复 DSH 升级到 0.2.x 后插件无法加载的问题,并补齐新版会话日志的用量、成本与时序统计。 · 兼容性修复 · 将 DSH client peer 范围扩展为 >=0.1.0-rc.6 <0.3.0-0,覆盖 0.1.x / 0.2.x,并排除未来 0.3.0 预发布版本。 · 移除已退役的 @deepseek-ai/dsh-client-runtime peer、inject 和类型导入;客户端 Context 改为自包含声明。 · 助手节点新增读取 0.2.x 的 providerMetadata,保留 provenance → providerMetadata → requestConfig 的模型识别回退顺序。 · 用量与成本统计 · 支持从 assistant/message.usage 读取用量,并在其缺席时回退到流内最后一条 usage 记录。 · 将 assistant/attempt.stream 中失败请求的已报告用量计入会话总量与每轮成本,重试前后分别计费,避免漏算。 · 修正 TTFT:取首个真正携带 token 的片段,跳过结构记录和空片段;带工具名的工具调用增量也计入。 · 修正输出 TPS:按各次请求的流式生成时长之和计算,排除工具执行及步骤间等待;生成时长为零时不报告吞吐。 · 适配对象形式的 user/message.source,正确区分人工输入、Agent/运行时注入与目标续跑;保留旧版字符串来源支持。 · 发布包与文档 · 同步 npm lockfile 的 peer 范围与元数据,移除退役 runtime 条目,未升级已锁定的依赖版本。 · 修正 README 截图与 npm 发布清单的文件名不一致问题。 · 同步双语 README、CHANGELOG、架构、路线图及贡献/发布指南,明确验证范围与升级流程。 · 新增 lockfile 根元数据一致性和 README 截图收录回归测试。 · 验证结果 · npm run verify:57 项测试通过,0 跳过(Mac 本地验证)。 · 最终提交 c1187a0 的 GitHub CI 已通过(Node.js 20 / 22)。 · npm pack --dry-run、实际 tarball 生成及解包检查通过;已核实 Host/Client 入口、类型声明与截图文件。 兼容性验证说明:回归测试覆盖两代事件形状;兼容性 PR 作者报告了 DSH 0.2.1-rc.2 链接构建的浏览器冒烟测试。移除 runtime inject 后尚未重新完成 0.1.x 实机安装测试,不能将单测或链接构建冒烟视为双版本干净 profile 安装验收。 · 升级方式 npm 发布工作流完成后,显式安装目标版本: dsh plugin --profile web add dsh-usage-chart@1.1.8 升级后请重启 dsh web,并刷新已打开的网页。 感谢 @ChthoIly 提供 DSH 0.2.x 兼容性适配。 · 兼容性 PR:#19 · 完整变更:
v1.1.72026-09-24
· 已修复 · DSH 0.1.2+ 会话节点 — PR #12:停靠栏指示器和助手费用徽章现在从独立聊天槽来源(useChat)读取 legacy.nodes。旧版 DSH 仍使用会话快照的 chat.legacy.nodes 或顶层 nodes。两个钩子按固定顺序调用,以保留 React 钩子状态;会话回退只选取节点列表,避免无关会话更新引发重渲染。 · 主题停靠栏下的面板定位 — PR #14:当停靠栏或祖先元素使用 transform、filter、backdrop-filter、containment 或相关属性时,固定用量面板会把视口坐标转换到最近的 CSS 包含块。后续处理覆盖边框、根元素和额外的 will-change 值,同时忽略 contain: style,因为它不会建立所需的包含块。 · 跨模型和计费周期的会话总计 — PR #15:指示器和面板汇总宿主每轮的人民币/美元费用,而不是用单一模型和当前计费档重新计算整个会话的 token。这样保留每轮的模型和高峰/低谷开始时间。如果历史不可用或某轮缺少费用,客户端回退到基于 /pricing 快照的估算。 · 合并回归与实时费用同步 — 提交 9753856 和 cc0963f:PR #15 合并后回退了 PR #12 在指示器中的 useChat 连接,并导致 ChatNodesHook 未导入,现已恢复。指示器和面板现在共享同一份历史结果、模型归属和会话费用。当实时 token 用量超过已获取的历史时,它们显示已获取轮次之和加上仅针对新增 token 的标记估算,然后在静默 750 毫秒后刷新宿主折叠。面板刷新也会更新指示器;失败的历史请求可以重试,来自另一会话的过期响应无法替换所选会话。 · 测试 · 新增回归覆盖:聊天来源优先级和旧版回退、选择器稳定使用、每轮货币汇总、过期历史增量,以及停靠栏指示器的实际组件接线和模型/费用显示。npm run verify 通过全部 46 项测试。本地无头浏览器探测也验证了实时费用过渡和匹配的面板总计;发布前仍应对运行中的 DSH Web 安装做冒烟测试。
v1.1.62026-09-19
· 摘要 修复自定义 pricing.json 文件覆盖从未生效、文件变更监听器从未触发的 bug(PR #10),并把发布版本升到 1.1.6: · 用户可见变化: - 恢复自定义定价配置:此前即使存在有效的自定义 pricing.json,/dsh-usage-chart/pricing 对每个模型都返回 source: "builtin",文件编辑也从不触发自动重算。 - 修复 src/index.ts 里 Cordis 生命周期时序问题:ctx.effect(() => fileSource.dispose(), ...) 在插件注册时同步调用了 dispose(),此时 fiber 正在创建,结果把 undefined 注册成了清理函数。这会让 filePricingSource 在首次异步读取完成前就被提前销毁,目录监听器也随之关闭。改成返回清理函数(ctx.effect(() => () => fileSource.dispose(), ...))后,文件源在整个 fiber 生命周期内保持活跃,只在插件卸载时释放。 - 让 tests/core.test.mjs、tests/pricing.test.mjs、tests/rounds.test.mjs 里的测试 mock 与 Cordis 生命周期语义对齐(收集清理函数,在 after() 中统一执行)。 - 新增一个专门的回归测试,覆盖启用用户 pricing.json 覆盖时的 /pricing 路由。 - 在 package.json、package-lock.json、README.md、README_ZH.md、CHANGELOG.md、CHANGELOG_ZH.md 中把版本升到 1.1.6。 · 为什么属于这个插件: - 准确的 token 成本核算依赖单一可信来源的解析层级:用户 pricing.json 覆盖 → 内置官方定价 → 保守兜底。提前销毁让配置自定义或企业费率的用户完全失去了第一层也是最高优先级的一层。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-usage-chart DeepSeek 用量 / 成本 / 余额仪表盘 · DSH Web 插件 English · 问题反馈 · 更新日志(中文) · Changelog (EN) 界面预览:左侧为浅色英文界面,右侧为深色简体中文界面。两者均会跟随 DSH 的主题与语言设置。 浅色主题 · English 深色主题 · 简体中文 图片仅使用虚构演示数据:不含真实会话内容、Token、成本、余额或 API Key。 在 DeepSeek Harness Web UI 的输入框下方实时显示 token 用量、成本估算、模型与账户余额;点击展开用量可视化图表面板(参考 DeepSeek 开发者平台的用量页组织方式),全部使用零依赖 SVG 自绘,不引入任何图表库。成本按官方刊例价(CNY / USD 双币种,区分高峰/空闲时段)估算,支持 USD / CNY 多币种显示(v0.3 / v1.0.1)。
展开完整文档(README 剩余 1 节)
dsh-usage-chart

DeepSeek 用量 / 成本 / 余额仪表盘 · DSH Web 插件

English · 问题反馈 · 更新日志(中文) · Changelog (EN)

界面预览:左侧为浅色英文界面,右侧为深色简体中文界面。两者均会跟随 DSH 的主题与语言设置。

浅色主题 · English 深色主题 · 简体中文

图片仅使用虚构演示数据:不含真实会话内容、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;未定价模型显式标记「未定价模型」
- 会话成本按轮汇总(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-runtime peer,助手节点模型标识新增读取 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 显示用美元报价,不做汇率换算(与官方账单口径一致);「刷新汇率」仅更新「1 USD ≈ X CNY」参考注记
- 多币种成本(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 未内置图表库;自绘与平台渲染方式一致、体积最小、最稳定)

安装

前置要求: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(已在运行时先停止再启动)

1.1.8 发布后更新:pnpm 对已安装的依赖重新 add 可能显示 Already up to date 而不升级,请用显式版本(推荐)或先卸载再安装:

方式①:显式指定目标版本
dsh plugin --profile web add dsh-usage-chart@1.1.8
方式②:先移除再重装(回到最新版)
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.8
(原因与解法见 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

验证安装

1. 组合配置中应出现插件行:

dsh --profile web --dump-config | grep -A4 'id: dsh-usage-chart'

2. 打开 DSH Web,进入任意已有会话:输入框下方应出现「用量」指示器(含 token/成本/模型),右侧为余额;点击 ▸ 展开可视化面板。未配置 API Key 时余额显示 –,面板内会提示配置方式。

配置余额查询

余额查询需要 DeepSeek API Key,按以下优先级解析(每次请求实时解析,改后无需重启):

1. DSH 网页端配置(推荐,需插件 ≥ 0.1.1):在 DSH Web 的「设置 → 模型」中配置 DeepSeek API Key。插件经 DSH 凭据服务读取同一密钥(.credentials.yaml 用户层),无需额外操作;
2. 环境变量:启动 dsh web 前导出 DEEPSEEK_API_KEY=sk-...(凭据服务的 env 层,同样生效);
3. 插件配置:在 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):cny 时使用的汇率(默认 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 毫秒)可选,用于面板展示核验日期;未收录的模型会在 UI 中显式标记「未定价模型」,不会静默按 0 计。

币种与汇率(v0.3+ / v1.0.1 官方双币种)

成本按所选币种的官方刊例价直接计算(中文定价页 CNY 报价 / 英文定价页 USD 报价, 不做汇率换算,与官方账单口径一致),面板成本区可一键切换 CNY/USD(选择在浏览器记住),指示器、面板、图表与成本徽章全部跟随。config.cnyPerUsd(默认 6.76)与「刷新汇率」按钮(经宿主 /dsh-usage-chart/rate 代理)仅用于「1 USD ≈ X CNY」参考注记:

- 多源回退:自定义源(config.fxUrl)不可达时自动回退内置备用源(frankfurter.dev);
- 离线健壮性:上次成功汇率持久化,断网刷新沿用上次真实汇率而非写死默认值;
- 配置下发:宿主 /dsh-usage-chart/meta 向 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.8)后重启 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 # 完整渲染验证(含明暗主题、中英文界面)

维护者发布

本包已经存在于 npm。仓库的 release.yml 通过 npm Trusted Publishing 发布(npm Trusted Publisher 与 GitHub 的 npm environment 须由维护者配置);常规发版无需本地执行 npm publish。

1. 与 CI 一致,使用 npm 和已提交的 package-lock.json。同步 manifest 与 lockfile 根节点的版本、依赖范围和 peer 元数据;已准备好的版本不要再次递增。
2. 同步双语 README、CHANGELOG,以及发生契约变化的架构文档/路线图。版本条目发布前保持待发布,正式发版时填写实际日期。分别记录所支持 DSH 版本线的干净 profile 安装结果,不把单元测试视为安装验收。
3. 执行 npm ci、npm run verify 和 npm pack --dry-run。本地链接安装前必须重新构建:被忽略的 lib/ 可能仍是旧版产物。检查打包清单中的截图与导出的运行时/类型文件。
4. 提交发布准备修改,等待最终提交的 CI 通过,再创建 v<version> GitHub Release;tag 必须指向该最终提交。仅合并源码不会发布到 npm。
5. 确认发布工作流成功,且 npm view dsh-usage-chart@<version> version 返回目标版本后,再推荐 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 # 注入样式() └── 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.8 验证范围:回归测试覆盖两代事件形状。兼容性 PR 作者报告了 DSH 0.2.1-rc.2 链接构建的浏览器冒烟测试,但这不等于两条版本线均已完成干净 profile 安装验收。移除 dsh.client.inject 中的 dsh-client-runtime 后,尚未重新进行 0.1.x 实机安装测试。声称完整安装覆盖前,应分别记录运行时版本与干净 profile 测试结果。

社区与开源

- 贡献指南
- 行为准则
- 支持渠道
- 安全报告
- 第三方声明

License

MIT
预览分享卡片长什么样 ↓Max-Samson/dsh-usage-chart
分享 · DeepSeek Harness Hub
Max-Samson/dsh-usage-chart

DeepSeek 用量 / 成本 / 余额仪表盘 · DSH Web 插件

这是你的仓库?认领条目

回到顶部