更新日志 / Changelog

August 29, 2026 · View on GitHub

@feiyang666/dsh-usage-plugin — DeepSeek Harness 用量与消耗插件

本文件按版本记录每一次更新的详细内容(新功能 / 优化 / 修复 / 界面 / 性能)。每次发布到 GitHub 时,请据此填写「版本发布」(GitHub Releases)的更新说明。

版本规范:本插件按「语义化版本」递增,主.次.补丁。功能新增/界面变化 → 升次版本(x.y.x → x.y+1.0);仅 bug 修复 → 升补丁。


v1.14.1 (2026-08-29)

修复 / Fixed

  • 中断调用兜底记录,使「调用次数」与 DeepSeek 官方后台对齐lib/index.js):harness 在流被中断(aborted / error / timeout / 用户停止生成)时不会产出 usage chunk(usage 只在收到 [DONE] 哨兵后才由 adapter yield),导致这类调用此前完全不被插件记录——而官方后台仍会把该次请求计入「API 请求次数」并按实际 token 计费,于是插件统计的调用次数长期低于官方(如 8 月 27 日 985 vs 1033)。现在无 usage 但确为真实模型调用(通过 isRealCall,排除内部 dsh2shell-*/fake)的流,会在 observe()finally 里补记一条 0-token 的「中断调用」(新增 interrupted: true 字段,finishReason 如实标记 aborted/error/timeout)。token 与费用均为 0,不会虚增消耗;调用次数与官方口径一致。
  • 面板透明展示中断调用lib/client.js):
    • 概览「调用次数」卡片新增 · 中断 N(未计费) 提示;
    • 缓存命中列表与用量日历当日明细中,中断调用行在模型名旁显示红色「中断」徽标、结束原因红色标注、消耗列显示
    • PNG 导出报告同样在模型名旁标注「中断」、消耗列显示
    • 结束原因新增 aborted → 已中断 / Interruptedtimeout → 超时 / Timeout 映射(中英双语)。
    • 用量面板顶部新增「本地统计与官方后台的差异」提示横幅:说明本面板统计的是插件本地捕获的调用(官方价格 + 峰谷时段),与官方后台(platform.deepseek.com 用量页)相比金额可能更低——① 中断/出错/超时的调用官方仍按实际 token 计费而插件按 0 记录;② 账号下其他 API Key(其它应用/脚本)的调用不经过 DeepSeek Harness,官方包含而插件不包含;③ 精确对账可导出官方月度账单 CSV 对比。检测到中断调用时额外显示「当前记录中有 N 次中断调用(未计费)」红字提示。
  • 持久化与 API 透传 interruptedlib/index.js):normalizeRecord / projectRecord 均保留该字段,重启恢复、/usage/api list 输出、JSON 导出一致。

测试 / Tests

  • 新增 test/interrupt.test.js:验证中断兜底仅记录真实模型调用(DeepSeek 官方 / 第三方真实 provider),内部 fake/dsh* 占位调用永不兜底记录。
  • 全部 30/30 通过。

v1.14.0 (2026-08-27)

