@kenz1117/dsh-ui-usage-billing 0.2.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -36
- package/lib/client.js +1634 -276
- package/lib/index.js +829 -80
- package/lib/types/aggregate.d.ts +121 -13
- package/lib/types/client/TrendChart.d.ts +5 -4
- package/lib/types/client/UsageBilling.d.ts +30 -4
- package/lib/types/client/apply.d.ts +31 -0
- package/lib/types/client/billing-service.d.ts +40 -0
- package/lib/types/client/budget-store.d.ts +32 -0
- package/lib/types/client/index.d.ts +2 -0
- package/lib/types/client/locales.d.ts +1 -1
- package/lib/types/client/pricing.d.ts +39 -10
- package/lib/types/index.d.ts +22 -1
- package/lib/types/pricing-shared.d.ts +39 -0
- package/lib/types/subscriptions.d.ts +59 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -10,15 +10,29 @@ DeepSeek Harness 计费仪表盘插件。从持久化会话日志实时聚合模
|
|
|
10
10
|
## 特性
|
|
11
11
|
|
|
12
12
|
- **侧边栏入口**:设置按钮上方的触发胶囊,显示**当月费用 + 今日费用**;折叠栏自动切换为图标。
|
|
13
|
-
- **计费仪表盘**:Hero 按 **当年 / 当月 / 当日** 三维展示费用,KPI 指标(缓存命中率 / Token 总量 / 单次平均成本 /
|
|
14
|
-
-
|
|
13
|
+
- **计费仪表盘**:Hero 按 **当年 / 当月 / 当日** 三维展示费用,KPI 指标(缓存命中率 / Token 总量 / 单次平均成本 / 调用次数)、按模型色段堆叠的**每日费用趋势图**(7 天 / 30 天窗口切换)、**厂商计费与订阅面板**、可展开的单价表。
|
|
14
|
+
- **月度预算**:仪表盘内置预算条——开关控制显隐、金额可直接编辑(已用 / 总额 / 百分比进度,超支自动转红并脉冲提示),偏好持久化在浏览器本地;宿主配置 `monthlyBudget` 可作为默认金额。
|
|
15
|
+
- **超支通知**:预算开启且当月花费超过预算时,自动弹出系统通知(浏览器 Notification,每天最多一次);通知不可用时红色脉冲进度条兜底。
|
|
16
|
+
- **会话明细**:可折叠面板按费用倒序列出每个会话的花费(标题 / 项目 / 调用数 / 费用 / 最后活跃),直接回答「钱花在哪」。
|
|
17
|
+
- **真实用量**:服务端从会话日志实时聚合,无需手工维护统计文件;增量缓存保证只有写过的日志会被重新折叠,重度使用下轮询依然轻量。
|
|
15
18
|
- **模型健康探测**:模型行的圆点反映各厂商接入状态(正常绿 / 异常红 / 未接入灰)。
|
|
16
19
|
- **订阅计划豁免**:走 coding / token plan / opencode 订阅通道的模型照常统计 token、费用记 0(按**通道**判定,同一模型走按量通道时正常计费)。
|
|
17
|
-
-
|
|
20
|
+
- **余额查询**:厂商组头部显示该厂商余额(只显示一次,不再随每行重复),DeepSeek 通过官方余额 API 实时查询;未配置 / Key 无效 / 服务不可达均有状态提示,扩展点可接更多厂商。
|
|
21
|
+
- **可用天数估算**:余额列按最近 7 天日均消耗折算「约可撑 N 天」,剩余不足 3 天红色强调。
|
|
22
|
+
- **余额不足告警**:任一厂商余额(折算人民币)低于阈值时每天弹一次系统通知;阈值经宿主配置 `lowBalanceThreshold`(人民币元)下发,未配置默认 50 元。
|
|
23
|
+
- **未收录模型标注**:真实模型 id 不在计费目录时,明细行显示真实 id 并标注「未收录」,费用按兜底档估算;厂商可从模型 id 自动推断(如 `mi-mimo-2.5` → 小米),健康圆点据此点亮。
|
|
18
24
|
- **实时汇率与定价**:启动时自动拉取腾讯财经行情(USD→CNY)与 OpenRouter 官方模型价,失败自动降级内置默认值;此后每 6 小时自动刷新,单价表标注「今日汇率」与实时 / 内置徽标。
|
|
19
25
|
- **动态刷新**:侧边栏入口与仪表盘每 30 秒自动更新,无需重启或手动刷新。
|
|
20
26
|
- **更新时间**:模型计费明细表头显示最近一次统计的更新时间,精确到时分秒。
|
|
21
27
|
- **北京时间统一**:统计聚合与仪表盘日期一律按北京时间归天,跨零点不漂移。
|
|
28
|
+
- **精确时段计费**:每笔调用的费用按实际发生时刻(北京时间)精确判定高峰 / 低谷档,替代固定比例混合——凌晨调用不再被按高峰价估算。
|
|
29
|
+
- **订阅套餐额度**:自动识别你在 dsh `llm-pi-ai` 设置里配置的订阅类 provider(kimi-coding、zai-coding-cn、opencode、qwen/xiaomi/火山 token-plan、百度/GLM 等 coding/agent plan),只显示识别到的套餐;有额度 API 的(Kimi / Z.ai / OpenCode Go)实时显示剩余百分比与重置时间,无公开额度接口的标注「额度接口未接入」。API Key 复用 `llm-pi-ai` 的 `apiKeyEnv` 引用经凭据 seam 解析,无需额外配置。面板默认展开,打开即见。
|
|
30
|
+
- **厂商计费与订阅(按厂商聚合)**:模型计费明细与订阅套餐合并为**单一容器**,按厂商作为一级分组——同厂商的非订阅按量模型(显示实际费用)与订阅套餐(显示额度卡片)落在同一组,避免散乱;余额与健康圆点只在厂商组头部显示一次(**余额是厂商的余额**,不再随每行重复)。订阅 provider 通过内置别名归并到对应模型厂商(如 `kimi-coding` → 月之暗面),无模型厂商的跨厂商通道(如 opencode)按自身名独立成组。
|
|
31
|
+
- **模型可用数按模型统计**:侧边栏入口右上角「N 模型可用」按**模型数量**统计(各厂商成功接入的模型之和),而非厂商数量,口径与文案一致。
|
|
32
|
+
- **用量热力图**:当月日历热力图(本月 1 号到今天每天一格,周日开头 7 列),按日费用分 5 档色阶,悬停显示日期与金额。默认展开。
|
|
33
|
+
- **每轮费用与成本突增**:按会话轮次折叠的每轮费用图(最近 40 轮),位于用量热力图下方,默认收起;每根柱子顶部标注该轮费用数字,相对近 6 轮成本超 2 倍的轮次红色标注并归因(输出增长 / 上下文膨胀 / 缓存命中率下降)。
|
|
34
|
+
- **工作区统计**:按会话工作目录(cwd 末级)归并的花费 / 调用 / Token 汇总表。
|
|
35
|
+
- **双币种显示**:仪表盘右上角 ¥ / $ 切换,美元金额按当前汇率换算显示。
|
|
22
36
|
- **离线自包含**:无图表库、无外部 CDN,全部使用设计令牌,适配深色/浅色主题。
|
|
23
37
|
|
|
24
38
|
## 截图
|
|
@@ -64,9 +78,13 @@ npm install @kenz1117/dsh-ui-usage-billing
|
|
|
64
78
|
└─ 渲染仪表盘
|
|
65
79
|
```
|
|
66
80
|
|
|
67
|
-
- **服务端**(`src/index.ts`):注入 `webServer`、`sessionPersistence` 与 `credentials`,注册 `GET /api/billing/usage-stats`、`/api/billing/pricing`、`/api/billing/balance
|
|
81
|
+
- **服务端**(`src/index.ts`):注入 `webServer`、`sessionPersistence` 与 `credentials`,注册 `GET /api/billing/usage-stats`、`/api/billing/pricing`、`/api/billing/balance`。聚合器按会话缓存折叠结果:一次 LLM 调用归属到其前置 `request/header` 记录的模型,token 拆分到缓存命中 / 未命中桶,日期按本机时区归天;日志文件 mtime+size 不变则直接复用缓存,只有写过的会话重新折叠,整份文档另有 5 秒 TTL 合并密集轮询。聚合逻辑见 `src/aggregate.ts`。
|
|
68
82
|
- **浏览器端**(`src/client/`):请求上述接口渲染仪表盘,通过 `llm.models` 探测各厂商连接状态。真实数据到达前显示全零空快照,不展示伪造样本。
|
|
69
83
|
|
|
84
|
+
## 主题协作
|
|
85
|
+
|
|
86
|
+
本插件**不依赖任何主题包**,可独立安装运行。仪表盘弹窗声明 `billing.dashboard.decor` 装饰孔位(head / hero / trend / models / footer 锚点),并将实时费用摘要注册为 `ctx.billingMetrics` 服务:主题插件(如 acid-zine)主动注入 MacDots / 胶带 / 撕角便签等装饰视觉、订阅费用数据渲染自己的贴纸层。插件与主题各自独立装卸——主题不存在时走默认视觉,billing 不存在时主题照常运行。
|
|
87
|
+
|
|
70
88
|
## 计费引擎
|
|
71
89
|
|
|
72
90
|
单价表(`src/client/pricing.ts`)采用**原生币种**存储:国内厂商直接录入人民币价格,国外厂商录入美元价格。费用统一以人民币计算与展示——美元模型按**实时汇率**折算,国内模型全程不经过汇率换算。启动时服务端拉取实时汇率与模型价(`src/pricing-fetch.ts`):USD→CNY 优先腾讯财经行情(免 key、国内可达),失败依次降级 open.er-api 与内置默认值;之后每 6 小时后台刷新,单价表弹窗标注「今日汇率」与实时 / 内置徽标。
|
|
@@ -78,33 +96,33 @@ cost(CNY)= (missInput × p_input + cacheHit × p_cacheHit + output × p_outp
|
|
|
78
96
|
|
|
79
97
|
统计中的 `input` 为总输入(cacheHit + cacheMiss),估算按命中 / 未命中分拆计价,避免重复计费。支持双档计费的模型按 `DEFAULT_PEAK_SHARE`(默认 0.5)混合高峰与低谷档。
|
|
80
98
|
|
|
81
|
-
### 支持模型(2026-08-
|
|
82
|
-
|
|
83
|
-
| 厂商
|
|
84
|
-
|
|
85
|
-
| DeepSeek | V4 Flash、V4 Pro(按时段峰谷计费:高峰 09:00-12:00 / 14:00-18:00 北京 = 低谷 2 倍) |
|
|
86
|
-
| 智谱 AI
|
|
87
|
-
| 阿里通义
|
|
88
|
-
| 字节豆包
|
|
89
|
-
| 月之暗面
|
|
90
|
-
| 小米
|
|
91
|
-
| MiniMax
|
|
92
|
-
| 百度
|
|
93
|
-
| 腾讯
|
|
94
|
-
| 零一万物
|
|
95
|
-
| 阶跃星辰
|
|
96
|
-
| 科大讯飞
|
|
97
|
-
| 商汤
|
|
98
|
-
| 百川智能
|
|
99
|
-
| OpenAI
|
|
100
|
-
| Google
|
|
101
|
-
| xAI
|
|
102
|
-
| Meta
|
|
103
|
-
| 其他
|
|
99
|
+
### 支持模型(2026-08-21 主流阵容,OpenAI 兼容系列)
|
|
100
|
+
|
|
101
|
+
| 厂商 | 模型 |
|
|
102
|
+
| -------- | --------------------------------------------------------------------------------------- |
|
|
103
|
+
| DeepSeek | V4 Flash、V4 Flash Vision (Exp)、V4 Pro(按时段峰谷计费:高峰 09:00-12:00 / 14:00-18:00 北京 = 低谷 2 倍) |
|
|
104
|
+
| 智谱 AI | GLM-5.3、GLM-5.2、GLM-4.6 |
|
|
105
|
+
| 阿里通义 | Qwen3.8 Max、Qwen3.7-Max、Qwen3.5-Plus、Qwen3.5-Flash |
|
|
106
|
+
| 字节豆包 | Doubao Seed-2.0 Pro、Seed-2.0 Mini、Seed-1.6 |
|
|
107
|
+
| 月之暗面 | Kimi K3、K2.7 Code、K2.7 Code HighSpeed、K2.6 |
|
|
108
|
+
| 小米 | MiMo V2.5(走 token plan 订阅通道时豁免计费)¹ |
|
|
109
|
+
| MiniMax | MiniMax-M3 |
|
|
110
|
+
| 百度 | ERNIE-5.1 |
|
|
111
|
+
| 腾讯 | 混元 T1、混元 Hy3 |
|
|
112
|
+
| 零一万物 | Yi-Lightning |
|
|
113
|
+
| 阶跃星辰 | Step 3.7 Flash |
|
|
114
|
+
| 科大讯飞 | Spark 4.0 Ultra(套餐制)¹ |
|
|
115
|
+
| 商汤 | SenseNova 6.5(公测中)¹ |
|
|
116
|
+
| 百川智能 | Baichuan M3-Plus |
|
|
117
|
+
| OpenAI | GPT-5.6 Sol / Terra / Luna |
|
|
118
|
+
| Google | Gemini 3.1 Pro、3.6 Flash(Standard / Flex 双档,Flex = -50%) |
|
|
119
|
+
| xAI | Grok 4.6、Grok 4.3 |
|
|
120
|
+
| Meta | Llama 4 Maverick、Scout |
|
|
121
|
+
| 其他 | 未收录模型的统一回退定价 |
|
|
104
122
|
|
|
105
123
|
> ¹ 讯飞、商汤、小米未公布按量单价,表内为估算价;这些模型走订阅通道(coding / token plan / opencode)时费用记 0,正式定价公布后自动校准。订阅通道与 pi-ai 内置提供方对齐(kimi-coding、zai-coding-cn、opencode、opencode-go、qwen/xiaomi 的 token-plan 各区域变体),可按 `subscriptionProviders` 配置覆盖。
|
|
106
124
|
|
|
107
|
-
新增模型:在 `MODEL_CATALOG` 追加条目,并在 `src/
|
|
125
|
+
新增模型:在 `MODEL_CATALOG` 追加条目,并在 `src/client/pricing.ts` 的 `MODEL_KEY_ALIASES` 中映射真实模型 id(聚合层与客户端渲染共用同一张表)。
|
|
108
126
|
|
|
109
127
|
## HTTP API
|
|
110
128
|
|
|
@@ -118,7 +136,7 @@ cost(CNY)= (missInput × p_input + cacheHit × p_cacheHit + output × p_outp
|
|
|
118
136
|
"rate": 7.11,
|
|
119
137
|
"rateTime": "2026-08-16T12:00:00+08:00",
|
|
120
138
|
"models": {
|
|
121
|
-
"
|
|
139
|
+
"flash": { "input": 3, "output": 9, "cacheHit": 0.1 }
|
|
122
140
|
}
|
|
123
141
|
}
|
|
124
142
|
```
|
|
@@ -175,19 +193,22 @@ cost(CNY)= (missInput × p_input + cacheHit × p_cacheHit + output × p_outp
|
|
|
175
193
|
}
|
|
176
194
|
```
|
|
177
195
|
|
|
178
|
-
字段含义:`input` 为总输入 token;`cacheHit` / `cacheMiss` 为缓存命中 / 未命中分桶;`cost` 为人民币估算费用。`byDayModels` 是 **模型 × 日期** 二维统计(`[date][modelKey]`),趋势图按模型堆叠的输入;当年 / 当月 / 当日三维费用由浏览器端按 `byDay` 日期前缀归并。`sessionPersistence` 不可用时回退到配置文件(见下)。
|
|
196
|
+
字段含义:`input` 为总输入 token;`cacheHit` / `cacheMiss` 为缓存命中 / 未命中分桶;`cost` 为人民币估算费用。`byDayModels` 是 **模型 × 日期** 二维统计(`[date][modelKey]`),趋势图按模型堆叠的输入;当年 / 当月 / 当日三维费用由浏览器端按 `byDay` 日期前缀归并。`bySession` 为会话明细(按费用倒序,封顶 100 行):`title` 取自日志中最新的 `session/title` 事件,`cwd` 为会话创建时的工作目录。配置 `monthlyBudget` 时响应额外携带 `budget` 字段(两条服务路径一致注入)。`sessionPersistence` 不可用时回退到配置文件(见下)。
|
|
179
197
|
|
|
180
198
|
## 配置
|
|
181
199
|
|
|
182
|
-
| 字段
|
|
183
|
-
|
|
184
|
-
| `statsPath`
|
|
185
|
-
| `balanceApiKeyEnv`
|
|
186
|
-
| `subscriptionProviders` | `kimi-coding`、`xiaomi-token-plan-cn` | 订阅制(coding / token 套餐)provider id 列表,照常统计 token、费用记 0
|
|
200
|
+
| 字段 | 默认 | 说明 |
|
|
201
|
+
| ----------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
|
|
202
|
+
| `statsPath` | 未设置 | 回退统计文件 `.dsh-usage-stats.json` 的绝对路径(`sessionPersistence` 不可用时生效) |
|
|
203
|
+
| `balanceApiKeyEnv` | `DEEPSEEK_API_KEY` | 余额查询使用的 DeepSeek 凭据引用(环境变量名),经 `ctx.credentials` 解析 |
|
|
204
|
+
| `subscriptionProviders` | `kimi-coding`、`xiaomi-token-plan-cn` | 订阅制(coding / token 套餐)provider id 列表,照常统计 token、费用记 0 |
|
|
205
|
+
| `monthlyBudget` | 未设置 | 月度预算默认金额(人民币元);随 usage-stats 下发,作为仪表盘预算条的初始金额(用户在界面上的设置优先并本地持久化) |
|
|
206
|
+
| `lowBalanceThreshold` | `50` | 余额不足告警阈值(人民币元);随 usage-stats 下发,任一厂商余额折算人民币低于此值时每天提醒一次 |
|
|
207
|
+
| `subscriptionPlans` | 自动识别 | 订阅额度适配器白名单(`{ provider, baseUrl?, region? }`);缺省时自动从 `llm-pi-ai` 设置识别所有订阅类 provider(有额度 API 的查额度,无 API 的仅标识) |
|
|
187
208
|
|
|
188
209
|
## 开发
|
|
189
210
|
|
|
190
|
-
环境要求:Node.js ^22.19
|
|
211
|
+
环境要求:Node.js ^22.19 || >=24,pnpm。
|
|
191
212
|
|
|
192
213
|
```sh
|
|
193
214
|
pnpm install
|
|
@@ -205,6 +226,22 @@ npm publish --access public
|
|
|
205
226
|
|
|
206
227
|
宿主通过 `package.json` 的 `dsh.client` 声明(`platform: web`)与 `exports["./client"]` bundle 自动发现浏览器端,无需注册中心登记。
|
|
207
228
|
|
|
229
|
+
## Model Experience
|
|
230
|
+
|
|
231
|
+
无。本插件是纯 UI surface:不注册工具、不注入系统提示、不向会话日志写入任何模型可见事件。仪表盘读取的用量统计由服务端从既有会话日志聚合,日志内容由其他包各自负责。
|
|
232
|
+
|
|
233
|
+
#### KV Cache effect
|
|
234
|
+
|
|
235
|
+
无直接影响。插件不改变任何会话的提示前缀或历史,不触及 KV 缓存。
|
|
236
|
+
|
|
237
|
+
## Known Limitations and Deferred Work
|
|
238
|
+
|
|
239
|
+
- **余额查询仅接入 DeepSeek**:其他厂商一律显示「未配置」;扩展点在 `src/balance.ts`(按厂商余额 API 增加查询器)。
|
|
240
|
+
- **超支通知依赖浏览器 Notification**:权限被拒绝或平台不支持时只有界面红色脉冲兜底,没有宿主级通知通道;通知上限为每天一次。
|
|
241
|
+
- **会话明细不可跳转**:点击会话行不会打开对应会话(跨插件导航需要宿主会话选择通道);会话数封顶 100 行、面板只显示前 20 行。
|
|
242
|
+
- **费用为目录价估算**:讯飞 / 商汤 / 小米等未公布按量单价的模型使用估算价(特性表脚注 ¹),正式定价以厂商账单为准。
|
|
243
|
+
- **30 天趋势受日志保留范围约束**:超出持久化日志保留期的日期在窗口内补零显示,不回溯历史。
|
|
244
|
+
|
|
208
245
|
## 许可证
|
|
209
246
|
|
|
210
247
|
[MIT](LICENSE) © 2026 KenZ (kenz1117)
|