kenz1117 / dsh-ui-usage-billing

Listed

Usage billing dashboard plugin for DeepSeek Harness: sidebar cost metrics, real usage aggregation from session logs, current multi-provider pricing catalog

mainModelToolSession View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:kenz1117/dsh-ui-usage-billing

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit ba2e486Synced Aug 18, 2026

dsh-ui-usage-billing

DeepSeek Harness 计费仪表盘插件。从持久化会话日志实时聚合模型用量,按多厂商最新官方价格估算费用,在侧边栏一键查看完整仪表盘。

GitHub license GitHub stars GitHub last commit npm version

特性

  • 侧边栏入口:设置按钮上方的触发胶囊,显示当月费用 + 今日费用;折叠栏自动切换为图标。
  • 计费仪表盘:Hero 按 当年 / 当月 / 当日 三维展示费用,KPI 指标(缓存命中率 / Token 总量 / 单次平均成本 / 调用次数)、按模型分色的堆叠趋势图、按模型计费明细、可展开的单价表。
  • 真实用量:服务端从会话日志实时聚合,无需手工维护统计文件。
  • 模型健康探测:模型行的圆点反映各厂商接入状态(正常绿 / 异常红 / 未接入灰)。
  • 订阅计划豁免:走 coding / token plan / opencode 订阅通道的模型照常统计 token、费用记 0(按通道判定,同一模型走按量通道时正常计费)。
  • 余额查询:模型计费明细按厂商显示「余额」列,DeepSeek 通过官方余额 API 实时查询;未配置 / Key 无效 / 服务不可达均有状态提示,扩展点可接更多厂商。
  • 实时汇率与定价:启动时自动拉取腾讯财经行情(USD→CNY)与 OpenRouter 官方模型价,失败自动降级内置默认值;此后每 6 小时自动刷新,单价表标注「今日汇率」与实时 / 内置徽标。
  • 动态刷新:侧边栏入口与仪表盘每 30 秒自动更新,无需重启或手动刷新。
  • 更新时间:模型计费明细表头显示最近一次统计的更新时间,精确到时分秒。
  • 北京时间统一:统计聚合与仪表盘日期一律按北京时间归天,跨零点不漂移。
  • 离线自包含:无图表库、无外部 CDN,全部使用设计令牌,适配深色/浅色主题。

截图

计费仪表盘

计费仪表盘(单价表展开)

侧边栏入口

快速开始

在宿主 cordis.patch.yml 中加入:

- insert:
    - id: ui-usage-billing
      name: '@kenz1117/dsh-ui-usage-billing'

或通过包管理器安装:

npm install @kenz1117/dsh-ui-usage-billing

启动宿主后,侧边栏设置上方即出现计费入口。无需额外配置;sessionPersistence 可用时自动聚合真实用量。

工作原理

插件由服务端与浏览器端两部分组成:

浏览器端                                  服务端(Node)
  │                                        │
  ├─ GET /api/billing/usage-stats ────────▶ ├─ sessionPersistence 遍历持久化会话日志
  │                                        ├─ 按 request/header 归属模型
  │                                        ├─ token 按缓存命中 / 未命中分桶
  │                                        └─ 按实时单价表估算费用(人民币)
  ├─ GET /api/billing/pricing ────────────▶ ├─ 腾讯财经 / OpenRouter 实时汇率与模型价
  ├─ GET /api/billing/balance ────────────▶ ├─ DeepSeek 官方余额 API(凭据 seam 取 key)
  ├─ llm.models 健康探测 ─────────────────▶ └─ 返回聚合统计 JSON
  └─ 渲染仪表盘
  • 服务端src/index.ts):注入 webServersessionPersistencecredentials,注册 GET /api/billing/usage-stats/api/billing/pricing/api/billing/balance。每次调用折叠全部持久化日志:一次 LLM 调用归属到其前置 request/header 记录的模型,token 拆分到缓存命中 / 未命中桶,日期按本机时区归天。聚合逻辑见 src/aggregate.ts
  • 浏览器端src/client/):请求上述接口渲染仪表盘,通过 llm.models 探测各厂商连接状态。真实数据到达前显示全零空快照,不展示伪造样本。

计费引擎

单价表(src/client/pricing.ts)采用原生币种存储:国内厂商直接录入人民币价格,国外厂商录入美元价格。费用统一以人民币计算与展示——美元模型按实时汇率折算,国内模型全程不经过汇率换算。启动时服务端拉取实时汇率与模型价(src/pricing-fetch.ts):USD→CNY 优先腾讯财经行情(免 key、国内可达),失败依次降级 open.er-api 与内置默认值;之后每 6 小时后台刷新,单价表弹窗标注「今日汇率」与实时 / 内置徽标。

cost(CNY)= (missInput × p_input + cacheHit × p_cacheHit + output × p_output) / 10⁶
           —— 价格为原生币种;美元模型按实时 USD → CNY 汇率折算

统计中的 input 为总输入(cacheHit + cacheMiss),估算按命中 / 未命中分拆计价,避免重复计费。支持双档计费的模型按 DEFAULT_PEAK_SHARE(默认 0.5)混合高峰与低谷档。

支持模型(2026-08-16 主流阵容,OpenAI 兼容系列)

