@feiyang666/dsh-usage-plugin 1.12.2 → 1.13.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 CHANGED
@@ -1,229 +1,277 @@
1
- # 更新日志 / Changelog
2
-
3
- `@feiyang666/dsh-usage-plugin` — DeepSeek Harness 用量与消耗插件
4
-
5
- 本文件按版本记录每一次更新的详细内容(新功能 / 优化 / 修复 / 界面 / 性能)。每次发布到 GitHub 时,请据此填写「版本发布」(GitHub Releases)的更新说明。
6
-
7
- > 版本规范:本插件按「语义化版本」递增,`主.次.补丁`。功能新增/界面变化 → 升次版本(x.y.x → x.y+1.0);仅 bug 修复 → 升补丁。
8
-
9
- ---
10
-
11
- ## v1.12.2 (2026-08-23)
12
-
13
- ### 修复 / Fixed
14
-
15
- - **移动端宽表仍会逐字竖排(兜底加固)**(`lib/client.js`):v1.12.1 的修复依赖运行时向 `document.head` **注入全局样式表**(`.dsh-usage-table{min-width:720px}` + `@media (max-width:540px)` 折叠中间列)。在部分移动端运行环境(如经 mobile-remote 进出的手机页面)下该样式表因加载时序 / CSP 未生效,导致 9–11 列宽表每列被压到约 1 字符宽、标题与单元格逐字竖排、数据无法阅读。本版把 `min-width:720px` **直接写进表格的内联样式**(内联样式必然生效),窄屏时表格保持 720px、外层 `overflow-x` 容器横向滑动,彻底不再依赖样式表注入;原有注入样式表与 ≤540px 折叠逻辑保留,作为进一步优化的增强项。
16
-
17
- ---
18
-
19
- ## v1.12.1 (2026-08-23)
20
-
21
- ### 修复 / Fixed
22
-
23
- - **修复移动端「消耗表」「消耗明细」等宽表列标题逐字竖排的问题**(`lib/client.js`):窄屏下 9–11 列宽表每列被压到极限宽度,`word-break` 把「调用」「API 服务商」「输入·未命中」等表头拆成单字竖排。现为所有用量表格注入响应式 CSS:表格强制 `min-width: 720px`,外层 `overflow-x` 容器正常横向滚动、不再逐字换行;极窄屏(≤ 540px)下对宽表自动隐藏第 4 列至倒数第 2 列,只保留「模型 / 服务商 / 调用 / 总消耗」等主标识列与合计列,价格表等窄表不折叠、保留横向滚动。
24
-
25
- ---
26
-
27
- ## v1.12.0 (2026-08-23)
28
-
29
- ### 新增 / New
30
-
31
- - **SSE 实时推送端点**(`lib/index.js`):新增 `GET /usage/api/events` 事件流端点,数据变化(新调用记录写入 / 导入 / 清除等,即 `persistNow` 落盘成功)时向订阅者推送 `data: {"type":"changed","at":<时间戳>}`。桌面端数据中心等客户端订阅该流即可**即时**感知用量更新(毫秒级),不再依赖轮询。无订阅者时零开销,插件独立使用完全不受影响。
32
-
33
- ---
34
-
35
- ## 开源贡献基础:合并 PR #6(@Martin-soaring-dev,2026-08-20)
36
-
37
- > 本期(以及后续 v1.9.2 / v1.9.3)建立在社区贡献分支 **`Martin-soaring-dev/prepare_for_contribution`** 之上。该分支由用户上传、经你合并(GitHub Pull Request #6,合并 commit `12a52be`),是插件转向对外开源贡献的形态基础。
38
-
39
- ### 该分支带来的主要改动
40
- - **多服务商余额查询**(`lib/balance.js` 新增 +205 行,新增余额适配器 `BalanceProviderAdapter`):将原先仅 DeepSeek 的 `/user/balance` 查询扩展为可对接多个服务商的余额查询框架,新增 DeepSeek / SiliconFlow / DigitalOcean / AMD GPU Cloud Provider 适配器。
41
- - **按服务商展示余额与价格**(`lib/client.js` +258 行):客户端新增「剩余余额查询」Tab 的多服务商 UI,可分别展示各服务商的「总余额 / 充值 / 赠送」并切换查看。
42
- - **Provider 化计费**(`lib/index.js` +399 行重构):注入 `settings` 服务用于服务商查找,调用计费改为 provider-aware,支持按不同服务商分别统计与计价。
43
- - **插件装配与测试**:新增余额适配器单测(`test/balance.test.js`,+130 行)、`scripts/wire.js` 手动装配兜底、`cordis.patch.yml` 插件注册条目。
44
-
45
- ### 致谢
46
- - **[@Martin-soaring-dev](https://github.com/Martin-soaring-dev)**:提交并筹备了上述开源贡献分支(PR #6),是后续公开发布版本的功能与结构基础。
47
-
48
- ---
49
-
50
- ## v1.11.1 (2026-08-23)
51
-
52
- - **修复:数据加载后页面空白**:加载动画三目分支误用逗号表达式,只返回最后一个表达式值(`null`),导致加载完成后各子视图全部不渲染;改为将四个子视图作为容器 `div` 的并列子元素,加载完成后正常显示。
53
- - **计费说明改为面板级固定显示**:「高峰 / 空闲时段说明」固定在用量面板子页签下方,概览、用量日历、缓存命中列表、价格表四个页面切换时始终可见(含数据加载期间)。
54
- - **当前时段精确显示**:用量面板顶部徽标与价格表页顶部新增「当前 · 工作日高峰时段 / 工作日空闲时段 / 周末空闲时段」动态状态并附说明文字;周末(自 2026-08-23 起)全天按空闲价计费,规则生效前仍按原规则区分。
55
-
56
- ---
57
-
58
- ## v1.11.0 (2026-08-23)
59
-
60
- - **高峰 / 空闲时段说明**:概览、用量日历、缓存命中列表、价格表四个页面顶部统一新增「高峰 / 空闲时段说明」,清楚区分**工作日高峰**(周一至周五 9:00–12:00、14:00–18:00)、**工作日空闲**(其余时间)与**周末全天空闲**(自 2026-08-23 起按空闲价,此前仍按原规则)。
61
- - **加载动画**:用量面板首次进入、数据仍在加载时显示转圈加载动画与提示文字,避免白屏无反馈;余额查询加载中同步使用加载动画。
62
- - **表格适配**:所有表格改为宽度自适应容器(`width:100%`),单元格内容按需换行,不再因内容超宽出现横向滚动条;极窄窗口下容器保留横向滚动兜底。窗口缩放、不同分辨率下查看更舒适。
63
-
64
- ---
65
-
66
- ## v1.10.0 (2026-08-23)
67
-
68
- - **新增 DeepSeek 官方模型 `deepseek-v4-flash-vision-exp`(DeepSeek-V4-Flash-Vision-Exp)**:官方价格表、概览「按模型」表、按 API 服务商 × 模型明细、用量日历、缓存命中列表与 PNG 报告均自动按该模型计价;「价格表」页新增该模型一行,`modelKey` 识别优先匹配 `vision`(避免被误归入 `deepseek-v4-flash`)。
69
- - **价格**(元 / 百万 tokens,与官方最新公布一致):空闲时段 缓存命中 0.05 / 输入未命中 1.5 / 输出 4.5;高峰时段 缓存命中 0.10 / 输入未命中 3.0 / 输出 9.0(与 `deepseek-v4-flash` 同价)。
70
- - **核对确认**:`deepseek-v4-flash` / `deepseek-v4-pro` 的峰谷价与官方最新公布完全一致,无价格变动;发送给该模型的图片按其尺寸换算成 token,与文本 token 一并计费。
71
- - **周末统一按空闲(低谷)价计费(2026-08-23 00:00 起)**:新规则生效后,周末(周六、周日)全天不再区分峰谷时段,统一按空闲价计费;工作日仍按北京时间 9:00–12:00、14:00–18:00 高峰分段。新规则生效前的调用仍按原规则结算。插件的高峰时段判定、面板「当前时段」徽标、概览 / 日历 / 缓存列表的高峰与空闲分列统计、PNG 报告均按新规则自动判断。
72
-
73
- ---
74
-
75
- ## v1.9.4 (2026-08-20)
76
-
77
- - **持久化不再落到工作目录(修复「数据又进了工作区」的反馈)**:之前插件的落盘走的是模型侧沙箱化的 `fs` 服务,在 `workspace-write` 模式下会被限制只能写工作区;当系统/用户目录因沙箱不可写时,数据会兜底写进 `<工作区>/dsh-usage`,于是切换工作区又出现「数据没了」的现象(即 issue #4 的本质)。
78
- - **改动**:持久化改为由插件**宿主进程自身的 `node:fs`** 直接完成,完全绕过 `workspace-write` 沙箱约束。数据根解析优先级变为 `DSH_USAGE_DATA_DIR` > `%LOCALAPPDATA%\dsh-usage-plugin`(或 `%APPDATA%`)> `~/dsh-usage-data`,**工作区降级为绝对最后的兜底**,正常桌面环境下数据稳定落在 AppData / 用户主目录,与当前工作区无关,切换工作区不再丢失历史。导出、价格表、`.keep` 等写操作同样改为宿主进程 `node:fs`,不再依赖受沙箱子进程。
79
- - **数据迁移**:原有 4558 条历史记录位于 `<工作区>/dsh-usage/usage-records.json`,首次以新版本启动时会被自动去重合并进新的固定数据根(`%LOCALAPPDATA%\dsh-usage-plugin\dsh-usage\usage-records.json`),无需手动处理。
80
-
81
- ## v1.9.3 (2026-08-20)
82
-
83
- - **概览支持日期筛选**:概览 Tab 顶部新增筛选栏,可按「今天 / 近 7 天 / 近 30 天 / 全部」快速切换,或自定义起止日期区间;所有聚合统计(按模型表、服务商 × 模型明细、总计)均按所选范围实时计算,并展示当前范围的记录数与总消耗。
84
- - **文档**:新增「如何更新插件」章节——桌面端 / 命令行 / 手动三种更新方式、版本锁定、已装版本校验,并提示**勿手改 `node_modules` 下文件**(每次更新会被 npm 覆盖)。
85
-
86
- ## v1.9.2 (2026-08-20)
87
-
88
- > 修复 issue #4:持久化路径随会话工作区漂移,导致历史用量数据"消失/统计为 0",且 UI 显示路径与实际落盘路径不一致。
89
-
90
- ### 背景(症状与根因)
91
- - **症状**:切换会话工作区、或用不同工作区重开桌面端后,统计页的「历史用量 / 总消耗」变成 0、仿佛数据丢失;同时统计页顶部显示的「数据持久化」路径,与磁盘上真实写入的文件路径对不上。
92
- - **根因**:旧版持久化根按 `agent.session.cwd` / `sandboxPolicy.workspaceRoot` 推导——无会话启动时常解析到用户主目录,插件激活后又切到当前工作区,且不同根之间不会互相合并,于是历史被「切走」到另一个目录而读不到;写盘还会受工作区沙箱策略约束。
93
-
94
- ### 修复
95
- - **固定专用数据目录**:持久化根不再跟随 `agent.session.cwd` / `sandboxPolicy.workspaceRoot` 漂移。解析顺序为:环境变量 `DSH_USAGE_DATA_DIR` > 系统应用数据目录 `%LOCALAPPDATA%\dsh-usage-plugin`(仅 Windows;macOS/Linux 下该分支不生效,因 `LOCALAPPDATA`/`APPDATA` 未定义)> 用户主目录下专用文件夹 `~/dsh-usage-data`(Windows 为 `%USERPROFILE%\dsh-usage-data`,macOS/Linux 为 `~/dsh-usage-data`)。该目录独立于桌面端安装目录、`~/.dsh` 主目录与任何会话工作区,删除工作区或卸载 APP 都不会丢失数据。
96
- - **启动时合并去重**:首次初始化与会话激活时,自动把散落在用户主目录、`.dsh`、各工作区旧路径里的 `usage-records.json` 按 `time` 去重合并进固定根(复用现有 `normalizeRecord`),不再只读当前根的那一份。
97
- - **UI 路径一致**:统计页顶部显示的「数据持久化」路径恒等于真实落盘路径;写入不再绑定工作区沙箱策略,固定目录可正常写入。
98
- - **数据迁移**:切换根目录时对旧根记录做真正合并(非复制/分裂),重启后自动恢复全部历史。
99
-
100
- ### 影响
101
- - 旧版本落在 `%USERPROFILE%\dsh-usage`、`.dsh\dsh-usage`、各工作区 `dsh-usage` 下的历史记录,会在首次启动本版本时自动合并到固定目录,无需手动迁移。
102
-
103
- ---
104
-
105
- ## v1.9.1 (2026-08-16)
106
-
107
- - **文档**: README 改为英文优先(`README.md` 英文 + 新增 `README.zh.md` 中文);补充「npm 包名已更换」醒目通知(旧包名 `@feiyang666/deepseekharnessdesktop` → 新包名 `@feiyang666/dsh-usage-plugin`),并移除发布教程等无关内容;修正 tarball 测试命令为新包名文件名。
108
-
109
- ---
110
-
111
- ## 1.9.0 — 2026-08-16 · 面板宽度自动适配(最终方案)
112
-
113
- > 解决「不同窗口/屏幕大小下,宽表最右列与合计列被窗口右缘裁掉、卡片只剩半张」的问题。该问题的根因是:会话视图容器没有宽度约束,面板被宽表格/卡片撑到 max-content 宽度(约 1300px+),超出窗口右缘后被窗口本身裁掉,因此表格内部也不会出现滚动条。
114
-
115
- ### 新增
116
- - 面板宽度以**视口封顶**:页签容器 `max-width: min(1200px, calc(100vw - 24px))`,任何窗口/屏幕大小下面板都不会超出窗口右缘。
117
- - 大窗口下仍保持 1200px 水平居中;
118
- - 窄窗口下跟随视口宽度收缩。
119
- - 宽表在容器内**横向滑动**:表格保持自然宽度(`width: max-content`),容器 `overflow-x: auto` 兜底展示完整列。
120
-
121
- ### 修复
122
- - 修复「按模型」「按 API 服务商 × 模型」等宽表**最右列(空闲消耗 / 总消耗、合计列)显示不全**的问题——表格超出可视区时出现横向滚动条,不再被窗口裁掉。
123
- - 修复顶部统计卡片行**第 6/7 张卡片只有一半**的问题(卡片网格随面板宽度自动换行)。
124
-
125
- ### 优化 / 界面
126
- - 撤掉 1.8.0 引入的「整体 CSS zoom 缩放」方案:不再把表格缩到看不清,保持默认可读字号。
127
- - 根容器 / 页签容器增加 `width:100% + max-width:100% + min-width:0 + box-sizing:border-box`,彻底打破 flex 宽度链导致的溢出。
128
- - 设置页保留原有的「底部横向滑动条」交互;工作区「用量与消耗」同样采用滑动条方案。
129
-
130
- ---
131
-
132
- ## 1.8.0 2026-08-16 · 宽表自适应(中间方案,已被 1.9.0 取代)
133
-
134
- > 首次尝试解决宽表被裁问题:引入 `FitTable` 自适应容器,表格超过容器宽度时用 CSS `zoom` 按比例缩小,配合 `ResizeObserver` 监听窗口尺寸。
135
- >
136
- > 该方案在设置页被证明「缩小得太多、字体过小、不便于阅读」,未符合预期,因此在 1.9.0 中被废弃并改为「面板宽度视口封顶 + 宽表容器内横向滚动」。**此版本不建议用于正式发布,仅保留过程记录。**
137
-
138
- ### 新增
139
- - `FitTable` 组件:测量容器宽度与表格自然宽度,超宽时按比例缩放(下限 0.35),并监听 `ResizeObserver`/窗口 `resize` 自动恢复。
140
- - 所有宽表(概览两表、日历两表、缓存列表、价格两表)套用 FitTable。
141
-
142
- ### 已知问题
143
- - 设置页在网页缩放后表格显得很小,阅读体验差。
144
-
145
- ---
146
-
147
- ## 1.7.0 — 2026-08-16 · 价格表官方标注 + 服务商 × 模型明细钻取
148
-
149
- ### 新增
150
- - **价格表标注为「DeepSeek 官方 API 价格表」**:明确说明本表为 DeepSeek 官方 API 价格(单位:元 / 百万 tokens),仅涵盖官方模型 `deepseek-v4-flash` 与 `deepseek-v4-pro`,价格按官方公布固定、不可编辑。
151
- - **概览「按 API 服务商」升级为「按 API 服务商 × 模型」钻取明细表**:
152
- - 每个服务商为一组(灰底加粗组头行),显示该服务商小计:调用数、高峰/空闲次数、各 token 合计、高峰消耗、空闲消耗、总消耗;
153
- - 组头下逐行列出该服务商**每一个模型**的详细数据(调用、高峰/空闲、输入·未命中、缓存命中、输出、推理、高峰消耗、空闲消耗、总消耗),按消耗从高到低排序;
154
- - 服务商按消耗降序排列(deepseek-official → opencode-go → deepseek-modlens …);
155
- - 表尾为「总费用合计」行。
156
- - **PNG 导出报告**的「按服务商」一节同步升级为「按 API 服务商 × 模型」分组表(组头行 + 缩进模型行 + 总费用合计行)。
157
- - 面板顶部新增**全局计价说明**:各模型与 API 服务商的消耗统一按 DeepSeek 官方 API 价格计费(因各厂商定价数据不完整,不按第三方另行计价;无 DeepSeek 官方价格的模型消耗按 0 统计)。
158
-
159
- ### 优化 / 界面
160
- - 概览「按模型」表保留并继续分组展示;新增组头行样式(`tdGroup`/`tdGroupR`)。
161
- - 模型名与 API 服务商均以请求参数为准如实显示。
162
-
163
- ---
164
-
165
- ## 1.6.0 — 2026-08-16 · 区分 API 服务商 + 总费用合计 + 缓存列表性能优化
166
-
167
- ### 新增
168
- - **按 API 服务商统计消耗**:概览新增「按 API 服务商」表,显示每个服务商(deepseek-official、opencode-go、deepseek-modlens…)的调用次数、高峰/空闲次数、高峰消耗、空闲消耗、总消耗,按消耗降序;空服务商显示「未知服务商」。
169
- - **总费用合计**:
170
- - 概览服务商表底部「总费用合计」行(含高峰/空闲/总消耗合计);
171
- - 缓存命中列表表尾新增「总费用合计」行:整段筛选范围内的调用数、各 token 合计、命中率、高峰 + 空闲 + 总消耗。
172
- - 用量日历当日明细:每行的模型列下方补充该条调用的 API 服务商小字。
173
- - PNG 报告新增「按 API 服务商」一节。
174
-
175
- ### 性能(缓存命中列表卡顿优化)
176
- - **分页渲染**:每页 100 条,上一页 / 下一页 + 页码指示,不再一次性渲染上千行 DOM(卡顿主因)。
177
- - **自动刷新 3 秒 → 10 秒**:原每 3 秒全量拉取所有记录并整表重渲染;现仅 10 秒拉取一次并增量显示。
178
- - 切换筛选 / 日期区间 / 清除区间时自动回到第 1 页;汇总与表尾合计仍按整个筛选范围计算,不受分页影响。
179
-
180
- ### 验证
181
- - 实测 2700+ 条记录 → 28 页;即使接近 10 万条上限仍保持流畅。
182
- - 已校验「各服务商消耗之和 == 总费用合计」「高峰 + 空闲 == 总消耗」恒成立。
183
-
184
- ---
185
-
186
- ## 1.5.0 — 2026-08-16 · 真实模型名 + 高峰/空闲分列消耗 + 界面字号自适应
187
-
188
- ### 新增 / 修复(用量)
189
- - **非 DeepSeek 模型不再显示「未知模型」**:模型名改为以请求参数里的真实模型名为准如实显示(`modelName` 助手);概览、用量日历、缓存命中列表、PNG 报告均以真实模型名分组。
190
- - 修复前:kimi-k3、qwen3.6-plus、glm-5.2、grok-4.5、minimax-m3 等全部合并显示为「未知模型」。
191
- - 修复后:各自成行、如实显示;无 DeepSeek 官方价格的模型消耗按 0 统计。
192
-
193
- ### 计价(高峰 / 空闲分列)
194
- - 服务端 `buildDays` 每日聚合新增**高峰 / 空闲消耗拆分字段**(按 `base`/`peakValley`/`auto` 三档各记一桶:`basePeakCost`、`pvOffPeakCost`、`autoPeakCost` 等共 6 个),作为单一天数据源;前端有「按记录回退计算」兜底,旧 host 未升级时也能正确显示。
195
- - **概览**:新增「高峰消耗」「空闲消耗」卡片,总消耗卡注明「高峰 + 空闲」;模型表新增高峰/空闲调用次数、高峰消耗、空闲消耗、总消耗列与合计行。
196
- - **用量日历**:月份卡片新增高峰消耗/空闲消耗;每日统计表改为「高峰消耗 | 空闲消耗 | 总消耗(自动)」三列(替换原 消耗(自动/峰谷/基础) 三列,列数更少更不挤);悬停详情与当日明细都列出高峰/空闲的条数与消耗。
197
- - **缓存命中列表**:汇总行区分「高峰消耗 X · 空闲消耗 Y · 总消耗 Z」;每行消耗金额按峰谷着色(高峰橙 / 空闲蓝)。
198
- - **PNG 报告**:头部与卡片新增高峰价/空闲价消耗;模型消耗表新增高峰消耗 / 空闲消耗 / 总消耗列;模型名用真实名称;底部注明按 DeepSeek 官方价格统一计价。
199
-
200
- ### 界面(显示大小自适应 + 去拥挤)
201
- - 面板全部字号改为 **em 相对字号**(`fs()` 辅助),随宿主「显示大小」设置的字体基准自动缩放。
202
- - 表格内边距加大(6px7px/10px)。
203
- - 模型列允许换行(`tdWrap`),卡片网格加宽防挤压。
204
- - 月份导航文字 / 日期标题同步 em 适配。
205
-
206
- ---
207
-
208
- ## 1.4.0 及更早(基线,未逐版本拆分)
209
-
210
- > 本项目自本日志撰写时起有记录的版本为 1.4.0。1.0.x–1.3.x 为早期迭代,未保留逐版本改动记录,以下为 1.4.0 时的完整功能基线(也是后续各版本迭代的起点):
211
-
212
- ### 插件主体
213
- - **Host 半**(`lib/index.js`):监听 `llm/stream` 瀑布事件,捕获每次模型调用的 token 用量与缓存命中(输入·未命中 / 缓存命中 / 缓存写入 / 输出 / 推理 / 结束原因),写入 `<会话工作区>/dsh-usage/usage-records.json`,实时落盘、上限 100000 条、重启自动恢复。
214
- - **Client 半**(`lib/client.js`):在 WebUI「对话」「轨迹」之后提供「用量与消耗」「剩余余额查询」两个 tab;设置页亦有对应入口。
215
-
216
- ### 计费
217
- - DeepSeek 峰谷 / 基础价格表(`deepseek-v4-flash` / `deepseek-v4-pro`),支持在面板内编辑价格并持久化到 `pricing.json`,可一键恢复默认。
218
- - 峰谷价生效时间:北京时间 2026-08-17 00:00;生效前按基础价,生效后按高峰/空闲时段(高峰 = 北京 9:00–12:00、14:00–18:00)。
219
- - `auto / base / peakValley` 三档计费,导出中每行带三档费用与 `period` 标记。
220
-
221
- ### 界面
222
- - 概览(总消耗卡片 + 按模型消耗表);用量日历(月度热力图,按消耗或调用数着色,悬停详情、点击某天看明细 + 每日统计表);缓存命中列表(今天/近7天/近30天/全部 + 自定义日期区间);价格表(自动/峰谷/基础三档)。
223
- - 剩余余额查询:用 `DEEPSEEK_API_KEY` 调 `/user/balance` 显示总余额/充值/赠送。
224
-
225
- ### 数据与导出
226
- - CSV / JSON / PNG 长图导出(最新在前,最多 2000 条,超出提示),支持自定义导出目录(原生目录选择器)与「打开所在目录」。
227
- - JSON / CSV 导入合并,按时间去重。
228
- - Windows / macOS / Linux 跨平台路径与原生操作适配;启动诊断日志 `dsh-usage-boot.log`。
229
-
1
+ # 更新日志 / Changelog
2
+
3
+ `@feiyang666/dsh-usage-plugin` — DeepSeek Harness 用量与消耗插件
4
+
5
+ 本文件按版本记录每一次更新的详细内容(新功能 / 优化 / 修复 / 界面 / 性能)。每次发布到 GitHub 时,请据此填写「版本发布」(GitHub Releases)的更新说明。
6
+
7
+ > 版本规范:本插件按「语义化版本」递增,`主.次.补丁`。功能新增/界面变化 → 升次版本(x.y.x → x.y+1.0);仅 bug 修复 → 升补丁。
8
+
9
+ ---
10
+
11
+ ## Unreleased(社区贡献候选):百炼(Qwen)Token Plan 配额查询
12
+
13
+ - **「剩余余额查询」新增「百炼 Token Plan」配额查询**(`lib/balance.js` / `lib/index.js` / `lib/client.js`,PR #8,@wuhuqif176)。
14
+ - 复用百炼 CLI(`bl`)的「控制台登录」OAuth token(`~/.bailian/config.json` 的 `access_token`),**不需要阿里云 AccessKey / BSS 权限**,权限面远小于 `AliyunBSSReadOnlyAccess`。
15
+ - Host 侧新增 `console-token` 查询模式:读取 `~/.bailian/config.json` 调百炼门户网关 `zeldaHttp.apikeyMgr./tokenplan/personal/api/v2/usage` 返回配额已用百分比与重置时间。
16
+ - 客户端渲染:百分比按官方 CLI 的 `round(x*1000)/10` 格式(如 `20.6%`),重置时间显示本地日期 + 相对倒计时;「本周配额」卡片用连续线段展示开始 / 结束日期(开始到今天深蓝、今天到结束浅色),今天节点随日期动态移动,窗口宽度随浏览器缩放自适应。
17
+ - 说明:展示的是**配额已用百分比**,不是剩余 token 数;百炼 Token Plan 实际没有 5 小时配额(相关 UI 已移除)。
18
+ - 新增依赖 `undici`(`package.json`)。
19
+
20
+ ---
21
+
22
+ ## Unreleased(社区贡献候选):英文界面 / i18n
23
+
24
+ - **新增英文界面(i18n 层)**(PR #7,[@ayleen](https://github.com/ayleen)):Web 面板全部 UI 文案接入轻量 i18n——以原中文文案为键、内置英译词典(260 条主词典 + 22 条余额键值对);按浏览器语言自动选择(中文浏览器保持中文,其余默认英文),「用量与消耗」头部新增切换按钮,即时生效并保存于 localStorage。
25
+ - **响应式语言切换**:语言以 React 状态注入 Usage / Balance 两个面板(`useLang` 订阅机制),切换不依赖任何网络请求;SUBTABS 等集合标签改为渲染时翻译。外部标签页名(slots label)在注册时定格,页面刷新后更新——按钮 tooltip 与两份 README 均已注明。
26
+ - **瞬态提示文案同样响应式**:导出 / 导入 / 目录选择等状态消息与客户端校验错误改为语义描述符(`{ k }` / `{ k, tail }` / `{ seq }` / `errorKey`)存储,渲染时才翻译,切换语言后既有提示立即跟随当前语言。
27
+ - **缺失凭据错误不再泄漏内部键**:`PROVIDERS.credentialHint` 更名为 `credentialHintKey`;DeepSeek 未配置凭据的错误改由技术凭据名生成(如「未找到 DEEPSEEK_API_KEY,请配置后重试」),新增 `missingCredentialError` 助手与单测断言错误中不含 `hint.*`。
28
+ - **测试与调试钩子**:新增 `exports.__i18n`(t / tb / msgText / setLang / 日期格式化)与 `test/client-i18n.test.js` —— 覆盖语言即时切换、localStorage 持久化跨挂载生效、日期 / 星期渲染、瞬态消息双语文案、余额语义键双语全覆盖。
29
+ - **余额查询改用语义化字段**:host(`lib/balance.js`)不再返回中文展示文案,改为 `labelKey / hintKey / meaningKey / sourceNoteKey / balanceLabelKey` 等稳定键,双语文案集中到客户端;成功响应负载不含中文展示文本(新增单测覆盖)。错误消息本期保持中文,拟后续跟进。
30
+ - **本地化日期与星期**:新增 `dayLabel / fmtMonthLabel / dailyStatsTitle / weekdayLabels`,中文保持 `2026年8月22日` 习惯格式,英文输出 `Aug 22, 2026`、`August 2026` 与 Mo–Su 星期表头。
31
+ - **实现范围**:改动 `lib/client.js` `lib/balance.js`;PNG 报告、日历悬停提示等 canvas 文案同步支持英文;与数据相关的比较(如合计行 key `"合计"`)保留原文不受翻译影响。宿主端日志 / 错误文案保持中文,拟后续跟进。
32
+
33
+ ---
34
+
35
+ ## v1.13.1 (2026-08-27)
36
+
37
+ ### 文档 / Docs
38
+
39
+ - **补全贡献者名单**(`package.json` contributors):新增 [@ayleen](https://github.com/ayleen)(PR #7 英文界面)与 [@wuhuqif176](https://github.com/wuhuqif176)(PR #8 百炼配额)。
40
+ - **新增 `.mailmap`**:把 PR #7 提交作者 `Ruslan R. Musakalimov <gitlab@letsweb.me>` 映射到 GitHub 账号 @ayleen,使仓库 Contributors 图与 git blame 正确归属历史提交。
41
+
42
+ ---
43
+
44
+ ## v1.13.0 (2026-08-23)
45
+
46
+ ### 新增 / New
47
+
48
+ - **英文界面(i18n 层)**(社区贡献,[@ayleen](https://github.com/ayleen),[PR #7](https://github.com/feiyang-dev/dsh-usage-plugin/pull/7)):Web 面板全部 UI 文案接入轻量 i18n——以原中文文案为键、内置英译词典;按浏览器语言自动选择(中文浏览器保持中文,其余默认英文),「用量与消耗」头部新增切换按钮,即时生效并保存于 localStorage。余额查询改为语义化字段(host 不再返回中文展示文案),缺失凭据错误不再泄漏内部键;日期 / 星期本地化(中文 `2026年8月22日`,英文 `Aug 22, 2026` 与 Mo–Su 表头);瞬态提示与客户端校验错误渲染时翻译。
49
+ - **百炼(Qwen)Token Plan 配额查询**(社区贡献,[@wuhuqif176](https://github.com/wuhuqif176),[PR #8](https://github.com/feiyang-dev/dsh-usage-plugin/pull/8)):「剩余余额查询」新增「百炼 Token Plan」子页签——复用百炼 CLI(`bl`)的控制台 OAuth token(`~/.bailian/config.json`),无需阿里云 AccessKey;展示本周配额已用百分比(进度条 + `已用 xx.x%`)与本周开始 / 结束日期(连续线段,今天节点随日期动态移动)。新增依赖 `undici`。
50
+ - **本地改进**:消耗明细表顶部与底部各渲染一份分页条(长列表翻页更顺手);DeepSeek 系 provider 未单独上报 `cacheWriteTokens` 时,「缓存写入」列改用未命中 token 数(`inputTokens`)兜底显示,避免长期为空。
51
+
52
+ ### 致谢 / Acknowledgements
53
+
54
+ - **[@ayleen](https://github.com/ayleen)**:实现英文界面与响应式语言切换(PR #7)。
55
+ - **[@wuhuqif176](https://github.com/wuhuqif176)**:实现百炼 Token Plan 配额查询(PR #8)。
56
+
57
+ ---
58
+
59
+ ## v1.12.2 (2026-08-23)
60
+
61
+ ### 修复 / Fixed
62
+
63
+ - **移动端宽表仍会逐字竖排(兜底加固)**(`lib/client.js`):v1.12.1 的修复依赖运行时向 `document.head` **注入全局样式表**(`.dsh-usage-table{min-width:720px}` + `@media (max-width:540px)` 折叠中间列)。在部分移动端运行环境(如经 mobile-remote 进出的手机页面)下该样式表因加载时序 / CSP 未生效,导致 9–11 列宽表每列被压到约 1 字符宽、标题与单元格逐字竖排、数据无法阅读。本版把 `min-width:720px` **直接写进表格的内联样式**(内联样式必然生效),窄屏时表格保持 720px、外层 `overflow-x` 容器横向滑动,彻底不再依赖样式表注入;原有注入样式表与 ≤540px 折叠逻辑保留,作为进一步优化的增强项。
64
+
65
+ ---
66
+
67
+ ## v1.12.1 (2026-08-23)
68
+
69
+ ### 修复 / Fixed
70
+
71
+ - **修复移动端「消耗表」「消耗明细」等宽表列标题逐字竖排的问题**(`lib/client.js`):窄屏下 9–11 列宽表每列被压到极限宽度,`word-break` 把「调用」「API 服务商」「输入·未命中」等表头拆成单字竖排。现为所有用量表格注入响应式 CSS:表格强制 `min-width: 720px`,外层 `overflow-x` 容器正常横向滚动、不再逐字换行;极窄屏(≤ 540px)下对宽表自动隐藏第 4 列至倒数第 2 列,只保留「模型 / 服务商 / 调用 / 总消耗」等主标识列与合计列,价格表等窄表不折叠、保留横向滚动。
72
+
73
+ ---
74
+
75
+ ## v1.12.0 (2026-08-23)
76
+
77
+ ### 新增 / New
78
+
79
+ - **SSE 实时推送端点**(`lib/index.js`):新增 `GET /usage/api/events` 事件流端点,数据变化(新调用记录写入 / 导入 / 清除等,即 `persistNow` 落盘成功)时向订阅者推送 `data: {"type":"changed","at":<时间戳>}`。桌面端数据中心等客户端订阅该流即可**即时**感知用量更新(毫秒级),不再依赖轮询。无订阅者时零开销,插件独立使用完全不受影响。
80
+
81
+ ---
82
+
83
+ ## 开源贡献基础:合并 PR #6(@Martin-soaring-dev,2026-08-20)
84
+
85
+ > 本期(以及后续 v1.9.2 / v1.9.3)建立在社区贡献分支 **`Martin-soaring-dev/prepare_for_contribution`** 之上。该分支由用户上传、经你合并(GitHub Pull Request #6,合并 commit `12a52be`),是插件转向对外开源贡献的形态基础。
86
+
87
+ ### 该分支带来的主要改动
88
+ - **多服务商余额查询**(`lib/balance.js` 新增 +205 行,新增余额适配器 `BalanceProviderAdapter`):将原先仅 DeepSeek 的 `/user/balance` 查询扩展为可对接多个服务商的余额查询框架,新增 DeepSeek / SiliconFlow / DigitalOcean / AMD GPU Cloud 等 Provider 适配器。
89
+ - **按服务商展示余额与价格**(`lib/client.js` +258 行):客户端新增「剩余余额查询」Tab 的多服务商 UI,可分别展示各服务商的「总余额 / 充值 / 赠送」并切换查看。
90
+ - **Provider 化计费**(`lib/index.js` +399 行重构):注入 `settings` 服务用于服务商查找,调用计费改为 provider-aware,支持按不同服务商分别统计与计价。
91
+ - **插件装配与测试**:新增余额适配器单测(`test/balance.test.js`,+130 行)、`scripts/wire.js` 手动装配兜底、`cordis.patch.yml` 插件注册条目。
92
+
93
+ ### 致谢
94
+ - **[@Martin-soaring-dev](https://github.com/Martin-soaring-dev)**:提交并筹备了上述开源贡献分支(PR #6),是后续公开发布版本的功能与结构基础。
95
+
96
+ ---
97
+
98
+ ## v1.11.1 (2026-08-23)
99
+
100
+ - **修复:数据加载后页面空白**:加载动画三目分支误用逗号表达式,只返回最后一个表达式值(`null`),导致加载完成后各子视图全部不渲染;改为将四个子视图作为容器 `div` 的并列子元素,加载完成后正常显示。
101
+ - **计费说明改为面板级固定显示**:「高峰 / 空闲时段说明」固定在用量面板子页签下方,概览、用量日历、缓存命中列表、价格表四个页面切换时始终可见(含数据加载期间)。
102
+ - **当前时段精确显示**:用量面板顶部徽标与价格表页顶部新增「当前 · 工作日高峰时段 / 工作日空闲时段 / 周末空闲时段」动态状态并附说明文字;周末(自 2026-08-23 起)全天按空闲价计费,规则生效前仍按原规则区分。
103
+
104
+ ---
105
+
106
+ ## v1.11.0 (2026-08-23)
107
+
108
+ - **高峰 / 空闲时段说明**:概览、用量日历、缓存命中列表、价格表四个页面顶部统一新增「高峰 / 空闲时段说明」,清楚区分**工作日高峰**(周一至周五 9:00–12:00、14:00–18:00)、**工作日空闲**(其余时间)与**周末全天空闲**(自 2026-08-23 起按空闲价,此前仍按原规则)。
109
+ - **加载动画**:用量面板首次进入、数据仍在加载时显示转圈加载动画与提示文字,避免白屏无反馈;余额查询加载中同步使用加载动画。
110
+ - **表格适配**:所有表格改为宽度自适应容器(`width:100%`),单元格内容按需换行,不再因内容超宽出现横向滚动条;极窄窗口下容器保留横向滚动兜底。窗口缩放、不同分辨率下查看更舒适。
111
+
112
+ ---
113
+
114
+ ## v1.10.0 (2026-08-23)
115
+
116
+ - **新增 DeepSeek 官方模型 `deepseek-v4-flash-vision-exp`(DeepSeek-V4-Flash-Vision-Exp)**:官方价格表、概览「按模型」表、按 API 服务商 × 模型明细、用量日历、缓存命中列表与 PNG 报告均自动按该模型计价;「价格表」页新增该模型一行,`modelKey` 识别优先匹配 `vision`(避免被误归入 `deepseek-v4-flash`)。
117
+ - **价格**(元 / 百万 tokens,与官方最新公布一致):空闲时段 缓存命中 0.05 / 输入未命中 1.5 / 输出 4.5;高峰时段 缓存命中 0.10 / 输入未命中 3.0 / 输出 9.0(与 `deepseek-v4-flash` 同价)。
118
+ - **核对确认**:`deepseek-v4-flash` / `deepseek-v4-pro` 的峰谷价与官方最新公布完全一致,无价格变动;发送给该模型的图片按其尺寸换算成 token,与文本 token 一并计费。
119
+ - **周末统一按空闲(低谷)价计费(2026-08-23 00:00 起)**:新规则生效后,周末(周六、周日)全天不再区分峰谷时段,统一按空闲价计费;工作日仍按北京时间 9:00–12:00、14:00–18:00 高峰分段。新规则生效前的调用仍按原规则结算。插件的高峰时段判定、面板「当前时段」徽标、概览 / 日历 / 缓存列表的高峰与空闲分列统计、PNG 报告均按新规则自动判断。
120
+
121
+ ---
122
+
123
+ ## v1.9.4 (2026-08-20)
124
+
125
+ - **持久化不再落到工作目录(修复「数据又进了工作区」的反馈)**:之前插件的落盘走的是模型侧沙箱化的 `fs` 服务,在 `workspace-write` 模式下会被限制只能写工作区;当系统/用户目录因沙箱不可写时,数据会兜底写进 `<工作区>/dsh-usage`,于是切换工作区又出现「数据没了」的现象(即 issue #4 的本质)。
126
+ - **改动**:持久化改为由插件**宿主进程自身的 `node:fs`** 直接完成,完全绕过 `workspace-write` 沙箱约束。数据根解析优先级变为 `DSH_USAGE_DATA_DIR` > `%LOCALAPPDATA%\dsh-usage-plugin`(或 `%APPDATA%`)> `~/dsh-usage-data`,**工作区降级为绝对最后的兜底**,正常桌面环境下数据稳定落在 AppData / 用户主目录,与当前工作区无关,切换工作区不再丢失历史。导出、价格表、`.keep` 等写操作同样改为宿主进程 `node:fs`,不再依赖受沙箱子进程。
127
+ - **数据迁移**:原有 4558 条历史记录位于 `<工作区>/dsh-usage/usage-records.json`,首次以新版本启动时会被自动去重合并进新的固定数据根(`%LOCALAPPDATA%\dsh-usage-plugin\dsh-usage\usage-records.json`),无需手动处理。
128
+
129
+ ## v1.9.3 (2026-08-20)
130
+
131
+ - **概览支持日期筛选**:概览 Tab 顶部新增筛选栏,可按「今天 / 近 7 天 / 近 30 天 / 全部」快速切换,或自定义起止日期区间;所有聚合统计(按模型表、服务商 × 模型明细、总计)均按所选范围实时计算,并展示当前范围的记录数与总消耗。
132
+ - **文档**:新增「如何更新插件」章节——桌面端 / 命令行 / 手动三种更新方式、版本锁定、已装版本校验,并提示**勿手改 `node_modules` 下文件**(每次更新会被 npm 覆盖)。
133
+
134
+ ## v1.9.2 (2026-08-20)
135
+
136
+ > 修复 issue #4:持久化路径随会话工作区漂移,导致历史用量数据"消失/统计为 0",且 UI 显示路径与实际落盘路径不一致。
137
+
138
+ ### 背景(症状与根因)
139
+ - **症状**:切换会话工作区、或用不同工作区重开桌面端后,统计页的「历史用量 / 总消耗」变成 0、仿佛数据丢失;同时统计页顶部显示的「数据持久化」路径,与磁盘上真实写入的文件路径对不上。
140
+ - **根因**:旧版持久化根按 `agent.session.cwd` / `sandboxPolicy.workspaceRoot` 推导——无会话启动时常解析到用户主目录,插件激活后又切到当前工作区,且不同根之间不会互相合并,于是历史被「切走」到另一个目录而读不到;写盘还会受工作区沙箱策略约束。
141
+
142
+ ### 修复
143
+ - **固定专用数据目录**:持久化根不再跟随 `agent.session.cwd` / `sandboxPolicy.workspaceRoot` 漂移。解析顺序为:环境变量 `DSH_USAGE_DATA_DIR` > 系统应用数据目录 `%LOCALAPPDATA%\dsh-usage-plugin`(仅 Windows;macOS/Linux 下该分支不生效,因 `LOCALAPPDATA`/`APPDATA` 未定义)> 用户主目录下专用文件夹 `~/dsh-usage-data`(Windows 为 `%USERPROFILE%\dsh-usage-data`,macOS/Linux 为 `~/dsh-usage-data`)。该目录独立于桌面端安装目录、`~/.dsh` 主目录与任何会话工作区,删除工作区或卸载 APP 都不会丢失数据。
144
+ - **启动时合并去重**:首次初始化与会话激活时,自动把散落在用户主目录、`.dsh`、各工作区旧路径里的 `usage-records.json` 按 `time` 去重合并进固定根(复用现有 `normalizeRecord`),不再只读当前根的那一份。
145
+ - **UI 路径一致**:统计页顶部显示的「数据持久化」路径恒等于真实落盘路径;写入不再绑定工作区沙箱策略,固定目录可正常写入。
146
+ - **数据迁移**:切换根目录时对旧根记录做真正合并(非复制/分裂),重启后自动恢复全部历史。
147
+
148
+ ### 影响
149
+ - 旧版本落在 `%USERPROFILE%\dsh-usage`、`.dsh\dsh-usage`、各工作区 `dsh-usage` 下的历史记录,会在首次启动本版本时自动合并到固定目录,无需手动迁移。
150
+
151
+ ---
152
+
153
+ ## v1.9.1 (2026-08-16)
154
+
155
+ - **文档**: README 改为英文优先(`README.md` 英文 + 新增 `README.zh.md` 中文);补充「npm 包名已更换」醒目通知(旧包名 `@feiyang666/deepseekharnessdesktop` → 新包名 `@feiyang666/dsh-usage-plugin`),并移除发布教程等无关内容;修正 tarball 测试命令为新包名文件名。
156
+
157
+ ---
158
+
159
+ ## 1.9.0 2026-08-16 · 面板宽度自动适配(最终方案)
160
+
161
+ > 解决「不同窗口/屏幕大小下,宽表最右列与合计列被窗口右缘裁掉、卡片只剩半张」的问题。该问题的根因是:会话视图容器没有宽度约束,面板被宽表格/卡片撑到 max-content 宽度(约 1300px+),超出窗口右缘后被窗口本身裁掉,因此表格内部也不会出现滚动条。
162
+
163
+ ### 新增
164
+ - 面板宽度以**视口封顶**:页签容器 `max-width: min(1200px, calc(100vw - 24px))`,任何窗口/屏幕大小下面板都不会超出窗口右缘。
165
+ - 大窗口下仍保持 1200px 水平居中;
166
+ - 窄窗口下跟随视口宽度收缩。
167
+ - 宽表在容器内**横向滑动**:表格保持自然宽度(`width: max-content`),容器 `overflow-x: auto` 兜底展示完整列。
168
+
169
+ ### 修复
170
+ - 修复「按模型」「按 API 服务商 × 模型」等宽表**最右列(空闲消耗 / 总消耗、合计列)显示不全**的问题——表格超出可视区时出现横向滚动条,不再被窗口裁掉。
171
+ - 修复顶部统计卡片行**第 6/7 张卡片只有一半**的问题(卡片网格随面板宽度自动换行)。
172
+
173
+ ### 优化 / 界面
174
+ - 撤掉 1.8.0 引入的「整体 CSS zoom 缩放」方案:不再把表格缩到看不清,保持默认可读字号。
175
+ - 根容器 / 页签容器增加 `width:100% + max-width:100% + min-width:0 + box-sizing:border-box`,彻底打破 flex 宽度链导致的溢出。
176
+ - 设置页保留原有的「底部横向滑动条」交互;工作区「用量与消耗」同样采用滑动条方案。
177
+
178
+ ---
179
+
180
+ ## 1.8.0 — 2026-08-16 · 宽表自适应(中间方案,已被 1.9.0 取代)
181
+
182
+ > 首次尝试解决宽表被裁问题:引入 `FitTable` 自适应容器,表格超过容器宽度时用 CSS `zoom` 按比例缩小,配合 `ResizeObserver` 监听窗口尺寸。
183
+ >
184
+ > 该方案在设置页被证明「缩小得太多、字体过小、不便于阅读」,未符合预期,因此在 1.9.0 中被废弃并改为「面板宽度视口封顶 + 宽表容器内横向滚动」。**此版本不建议用于正式发布,仅保留过程记录。**
185
+
186
+ ### 新增
187
+ - `FitTable` 组件:测量容器宽度与表格自然宽度,超宽时按比例缩放(下限 0.35),并监听 `ResizeObserver`/窗口 `resize` 自动恢复。
188
+ - 所有宽表(概览两表、日历两表、缓存列表、价格两表)套用 FitTable。
189
+
190
+ ### 已知问题
191
+ - 设置页在网页缩放后表格显得很小,阅读体验差。
192
+
193
+ ---
194
+
195
+ ## 1.7.0 — 2026-08-16 · 价格表官方标注 + 服务商 × 模型明细钻取
196
+
197
+ ### 新增
198
+ - **价格表标注为「DeepSeek 官方 API 价格表」**:明确说明本表为 DeepSeek 官方 API 价格(单位:元 / 百万 tokens),仅涵盖官方模型 `deepseek-v4-flash` 与 `deepseek-v4-pro`,价格按官方公布固定、不可编辑。
199
+ - **概览「按 API 服务商」升级为「按 API 服务商 × 模型」钻取明细表**:
200
+ - 每个服务商为一组(灰底加粗组头行),显示该服务商小计:调用数、高峰/空闲次数、各 token 合计、高峰消耗、空闲消耗、总消耗;
201
+ - 组头下逐行列出该服务商**每一个模型**的详细数据(调用、高峰/空闲、输入·未命中、缓存命中、输出、推理、高峰消耗、空闲消耗、总消耗),按消耗从高到低排序;
202
+ - 服务商按消耗降序排列(deepseek-officialopencode-go → deepseek-modlens …);
203
+ - 表尾为「总费用合计」行。
204
+ - **PNG 导出报告**的「按服务商」一节同步升级为「按 API 服务商 × 模型」分组表(组头行 + 缩进模型行 + 总费用合计行)。
205
+ - 面板顶部新增**全局计价说明**:各模型与 API 服务商的消耗统一按 DeepSeek 官方 API 价格计费(因各厂商定价数据不完整,不按第三方另行计价;无 DeepSeek 官方价格的模型消耗按 0 统计)。
206
+
207
+ ### 优化 / 界面
208
+ - 概览「按模型」表保留并继续分组展示;新增组头行样式(`tdGroup`/`tdGroupR`)。
209
+ - 模型名与 API 服务商均以请求参数为准如实显示。
210
+
211
+ ---
212
+
213
+ ## 1.6.0 2026-08-16 · 区分 API 服务商 + 总费用合计 + 缓存列表性能优化
214
+
215
+ ### 新增
216
+ - **按 API 服务商统计消耗**:概览新增「按 API 服务商」表,显示每个服务商(deepseek-official、opencode-go、deepseek-modlens…)的调用次数、高峰/空闲次数、高峰消耗、空闲消耗、总消耗,按消耗降序;空服务商显示「未知服务商」。
217
+ - **总费用合计**:
218
+ - 概览服务商表底部「总费用合计」行(含高峰/空闲/总消耗合计);
219
+ - 缓存命中列表表尾新增「总费用合计」行:整段筛选范围内的调用数、各 token 合计、命中率、高峰 + 空闲 + 总消耗。
220
+ - 用量日历当日明细:每行的模型列下方补充该条调用的 API 服务商小字。
221
+ - PNG 报告新增「按 API 服务商」一节。
222
+
223
+ ### 性能(缓存命中列表卡顿优化)
224
+ - **分页渲染**:每页 100 条,上一页 / 下一页 + 页码指示,不再一次性渲染上千行 DOM(卡顿主因)。
225
+ - **自动刷新 3 秒 → 10 秒**:原每 3 秒全量拉取所有记录并整表重渲染;现仅 10 秒拉取一次并增量显示。
226
+ - 切换筛选 / 日期区间 / 清除区间时自动回到第 1 页;汇总与表尾合计仍按整个筛选范围计算,不受分页影响。
227
+
228
+ ### 验证
229
+ - 实测 2700+ 条记录 → 28 页;即使接近 10 万条上限仍保持流畅。
230
+ - 已校验「各服务商消耗之和 == 总费用合计」「高峰 + 空闲 == 总消耗」恒成立。
231
+
232
+ ---
233
+
234
+ ## 1.5.0 — 2026-08-16 · 真实模型名 + 高峰/空闲分列消耗 + 界面字号自适应
235
+
236
+ ### 新增 / 修复(用量)
237
+ - **非 DeepSeek 模型不再显示「未知模型」**:模型名改为以请求参数里的真实模型名为准如实显示(`modelName` 助手);概览、用量日历、缓存命中列表、PNG 报告均以真实模型名分组。
238
+ - 修复前:kimi-k3、qwen3.6-plus、glm-5.2、grok-4.5、minimax-m3 等全部合并显示为「未知模型」。
239
+ - 修复后:各自成行、如实显示;无 DeepSeek 官方价格的模型消耗按 0 统计。
240
+
241
+ ### 计价(高峰 / 空闲分列)
242
+ - 服务端 `buildDays` 每日聚合新增**高峰 / 空闲消耗拆分字段**(按 `base`/`peakValley`/`auto` 三档各记一桶:`basePeakCost`、`pvOffPeakCost`、`autoPeakCost` 等共 6 个),作为单一天数据源;前端有「按记录回退计算」兜底,旧 host 未升级时也能正确显示。
243
+ - **概览**:新增「高峰消耗」「空闲消耗」卡片,总消耗卡注明「高峰 + 空闲」;模型表新增高峰/空闲调用次数、高峰消耗、空闲消耗、总消耗列与合计行。
244
+ - **用量日历**:月份卡片新增高峰消耗/空闲消耗;每日统计表改为「高峰消耗 | 空闲消耗 | 总消耗(自动)」三列(替换原 消耗(自动/峰谷/基础) 三列,列数更少更不挤);悬停详情与当日明细都列出高峰/空闲的条数与消耗。
245
+ - **缓存命中列表**:汇总行区分「高峰消耗 X · 空闲消耗 Y · 总消耗 Z」;每行消耗金额按峰谷着色(高峰橙 / 空闲蓝)。
246
+ - **PNG 报告**:头部与卡片新增高峰价/空闲价消耗;模型消耗表新增高峰消耗 / 空闲消耗 / 总消耗列;模型名用真实名称;底部注明按 DeepSeek 官方价格统一计价。
247
+
248
+ ### 界面(显示大小自适应 + 去拥挤)
249
+ - 面板全部字号改为 **em 相对字号**(`fs()` 辅助),随宿主「显示大小」设置的字体基准自动缩放。
250
+ - 表格内边距加大(6px → 7px/10px)。
251
+ - 模型列允许换行(`tdWrap`),卡片网格加宽防挤压。
252
+ - 月份导航文字 / 日期标题同步 em 适配。
253
+
254
+ ---
255
+
256
+ ## 1.4.0 及更早(基线,未逐版本拆分)
257
+
258
+ > 本项目自本日志撰写时起有记录的版本为 1.4.0。1.0.x–1.3.x 为早期迭代,未保留逐版本改动记录,以下为 1.4.0 时的完整功能基线(也是后续各版本迭代的起点):
259
+
260
+ ### 插件主体
261
+ - **Host 半**(`lib/index.js`):监听 `llm/stream` 瀑布事件,捕获每次模型调用的 token 用量与缓存命中(输入·未命中 / 缓存命中 / 缓存写入 / 输出 / 推理 / 结束原因),写入 `<会话工作区>/dsh-usage/usage-records.json`,实时落盘、上限 100000 条、重启自动恢复。
262
+ - **Client 半**(`lib/client.js`):在 WebUI「对话」「轨迹」之后提供「用量与消耗」「剩余余额查询」两个 tab;设置页亦有对应入口。
263
+
264
+ ### 计费
265
+ - DeepSeek 峰谷 / 基础价格表(`deepseek-v4-flash` / `deepseek-v4-pro`),支持在面板内编辑价格并持久化到 `pricing.json`,可一键恢复默认。
266
+ - 峰谷价生效时间:北京时间 2026-08-17 00:00;生效前按基础价,生效后按高峰/空闲时段(高峰 = 北京 9:00–12:00、14:00–18:00)。
267
+ - `auto / base / peakValley` 三档计费,导出中每行带三档费用与 `period` 标记。
268
+
269
+ ### 界面
270
+ - 概览(总消耗卡片 + 按模型消耗表);用量日历(月度热力图,按消耗或调用数着色,悬停详情、点击某天看明细 + 每日统计表);缓存命中列表(今天/近7天/近30天/全部 + 自定义日期区间);价格表(自动/峰谷/基础三档)。
271
+ - 剩余余额查询:用 `DEEPSEEK_API_KEY` 调 `/user/balance` 显示总余额/充值/赠送。
272
+
273
+ ### 数据与导出
274
+ - CSV / JSON / PNG 长图导出(最新在前,最多 2000 条,超出提示),支持自定义导出目录(原生目录选择器)与「打开所在目录」。
275
+ - JSON / CSV 导入合并,按时间去重。
276
+ - Windows / macOS / Linux 跨平台路径与原生操作适配;启动诊断日志 `dsh-usage-boot.log`。
277
+