新增 / New

  • 消息底部「本轮 token」弹窗(两层统计):多轮完成后,助手消息底部操作行(复制 / 点赞 / 点踩 / 回复 那一排)新增「本轮 token」按钮,点击弹出 Token 明细
    • 对话累计:整场对话(当前会话)的 总 token / 总消耗 / 耗时 / 缓存命中率;
    • 本轮明细:本次输出 / 本轮 token / 本轮消耗 / 本轮耗时 / 本轮缓存命中率 / 缓存命中长条图(命中部分单独绿色渲染 + 百分比)/ 按模型卡片(每模型:模型名 + 总成本,一行 输入·未命中 / 缓存命中 / 输出(+推理),有费用再一行 峰 / 谷);
    • 时长统一按「X分Y秒」(英文 Xm Ys)显示;本轮窗口取该消息实际产出所在 step 的起止,本轮命中率与对话累计各自独立统计。
  • 宿主记录带会话标识llm/stream 捕获每条记录时新增 sessionId(优先 options.sessionId,缺失回退当前 agent 会话);新增 tokenForMessage API——按「会话 + 时间窗」返回本轮明细与对话累计两层聚合。
  • 内部/工具调用单独分组list 同时返回 toolCallsmodel 为 fake/unknown/空 或 dsh* 内部路由,如 dsh2shell-*/fake),概览「消耗明细」下方新增可折叠的「工具调用(内部)」分组(默认收起,显示 服务商·模型 / 调用数 / 总消耗),与真实模型调用分开。
  • 语言跟随系统设置:移除「用量与消耗」头部的中英文切换按钮,语言完全跟随宿主「通用设置 → 语言」,切换即时生效(locale 服务 subscribe + locale/change);不再写 localStoragedsh-usage-lang),旧残留值不再覆盖系统语言;「会话 / 设置」标签页名改为按渲染时读取的 thunk,随语言切换实时更新。
  • 移动端适配:表格在 ≤900px 贴合屏宽(min-width:0 !important)、不再出现横向滑条;宽表折叠中间列;弹窗统计卡与按模型卡片随宽度自适应;弹窗滚动条外观隐藏(仍可滚轮滚动)。
  • 英文适配补全:「高峰 / 空闲时段说明」整块与 19 个遗漏键(当前 · 工作日/周末时段、工作日高峰卡片提示、用量日历悬停提示、价格表两段长说明等)补上英译。

修复 / Fixes

  • 弹窗不可见:对话树祖先的 transform 会破坏 position: fixed,改用 react-dom 平台种子的 createPortal 把弹窗挂到 document.body
  • 整场会话聚合:按 messageId 查找消息完成时间改为读取 data.finalNode.messageId / data.closing.finalNode.messageId,时间窗正确生效(不再把整场对话圈进来)。
  • 语言切换失效:不再持久化语言选择,宿主设置切回中文即时恢复、无需刷新。
  • 表格显示:宽表 width:max-content,列按内容撑开、外层容器横向滚动,数字不再被压到换行/重叠。

