jianweideng0515-create/dsh-usage-stats 预览 preview

jianweideng0515-create/dsh-usage-stats

Plugin插件 Native原生 ⭐ 2 BSD-3-Clause Usage & Cost用量与计费Models & Routing模型与路由

DSH插件:精准的API使用统计(令牌、成本、缓存命中率、按模型细分),并支持多提供商余额与配额监控(OpenCode、DeepSeek)。

Project Overview项目介绍

DSH Web usage statistics plugin that subscribes to global session events and aggregates tokens, requests, turns, cache hit rate, and estimated cost by day and model, while fetching OpenCode subscription quota and DeepSeek balance in parallel. Use it to review consumption, control spend, reconcile DeepSeek billing, or monitor subscription limits. Caveats: cost is priced from a table, not invoiced; history is only recorded from enable time onward.

DSH Web 用量统计插件,订阅全局会话事件后按日、按模型聚合 Token、请求、轮次、缓存命中率与估算费用,另并行拉取 OpenCode 订阅配额与 DeepSeek 官方余额;安装即用、零配置。适用于需要回顾消耗、控制成本、对账 DeepSeek 月底账单或监控订阅额度的用户。需注意:费用为价目表估算,并非发票;历史仅从启用时起算。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add @abcdefu_cja/dsh-usage-stats

jianweideng0515-create/dsh-usage-stats 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

@abcdefu_cja/dsh-usage-stats

npm version license tests

DSH Web 的 API 用量统计插件:精确统计 token、请求、轮次、缓存命中率与费用,同时监控 OpenCode 订阅配额与 DeepSeek 官方余额。装完即用,无需任何配置。

精确计量 直接读取 provider usage 报告,采用 DSH 的 (turn, step) 替换语义——非启发式估算
独立插件 不属于 dsh-web-ui 家族,经官方 settings.section 槽挂载为设置页专属 Tab
多提供商余额 OpenCode 配额与 DeepSeek 余额并行快照,各自失败互不影响

目录

功能特性

用量概览 Tab

  • 常驻 KPI:Token 总量(含费用)、请求数、完成轮次、活跃天数、缓存命中率、提供商动态卡
  • Token 四分色拆分条(输入 / 缓存读 / 缓存写 / 输出)
  • 堆叠柱状趋势图:按模型分段着色,Y 轴中文刻度(万/亿),悬停查看当日明细;可切换 费用 / 请求数 指标
  • 模型明细表 + 最贵会话排行(费用降序 Top 10)
  • 一键导出当前范围的按日 × 分模型明细 CSV(Excel 直接打开)

模型与缓存 Tab

  • 模型占比 Donut 图 + 缓存效率诊断(命中率、节省 token、节省比例)

余额与配额 Tab

  • OpenCode 订阅配额三窗口进度条(滚动 / 每周 / 每月 + 重置倒计时)
  • DeepSeek 官方余额(金额 / 预计可用天数 / 充值页跳转 / 手动刷新)

其他

  • 会话用量面板:会话页按钮展开当前会话实时消耗
  • 日费用阈值提醒:今日费用超过 alertDailyCost 时顶部常驻横幅
  • 7 / 14 / 30 / 90 天与自定义范围;30s 轮询(ETag 条件请求,未变化 304 短路)

截图

用量概览

用量概览 Tab:KPI 卡、Token 拆分、堆叠柱状趋势图、模型明细

模型与缓存

模型与缓存 Tab:模型占比 Donut 与缓存效率诊断

余额与配额

余额与配额 Tab:OpenCode 配额三窗口与 DeepSeek 余额

会话用量面板

会话页用量面板:累计消耗与最近请求

安装

npm(推荐)

npm i @abcdefu_cja/dsh-usage-stats
dsh plugin --profile web add @abcdefu_cja/dsh-usage-stats

GitHub 克隆 / 本地开发

git clone https://github.com/jianweideng0515-create/dsh-usage-stats
dsh plugin --profile web add link:/path/to/dsh-usage-stats

安装后重启 dsh web,设置页左侧导航出现「用量统计」入口:

设置页左侧导航中的用量统计入口

配置文件方式(可选)

也可写入个人 DSH 覆盖层 ~/.dsh/config.yaml(保存即热加载):

- insert:
    - id: usage-stats
      name: '@abcdefu_cja/dsh-usage-stats'
      config:
        enabled: true
        currency: CNY
        balance:
          mode: auto
          refreshMs: 600000

