@ds-hu/dsh-token-quota 0.0.0-stage → 2.4.1
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/CHANGELOG.md +134 -0
- package/CONTEXT.md +179 -0
- package/README.md +275 -2
- package/cordis.patch.yml +10 -0
- package/docs/windows-desktop-adaptation.md +80 -0
- package/icon.svg +21 -0
- package/lib/client.js +2371 -0
- package/lib/detect.js +448 -0
- package/lib/index.js +1161 -0
- package/lib/legacy-config.js +129 -0
- package/lib/providers.js +1203 -0
- package/lib/quota-history.js +303 -0
- package/lib/routes.js +13 -0
- package/lib/scan-coordinator.js +227 -0
- package/lib/scheduler.js +86 -0
- package/lib/season.js +271 -0
- package/lib/storage.js +453 -0
- package/lib/usage.js +87 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +73 -4
- package/playwright.config.mjs +6 -0
- package/scripts/benchmark-runtime.mjs +227 -0
- package/scripts/benchmark-storage.mjs +104 -0
- package/scripts/check-package.mjs +46 -0
- package/scripts/verify-desktop.mjs +200 -0
- package/scripts/verify-lifecycle.cjs +75 -0
- package/scripts/verify-web.mjs +170 -0
- package/test/browser/edit-identity.spec.mjs +343 -0
- package/test/browser/interactions.spec.mjs +690 -0
- package/test/browser/server.mjs +123 -0
- package/test/browser/shell.html +33 -0
- package/test/client-lifecycle.mjs +515 -0
- package/test/client.mjs +878 -0
- package/test/copy.mjs +47 -0
- package/test/css.mjs +63 -0
- package/test/desktop-services.mjs +91 -0
- package/test/detect.mjs +164 -0
- package/test/draft-config.mjs +38 -0
- package/test/harness.mjs +136 -0
- package/test/legacy-config.mjs +106 -0
- package/test/lifecycle.mjs +81 -0
- package/test/migration.mjs +127 -0
- package/test/mock-dsh.mjs +399 -0
- package/test/package-meta.mjs +49 -0
- package/test/pagination.mjs +21 -0
- package/test/provider-contracts.mjs +145 -0
- package/test/quota-history.mjs +191 -0
- package/test/reset-times.mjs +68 -0
- package/test/route-consistency.mjs +45 -0
- package/test/runtime.mjs +389 -0
- package/test/scan-coordinator.mjs +353 -0
- package/test/scheduler.mjs +98 -0
- package/test/season.mjs +173 -0
- package/test/smoke.mjs +264 -0
- package/test/storage-recovery.mjs +81 -0
- package/test/storage.mjs +382 -0
- package/test/usage-saves.mjs +107 -0
- package/test/usage.mjs +119 -0
- package/ui-prototype.html +509 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 更新日志
|
|
2
|
+
|
|
3
|
+
本文件记录本插件的可见行为变更,格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
|
4
|
+
版本号遵循语义化版本。发布标签带 `fork-` 前缀,不与上游 `shxtmaker/dsh-token-quota` 的 `vX.Y.Z` 重名。
|
|
5
|
+
|
|
6
|
+
更早版本(v2.0.5 及以前)的变更记录在 [README](README.md) 的「vX.Y.Z 更新」小节与
|
|
7
|
+
[docs/](docs/) 下的对应执行记录中,本文件自 2.1.0 起逐版本记录。
|
|
8
|
+
|
|
9
|
+
## [2.4.1] - 2026-11-01
|
|
10
|
+
|
|
11
|
+
### 变更
|
|
12
|
+
|
|
13
|
+
- **包名改为 `@ds-hu/dsh-token-quota`,改由 npm 分发**:加 scope 与上游 `shxtmaker/dsh-token-quota` 区分,
|
|
14
|
+
`dsh plugin add @ds-hu/dsh-token-quota` 一条命令即可安装。插件 id、设置命名空间与
|
|
15
|
+
`$DSH_HOME/dsh-token-quota/` 数据目录不变,从 2.4.0 升级不需要迁移;此前从未在 npm 发布过同名包,
|
|
16
|
+
不存在需要迁移的 npm 安装。
|
|
17
|
+
- **发布由 CI 执行**:`fork-vX.Y.Z` 标签触发 `.github/workflows/publish.yml`,跑完 `npm test` 与打包契约检查、
|
|
18
|
+
核对标签与 `package.json` 同版本后,经 OIDC 可信发布到 npm 并自动附 provenance;仓库里不存 npm token。
|
|
19
|
+
|
|
20
|
+
## [2.4.0] - 2026-10-29
|
|
21
|
+
|
|
22
|
+
### 变更
|
|
23
|
+
|
|
24
|
+
- **四个浮层收敛为单一面板**:删除用量浮卡、供应商限额明细弹窗与用量统计弹窗,侧栏卡片单击直接打开
|
|
25
|
+
「用量监控」面板;面板只剩「概览」「供应商」两个页签,原「设置」页签并入供应商页底部的折叠
|
|
26
|
+
「全局设置」。卡片进入默认概览,宿主「设置 → 用量监控」进入默认供应商。设计与取舍见
|
|
27
|
+
[ADR-0002](docs/adr/0002-single-monitor-surface.md)。
|
|
28
|
+
- **明细与统计并入概览的供应商行**:概览按供应商列出名称、状态、主指标与今日量,一次只展开一行;
|
|
29
|
+
展开区给出按额度/余额/报告分组的指标表格、今日五分量分布与归一比例、DeepSeek 的计费时段拆分,
|
|
30
|
+
以及按需取用的额度历史图。额度历史改为首次展开时请求一次 `/state?quota=1`,同一面板会话内复用。
|
|
31
|
+
- **默认视图不再常显解释文案**:说明移入收起的 `InfoHint`,`·` 拼接改为表格或徽标,词典键由 198
|
|
32
|
+
降到 158;缺次年节假日、保存失败、取数失败等会改变判断的告警仍常显。
|
|
33
|
+
- **移动端不再有独立分支**:视口 < 1024px 也打开同一面板,原「直达详情」的一次点击路径删除,
|
|
34
|
+
`useMobileLayout` 与相关测试一并移除。
|
|
35
|
+
- **侧栏卡片留白**:内容区横向 6px、上下 8px,标题行与进度条间距 +3px;长倒计时不再贴边被裁。
|
|
36
|
+
|
|
37
|
+
### 修复
|
|
38
|
+
|
|
39
|
+
- **指标表格列头与内容错位**:数值列头与单元格统一右对齐,首列仍左对齐;此前表头靠左、
|
|
40
|
+
`限额`/`重置` 的数值靠右,列头与内容各在一端。
|
|
41
|
+
- **展开明细重复画两条分布条**:今日行只保留总量与归一比例,分布条统一由下方五分量块绘制;
|
|
42
|
+
不再出现一条三段条与一条五段条几乎重叠。
|
|
43
|
+
- **图表底部的「近 N 天」单独一行**:窗口合计移入图顶说明行,每根有量的柱标出当日 Token;
|
|
44
|
+
超过 10 根柱时只标峰值,极窄面板隐藏柱值,避免标签互相压住。
|
|
45
|
+
- **热替换后新 JS 配旧 CSS**:`ensureStyle` 复用同一个 `<style>` 并重写内容,不再因标签已存在
|
|
46
|
+
而直接返回,避免更新插件后仍是旧样式。
|
|
47
|
+
|
|
48
|
+
## [2.3.0] - 2026-10-28
|
|
49
|
+
|
|
50
|
+
### 新增
|
|
51
|
+
|
|
52
|
+
- **统计图悬停读数**:指针在图上移动(聚焦后可用 ←/→,触屏点一下即固定)显示那一刻的时刻、当日 Token
|
|
53
|
+
与各窗口剩余百分比;读数取该时刻之前最近一次采样并保持到下一次变化,不插值,靠近采样点会吸附到
|
|
54
|
+
实际采样时刻;移开指针或失焦后收起。
|
|
55
|
+
|
|
56
|
+
### 修复
|
|
57
|
+
|
|
58
|
+
- **额度折线看不出「换了窗口」还是「画漏了」**:每个采样点补画锚点,换窗口(已用百分比回落)处两段
|
|
59
|
+
之间用同色虚线接上;实线仍在窗口边界断开,不跨窗口连线。
|
|
60
|
+
- **采样圆点被拉成椭圆**:锚点改画在不参与 `preserveAspectRatio="none"` 拉伸的叠加层上,半径按像素。
|
|
61
|
+
|
|
62
|
+
## [2.2.0] - 2026-10-27
|
|
63
|
+
|
|
64
|
+
### 新增
|
|
65
|
+
|
|
66
|
+
- **关注限额**:供应商配置页可勾选侧栏卡片要看哪些限额(`5h 滚动`/`周用量`/`月用量`/
|
|
67
|
+
`allowance` 等),勾选顺序即卡片排列顺序,行内 ↑↓ 调序;未勾选时沿用默认规则
|
|
68
|
+
(周窗口 → 最紧的有效窗口 → 文字回落)。配置存为 `suppliers.<id>.displayKeys` 有序数组,
|
|
69
|
+
只影响侧栏卡片第 2 行;浮卡、紧凑行与详情的主指标口径不变。
|
|
70
|
+
- 卡片第 2 行可**多条并排**:每条自带真名短标签、已用百分比与该窗口自己的重置倒计时,
|
|
71
|
+
四列网格共享列宽,标签、条、百分比、倒计时严格对齐;每条按自己的百分比分档配色。
|
|
72
|
+
- 供应商条目新增稳定 `key`(如 `window.weekly`)与短标签 `short`,窗口识别不再只靠名字里的「周」。
|
|
73
|
+
已勾选但当前查询未返回的项标注「当前不可用」,其余项照常显示,数据回来自动恢复。
|
|
74
|
+
|
|
75
|
+
- **用量统计弹窗**:卡片标题行(供应商名 + 今日用量)与明细头部的「统计」进入。按供应商给出今日总量、
|
|
76
|
+
五分量分布与归一比例,以及一张**柱+线合成的时间图** —— 柱是每日 Token 消耗(左轴,刻度为最高那日),
|
|
77
|
+
折线是各窗口剩余额度(0–100%),共用一条时间轴与日期刻度;额度回落处断开(换新窗口),
|
|
78
|
+
图例同时给出各窗口当前剩余百分比。没有额度历史时只画柱,不画空折线。
|
|
79
|
+
- **额度历史采集**:每次查询成功按「供应商 × 指标」记录已用百分比的变化点(不变的值不重复记),
|
|
80
|
+
存 `$DSH_HOME/dsh-token-quota/quota.json`(`version: 1`)。磁盘保留 14 天、每指标上限 600 点,
|
|
81
|
+
与用量文件同目录、共用一次防抖落盘与短写锁,跨进程按时刻并集合并(重复合并不翻倍)。
|
|
82
|
+
历史按需传输:仅 `/state?quota=1` 返回,裁剪到展示窗口后降采样到 ≤120 点,常驻轮询不带。
|
|
83
|
+
- 详情弹窗的今日用量旁边显示归一比例「缓存命中 : 缓存未命中 : 输出」(未命中 = 1,三段各 3 位有效数字,
|
|
84
|
+
如 `30.0 : 1.00 : 0.150`)与同色的三段分布条。
|
|
85
|
+
|
|
86
|
+
### 变更
|
|
87
|
+
|
|
88
|
+
- **本地用量文件升级为版本 2**:`usage.json` 的小时桶从「一个总数」改为五项互不相交的分量
|
|
89
|
+
(未缓存输入/输出/缓存命中/缓存写入/未细分),四项分量之和即总量。版本 1 文件读取时把
|
|
90
|
+
旧总数归入「未细分」,不猜分布、不丢总量,下一次真正落盘时写成版本 2;旧版插件读到版本 2
|
|
91
|
+
会判为不支持并保留原文件。`llm/retry-started` 现在结束替换范围,重试的另一次计费尝试累加,
|
|
92
|
+
不再替换掉上一次。
|
|
93
|
+
- **卡片不再常显今日 Token 用量**(原第 3 行):今日用量移到卡片的**标题行**(供应商名右侧的
|
|
94
|
+
「今日 3.15M」,点击进统计),详情弹窗的供应商栏同时给出总量与分布比例;无障碍标签/悬停仍可读到。
|
|
95
|
+
- 卡片条上的重置倒计时改为**裸时长**(`4h59m`/`2d3h`),不再带「后重置」;浮卡与详情保留完整措辞。
|
|
96
|
+
- **凭据引用取代密钥本体落盘**:自动探测的自动填入与设置页都改为写 `apiKeyEnv`
|
|
97
|
+
(DSH 凭据库记录名或环境变量名),宿主在启动、扫描提交、配置热更新与手动刷新前按
|
|
98
|
+
「DSH 凭据库 → 进程环境变量」解析到内存,密钥本体不再落进 profile 配置。
|
|
99
|
+
旧配置里的 `apiKey` 按「本体优先于引用」继续生效,无需迁移。
|
|
100
|
+
手动填过 `apiKey` 或 `apiKeyEnv` 的供应商视为手动接管,重新扫描不再改写其密钥字段。
|
|
101
|
+
- 供应商页新增「凭据引用」输入框,并在引用未解析时点名(凭据库无记录且环境变量为空);
|
|
102
|
+
「测试连接」对编辑器里刚填、尚未保存的引用也先按同一路径解析,不必先保存再测。
|
|
103
|
+
- **手机/窄布局点击直达详情**:宿主视口 < 1024px(手机、手机横屏与窄窗口)时,侧栏入口一次点击
|
|
104
|
+
直接打开「供应商限额明细」,不再先弹用量浮卡;详情头部的「刷新」与「设置」保持原入口,
|
|
105
|
+
桌面宽布局行为不变。
|
|
106
|
+
- **Plugins 面板展示名称与图标**:新增根目录 `icon.svg` 与 `locale/{zh,en}.json` 的
|
|
107
|
+
`meta.title`/`meta.description`,卡片、详情页与组件行显示「用量监控 / Usage monitor」,
|
|
108
|
+
不再是裸包名与默认占位图;`package.json` 补 `icon`、`./locale/*.json` exports 与 `files`,
|
|
109
|
+
元信息契约与打包产物都有断言。
|
|
110
|
+
|
|
111
|
+
## [2.1.0] - 2026-10-06
|
|
112
|
+
|
|
113
|
+
### 新增
|
|
114
|
+
|
|
115
|
+
- **峰谷计费时段**(PR #1):DeepSeek 账号级的峰价/谷价在宿主侧判定(`lib/season.js` 为唯一权威),
|
|
116
|
+
客户端只消费 `/state` 下发的结论,并用 `flipAt` 本地递减倒计时。侧栏常显当前档位与「下次切换」,
|
|
117
|
+
浮卡与明细给出成因(法定节假日/周末)与北京时间,刷新历史新增「时段」列。
|
|
118
|
+
「下次切换」只认真正发生状态变化的边界:周五 18:00 之后指向周一 09:00,而不是周末里那些
|
|
119
|
+
并不会发生的窗口边缘。
|
|
120
|
+
- **今日用量时段拆分**:DeepSeek 的当日用量按小时桶**纯读推导**为高峰/空闲/未标记三段,
|
|
121
|
+
绝对量与占比分别给出;其他供应商不串用该口径。不新增存储,`usage.json` 仍为版本 1。
|
|
122
|
+
- **节假日覆盖表**:设置页可粘贴 `YYYY-MM-DD` 清单替换内置表;写入侧拒绝坏日期,读取侧对坏配置
|
|
123
|
+
静默回落内置表。内置表只覆盖已公布年份,缺次年会在界面点名,不再把工作日假期静默当成峰价。
|
|
124
|
+
- **常驻卡片重新排版**:第 1 行 plan 名、第 2 行周窗口已用百分比进度条、第 3 行今日 Token 用量与
|
|
125
|
+
该窗口的重置倒计时、第 4 行计费时段档位。
|
|
126
|
+
|
|
127
|
+
### 变更
|
|
128
|
+
|
|
129
|
+
- 阈值颜色融入进度条(绿 < 警告 < 黄 < 临界 < 红,阈值取该供应商自己的配置),移除插件标题行、
|
|
130
|
+
阈值圆点与模型名;取数失败仍在第 1 行点名。旧数据与已停用保持中性色,不冒充新的告警状态。
|
|
131
|
+
- 卡片第 2 行优先周窗口;没有周窗口时回落为已用比例最高的有效窗口;只有余额或报告费用时保留文字,
|
|
132
|
+
不画一条 0% 的空条。
|
|
133
|
+
- Token 量级统一 3 位有效数字(`1.32M`、`12.0K`、`999.6K → 1.00M`),不再固定一位小数。
|
|
134
|
+
- 用量浮卡不再重复计费时段块(档位与倒计时由常驻卡片承担);缺次年告警移到设置页覆盖表旁。
|
package/CONTEXT.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# dsh-token-quota(用量监控)
|
|
2
|
+
|
|
3
|
+
DeepSeek Harness 中的供应商额度、余额、报告费用和用量监控。供应商身份按凭据类别与地域独立划分,监控展示不改变计费或用量记账口径。
|
|
4
|
+
|
|
5
|
+
## Language
|
|
6
|
+
|
|
7
|
+
**供应商(Supplier)**:
|
|
8
|
+
一个可独立配置凭据并查询额度、余额或报告的供应商条目。同名服务的普通 API Key、Management Key、组织 Admin Key 以及不同地域属于不同条目。
|
|
9
|
+
_Avoid_: 按显示名称合并、通用账户
|
|
10
|
+
|
|
11
|
+
**凭据类别(Credential Class)**:
|
|
12
|
+
查询所需的授权类别,例如普通 API Key、Management Key、组织 Admin Key。不同类别不能替代,自动识别普通聊天密钥不代表具有组织账务权限。
|
|
13
|
+
_Avoid_: 密钥类型下拉框
|
|
14
|
+
|
|
15
|
+
**凭据引用(Credential Reference)**:
|
|
16
|
+
供应商配置里指向密钥存放位置的引用名(DSH 凭据库记录名或环境变量名,字段 `apiKeyEnv`),
|
|
17
|
+
运行期在宿主内存解析后用于查询。配置文档因此只有引用、没有密钥本体;与直接填写密钥本体(`apiKey`)
|
|
18
|
+
并存时本体优先。引用于用户是手动凭据:与 `apiKey` 一样算「手动接管」,自动探测只在两者都为空时写入引用。
|
|
19
|
+
_Avoid_: 密钥副本、明文密钥
|
|
20
|
+
|
|
21
|
+
**各 API Key 自动识别(Auto-Identify Every API Key)**:
|
|
22
|
+
将宿主已配置的普通聊天密钥按路由、官方地址与地域归属到相应供应商的过程。它不覆盖手动凭据,不将普通密钥套用到 Admin 或 Management 查询。
|
|
23
|
+
_Avoid_: 猜测密钥前缀
|
|
24
|
+
|
|
25
|
+
**统一查询方法(Unified Query Methods)**:
|
|
26
|
+
按供应商授权要求与支持范围读取额度、余额和报告的方法集合。不同方法保留各自的币种、窗口、来源与未知字段。
|
|
27
|
+
_Avoid_: 通用计费计算
|
|
28
|
+
|
|
29
|
+
**官方查询覆盖(Official Query Coverage)**:
|
|
30
|
+
经已知公开接口支持的供应商能力范围。OpenCode 与 Command Code 的兼容来源单独标识,不能由接口可连接推导其未提供的指标。
|
|
31
|
+
_Avoid_: 所有供应商均可查询
|
|
32
|
+
|
|
33
|
+
**周期限额(Period Quota)**:
|
|
34
|
+
供应商在一个统计窗口内的限额、已用量、剩余量或其已用百分比。百分比越高表示剩余空间越小,缺失字段不等于零。
|
|
35
|
+
_Avoid_: 一律按月额度、剩余百分比
|
|
36
|
+
|
|
37
|
+
**限额项(Limit Entry)**:
|
|
38
|
+
供应商的一条可展示指标,可以是周期限额、余额、报告费用或报告用量。同一供应商可以同时具有多个窗口、币种和能力组。
|
|
39
|
+
_Avoid_: 将全部指标合并成一个总额
|
|
40
|
+
|
|
41
|
+
**速率限额(Rate Limit)**:
|
|
42
|
+
供应商在特定时间窗口内允许的请求数或 Token 量上限,与账户余额和组织报告费用不同。
|
|
43
|
+
_Avoid_: 余额、消费预算
|
|
44
|
+
|
|
45
|
+
**主指标(Primary Metric)**:
|
|
46
|
+
概览的供应商行与紧凑卡片用于速览的单项指标,优先选取已用比例最高的有效窗口,其后为余额、报告费用或报告用量。多个余额仅选择一项展示并提示其他项,完整指标保留在概览展开的供应商明细。常驻卡片第 2 行不用它,改用关注限额进度条。
|
|
47
|
+
_Avoid_: 总额度、总余额
|
|
48
|
+
|
|
49
|
+
**关注限额(Watched Limits)**:
|
|
50
|
+
用户为某个供应商选定、要常驻显示的限额项,是一个按显示顺序排列的有序集合(条目 key 的数组)。它只影响常驻卡片第 2 行画哪几条、以什么顺序画;不改变供应商公布的窗口与数值,也不影响概览与紧凑卡片的主指标。未配置或配置项在当前数据里全都不存在时,退回默认规则(周窗口优先,其次最紧的有效窗口)。
|
|
51
|
+
_Avoid_: 全部限额、默认指标、关注供应商
|
|
52
|
+
|
|
53
|
+
**关注限额进度条(Watched Limit Bar)**:
|
|
54
|
+
常驻卡片第 2 行的可视化,可以是多条并排。有配置时每条对应一个关注限额,按配置顺序排列,每条自带真名短标签、已用百分比与该窗口自己的重置倒计时;没有配置时退回周窗口进度条。同一行所有条共享列宽,标签、条、百分比与倒计时严格对齐。颜色按该供应商自己的警告/临界阈值分档,旧数据与已停用一律中性色。
|
|
55
|
+
_Avoid_: 全部窗口叠加、按剩余比例画条、跨窗口共享倒计时
|
|
56
|
+
|
|
57
|
+
**周窗口进度条(Weekly Quota Bar)**:
|
|
58
|
+
未配置关注限额时的默认条:优先取名称含「周」且已公布百分比的有效窗口,没有才回落到已用比例最高的有效窗口,两者都没有(只有余额或报告费用)就保留文字、不画条。
|
|
59
|
+
_Avoid_: 全部窗口叠加、按剩余比例画条
|
|
60
|
+
|
|
61
|
+
**余额(Balance)**:
|
|
62
|
+
供应商账户可用资金或 credits。各币种独立展示,不跨币种求和,不将报告费用解释为余额。
|
|
63
|
+
_Avoid_: 报告费用、钱包估算
|
|
64
|
+
|
|
65
|
+
**报告费用(Reported Cost)**:
|
|
66
|
+
供应商报告周期内的消费金额,可能存在账单延迟。组织报告的最近完整 UTC 日与宿主本地“今日”不同。
|
|
67
|
+
_Avoid_: 实时余额、今日账单
|
|
68
|
+
|
|
69
|
+
**报告用量(Reported Usage)**:
|
|
70
|
+
供应商报告在特定周期与产品范围内的 Token、请求数等用量。未提供的数量保留未知,不将报告范围扩展为全部产品。
|
|
71
|
+
_Avoid_: 全部会话用量
|
|
72
|
+
|
|
73
|
+
**重置倒计时(Reset Countdown)**:
|
|
74
|
+
当前展示的周期窗口距其已公布重置时刻的剩余时间。没有原始时刻时保留供应商文案,不借用其他窗口的重置时间。
|
|
75
|
+
_Avoid_: 推测到期时间
|
|
76
|
+
|
|
77
|
+
**计费时段(Billing Window)**:
|
|
78
|
+
DeepSeek 账号级的峰谷计价时段:高峰时段(峰价)与空闲时段(谷价),按北京时间判定,周末与中国法定节假日全天属空闲时段。它是与调用方无关的账户事实,因此常显,不随“在用供应商”切换;它不是周期限额,查看或展示都不改变计费与用量记账口径。
|
|
79
|
+
_Avoid_: 周期限额、会话属性、全供应商通用折扣
|
|
80
|
+
|
|
81
|
+
**下次切换(Next Tier Switch)**:
|
|
82
|
+
当前计费时段真正发生变化的下一个时刻。只有状态确实变化的边界才算切换:周五 18:00 之后的下一次切换是周一 09:00,而不是周末里的任何一个窗口边缘。没有可公布时刻时保留未知,不推算。
|
|
83
|
+
_Avoid_: 下一个窗口边缘、重置时间
|
|
84
|
+
|
|
85
|
+
**节假日覆盖表(Holiday Override)**:
|
|
86
|
+
用户提供的放假日清单(北京日历日,`YYYY-MM-DD`),用于替换内置表。内置表只覆盖国务院已公布年份;缺次年时工作日假期会被静默误判为峰价,因此缺失必须在界面上点名,并允许用户粘贴覆盖表即时修正。点名与修正入口同处设置页的覆盖表旁。
|
|
87
|
+
_Avoid_: 工作日调休表、自动同步的官方日历
|
|
88
|
+
|
|
89
|
+
**当前显示页(Current Page)**:
|
|
90
|
+
用户在主视图中查看的单个会话,不含仅在后台保留或运行的会话。空页、会话归属不明确或没有真实调用时显示“暂无调用”。
|
|
91
|
+
_Avoid_: 浏览器前台窗口、后台活跃会话
|
|
92
|
+
|
|
93
|
+
**在用供应商(Active Supplier)**:
|
|
94
|
+
当前显示页最近一次真实 LLM 调用使用的供应商及模型。它只属于该会话,不借用其他会话的最近调用。
|
|
95
|
+
_Avoid_: 当前供应商清单
|
|
96
|
+
|
|
97
|
+
**当前供应商(Current Supplier)**:
|
|
98
|
+
按照现有启用配置与近期流量规则选出的供应商集合;流量不可观测时沿用启用清单。它用于今日用量汇总,与单个会话的在用供应商不同。
|
|
99
|
+
_Avoid_: 当前会话供应商
|
|
100
|
+
|
|
101
|
+
**今日用量(Daily Usage)**:
|
|
102
|
+
当前供应商集合的今日 Token 用量,按宿主本地日统计。它既不是当前会话用量,也不是全部历史路由的当日总量。峰谷拆分只在 DeepSeek 名下给出,且仍按同一本地日口径逐小时归属。
|
|
103
|
+
_Avoid_: 全局今日总量、会话今日量
|
|
104
|
+
|
|
105
|
+
**用量分布(Usage Breakdown)**:
|
|
106
|
+
一次调用或一个自然日的 Token 按互不相交的五个分量记账:未缓存输入、输出、缓存命中、缓存写入与未细分。前四项之和即总量;只有上游确实没有给出任何分量时才把总量记入未细分,绝不与分量重复相加。
|
|
107
|
+
_Avoid_: 把缓存命中并进输入、按比例估算分布
|
|
108
|
+
|
|
109
|
+
**用量历史(Usage History)**:
|
|
110
|
+
本地用量数据按宿主本地自然日聚合出的最近若干天分量与总量,升序排列、最后一行是今天。窗口取「7 天」与保留期的较小值;没有记录的日子保留 0 行,不用其它日期的数字填补。
|
|
111
|
+
_Avoid_: 供应商账单周期、刷新历史
|
|
112
|
+
|
|
113
|
+
**分布比例(Usage Ratio)**:
|
|
114
|
+
把用量分布的前三项(缓存命中、缓存未命中、输出)归一到「缓存未命中 = 1」得到的比值,形如 `30.0 : 1.00 : 0.150`,三段各保留 3 位有效数字。未命中为 0 时改按三者中的最大者归一;三分量全为 0 时不给比例。未细分不进比例——它没有分量信息,塞进任何一段都会撒谎。
|
|
115
|
+
_Avoid_: 百分比、命中率、四舍五入成 0 的极小段
|
|
116
|
+
|
|
117
|
+
**额度历史(Quota History)**:
|
|
118
|
+
按「供应商 × 指标」记录的**已用百分比变化点**序列(`[时刻, 已用百分比]`),只在下一次查询得到不同百分比时追加。磁盘保留 14 天、每指标上限 600 点;回传时裁剪到用量历史的同一窗口并降采样,只在概览展开供应商明细时按需(`?quota=1`)取用一次。
|
|
119
|
+
_Avoid_: 轮询快照全量留存、把余额或报告费用记进这条线
|
|
120
|
+
|
|
121
|
+
**剩余额度折线(Remaining Quota Line)**:
|
|
122
|
+
由额度历史按 `100 − 已用百分比` 派生的曲线,与每日 Token 柱共用同一条时间轴。百分比回落即视为换了新窗口:实线在此断开,两段之间用同色虚线接上——回落是数据,不是画漏。每个变化点画一个锚点;指针悬停(或聚焦后 ←/→)给出那一刻的时刻、当日 Token 与各窗口剩余百分比,读数取最近一次采样并保持到下一次变化,不插值。图例直接给出该窗口当前剩余百分比。
|
|
123
|
+
_Avoid_: 把回落解释为额度「变多」、跨窗口连实线、在两点之间插值
|
|
124
|
+
|
|
125
|
+
**事件观测状态(Event Observation Status)**:
|
|
126
|
+
宿主启动后是否曾观测到真实调用事件,以及供应商查询是否失败的提示。曾见到事件不证明实时网络在线。
|
|
127
|
+
_Avoid_: 实时在线、网络连通性
|
|
128
|
+
|
|
129
|
+
**成功数据时间(Last Successful Data Time)**:
|
|
130
|
+
供应商最近一次查询成功的时间。失败尝试不推进此时间,状态页面生成时间也不代表数据更新成功。
|
|
131
|
+
_Avoid_: 页面刷新时间
|
|
132
|
+
|
|
133
|
+
**旧数据(Previous Data)**:
|
|
134
|
+
更新失败后保留的最近成功查询结果。旧值以中性色展示并附失败标记,不能作为新的告警状态。
|
|
135
|
+
_Avoid_: 当前实时数据
|
|
136
|
+
|
|
137
|
+
**侧栏卡片(Sidebar Card)**:
|
|
138
|
+
查看 plan 名、关注限额进度条(每条自带该窗口的重置倒计时)与常显的计费时段档位并打开用量监控面板的入口,具有完整与紧凑两种显示状态。今日 Token 用量不在这里常显(在概览的供应商行里按供应商给出)。完整态不显示模型名与阈值圆点:阈值颜色落在进度条上。窄宽度自动降级不改变用户保存的显示选择。点击直接打开用量监控面板,宽窄布局一致。
|
|
139
|
+
_Avoid_: 常驻悬浮窗、按模型区分
|
|
140
|
+
|
|
141
|
+
**用量监控面板(Monitor Panel)**:
|
|
142
|
+
从侧栏卡片或宿主设置进入的唯一监控界面,包含概览与供应商两个页签;卡片进入默认概览,宿主设置进入默认供应商。全局设置折叠在供应商页底部,供应商配置作为子页,返回时回到原入口位置。
|
|
143
|
+
_Avoid_: 侧栏详情弹窗、三页签、浮卡
|
|
144
|
+
|
|
145
|
+
**供应商明细(Supplier Detail)**:
|
|
146
|
+
概览中展开的单个供应商区域,按额度、余额与报告分组列出指标表格、今日分布与比例、DeepSeek 的计费时段拆分,并按需取用额度历史画图。一次只展开一行。
|
|
147
|
+
_Avoid_: 详情弹窗、分栏明细
|
|
148
|
+
|
|
149
|
+
**供应商草稿(Supplier Draft)**:
|
|
150
|
+
当前面板尚未保存的供应商输入,与已保存配置的查询预览独立。页签切换保留草稿,明确放弃或销毁面板时清理,其中的秘密字段不属于显示偏好。
|
|
151
|
+
_Avoid_: 已生效配置
|
|
152
|
+
|
|
153
|
+
**已添加供应商(Added Supplier)**:
|
|
154
|
+
最近成功扫描发现、已启用或已经填写任一密钥的供应商。仅修改阈值或地址不算添加,已停用但保留密钥的供应商仍属于目录。
|
|
155
|
+
_Avoid_: 已启用供应商
|
|
156
|
+
|
|
157
|
+
**可添加供应商(Addable Supplier)**:
|
|
158
|
+
注册表支持但尚未扫描发现、启用或填写密钥的条目。打开编辑页本身不代表已添加。
|
|
159
|
+
_Avoid_: 不支持的供应商
|
|
160
|
+
|
|
161
|
+
**重新扫描(Rescan)**:
|
|
162
|
+
重新发现宿主已有供应商配置并按凭据类别自动填入可用信息。扫描失败时保留上次成功目录,重新扫描不等于额度刷新。
|
|
163
|
+
_Avoid_: 测试连接、查询余额
|
|
164
|
+
|
|
165
|
+
**刷新(Refresh)**:
|
|
166
|
+
查询当前已保存配置的供应商额度、余额或报告。测试连接则针对发起时的编辑草稿,不改变已保存配置。
|
|
167
|
+
_Avoid_: 重新扫描
|
|
168
|
+
|
|
169
|
+
**本地用量数据(Local Usage Data)**:
|
|
170
|
+
按供应商和小时保存的 Token 分量(未缓存输入/输出/缓存命中/缓存写入/未细分),重启后仍可读取,并按保留期清理。它与仅在运行期间保留的刷新历史不同;版本 1 文件里的总数在读取时归入未细分。额度历史是同一目录下另一个文件(`quota.json`),有自己的保留期与写入路径。
|
|
171
|
+
_Avoid_: 内存刷新历史
|
|
172
|
+
|
|
173
|
+
**保留期(Retention Window)**:
|
|
174
|
+
本地用量数据保留的天数,默认 7 天,可设置为 1–90 天。它同时决定趋势图的展示窗口;额度历史的磁盘保留期固定 14 天,不受此设置影响。
|
|
175
|
+
_Avoid_: 供应商统计周期
|
|
176
|
+
|
|
177
|
+
**设置行(Settings Row)**:
|
|
178
|
+
宿主 profile 中承载本插件配置的独立条目。供应商凭据与全局轮询参数属于该行,浏览器显示偏好不属于该行。
|
|
179
|
+
_Avoid_: 第二套插件配置
|
package/README.md
CHANGED
|
@@ -1,3 +1,276 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-token-quota
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
DeepSeek Harness 用量监控插件。查看当前会话对应供应商的周期限额、账户余额、报告费用和今日 Token 用量,支持 Windows 桌面端与 Web 界面。
|
|
4
|
+
|
|
5
|
+
当前版本:**v2.4.1**。要求 **DSH ≥ 0.1.7-rc.2**;真实桌面及 Web 验收环境为 **DSH 0.2.0-rc.2**。
|
|
6
|
+
|
|
7
|
+
Plugins 面板中显示为 **用量监控**(英文 **Usage monitor**):图标是根目录 `icon.svg`,标题与一句话说明来自 `locale/zh.json` 与 `locale/en.json` 的 `meta`。
|
|
8
|
+
|
|
9
|
+
[GitHub 下载](https://github.com/shxtmaker/dsh-token-quota/releases/latest) · [问题反馈](https://github.com/shxtmaker/dsh-token-quota/issues)
|
|
10
|
+
|
|
11
|
+
## v2.4.1 更新
|
|
12
|
+
|
|
13
|
+
- 包名改为 `@ds-hu/dsh-token-quota`:`dsh plugin add @ds-hu/dsh-token-quota` 直接安装,不必再下载压缩包;插件 id、设置命名空间与数据目录不变,升级不需要迁移。
|
|
14
|
+
- 发布改由 CI 执行:`fork-vX.Y.Z` 标签触发测试与 `npm publish`,凭据走 OIDC 可信发布并附 provenance,仓库里不存 npm token。
|
|
15
|
+
|
|
16
|
+
## v2.4.0 更新
|
|
17
|
+
|
|
18
|
+
- 四个浮层收敛为单一面板:删除用量浮卡、供应商限额明细弹窗与用量统计弹窗,单击侧栏卡片直接打开「用量监控」;面板只剩「概览」「供应商」两个页签,原「设置」页签并入供应商页底部的折叠「全局设置」。卡片进入默认概览,宿主「设置 → 用量监控」进入默认供应商。
|
|
19
|
+
- 明细与统计并入概览的供应商行:一次只展开一行,展开区给出分组指标表格、今日五分量分布与归一比例、DeepSeek 计费时段拆分与额度历史图;额度历史改为首次展开时按需取一次,同一面板会话内复用。
|
|
20
|
+
- 默认视图不再常显解释文案:说明收进可展开的提示,`·` 拼接改为表格或徽标,词典键由 198 降到 158;会改变判断的告警(缺次年节假日、保存失败、取数失败)仍常显。
|
|
21
|
+
- 移动端不再有独立分支:视口 < 1024px 也打开同一面板,不再有一次点击直达详情的窄屏路径。
|
|
22
|
+
- 侧栏卡片补留白(横向 6px、上下 8px),长倒计时不再贴边被裁;修复指标表格列头与数值错位、展开明细重复画两条分布条、图表底部单独一行「近 N 天」,以及更新插件后样式仍是旧版的问题。
|
|
23
|
+
|
|
24
|
+
## v2.3.0 更新
|
|
25
|
+
|
|
26
|
+
- 统计图的额度折线补上采样锚点,并在换窗口(已用百分比回落)处用同色虚线把两段接上:断开表示换了窗口,不是画漏了;实线仍不跨窗口连线。
|
|
27
|
+
- 统计图支持悬停读数:指针移到图上(聚焦后可用 ←/→,触屏点一下即固定)显示那一刻的时刻、当日 Token 与各窗口剩余百分比;读数取最近一次采样、不插值,靠近采样点会吸附到实际采样时刻。
|
|
28
|
+
- 修复采样圆点被横向拉成椭圆的问题:锚点改画在不参与坐标拉伸的叠加层上,半径按像素。
|
|
29
|
+
|
|
30
|
+
## v2.2.0 更新
|
|
31
|
+
|
|
32
|
+
- 新增用量统计弹窗:从卡片标题行(供应商名 + 今日用量)或明细头部的「统计」进入,给出今日总量、五分量分布与归一比例,并把每日 Token 消耗(柱)与各窗口剩余额度(线)画在同一张时间图上,共用时间轴与日期刻度。
|
|
33
|
+
- 新增额度历史采集:每次查询成功按「供应商 × 指标」记录已用百分比的变化点(不变的值不重复记),存 `$DSH_HOME/dsh-token-quota/quota.json`,磁盘保留 14 天;历史只在打开统计时随 `/state?quota=1` 传输。
|
|
34
|
+
- 详情弹窗的今日用量旁显示归一比例「缓存命中 : 缓存未命中 : 输出」(如 `30.0 : 1.00 : 0.150`)与同色的三段分布条。
|
|
35
|
+
- 新增关注限额:供应商配置页可勾选卡片要看哪些限额并调序,卡片第 2 行可多条并排,每条自带短标签、百分比与该窗口自己的重置倒计时。
|
|
36
|
+
- 本地用量文件升级为版本 2:小时桶改存五项互不相交的分量,旧文件的总数归入「未细分」,不猜分布也不丢总量。
|
|
37
|
+
- 密钥改存凭据引用(`apiKeyEnv`),本体不再落进 profile 配置;旧配置里的 `apiKey` 继续生效,无需迁移。
|
|
38
|
+
- 手机/窄布局(视口 < 1024px)点击侧栏入口直达「供应商限额明细」;Plugins 面板显示「用量监控」名称与图标。
|
|
39
|
+
|
|
40
|
+
## v2.1.0 更新
|
|
41
|
+
|
|
42
|
+
- 新增 DeepSeek 峰谷计费时段:侧栏常显当前档位(峰价/谷价)与「下次切换」,浮卡与明细给出成因(法定节假日/周末)和北京时间,刷新历史新增「时段」列。时段判定在宿主侧完成,客户端只消费结论。
|
|
43
|
+
- 新增今日用量时段拆分:DeepSeek 的当日用量按小时桶推导为高峰/空闲/未标记三段并给出占比,其他供应商不串用该口径。
|
|
44
|
+
- 新增节假日覆盖表:设置页可粘贴 `YYYY-MM-DD` 清单替换内置表;缺次年安排时在同一处点名,不再静默把工作日假期当峰价。
|
|
45
|
+
- 常驻卡片重新排版为四行:plan 名(不再显示模型名)、周窗口已用百分比进度条、今日 Token 用量与该窗口重置倒计时、计费时段档位。阈值颜色融入进度条,取消阈值圆点与插件标题行。
|
|
46
|
+
- Token 量级统一 3 位有效数字(`1.32M`、`12.0K`、`999.6K → 1.00M`),不再固定一位小数;用量浮卡不再重复计费时段块。
|
|
47
|
+
|
|
48
|
+
## v2.0.5 更新
|
|
49
|
+
|
|
50
|
+
- 修复智谱/Z.ai Coding Plan 查询失效:供应商已把用量窗口的类型名由 `TOKENS_LIMIT` 改名为 `CREDIT_LIMIT`,插件此前只认旧名,窗口全部被跳过,供应商显示为「暂时无法获取」。
|
|
51
|
+
- 窗口改按 `unit` 标识分类(5 小时窗口、周窗口、月度 MCP 上限),不再依赖数组位置;新增周窗口与供应商公布的重置时刻。新旧拼写并存时都能读取,重复或无法命名的窗口如实报错,不猜一个窗口顶上。
|
|
52
|
+
- 业务失败改按响应信封判定:密钥失效(HTTP 200 响应体内的 `code:401`)报鉴权失败,不再误报成「响应缺少 data.limits」。
|
|
53
|
+
|
|
54
|
+
## v2.0.4 更新
|
|
55
|
+
|
|
56
|
+
- 修复 Command Code 等供应商未公布重置时刻时错误显示“1月1日”的问题。
|
|
57
|
+
- 统一验证日期文案与原始时刻,零值、无效日期和误传入毫秒字段的秒级值显示为未知,不推算重置时间。
|
|
58
|
+
- 保留有效毫秒、数字串和带时区日期的准确时刻,OpenCode Go 的正常窗口倒计时保持不变。
|
|
59
|
+
|
|
60
|
+
## v2.0.3 更新
|
|
61
|
+
|
|
62
|
+
- 点击侧栏打开贴在卡片上方的用量浮卡,显示供应商主指标、查询状态、刷新间隔和上次刷新时间。
|
|
63
|
+
- 浮卡底部提供“详情”“设置”“关闭”;完整供应商明细和现有配置面板继续保留。
|
|
64
|
+
- 浮卡适配完整、紧凑和图标侧栏,支持再次点击、Esc 和外部点击关闭,随窗口变化调整位置。
|
|
65
|
+
|
|
66
|
+
## v2.0.2 更新
|
|
67
|
+
|
|
68
|
+
- 修复停用、重新启用和宿主重启插件时的 `webserver: duplicate exact route` 启用失败。
|
|
69
|
+
- 启动失败时释放已登记的资源;某项清理报错不会阻止其他资源释放。
|
|
70
|
+
|
|
71
|
+
## v2.0.1 更新
|
|
72
|
+
|
|
73
|
+
- 侧栏单击恢复独立「供应商限额明细」弹窗,按 v1.4.0 分栏展示已添加供应商与周期指标,刷新历史恢复为表格,沿用当前主题配色和按钮样式。
|
|
74
|
+
- 详情中的「设置」按钮进入现有概览、供应商、设置面板;保留完整/紧凑侧栏和显示偏好。
|
|
75
|
+
- 修复供应商扫描中的 `cannot get required service "settings" in inactive context` 错误;设置服务暂不可用时保留最近成功目录,恢复后可重新扫描。
|
|
76
|
+
|
|
77
|
+
## v2.0.0 更新
|
|
78
|
+
|
|
79
|
+
- 侧栏支持完整与紧凑显示,单击直接打开概览,显示偏好自动保存。
|
|
80
|
+
- 用量监控面板提供「概览」「供应商」「设置」三个页签,侧栏入口与宿主设置入口使用相同内容。
|
|
81
|
+
- 概览支持需关注筛选、自适应一列或两列布局,保留各周期与币种的独立指标。
|
|
82
|
+
- 配置编辑保留未保存草稿,提供放弃修改确认;保存失败保留输入,避免旧请求覆盖新的编辑内容。
|
|
83
|
+
- 查询失败时保留上次成功数据并标明状态;未知值与真实零值分别显示。
|
|
84
|
+
- 适配 Windows 桌面端的当前会话选择、原生设置入口和侧栏收起/恢复。
|
|
85
|
+
|
|
86
|
+
## 安装
|
|
87
|
+
|
|
88
|
+
插件有两个来源:npm 包 **`@ds-hu/dsh-token-quota`**,或 Release 里的安装包 **`dsh-token-quota-2.4.0.tgz`**(源码包为 `dsh-token-quota-2.4.0-source.tar.gz`)。插件包不包含 DeepSeek Harness;首次安装可能需要联网下载依赖。
|
|
89
|
+
|
|
90
|
+
### Windows 桌面端
|
|
91
|
+
|
|
92
|
+
先启动一次 DeepSeek Harness Desktop,完成初始化后完全退出。使用安装目录自带的 CLI,将插件添加到 **`desktop` profile**。请按实际位置修改路径。
|
|
93
|
+
|
|
94
|
+
```powershell
|
|
95
|
+
$desktopCli = 'D:\AI\DeepSeek- Harness\resources\runtime\cli\bin\dsh.cmd'
|
|
96
|
+
$archivePath = (Resolve-Path './dsh-token-quota-2.4.0.tgz').Path
|
|
97
|
+
& $desktopCli plugin --profile desktop add "file:$archivePath"
|
|
98
|
+
& $desktopCli plugin --profile desktop list --depth 0
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
插件已在 npm 上,用一条命令安装即可,不必先下载压缩包:
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
& $desktopCli plugin --profile desktop add @ds-hu/dsh-token-quota
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
重新打开桌面应用,展开左侧栏即可看到用量组件;也可从「设置 → 用量监控」进入。安装到 `web` profile 的插件不会自动出现在桌面端。桌面侧栏收起后组件随侧栏隐藏,展开后恢复。
|
|
108
|
+
|
|
109
|
+
### Web / CLI
|
|
110
|
+
|
|
111
|
+
先安装 DeepSeek Harness,确认 `dsh --version` 能正常运行。以下示例使用 `web` profile;使用其他 profile 时请替换名称。
|
|
112
|
+
|
|
113
|
+
从 npm 安装:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
dsh plugin --profile web add @ds-hu/dsh-token-quota
|
|
117
|
+
dsh --profile web
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
从 Release 的压缩包安装:
|
|
121
|
+
|
|
122
|
+
Linux / macOS:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
dsh plugin --profile web add "file:$(pwd)/dsh-token-quota-2.4.0.tgz"
|
|
126
|
+
dsh --profile web
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Windows PowerShell:
|
|
130
|
+
|
|
131
|
+
```powershell
|
|
132
|
+
$archivePath = (Resolve-Path './dsh-token-quota-2.4.0.tgz').Path
|
|
133
|
+
dsh plugin --profile web add "file:$archivePath"
|
|
134
|
+
dsh --profile web
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
若旧版本已提示重复路由,先完全退出 DSH,再安装 v2.0.4 并重新启动,以清除当前进程中遗留的旧路由。
|
|
138
|
+
|
|
139
|
+
安装或升级前,请先结束当前任务并退出对应 DSH 实例。压缩包升级时,用新包重新执行 `add` 命令,然后重启 DSH 并刷新 Web 页面。
|
|
140
|
+
|
|
141
|
+
### 从源码安装
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
git clone https://github.com/shxtmaker/dsh-token-quota.git
|
|
145
|
+
cd dsh-token-quota
|
|
146
|
+
npm ci
|
|
147
|
+
dsh plugin --profile web add "link:$(pwd)"
|
|
148
|
+
dsh --profile web
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
PowerShell 中将链接安装命令替换为:
|
|
152
|
+
|
|
153
|
+
```powershell
|
|
154
|
+
$pluginDirectory = (Get-Location).Path
|
|
155
|
+
dsh plugin --profile web add "link:$pluginDirectory"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
链接安装直接使用源码目录,请保留该目录及其依赖。更新时执行 `git pull --ff-only` 和 `npm ci`,再重启 DSH。
|
|
159
|
+
|
|
160
|
+
## 开始使用
|
|
161
|
+
|
|
162
|
+
1. 单击侧栏卡片打开「用量监控」面板;默认进入「概览」,宽窄布局一致。
|
|
163
|
+
2. 在「概览」展开某个供应商,查看全部指标、今日分布、峰谷与用量图;展开区的「配置」直达该供应商。
|
|
164
|
+
3. 或切到「供应商」页签点「重新扫描」,识别 Harness 已配置的普通 API Key;需要更高权限凭据的供应商请手动配置。
|
|
165
|
+
4. 打开供应商配置,填写必要字段、启用供应商并保存。秘密字段留空会保留旧值。
|
|
166
|
+
5. 使用「测试连接」检查已保存配置;需要调整查询频率、保留期或节假日覆盖表时,在「供应商」页底部展开「全局设置」并保存。
|
|
167
|
+
|
|
168
|
+
**密钥的两种写法。** 每个秘密字段都能填**密钥本体**(`apiKey`,`role('secret')` 脱敏保存),
|
|
169
|
+
或只填**凭据引用**(`apiKeyEnv`,DSH 凭据库里的记录名或环境变量名,例如 `COMMAND_CODE_API_KEY`)。
|
|
170
|
+
引用在宿主内存里按「DSH 凭据库 → 进程环境变量」解析,密钥本体不写进插件配置;`/state` 只回传引用名与
|
|
171
|
+
是否解析成功。重新扫描只写引用(`apiKeyEnv`),不再把密钥本体拷进 profile 配置;两者同时存在时本体优先,
|
|
172
|
+
且**任一已填即视为手动接管**(扫描不再改动该供应商的密钥字段)。「测试连接」对编辑器里刚填、还没保存的引用
|
|
173
|
+
也会先解析一次,不必先保存再测。
|
|
174
|
+
|
|
175
|
+
**DeepSeek 桌面账户登录凭证与 API Key 不可互换。** 仅登录桌面账户时,请在现有 DeepSeek 供应商配置中填写同一账户的 API Key,或配置 Harness 的 DeepSeek API Key 路由后重新扫描。
|
|
176
|
+
|
|
177
|
+
## 侧栏与面板
|
|
178
|
+
|
|
179
|
+
完整侧栏分三段:**plan 名**(供应商显示名,不显示模型名)、**关注限额进度条**(可多条并排,每条自带真名短标签、已用百分比与该窗口的重置倒计时)、以及常显的**计费时段档位**(峰价/谷价与下次切换)。阈值颜色直接落在进度条上:绿 < 警告 < 黄 < 临界 < 红;多条时每条按自己的百分比分档,并共享列宽严格对齐。没有配置关注限额时退回**周窗口**,没有周窗口才改用已用比例最高的有效窗口,只有余额或报告费用时保留文字而不画条;旧数据与已停用保持中性色。今日 Token 用量不再占侧栏一行,改在概览的供应商行里按供应商展示(无障碍标签仍可读到)。Token 数量一律 3 位有效数字(如 `1.32M`、`12.0K`)。紧凑侧栏保留供应商名与主指标文字。独立箭头切换显示状态,偏好保存在当前浏览器;宽度不足时自动使用紧凑显示,恢复宽度后恢复用户选择。
|
|
180
|
+
|
|
181
|
+
**关注限额**在「供应商 → 配置」页勾选:勾选顺序即卡片排列顺序,行内 ↑↓ 调整,未勾选 = 用默认规则。候选项来自上一次成功查询里带身份的可画条目(`5h 滚动`/`周用量`/`月用量`/`allowance` 等);已勾选但这次查询没返回的项标注「当前不可用」并暂不画条,数据回来自动恢复。配置只影响侧栏卡片第 2 行,不改变概览、紧凑行与供应商明细里的主指标口径。
|
|
182
|
+
|
|
183
|
+
单击侧栏卡片打开「用量监控」面板。面板只有「概览」「供应商」两个页签;卡片进入默认概览,宿主「设置 → 用量监控」进入默认供应商。对话框形态下按 Esc、点遮罩或「关闭」收起,焦点回到侧栏卡片。
|
|
184
|
+
|
|
185
|
+
概览按已添加供应商列出名称、状态、主指标与今日量;一次只展开一行。展开后给出按额度、余额、报告分组的指标表格,今日五分量分布(只用一条五分量条)与**归一比例**(「缓存命中 : 缓存未命中 : 输出」,未命中固定为 1,例如 `30.0 : 1.00 : 0.150`,三段各保留 3 位有效数字),DeepSeek 的计费时段拆分,以及一张**把柱状图与折线图合成的时间图**:柱是每日 Token 消耗,每根有量的柱标出当日用量(窗口过长时只标峰值),图顶给出窗口合计;折线是各窗口的剩余额度,共用同一条时间轴;折线在额度回落处断开(说明换了新窗口),图例给出各窗口当前剩余百分比。首次展开时按需取一次额度历史,同一次面板会话内复用。默认收起的刷新历史表格最多展示最近 50 条。
|
|
186
|
+
|
|
187
|
+
「供应商」页签列出已添加目录、启用开关、配置入口与重新扫描;底部折叠「全局设置」(查询间隔、用量保留期、节假日覆盖表;缺次年时在摘要外点名告警)与侧栏显示偏好。可添加供应商默认收起。
|
|
188
|
+
|
|
189
|
+
| 页签 | 内容 |
|
|
190
|
+
| --- | --- |
|
|
191
|
+
| 概览 | 今日总量、全部/需关注筛选、可展开的供应商明细、默认收起的刷新历史。 |
|
|
192
|
+
| 供应商 | 已添加目录、启用开关、配置入口、重新扫描、全局设置、侧栏显示、可添加目录。 |
|
|
193
|
+
|
|
194
|
+
查询间隔默认 **60 秒**,范围 **10–3600 秒**;用量保留期默认 **7 天**,范围 **1–90 天**。后台刷新及页签切换保留编辑草稿;插件内部返回、取消或关闭时,会提示放弃未保存修改。宿主直接离开原生设置分区会销毁面板,无法保留未保存草稿。
|
|
195
|
+
|
|
196
|
+
## 数据含义
|
|
197
|
+
|
|
198
|
+
- **今日用量**:当前供应商通过 Harness 产生的当日 Token 用量,按宿主本地日统计。独立 CLI 或其他应用中的调用不计入。
|
|
199
|
+
- **用量分布**:今日用量按 DSH 的互不相交口径拆成五项(未缓存输入、输出、缓存命中、缓存写入、未细分),五项之和恒等于今日总量。比例只取前三项并归一到「缓存未命中 = 1」。
|
|
200
|
+
- **剩余额度**:按 `100 − 已用百分比` 派生。额度在一个窗口内只增不减,因此百分比回落即表示换了新窗口,折线在此断开。只对带百分比的窗口(`5h`/`周`/`月` 等)成立;余额与报告费用没有百分比,不进折线。
|
|
201
|
+
- **周期限额**:百分比表示已用比例;常驻卡片第 2 行画的是用户配置的**关注限额**(可多条、按配置顺序),没配置时固定取周窗口、没有周窗口再取已用比例最高的有效窗口;每条的重置时间始终对应它自己的窗口。概览与紧凑侧栏的主指标仍取已用比例最高的有效窗口。
|
|
202
|
+
- **计费时段**:DeepSeek 账号级的峰谷计价(按北京时间判定)是账户事实,因此常显在卡片最后一行;当日用量是否分属峰谷只在概览展开的供应商明细里按供应商给出。缺次年节假日安排时会在「供应商」页底部全局设置旁点名。
|
|
203
|
+
- **余额**:逐币种显示,不换算、不相加。
|
|
204
|
+
- **报告费用与报告用量**:保留供应商报告的周期,与本地今日 Token 统计分别展示。
|
|
205
|
+
- **未知与零值**:缺失或未知显示 `—`,真实零值显示 `0`;当前会话尚无调用时显示「暂无调用」。
|
|
206
|
+
- **更新失败**:有旧数据时显示「更新失败 · 上次数据」及可用的成功数据时间;没有旧数据时显示「暂时无法获取」。
|
|
207
|
+
|
|
208
|
+
切换会话不会借用其他会话的供应商。失败刷新保留同一配置下的旧结果;修改查询配置后清除该供应商的旧结果。
|
|
209
|
+
|
|
210
|
+
## 支持的供应商
|
|
211
|
+
|
|
212
|
+
| 供应商 | 查询内容 | 凭据 | 配置方式 |
|
|
213
|
+
| --- | --- | --- | --- |
|
|
214
|
+
| DeepSeek | 账户余额,保留多币种 | 普通 API Key | 自动识别或手动 |
|
|
215
|
+
| OpenRouter | 当前 Key 周期额度及今日费用 | 普通 API Key | 自动识别或手动 |
|
|
216
|
+
| OpenRouter 账户 | 账户 credits | Management Key | 手动 |
|
|
217
|
+
| OpenAI 组织 | 最近完整 UTC 日的用量与费用 | 组织 Admin Key | 手动 |
|
|
218
|
+
| Anthropic 组织 | 组织用量与费用 | 组织 Admin Key | 手动 |
|
|
219
|
+
| Moonshot 国内/国际 | 账户余额 | 普通 API Key | 自动识别或手动 |
|
|
220
|
+
| Z.ai/智谱 Coding Plan | 套餐窗口限额 | 普通 API Key | 自动识别或手动 |
|
|
221
|
+
| MiniMax 国内/国际 | Token Plan 窗口限额 | 普通 API Key | 自动识别或手动 |
|
|
222
|
+
| OpenCode(兼容来源) | 5 小时、周、月窗口及 allowance | 普通 API Key/OAuth | 自动识别或手动 |
|
|
223
|
+
| Command Code(兼容来源) | 5 小时、周窗口及套餐月额度 | 普通 API Key | 自动识别或手动 |
|
|
224
|
+
|
|
225
|
+
普通 API Key、Management Key 与 Admin Key 分别配置。插件不会将普通聊天密钥用于组织管理接口,也不会覆盖手动填写的密钥或重新启用显式关闭的供应商。
|
|
226
|
+
|
|
227
|
+
官方查询仅接受对应的 HTTPS 主机与已知基础路径;不符合要求的地址不会发送请求。OpenCode 与 Command Code 使用兼容接口,其可用性取决于供应商接口。表格表示插件支持的查询能力,不代表所有真实账户均已完成验证。
|
|
228
|
+
|
|
229
|
+
## 数据保存与升级
|
|
230
|
+
|
|
231
|
+
配置保存在对应 profile 的插件行配置中;秘密字段使用宿主的秘密字段机制。界面中秘密字段留空表示保留,清除时需编辑 `$DSH_HOME/profiles/<profile>/cordis.patch.yml` 中 `id: dsh-token-quota` 对应的配置。
|
|
232
|
+
|
|
233
|
+
本地 Token 用量按「供应商 × 小时 × 分量」保存至 `$DSH_HOME/dsh-token-quota/usage.json`,按保留期修剪。文件为 `version: 2`,小时桶记录互不相交的五项:未缓存输入、输出、缓存命中、缓存写入与未细分(四项分量之和即总量)。版本 1 文件里的总数在读取时归入「未细分」,不猜分布、不丢总量,下一次保存写成版本 2;旧版插件读到版本 2 会判为不支持并保留原文件。刷新历史仅保存在内存中,重启后清空。
|
|
234
|
+
|
|
235
|
+
额度历史保存在同目录的 `quota.json`(`version: 1`):按「供应商 × 指标」记录**已用百分比的变化点**(`[时刻, 已用百分比]`),不变的值不重复记录。磁盘保留 **14 天**、每指标最多 600 个点,超出丢弃最旧的;与用量文件共用一次防抖落盘与同一把短写锁,跨进程按时刻并集合并(重复合并不会翻倍)。额度历史是按需传输的:只有概览首次展开供应商时请求 `/state?quota=1` 才裁剪到当前展示窗口并降采样到 ≤120 点,同一面板会话内复用,常驻卡片轮询不携带它。文件损坏或版本不符时按「无历史」处理并保留原文件,不影响卡片与今日用量。
|
|
236
|
+
|
|
237
|
+
从旧版升级时,插件会在当前行尚无用户配置的条件下读取旧 `settings.yaml` 或 `settings.yaml.imported` 中的 `dsh-token-quota`/`quota-monitor` 配置,迁移后保留来源文件。旧用量目录 `quota-monitor` 仅在新目录不存在时迁移。
|
|
238
|
+
|
|
239
|
+
**v1.1.1 及更早版本用户**:旧插件名为 `dsh-usage-monitor` 或 `dsh-quota-monitor`。先用 `dsh plugin --profile <profile> list --depth 0` 确认,再移除旧包并安装新包,避免同时运行。
|
|
240
|
+
|
|
241
|
+
## 限制
|
|
242
|
+
|
|
243
|
+
- 仅观测经过 Harness 的调用;本机 Codex CLI 登录状态和独立 CLI 用量不在范围内。
|
|
244
|
+
- 供应商未返回重置时间时,不推算或补造时间;无限额度和未知余额保留未知。
|
|
245
|
+
- 趋势图只覆盖本地记录:额度折线依赖插件运行期间采样,装插件之前的历史无从补录;额度历史磁盘保留 14 天,展示窗口跟随用量保留期(默认 7 天),期间没有查询就没有点。
|
|
246
|
+
- 本地用量统计与供应商账单可能因周期、时区和统计范围不同而不同。
|
|
247
|
+
- 真实供应商余额、付费调用及 Admin/Management Key 账户需要使用实际凭据另行验证。
|
|
248
|
+
- 当前 HTTP 接口面向本机同源访问;反向代理的公开来源配置需另行处理。
|
|
249
|
+
- 用量文件损坏或版本不支持时保留原文件并提示错误;退出时无法写入的增量不能保证保存。
|
|
250
|
+
|
|
251
|
+
## 开发与验证
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
npm ci --ignore-scripts
|
|
255
|
+
npm test
|
|
256
|
+
npx playwright install chromium
|
|
257
|
+
npm run test:browser
|
|
258
|
+
npm run test:pack
|
|
259
|
+
npm pack
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
真实宿主验收使用独立数据目录与 profile,不修改日常配置:
|
|
263
|
+
|
|
264
|
+
```powershell
|
|
265
|
+
npm run test:desktop -- --app 'C:/path/DeepSeek Harness.exe' --package 'C:/path/dsh-token-quota-2.4.0.tgz' --output '.scratch/desktop-v2-check'
|
|
266
|
+
node scripts/verify-web.mjs --app 'C:/path/DeepSeek Harness.exe' --package 'C:/path/dsh-token-quota-2.4.0.tgz' --output '.scratch/web-v2-check'
|
|
267
|
+
npm run test:lifecycle -- --app 'C:/path/DeepSeek Harness.exe' --output '.scratch/lifecycle-v2-check'
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
输出目录需为未使用过的目录。供应商解析测试使用模拟响应;真实 Desktop 与 Web 验收检查安装、界面、配置持久化和重新扫描,不发送聊天消息或配置真实供应商密钥。
|
|
271
|
+
|
|
272
|
+
[桌面兼容性说明](docs/windows-desktop-adaptation.md) · [单一面板重构记录](docs/single-panel-refactor-execution.md) · [ADR-0002](docs/adr/0002-single-monitor-surface.md) · [侧栏与设置实施记录](docs/sidebar-settings-iteration-plan.md)
|
|
273
|
+
|
|
274
|
+
## 许可证
|
|
275
|
+
|
|
276
|
+
MIT。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# dsh-token-quota bundle patch: inserts the dual-face plugin row into a Web
|
|
2
|
+
# or Windows Desktop profile roster. Activate with
|
|
3
|
+
# dsh plugin --profile web add link:<此目录绝对路径>
|
|
4
|
+
# dsh plugin --profile desktop add link:<此目录绝对路径>
|
|
5
|
+
# The node half (exports ".") runs in the host process; the `dsh.client`
|
|
6
|
+
# declaration in package.json makes the browser half (exports "./client",
|
|
7
|
+
# served at /plugins/<id>/client.js) load in the shared Web/Desktop GUI.
|
|
8
|
+
- insert:
|
|
9
|
+
- id: dsh-token-quota
|
|
10
|
+
name: '@ds-hu/dsh-token-quota'
|