厂商模型
DeepSeekV4 Flash、V4 Pro(按时段峰谷计费:高峰 09:00-12:00 / 14:00-18:00 北京 = 低谷 2 倍)
智谱 AIGLM-5.3、GLM-5.2、GLM-4.6
阿里通义Qwen3.8 Max、Qwen3.7-Max、Qwen3.5-Plus、Qwen3.5-Flash
字节豆包Doubao Seed-2.0 Pro、Seed-2.0 Mini、Seed-1.6
月之暗面Kimi K3、K2.7 Code、K2.7 Code HighSpeed、K2.6
小米MiMo V2.5(走 token plan 订阅通道时豁免计费)¹
MiniMaxMiniMax-M3
百度ERNIE-5.1
腾讯混元 T1、混元 Hy3
零一万物Yi-Lightning
阶跃星辰Step 3.7 Flash
科大讯飞Spark 4.0 Ultra(套餐制)¹
商汤SenseNova 6.5(公测中)¹
百川智能Baichuan M3-Plus
OpenAIGPT-5.6 Sol / Terra / Luna
GoogleGemini 3.1 Pro、3.6 Flash(Standard / Flex 双档,Flex = -50%)
xAIGrok 4.6、Grok 4.3
MetaLlama 4 Maverick、Scout
其他未收录模型的统一回退定价

¹ 讯飞、商汤、小米未公布按量单价,表内为估算价;这些模型走订阅通道(coding / token plan / opencode)时费用记 0,正式定价公布后自动校准。订阅通道与 pi-ai 内置提供方对齐(kimi-coding、zai-coding-cn、opencode、opencode-go、qwen/xiaomi 的 token-plan 各区域变体),可按 subscriptionProviders 配置覆盖。

新增模型:在 MODEL_CATALOG 追加条目,并在 src/aggregate.tsMODEL_KEY_ALIASES 中映射真实模型 id。

HTTP API

GET /api/billing/pricing

实时定价文档(汇率 + 模型价,6 小时后台刷新),浏览器端单价表数据源:

{
  "source": "live",
  "rate": 7.11,
  "rateTime": "2026-08-16T12:00:00+08:00",
  "models": {
    "deepseek-chat": { "input": 0.5, "output": 2, "cacheHit": 0.1 }
  }
}

sourcelive(腾讯财经 / OpenRouter 拉到)或 builtin(全部降级内置默认值);rate 为 USD→CNY 实时汇率。

GET /api/billing/balance

各接入厂商账户余额(凭据 seam 按 balanceApiKeyEnv 取 key):

{
  "balances": [
    {
      "provider": "deepseek",
      "displayName": "DeepSeek",
      "ok": true,
      "currency": "CNY",
      "total": 12.34,
      "available": 10.56,
      "granted": 1.78
    }
  ]
}

查询失败时对应条目带 errorunconfigured / unauthorized / unreachable),表格按此渲染状态提示。

GET /api/billing/usage-stats

聚合统计文档,浏览器端数据源:

{
  "total": {
    "calls": 733,
    "input": 255931033,
    "output": 414286,
    "cacheHit": 255525760,
    "cacheMiss": 405273,
    "cost": 22.87
  },
  "byModel": {
    "flash": { "calls": 733, "input": 255931033, "output": 414286, "cacheHit": 255525760, "cacheMiss": 405273, "cost": 22.87 }
  },
  "byDay": {
    "2026-08-15": { "calls": 74, "input": 32593373, "output": 35375, "cacheHit": 32558208, "cacheMiss": 35165, "cost": 0.52 }
  },
  "byDayModels": {
    "2026-08-15": {
      "flash": { "calls": 74, "input": 32593373, "output": 35375, "cacheHit": 32558208, "cacheMiss": 35165, "cost": 0.52 }
    }
  }
}

字段含义:input 为总输入 token;cacheHit / cacheMiss 为缓存命中 / 未命中分桶;cost 为人民币估算费用。byDayModels模型 × 日期 二维统计([date][modelKey]),趋势图按模型堆叠的输入;当年 / 当月 / 当日三维费用由浏览器端按 byDay 日期前缀归并。sessionPersistence 不可用时回退到配置文件(见下)。

配置

字段默认说明
statsPath未设置回退统计文件 .dsh-usage-stats.json 的绝对路径(sessionPersistence 不可用时生效)
balanceApiKeyEnvDEEPSEEK_API_KEY余额查询使用的 DeepSeek 凭据引用(环境变量名),经 ctx.credentials 解析
subscriptionProviderskimi-codingxiaomi-token-plan-cn订阅制(coding / token 套餐)provider id 列表,照常统计 token、费用记 0

开发

环境要求:Node.js ^22.19 || >=24,pnpm。

pnpm install
pnpm --filter @kenz1117/dsh-ui-usage-billing bundle   # 构建 lib/index.js 与 lib/client.js
npx vitest run packages/client/ui-usage-billing/tests  # 单元测试

发布

本包为独立 npm 包,发布后即可被其他 DeepSeek Harness 宿主安装。

npm publish --access public

宿主通过 package.jsondsh.client 声明(platform: web)与 exports["./client"] bundle 自动发现浏览器端,无需注册中心登记。

许可证

MIT © 2026 KenZ (kenz1117)

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected

Repository information

Language
TypeScript
License
MIT
Latest release
v0.2.6
Last updated
Aug 16, 2026, 12:59 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.