mahiro6
dsh-billing
简陋deepseekharness计费插件,可查询显示余额.设置预算,累计汇总。
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-billing
DeepSeek Harness 计费插件(界面中英双语)
持久化账本 · 精确计费(每次模型调用)· 官方余额 · 预算 · 今日/本月/累计汇总 · 会话明细与历史记录 · 峰谷计价 · 官方价格同步
English | 中文
功能总览
| 功能 | 位置 | 说明 |
|---|---|---|
| 本会话费用 | 会话统计行 | 实时累计 token(输入/缓存/输出)+ 按当前价格档位估算费用 |
| 今日费用 | 会话统计行 / 侧边栏 | 账本精确值 |
| 官方余额 | 会话统计行 / 侧边栏底部 / 设置页 | 总/赠送/充值,自动刷新 + 手动刷新 |
| 汇总卡片 | 设置页 | 今日 / 本月 / 累计费用、调用次数与 token 明细 |
| 预算 | 设置页 + 侧边栏进度条 | 额度、周期(今日/本月/累计/自定义区间)、已用百分比(≥80% 预警、≥100% 超支) |
| 今日会话明细 | 设置页 | 每个会话的调用次数、输入/缓存/输出 token 与费用 |
| 历史记录 | 设置页 | 按天汇总,保留天数可配(默认 180 天) |
| 价格表 | 设置页 | 每模型 基础/谷时/峰时 三档价格,可编辑 |
| 峰谷计价 | 设置页 | DeepSeek 官方峰谷方案,生效时间门控 |
| 官方价格同步 | 设置页 | 抓取解析官方定价页,一键应用 |
| 数据 | 设置页 | 清除全部历史 |
| 界面语言 | 设置页 → 显示设置 | 简体中文 / English / 跟随浏览器(auto,默认) |
计费规则
- 价格单位与官方文档一致:美元 / 1M tokens;
- 成本 = 未命中输入 ×
cacheMiss+ 输出 ×output+ (缓存读 + 缓存写) ×cacheHit; - 峰谷计价按时点门控:
peakEffectiveAt(默认 2026-08-16 16:00 UTC)之前一律按基础价格;之后峰时段(01:00–04:00、06:00–10:00 UTC)按峰时价、其余按谷时价; - 账本金额恒以美元存储,币种/汇率仅影响显示(默认 1 USD = 7.2 CNY,可改);
- 计费来源为每次模型调用的 usage 块(
llm/stream瀑布链尾监听),主循环、子代理、压缩、标题等辅助调用全部入账,与账单口径一致; - 会话统计行的本会话费用按当前价格档位估算,今日/月度/累计与预算为按调用实际时刻精确计费;
- 预算与超支提示仅提醒,不阻止调用。
数据存储
- 账本:
$DSH_HOME/storages/dsh-billing/ledger.json(原子写入 + 2 秒防抖;按historyDays保留,每日最多 200 个会话明细); - 所有设置修改即时自动保存(客户端「保存设置」提交,服务端校验后持久化);
- 删除账本文件即可清零,或使用设置页「清除全部历史」。
架构
dsh-billing
├── cordis.patch.yml # bundle 补丁:向 web profile 插入 billing 行
├── package.json # dsh.bundle 补丁声明 + dsh.client 浏览器声明
├── lib/
│ ├── index.js # 宿主插件:llm/stream 计费包裹、costUsage 会话投影、
│ │ # billing 服务(手写 typertRemote 绑定)、余额查询、官方价格同步
│ ├── pricing.js # 官方价格表、官方页面 HTML 解析、峰谷计费数学
│ ├── store.js # 账本持久化与配置管理($DSH_HOME/storages/dsh-billing)
│ ├── typert.host.js # ./typert 导出:Typert 清单(typert-loader 自动注册)
│ └── client.js # ./client 导出:浏览器单文件 bundle(统计行/侧边栏/设置页)
└── test/
├── verify.mjs # 单元验证:定价/配置/账本/投影/真实 cordis 加载/计费包裹
└── demo.mjs # 计费演示:模拟多会话/多模型/峰谷调用,输出账本与汇总
数据通道:
- 本会话费用:宿主注册
costUsage会话投影(纯 token 桶 + 按模型拆分),浏览器经useProjection('costUsage')读取并按当前价格档位计价; - 账本 / 预算 / 余额 / 配置:
billing/getState | updateConfig | refreshBalance | fetchPrices | resetHistory,经 Typert 网关 RPC(remote.billing.*); - 余额:调用官方
GET {baseURL}/user/balance,复用模型请求的同一把 API Key(凭证服务/环境变量),进程内缓存按refreshMinutes过期; - 刷新策略:宿主不使用 cordis timer mixin(
ctx.interval在未挂载 timer 服务的上下文中读取会直接抛错),全部基于「缓存时间戳 + 按需刷新」,由客户端轮询/手动刷新触发。
插件不导入 cordis/dsh 的 Service/Context 运行时类(仅 Node 内建模块、zod、dsh-home-paths、dsh-credentials 的纯函数),与宿主共享同一运行时实例,无重复依赖风险。
安装
需求:Node.js ≥ 20 + DeepSeek Harness(带
dsh plugin命令,npm install -g @deepseek-ai/dsh)。
方式一:从 GitHub 安装
dsh plugin --profile web add github:mahiro6/dsh-billing
或使用 GitHub tag 打包直链:
dsh plugin --profile web add https://github.com/mahiro6/dsh-billing/archive/refs/heads/main.tar.gz
方式二:本地开发安装(推荐改源码时用)
dsh plugin --profile web add link:<本仓库绝对路径>
# 例:dsh plugin --profile web add link:E:\Workspace\dsh-billing
生效与卸载
安装后重启 dsh web(插件行、Typert 清单与客户端 bundle 均在启动时扫描):
dsh web
更新:重跑安装命令并重启;卸载:dsh plugin --profile web remove dsh-billing。
开发与验证
pnpm install # 依赖
node --check lib/index.js && node --check lib/pricing.js \
&& node --check lib/store.js && node --check lib/typert.host.js \
&& node --check lib/client.js # 语法检查
node test/verify.mjs # 单元验证(定价/配置/账本/投影/真实 cordis 加载/计费包裹)
node test/demo.mjs # 计费演示(模拟调用 → 账本/汇总/预算)
dsh --profile web --dump-config # 组合树校验(需已安装)
配置
| 字段 | 默认值 | 说明 |
|---|---|---|
locale | auto | 界面语言:auto(跟随浏览器)/ zh / en |
statsLine | true | 会话统计行显示余额、今日费用与本会话费用 |
sidebar | true | 侧边栏底部显示余额、今日费用与预算进度条 |
currency | CNY | 费用显示币种(CNY/USD/EUR/GBP/JPY/HKD/TWD) |
symbol | ¥ | 货币符号 |
decimals | 4 | 金额小数位 |
exchangeRate | 7.2 | 汇率(1 USD = ?) |
peakEnabled | true | 启用峰谷计价 |
peakEffectiveAt | 2026-08-16T16:00:00Z | 峰谷计价生效时间(UTC) |
peakWindows | [{1,4},{6,10}] | 峰时段窗口(UTC 小时) |
prices | 内置 DeepSeek 官方价 | 每模型 cacheHit/cacheMiss/output + 可选 offPeak/peak(美元 / 1M tokens) |
budget | {enabled:false, amount:100, period:'month'} | 预算:启用/额度(显示币种)/周期(day/month/all/custom)/自定义区间 |
balance | {display:'both', refreshMinutes:5} | 余额显示位置与自动刷新间隔 |
historyDays | 180 | 账本保留天数(7–3650) |
已知限制
- 余额是账户级数据,按
refreshMinutes缓存;手动刷新即时生效; - 会话统计行的本会话费用为当前档位估算值,精确费用以账本(今日/月度/累计)为准;
- 官方页面解析依赖当前页面结构;改版后「同步官方价格」会报错,可手动编辑价格表兜底;
- 价格同步会覆盖官方页面列出的同名模型价格,自定义模型条目不受影响;
- 余额查询需要可访问 api.deepseek.com 的网络与有效 API Key;API Key 只会发往官方域名(baseURL 指向非官方域名时余额查询拒绝请求,模型请求不受影响);
- 安装/更新插件后需重启
dsh web生效。
贡献
欢迎提交 Issue 与 PR。开发前请先跑通 node test/verify.mjs。
License
MIT © 2026 dsh-billing contributors