所有配置项均可选,默认值见下表。

配置

Key 类型 默认 含义
enabled boolean true 总开关
currency string CNY 费用与余额的显示货币(¥ / $)
alertDailyCost number 日费用阈值:今日费用达到该值时页面顶部渲染超限横幅
prices Record<string, ModelPrice> 内置 DeepSeek 价目 每百万 token 单价,按模型键覆盖内置表
defaultPrice ModelPrice 无(按 0 计) 未在 prices 中的模型的兜底单价
balance.mode 'auto' | 'manual' | 'off' auto auto 自动检测已知 provider;manual 固定端点;off 关闭
balance.baseUrl string 余额端点基址(manual 必填)
balance.path string /user/balance 追加到基址的路径
balance.apiKeyEnv string DEEPSEEK_API_KEY 存放 API key 的环境变量名
balance.refreshMs number 600000 余额刷新间隔(毫秒,最小 1000)

ModelPrice{ input, cacheRead, cacheWrite, output }(每百万 token,非负数)。内置 DeepSeek 价目:

模型 input cacheRead cacheWrite output
deepseek-chat 2 0.5 2 8
deepseek-reasoner 4 1 4 16

余额自动检测

auto 模式同时检测以下 provider(端点内置,profile 无 baseURL 也可推断):

provider 端点 key 环境变量 展示
OpenCode Go GET opencode.ai/zen/go/v1/usage OPENCODE_GO_API_KEY 订阅配额三窗口
DeepSeek GET api.deepseek.com/user/balance DEEPSEEK_API_KEY 金额余额 + 预计可用天数

key 优先进程环境变量,其次 ~/.dsh/.credentials.yaml

架构

flowchart LR
    A["session/event 流(全局)"] --> B["宿主端 UsageStatsMeter"]
    B --> C[("dsh-usage-stats.json<br/>防抖落盘")]
    B --> D["/api/dsh-usage-stats/*<br/>loopback 围栏"]
    D --> E["浏览器端 Tab / 会话面板<br/>30s 轮询 + ETag"]
    F["OpenCode /usage"] --> G["余额客户端(并行)"]
    H["DeepSeek /user/balance"] --> G
    G --> D
  • 宿主端:订阅 session/event(全局),把每次请求折入 UsageStatsMeter,按日(本地时区)与分模型桶聚合。落盘原子写(tmp + rename,损坏转 .bak 重建);余额客户端并行拉取全部已检测 provider,各自失败互不影响。
  • 浏览器端:设置页左侧导航独立 Tab(settings.section 槽)+ 会话页用量按钮(conversation.session.header.utilities 槽)。
  • 对模型透明:不注入提示片段、不注册工具,每请求零额外 token,无 KV 缓存影响。
  • 导出形态inject / Config / apply,无默认导出;计量、计价、存储、查询与 provider 检测均为纯函数并有单元测试。

开发

pnpm install
pnpm build    # tsc -b && tsdown(宿主 ESM + 浏览器闭包工厂 bundle)
pnpm test     # vitest:宿主纯函数单测 + jsdom 组件测试

源码结构:

src/
├─ index.ts           # 装配:事件订阅 / 落盘 / 路由注册 / 余额定时器
├─ meter.ts           # 计量状态机(token / 请求 / 轮次 / 费用)
├─ query.ts           # 区间聚合(补零时间轴)
├─ pricing.ts         # 价目表计费
├─ balance.ts         # 多 provider 快照客户端
├─ provider-detect.ts # 端点自动检测
├─ routes.ts          # 只读 HTTP 路由(loopback 围栏)
├─ store.ts           # 原子落盘
└─ client/            # 浏览器端(卡片 / 图表 / 会话面板 / 设置)

已知限制

  • 费用是估算:按价目表 × provider 上报用量计算,非账单方发票;请以实际账单为准。
  • 余额取决于 provider 端点:DeepSeek 余额要求有效官方 key(OpenCode 的 key 不通用);OpenCode 配额接口可能受 Cloudflare 延迟惩罚(已用浏览器 UA + 25s 超时缓解)。
  • 历史自启用时起算:启用前的使用不回填。
  • 留存:按日数据保留 730 天,会话保留最近 500 个。

许可

BSD-3-Clause,见 LICENSE

上一个 Prev dsh-adaptive-reasoning 下一个 Next dsh-bing-search