测试 / Tests

  • 周末计费规则回归测试(issue #9):宿主 isPeakAt(新增 test/period.test.js)+ 客户端 isPeakNow / periodNowtest/client-i18n.test.js),覆盖 issue 的 5 个时刻向量、生效时间边界、峰段窗口左右端点。
  • i18n 测试改为覆盖「跟随宿主语言服务实时切换」「旧 localStorage 值不再覆盖宿主语言」。
  • 全部 27/27 通过。

v1.13.0 (2026-08-23)

新增 / New

  • 英文界面(i18n 层)(社区贡献,@ayleenPR #7):Web 面板全部 UI 文案接入轻量 i18n——以原中文文案为键、内置英译词典;按浏览器语言自动选择(中文浏览器保持中文,其余默认英文),「用量与消耗」头部新增切换按钮,即时生效并保存于 localStorage。余额查询改为语义化字段(host 不再返回中文展示文案),缺失凭据错误不再泄漏内部键;日期 / 星期本地化(中文 2026年8月22日,英文 Aug 22, 2026 与 Mo–Su 表头);瞬态提示与客户端校验错误渲染时翻译。
  • 百炼(Qwen)Token Plan 配额查询(社区贡献,@wuhuqif176PR #8):「剩余余额查询」新增「百炼 Token Plan」子页签——复用百炼 CLI(bl)的控制台 OAuth token(~/.bailian/config.json),无需阿里云 AccessKey;展示本周配额已用百分比(进度条 + 已用 xx.x%)与本周开始 / 结束日期(连续线段,今天节点随日期动态移动)。新增依赖 undici
  • 本地改进:消耗明细表顶部与底部各渲染一份分页条(长列表翻页更顺手);DeepSeek 系 provider 未单独上报 cacheWriteTokens 时,「缓存写入」列改用未命中 token 数(inputTokens)兜底显示,避免长期为空。

文档 / Docs

  • 补全贡献者名单package.json contributors):新增 @ayleen(PR #7 英文界面)与 @wuhuqif176(PR #8 百炼配额)。
  • 新增 .mailmap:把 PR #7 提交作者 Ruslan R. Musakalimov <gitlab@letsweb.me> 映射到 GitHub 账号 @ayleen,使仓库 Contributors 图与 git blame 正确归属历史提交。

致谢 / Acknowledgements

  • @ayleen:实现英文界面与响应式语言切换(PR #7)。
  • @wuhuqif176:实现百炼 Token Plan 配额查询(PR #8)。

v1.12.2 (2026-08-23)

修复 / Fixed

  • 移动端宽表仍会逐字竖排(兜底加固)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 折叠逻辑保留,作为进一步优化的增强项。

v1.12.1 (2026-08-23)

修复 / Fixed

  • 修复移动端「消耗表」「消耗明细」等宽表列标题逐字竖排的问题lib/client.js):窄屏下 9–11 列宽表每列被压到极限宽度,word-break 把「调用」「API 服务商」「输入·未命中」等表头拆成单字竖排。现为所有用量表格注入响应式 CSS:表格强制 min-width: 720px,外层 overflow-x 容器正常横向滚动、不再逐字换行;极窄屏(≤ 540px)下对宽表自动隐藏第 4 列至倒数第 2 列,只保留「模型 / 服务商 / 调用 / 总消耗」等主标识列与合计列,价格表等窄表不折叠、保留横向滚动。

v1.12.0 (2026-08-23)

新增 / New

  • SSE 实时推送端点lib/index.js):新增 GET /usage/api/events 事件流端点,数据变化(新调用记录写入 / 导入 / 清除等,即 persistNow 落盘成功)时向订阅者推送 data: {"type":"changed","at":<时间戳>}。桌面端数据中心等客户端订阅该流即可即时感知用量更新(毫秒级),不再依赖轮询。无订阅者时零开销,插件独立使用完全不受影响。

开源贡献基础:合并 PR #6(@Martin-soaring-dev,2026-08-20)

本期(以及后续 v1.9.2 / v1.9.3)建立在社区贡献分支 Martin-soaring-dev/prepare_for_contribution 之上。该分支由用户上传、经你合并(GitHub Pull Request #6,合并 commit 12a52be),是插件转向对外开源贡献的形态基础。

该分支带来的主要改动

  • 多服务商余额查询lib/balance.js 新增 +205 行,新增余额适配器 BalanceProviderAdapter):将原先仅 DeepSeek 的 /user/balance 查询扩展为可对接多个服务商的余额查询框架,新增 DeepSeek / SiliconFlow / DigitalOcean / AMD GPU Cloud 等 Provider 适配器。
  • 按服务商展示余额与价格lib/client.js +258 行):客户端新增「剩余余额查询」Tab 的多服务商 UI,可分别展示各服务商的「总余额 / 充值 / 赠送」并切换查看。
  • Provider 化计费lib/index.js +399 行重构):注入 settings 服务用于服务商查找,调用计费改为 provider-aware,支持按不同服务商分别统计与计价。
  • 插件装配与测试:新增余额适配器单测(test/balance.test.js,+130 行)、scripts/wire.js 手动装配兜底、cordis.patch.yml 插件注册条目。

致谢

  • @Martin-soaring-dev:提交并筹备了上述开源贡献分支(PR #6),是后续公开发布版本的功能与结构基础。

v1.11.1 (2026-08-23)

  • 修复:数据加载后页面空白:加载动画三目分支误用逗号表达式,只返回最后一个表达式值(null),导致加载完成后各子视图全部不渲染;改为将四个子视图作为容器 div 的并列子元素,加载完成后正常显示。
  • 计费说明改为面板级固定显示:「高峰 / 空闲时段说明」固定在用量面板子页签下方,概览、用量日历、缓存命中列表、价格表四个页面切换时始终可见(含数据加载期间)。
  • 当前时段精确显示:用量面板顶部徽标与价格表页顶部新增「当前 · 工作日高峰时段 / 工作日空闲时段 / 周末空闲时段」动态状态并附说明文字;周末(自 2026-08-23 起)全天按空闲价计费,规则生效前仍按原规则区分。

v1.11.0 (2026-08-23)

  • 高峰 / 空闲时段说明:概览、用量日历、缓存命中列表、价格表四个页面顶部统一新增「高峰 / 空闲时段说明」,清楚区分工作日高峰(周一至周五 9:00–12:00、14:00–18:00)、工作日空闲(其余时间)与周末全天空闲(自 2026-08-23 起按空闲价,此前仍按原规则)。
  • 加载动画:用量面板首次进入、数据仍在加载时显示转圈加载动画与提示文字,避免白屏无反馈;余额查询加载中同步使用加载动画。
  • 表格适配:所有表格改为宽度自适应容器(width:100%),单元格内容按需换行,不再因内容超宽出现横向滚动条;极窄窗口下容器保留横向滚动兜底。窗口缩放、不同分辨率下查看更舒适。

v1.10.0 (2026-08-23)

  • 新增 DeepSeek 官方模型 deepseek-v4-flash-vision-exp(DeepSeek-V4-Flash-Vision-Exp):官方价格表、概览「按模型」表、按 API 服务商 × 模型明细、用量日历、缓存命中列表与 PNG 报告均自动按该模型计价;「价格表」页新增该模型一行,modelKey 识别优先匹配 vision(避免被误归入 deepseek-v4-flash)。
  • 价格(元 / 百万 tokens,与官方最新公布一致):空闲时段 缓存命中 0.05 / 输入未命中 1.5 / 输出 4.5;高峰时段 缓存命中 0.10 / 输入未命中 3.0 / 输出 9.0(与 deepseek-v4-flash 同价)。
  • 核对确认deepseek-v4-flash / deepseek-v4-pro 的峰谷价与官方最新公布完全一致,无价格变动;发送给该模型的图片按其尺寸换算成 token,与文本 token 一并计费。
  • 周末统一按空闲(低谷)价计费(2026-08-23 00:00 起):新规则生效后,周末(周六、周日)全天不再区分峰谷时段,统一按空闲价计费;工作日仍按北京时间 9:00–12:00、14:00–18:00 高峰分段。新规则生效前的调用仍按原规则结算。插件的高峰时段判定、面板「当前时段」徽标、概览 / 日历 / 缓存列表的高峰与空闲分列统计、PNG 报告均按新规则自动判断。

v1.9.4 (2026-08-20)

  • 持久化不再落到工作目录(修复「数据又进了工作区」的反馈):之前插件的落盘走的是模型侧沙箱化的 fs 服务,在 workspace-write 模式下会被限制只能写工作区;当系统/用户目录因沙箱不可写时,数据会兜底写进 <工作区>/dsh-usage,于是切换工作区又出现「数据没了」的现象(即 issue #4 的本质)。
  • 改动:持久化改为由插件宿主进程自身的 node:fs 直接完成,完全绕过 workspace-write 沙箱约束。数据根解析优先级变为 DSH_USAGE_DATA_DIR > %LOCALAPPDATA%\dsh-usage-plugin(或 %APPDATA%)> ~/dsh-usage-data工作区降级为绝对最后的兜底,正常桌面环境下数据稳定落在 AppData / 用户主目录,与当前工作区无关,切换工作区不再丢失历史。导出、价格表、.keep 等写操作同样改为宿主进程 node:fs,不再依赖受沙箱子进程。
  • 数据迁移:原有 4558 条历史记录位于 <工作区>/dsh-usage/usage-records.json,首次以新版本启动时会被自动去重合并进新的固定数据根(%LOCALAPPDATA%\dsh-usage-plugin\dsh-usage\usage-records.json),无需手动处理。

v1.9.3 (2026-08-20)

  • 概览支持日期筛选:概览 Tab 顶部新增筛选栏,可按「今天 / 近 7 天 / 近 30 天 / 全部」快速切换,或自定义起止日期区间;所有聚合统计(按模型表、服务商 × 模型明细、总计)均按所选范围实时计算,并展示当前范围的记录数与总消耗。
  • 文档:新增「如何更新插件」章节——桌面端 / 命令行 / 手动三种更新方式、版本锁定、已装版本校验,并提示勿手改 node_modules 下文件(每次更新会被 npm 覆盖)。

v1.9.2 (2026-08-20)

修复 issue #4:持久化路径随会话工作区漂移,导致历史用量数据"消失/统计为 0",且 UI 显示路径与实际落盘路径不一致。

背景(症状与根因)

  • 症状:切换会话工作区、或用不同工作区重开桌面端后,统计页的「历史用量 / 总消耗」变成 0、仿佛数据丢失;同时统计页顶部显示的「数据持久化」路径,与磁盘上真实写入的文件路径对不上。
  • 根因:旧版持久化根按 agent.session.cwd / sandboxPolicy.workspaceRoot 推导——无会话启动时常解析到用户主目录,插件激活后又切到当前工作区,且不同根之间不会互相合并,于是历史被「切走」到另一个目录而读不到;写盘还会受工作区沙箱策略约束。

修复

  • 固定专用数据目录:持久化根不再跟随 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 都不会丢失数据。
  • 启动时合并去重:首次初始化与会话激活时,自动把散落在用户主目录、.dsh、各工作区旧路径里的 usage-records.jsontime 去重合并进固定根(复用现有 normalizeRecord),不再只读当前根的那一份。
  • UI 路径一致:统计页顶部显示的「数据持久化」路径恒等于真实落盘路径;写入不再绑定工作区沙箱策略,固定目录可正常写入。
  • 数据迁移:切换根目录时对旧根记录做真正合并(非复制/分裂),重启后自动恢复全部历史。

影响

  • 旧版本落在 %USERPROFILE%\dsh-usage.dsh\dsh-usage、各工作区 dsh-usage 下的历史记录,会在首次启动本版本时自动合并到固定目录,无需手动迁移。

v1.9.1 (2026-08-16)

  • 文档: README 改为英文优先(README.md 英文 + 新增 README.zh.md 中文);补充「npm 包名已更换」醒目通知(旧包名 @feiyang666/deepseekharnessdesktop → 新包名 @feiyang666/dsh-usage-plugin),并移除发布教程等无关内容;修正 tarball 测试命令为新包名文件名。

1.9.0 — 2026-08-16 · 面板宽度自动适配(最终方案)

解决「不同窗口/屏幕大小下,宽表最右列与合计列被窗口右缘裁掉、卡片只剩半张」的问题。该问题的根因是:会话视图容器没有宽度约束,面板被宽表格/卡片撑到 max-content 宽度(约 1300px+),超出窗口右缘后被窗口本身裁掉,因此表格内部也不会出现滚动条。

新增

  • 面板宽度以视口封顶:页签容器 max-width: min(1200px, calc(100vw - 24px)),任何窗口/屏幕大小下面板都不会超出窗口右缘。
    • 大窗口下仍保持 1200px 水平居中;
    • 窄窗口下跟随视口宽度收缩。
  • 宽表在容器内横向滑动:表格保持自然宽度(width: max-content),容器 overflow-x: auto 兜底展示完整列。

修复

  • 修复「按模型」「按 API 服务商 × 模型」等宽表最右列(空闲消耗 / 总消耗、合计列)显示不全的问题——表格超出可视区时出现横向滚动条,不再被窗口裁掉。
  • 修复顶部统计卡片行第 6/7 张卡片只有一半的问题(卡片网格随面板宽度自动换行)。

优化 / 界面

  • 撤掉 1.8.0 引入的「整体 CSS zoom 缩放」方案:不再把表格缩到看不清,保持默认可读字号。
  • 根容器 / 页签容器增加 width:100% + max-width:100% + min-width:0 + box-sizing:border-box,彻底打破 flex 宽度链导致的溢出。
  • 设置页保留原有的「底部横向滑动条」交互;工作区「用量与消耗」同样采用滑动条方案。

1.8.0 — 2026-08-16 · 宽表自适应(中间方案,已被 1.9.0 取代)

首次尝试解决宽表被裁问题:引入 FitTable 自适应容器,表格超过容器宽度时用 CSS zoom 按比例缩小,配合 ResizeObserver 监听窗口尺寸。

该方案在设置页被证明「缩小得太多、字体过小、不便于阅读」,未符合预期,因此在 1.9.0 中被废弃并改为「面板宽度视口封顶 + 宽表容器内横向滚动」。此版本不建议用于正式发布,仅保留过程记录。

新增

  • FitTable 组件:测量容器宽度与表格自然宽度,超宽时按比例缩放(下限 0.35),并监听 ResizeObserver/窗口 resize 自动恢复。
  • 所有宽表(概览两表、日历两表、缓存列表、价格两表)套用 FitTable。

已知问题

  • 设置页在网页缩放后表格显得很小,阅读体验差。

1.7.0 — 2026-08-16 · 价格表官方标注 + 服务商 × 模型明细钻取

新增

  • 价格表标注为「DeepSeek 官方 API 价格表」:明确说明本表为 DeepSeek 官方 API 价格(单位:元 / 百万 tokens),仅涵盖官方模型 deepseek-v4-flashdeepseek-v4-pro,价格按官方公布固定、不可编辑。
  • 概览「按 API 服务商」升级为「按 API 服务商 × 模型」钻取明细表
    • 每个服务商为一组(灰底加粗组头行),显示该服务商小计:调用数、高峰/空闲次数、各 token 合计、高峰消耗、空闲消耗、总消耗;
    • 组头下逐行列出该服务商每一个模型的详细数据(调用、高峰/空闲、输入·未命中、缓存命中、输出、推理、高峰消耗、空闲消耗、总消耗),按消耗从高到低排序;
    • 服务商按消耗降序排列(deepseek-official → opencode-go → deepseek-modlens …);
    • 表尾为「总费用合计」行。
  • PNG 导出报告的「按服务商」一节同步升级为「按 API 服务商 × 模型」分组表(组头行 + 缩进模型行 + 总费用合计行)。
  • 面板顶部新增全局计价说明:各模型与 API 服务商的消耗统一按 DeepSeek 官方 API 价格计费(因各厂商定价数据不完整,不按第三方另行计价;无 DeepSeek 官方价格的模型消耗按 0 统计)。

优化 / 界面

  • 概览「按模型」表保留并继续分组展示;新增组头行样式(tdGroup/tdGroupR)。
  • 模型名与 API 服务商均以请求参数为准如实显示。

1.6.0 — 2026-08-16 · 区分 API 服务商 + 总费用合计 + 缓存列表性能优化

新增

  • 按 API 服务商统计消耗:概览新增「按 API 服务商」表,显示每个服务商(deepseek-official、opencode-go、deepseek-modlens…)的调用次数、高峰/空闲次数、高峰消耗、空闲消耗、总消耗,按消耗降序;空服务商显示「未知服务商」。
  • 总费用合计
    • 概览服务商表底部「总费用合计」行(含高峰/空闲/总消耗合计);
    • 缓存命中列表表尾新增「总费用合计」行:整段筛选范围内的调用数、各 token 合计、命中率、高峰 + 空闲 + 总消耗。
  • 用量日历当日明细:每行的模型列下方补充该条调用的 API 服务商小字。
  • PNG 报告新增「按 API 服务商」一节。

性能(缓存命中列表卡顿优化)

  • 分页渲染:每页 100 条,上一页 / 下一页 + 页码指示,不再一次性渲染上千行 DOM(卡顿主因)。
  • 自动刷新 3 秒 → 10 秒:原每 3 秒全量拉取所有记录并整表重渲染;现仅 10 秒拉取一次并增量显示。
  • 切换筛选 / 日期区间 / 清除区间时自动回到第 1 页;汇总与表尾合计仍按整个筛选范围计算,不受分页影响。

验证

  • 实测 2700+ 条记录 → 28 页;即使接近 10 万条上限仍保持流畅。
  • 已校验「各服务商消耗之和 == 总费用合计」「高峰 + 空闲 == 总消耗」恒成立。

1.5.0 — 2026-08-16 · 真实模型名 + 高峰/空闲分列消耗 + 界面字号自适应

新增 / 修复(用量)

  • 非 DeepSeek 模型不再显示「未知模型」:模型名改为以请求参数里的真实模型名为准如实显示(modelName 助手);概览、用量日历、缓存命中列表、PNG 报告均以真实模型名分组。
    • 修复前:kimi-k3、qwen3.6-plus、glm-5.2、grok-4.5、minimax-m3 等全部合并显示为「未知模型」。
    • 修复后:各自成行、如实显示;无 DeepSeek 官方价格的模型消耗按 0 统计。

计价(高峰 / 空闲分列)

  • 服务端 buildDays 每日聚合新增高峰 / 空闲消耗拆分字段(按 base/peakValley/auto 三档各记一桶:basePeakCostpvOffPeakCostautoPeakCost 等共 6 个),作为单一天数据源;前端有「按记录回退计算」兜底,旧 host 未升级时也能正确显示。
  • 概览:新增「高峰消耗」「空闲消耗」卡片,总消耗卡注明「高峰 + 空闲」;模型表新增高峰/空闲调用次数、高峰消耗、空闲消耗、总消耗列与合计行。
  • 用量日历:月份卡片新增高峰消耗/空闲消耗;每日统计表改为「高峰消耗 | 空闲消耗 | 总消耗(自动)」三列(替换原 消耗(自动/峰谷/基础) 三列,列数更少更不挤);悬停详情与当日明细都列出高峰/空闲的条数与消耗。
  • 缓存命中列表:汇总行区分「高峰消耗 X · 空闲消耗 Y · 总消耗 Z」;每行消耗金额按峰谷着色(高峰橙 / 空闲蓝)。
  • PNG 报告:头部与卡片新增高峰价/空闲价消耗;模型消耗表新增高峰消耗 / 空闲消耗 / 总消耗列;模型名用真实名称;底部注明按 DeepSeek 官方价格统一计价。

界面(显示大小自适应 + 去拥挤)

  • 面板全部字号改为 em 相对字号fs() 辅助),随宿主「显示大小」设置的字体基准自动缩放。
  • 表格内边距加大(6px → 7px/10px)。
  • 模型列允许换行(tdWrap),卡片网格加宽防挤压。
  • 月份导航文字 / 日期标题同步 em 适配。

1.4.0 及更早(基线,未逐版本拆分)

本项目自本日志撰写时起有记录的版本为 1.4.0。1.0.x–1.3.x 为早期迭代,未保留逐版本改动记录,以下为 1.4.0 时的完整功能基线(也是后续各版本迭代的起点):

插件主体

  • Host 半lib/index.js):监听 llm/stream 瀑布事件,捕获每次模型调用的 token 用量与缓存命中(输入·未命中 / 缓存命中 / 缓存写入 / 输出 / 推理 / 结束原因),写入 <会话工作区>/dsh-usage/usage-records.json,实时落盘、上限 100000 条、重启自动恢复。
  • Client 半lib/client.js):在 WebUI「对话」「轨迹」之后提供「用量与消耗」「剩余余额查询」两个 tab;设置页亦有对应入口。

计费

  • DeepSeek 峰谷 / 基础价格表(deepseek-v4-flash / deepseek-v4-pro),支持在面板内编辑价格并持久化到 pricing.json,可一键恢复默认。
  • 峰谷价生效时间:北京时间 2026-08-17 00:00;生效前按基础价,生效后按高峰/空闲时段(高峰 = 北京 9:00–12:00、14:00–18:00)。
  • auto / base / peakValley 三档计费,导出中每行带三档费用与 period 标记。

界面

  • 概览(总消耗卡片 + 按模型消耗表);用量日历(月度热力图,按消耗或调用数着色,悬停详情、点击某天看明细 + 每日统计表);缓存命中列表(今天/近7天/近30天/全部 + 自定义日期区间);价格表(自动/峰谷/基础三档)。
  • 剩余余额查询:用 DEEPSEEK_API_KEY/user/balance 显示总余额/充值/赠送。

数据与导出

  • CSV / JSON / PNG 长图导出(最新在前,最多 2000 条,超出提示),支持自定义导出目录(原生目录选择器)与「打开所在目录」。
  • JSON / CSV 导入合并,按时间去重。
  • Windows / macOS / Linux 跨平台路径与原生操作适配;启动诊断日志 dsh-usage-boot.log