# Changelog ## [Unreleased] ## [1.9.56] - 2026-11-04 - 修复费用查询提前触发账本保存的问题,让磁盘 revision 未变时的本地更新在原定两秒窗口内合并,减少重复快照、Worker 启动与磁盘写入。 - 待写数据缺少计时器时安排保存,跨进程变更立即合并,显式提交与退出保存继续完成持久化。 - Preserve the two-second ledger write window during fee reads, with bounded scheduling recovery and immediate reconciliation of sibling-process writes. 感谢 [@XHPAN](https://github.com/XHPAN) 在 [#470](https://github.com/Han-1413141/dsh-cost-meter/issues/470) 提供定位、隔离复现、真实临时账本对照和修复建议。 [更新说明 / Release notes](docs/update-notes-1.9.56.md) ## [1.9.55] - 2026-11-04 - 合并输入区会话费用与明细入口,沿用官方 StatsPills 的间距、字号、悬停与展开样式,支持点击整行打开明细。感谢 [@yyc001](https://github.com/yyc001) 在 [#467](https://github.com/Han-1413141/dsh-cost-meter/issues/467) 提出需求并在 [#468](https://github.com/Han-1413141/dsh-cost-meter/pull/468) 提供实现。 - 保留输入区/标题栏/关闭的位置设置和旧配置,修复自定义货币符号影响金额数字的问题,显示预览同步入口状态。 - 修复套餐开口圆环的百分比文字偏移,覆盖明暗主题、四种布局和窄侧栏。感谢 [@Eancen](https://github.com/Eancen) 在 [#469](https://github.com/Han-1413141/dsh-cost-meter/issues/469) 提供环境、复现步骤与截图。 - Unify the clickable session-cost pill with native statistics, preserve saved display positions and custom currency amounts, and center percentages in open-ring quota cards. [更新说明 / Release notes](docs/update-notes-1.9.55.md) ## [1.9.54] - 2026-11-03 - 验证 dsh-codex-subscription 3.2.4 的实际发布包,更新兼容基线和两个宿主的持续集成矩阵,处理 github-actions[bot] 在 [#465](https://github.com/Han-1413141/dsh-cost-meter/issues/465) 提供的接口变化报告。 - 补充权限错误经 RPC 保留公开说明、登录完成后清理账号额度缓存,以及失败冷却结束后重新获取额度的回归检查。 - Validate Codex Subscription 3.2.4 access-error messages, login cache invalidation and fresh quota after failure cooldown against its published package. [更新说明 / Release notes](docs/update-notes-1.9.54.md) ## [1.9.53] - 2026-11-03 - 验证 billion-context 0.1.212 的实际发布包,更新兼容基线并加入持续集成,处理 github-actions[bot] 在 [#462](https://github.com/Han-1413141/dsh-cost-meter/issues/462) 报告的原生拦截函数变化。 - 新增连续原生请求验证,覆盖预填充进度学习、Request 输入、请求体保留及费用关联确认。 - Validate billion-context 0.1.212 native prefill-progress headers, cost acknowledgements and stock automatic integration against the published package. [更新说明 / Release notes](docs/update-notes-1.9.53.md) ## [1.9.52] - 2026-11-03 - 适配 DSH 0.2.2-alpha.3:使用新 Cordis 服务提供记录发现已加载的隔离 Web 服务,修复原生搜索漏计;保留旧宿主及卸载重载支持。 - 两个宿主 peer 显式接受 0.2.2 预发布版;next-host 与客户端加载器检查加入 alpha.3,并更新新版工具执行测试。 - Adapt to the updated Cordis service-provision records and 0.2.2 prerelease dependency resolution; verify real host installation, billing, RPC and client loaders. [更新说明 / Release notes](docs/update-notes-1.9.52.md) ## [1.9.51] - 2026-11-03 - 峰谷开始、切换时间与设置摘要默认读取当前设备系统时区;新增手动 IANA 时区选择,支持即时预览、持久化、夏令时、跨日及非整小时偏移,保持计费与历史日期规则。感谢 [@jt-at-home](https://github.com/jt-at-home) 在 [#460](https://github.com/Han-1413141/dsh-cost-meter/issues/460) 提供问题报告和本地时区配置建议。 - Display peak times in the system timezone by default, with a saved manual override and daylight-saving-aware labels; provider billing calendars remain unchanged. [更新说明 / Release notes](docs/update-notes-1.9.51.md) ## [1.9.50] - 2026-11-02 - 修复 billion-context 无模型调用时的输入估计值误计,统一检查缓存、实时导入与归档记录,保留真实大上下文及有效宿主用量。感谢 [@191xhq](https://github.com/191xhq) 在 [#458](https://github.com/Han-1413141/dsh-cost-meter/issues/458) 提供回放对照、异常统计、原因定位和过滤建议。 - 启动时备份并纠正有入账凭据的历史误计记录,同步会话、日期、模型和套餐小时统计,沿用历史价格及汇率;重复启动和并发写入不会再次扣除。 - Stop billing input-only context estimates without model-call evidence; repair receipted historical charges atomically with a backup and original pricing/FX. [更新说明 / Release notes](docs/update-notes-1.9.50.md) ## [1.9.49] - 2026-11-02 - 套餐侧栏新增可选的开口圆环,多个额度窗口并排显示,保留刷新、重置提示及纯文本模式。感谢 [@Eancen](https://github.com/Eancen) 在 [#455](https://github.com/Han-1413141/dsh-cost-meter/issues/455) 提供需求和参考图。 - 修复网络插件后加载并替换 fetch 时的原生搜索漏记,避免嵌套观察重复计费;新增可预览、可去重的搜索请求费手动补记命令。感谢 [@loxxa-carry](https://github.com/loxxa-carry) 在 [#456](https://github.com/Han-1413141/dsh-cost-meter/issues/456) 提供运行环境、诊断计数和补记建议。 - 概览新增计费核对,区分实际价表币种、显示币种和套餐 API 等值,提供官方价格同步入口;记录缓存、峰谷、去重、历史汇率和并发写入检查结果。 - Add optional plan quota gauges, reconnect native-search observation after transport replacement, support explicit idempotent request-fee corrections, and explain active billing currency and subscription cost basis. [更新说明 / Release notes](docs/update-notes-1.9.49.md) ## [1.9.48] - 2026-11-01 - 修复启用 dsh-loader 时的客户端重复注册及异步模块加载失败:为费用插件保留原生 `chunk` 与 `require.async`,继续使用按需加载和宿主热更新。感谢 [@3-yanyupingsheng](https://github.com/3-yanyupingsheng) 在 [#452](https://github.com/Han-1413141/dsh-cost-meter/issues/452) 提供桌面环境、错误日志、重启复现及跨版本对照。 - Codex 输入栏额度的悬停提示按窗口显示剩余百分比与完整重置时间,并显示更新时间;有 5 小时窗口时与 7 天窗口一起展示,缺少时间时保留额度、不生成日期。 - 验证 billion-context 0.1.210、0.1.211 实际发布包的计费与原版 CLI 自动接入,更新兼容基线和 CI,处理 github-actions[bot] 的 [#451](https://github.com/Han-1413141/dsh-cost-meter/issues/451)。 - Preserve native chunk registration under dsh-loader, display Codex reset dates in the input-bar tooltip, and verify published billion-context 0.1.210–0.1.211 packages. [更新说明 / Release notes](docs/update-notes-1.9.48.md) ## [1.9.47] - 2026-11-01 - 自定义余额支持算式、嵌套运算及订阅数组求和,区分剩余额度与已用量。[配置示例](docs/custom-balance-sources.md#复杂计算与订阅余额)。 - 按渠道与模型配置峰谷时段、日历及节假日,自定义模型可分别填写峰价和谷价;设置进入价格历史并在官方同步时保留。感谢 [@wexther](https://github.com/wexther) 在 [#445](https://github.com/Han-1413141/dsh-cost-meter/issues/445) 提出需求与配置结构建议。 - 合并 [@wegret](https://github.com/wegret) 的 [#447](https://github.com/Han-1413141/dsh-cost-meter/pull/447),修复其在 [#446](https://github.com/Han-1413141/dsh-cost-meter/issues/446) 报告的 Go 侧栏额度明细方向问题。 - 合并 Dependabot 的 [#448](https://github.com/Han-1413141/dsh-cost-meter/pull/448)、[#449](https://github.com/Han-1413141/dsh-cost-meter/pull/449),同步 rc.4 开发依赖与安装策略;验证 Codex 订阅 3.2.2、3.2.3 发布包,处理 github-actions[bot] 的 [#444](https://github.com/Han-1413141/dsh-cost-meter/issues/444)。 - Add custom balance arithmetic and subscription sums, provider/model peak schedules and separate rates; preserve historical pricing and synchronization overrides, correct Go detail direction, and verify current Codex subscription packages. [更新说明 / Release notes](docs/update-notes-1.9.47.md) ## [1.9.46] - 2026-10-29 - 验证 billion-context 0.1.209 与 dsh-codex-subscription 3.2.1 的实际发布包,更新兼容基线与持续集成;处理 github-actions[bot] 的 [#441](https://github.com/Han-1413141/dsh-cost-meter/issues/441)、[#442](https://github.com/Han-1413141/dsh-cost-meter/issues/442)。 - 修复峰谷切换前后分段样式箭头超出左右边界的问题,保留实际时段进度,避免临近切换时出现横向溢出。 - 浏览器测试固定到已复现的时刻,并覆盖工作日与周末结束前、切换后的箭头边界。 - Keep the classic peak-period arrow within the component at phase boundaries; retain progress tracking and add deterministic boundary coverage. [更新说明 / Release notes](docs/update-notes-1.9.46.md) ## [1.9.45] - 2026-10-29 - OpenDesign 额度新增网页 Cookie 查询,可自动读取网页当前工作区;保留 Control Key,补充无需桌面版的配置步骤。 - UI 显示设置新增可选的“点击名称快速隐藏余额”,默认关闭。开启后点名称隐藏/显示、点金额刷新,隐藏状态覆盖金额、进度条和悬停金额。 - 费用明细页面加载与数据读取增加超时重试,保留已有数据显示,防止迟到响应覆盖新结果;保留首次打开的并行加载与缓存。 - 降低长期使用的缓存内存:同一会话只保留最新记录版本,统计快照按总量淘汰,服务端闲置两分钟、页面缓存闲置一分钟后释放。 - 针对 [#440](https://github.com/Han-1413141/dsh-cost-meter/issues/440) 隔离 dsh-context 命令弹窗的联动布局:费用内容放在上游卡片之外,避免加载时改变其测量高度。感谢 [@LUgABeEEE](https://github.com/LUgABeEEE) 提供开关对照、滚动及焦点探针。 - 修复费用明细标签与导出/刷新按钮错位,窄窗口自动换行。感谢 [@fouriyeo](https://github.com/fouriyeo) 在 [#438](https://github.com/Han-1413141/dsh-cost-meter/issues/438) 提供复现、测量与 CSS 定位。 - 合并 [@windybirth](https://github.com/windybirth) 的 [#437](https://github.com/Han-1413141/dsh-cost-meter/pull/437),解决 [#436](https://github.com/Han-1413141/dsh-cost-meter/issues/436) 的 Anthropic 误报红色:隐藏内部窗口、标注 5h/7d、显示重置时间和本窗口平均用量预测;95% 红色阈值仅适用于 Anthropic。 - Add OpenDesign web-cookie quotas, opt-in balance hiding, recoverable cost-view loading, bounded memory caches, responsive toolbar alignment, and reviewed Anthropic quota readability improvements. [更新说明 / Release notes](docs/update-notes-1.9.45.md) ## [1.9.44] - 2026-10-28 - 修复紧凑、经典及侧栏收起样式的峰谷游标固定在 25% / 75% 的问题,改为按实际时段进度移动,并在相位切换和页面恢复可见时刷新。问题报告:[@shutongX](https://github.com/shutongX),[#434](https://github.com/Han-1413141/dsh-cost-meter/issues/434)。 - 更新 2026-10-28 模型目录:Kimi K3.1 Pro / Highspeed、Kimi Code 模型 ID、MiniMax M3.1 Flash / Preview 兼容名称、Qwen3.8 Flash、Hy4 preview、OpenCode Go 新模型与 Zen 新端点,以及 OpenRouter 的新增快照;补齐 Kimi K3 缓存写入并修正 Zen GPT-6.1 Sol 缓存读价。 - 套餐设置显示 Kimi 新档位和 MiniMax M Plan(Go / Explore / Build),兼容原有套餐;Kimi 额度解析支持新会员的 5 小时 / 月窗口、嵌套响应和旧版周窗计数。 - 新目录通过一次性迁移加入旧账本,保留手动价格、主动取消挂载和历史金额。来源与规则见 [10 月 28 日更新](docs/catalog-2026-10-28.md)。 - Fix stationary peak/off-peak markers; refresh provider-scoped model prices, Kimi memberships and MiniMax M Plan metadata; support current and legacy Kimi usage responses while preserving custom rates and recorded charges. - 本次发布也包含主分支既有的空闲插件扫描修复、统一显示引导与 Codex 订阅兼容验证,详见下方 1.9.43 记录。 [更新说明 / Release notes](docs/update-notes-1.9.44.md) ## [1.9.43] - 2026-10-28 - 移除 billion-context 识别中的宿主全量清单扫描,改用运行中原生实例、异步目标读取与模块身份缓存;覆盖停用、失败、卸载、重载和磁盘升级尚未生效的情况,保留计费补记与去重。感谢 [@ZiYuan258](https://github.com/ZiYuan258) 在 [#432](https://github.com/Han-1413141/dsh-cost-meter/issues/432) 提供复现、I/O 测量、根因定位和目标读取建议。 - 五个首次显示介绍合并为一个可关闭提示,统一指向「设置 → 费用 → 显示」;保留已有已读记录和用户设置,不关闭必要警告或第三方集成授权。感谢 [@L33Z22L11](https://github.com/L33Z22L11) 在 [#429](https://github.com/Han-1413141/dsh-cost-meter/issues/429) 报告叠加问题并提出统一入口建议。 - 补测真实 dsh-codex-subscription 3.1.8、3.1.9、3.2.0 发布包的额度、RPC 和生命周期,更新兼容基线并增加用量读取函数指纹;响应 `github-actions[bot]` 的 [#430](https://github.com/Han-1413141/dsh-cost-meter/issues/430) 告警。 - Remove idle full-plugin scans, consolidate display onboarding without changing preferences, and validate published Codex subscription packages through 3.2.0 before updating the compatibility baseline. [更新说明 / Release notes](docs/update-notes-1.9.43.md) ## [1.9.42] - 2026-10-28 - 修复“余额图框点击刷新”提醒的按钮被侧栏裁剪、拖动区域或浮动插件拦截的问题,改用现有顶层浮卡;已读标记不再因保存失败重新弹出,兼容重复挂载、旧版宿主及本地存储不可用的页面内重挂。 - 新增“隐藏进度条,仅显示紧凑文本”侧栏开关,保留额度百分比、计价时段、悬停说明与刷新操作;关闭开关恢复原有样式。 - 官方价格同步切换币种时,若页面未覆盖仍保留的模型,拒绝整个同步,避免人民币数值被误标为美元并再次乘汇率。历史金额与价格版本不会自动改写。[安全核对与历史修复](docs/official-price-sync-safety.md)。 - Fix the balance-refresh notice's intercepted clicks and persistent dismissal; add reversible compact text-only sidebar display; reject partial official-price currency switches atomically without rewriting historical charges. - 支持同一来源保存多个查询账号,在设置中选择余额或额度展示账号;凭据分开存储,切换时取消旧请求并清除缓存及采样基准。感谢 [@376797822](https://github.com/376797822) 在 [#427](https://github.com/Han-1413141/dsh-cost-meter/issues/427) 提出多账号查询和展示选择需求。[使用说明](docs/query-accounts.md)。 - Add named query accounts with isolated credentials and a selected account for balances/quotas; cancel old requests and reset observation baselines on switching. - 修复 Go 订阅在自动归属列表为空时仍被记入 API 花费的问题,增加历史分类修正及概览页“渠道计费方式”入口。感谢 [@ZIye1208](https://github.com/ZIye1208) 在 [#424](https://github.com/Han-1413141/dsh-cost-meter/issues/424) 提供复现、根因定位和改进建议。 - 自定义余额新增逐条配置的跳转链接,侧栏余额行与进度卡支持打开中转站账户页面,点击链接不触发余额刷新。感谢 [@yi-Xu-0100](https://github.com/yi-Xu-0100) 在 [#425](https://github.com/Han-1413141/dsh-cost-meter/issues/425) 提出需求并提供界面示例。 - Classify explicit Go subscription routes independently of frozen quota-query snapshots, repair historical API/Plan splits, expose channel billing controls, and add optional dashboard links to custom balance cards. - 修复 Agent Teams 在默认关闭“包含子代理”时遗漏成员费用的问题:正确读取宿主团队快照,统一会话徽章、当前对话统计、明细和会话列表的合计范围。感谢 [@KURISUNO4](https://github.com/KURISUNO4) 在 [#420](https://github.com/Han-1413141/dsh-cost-meter/issues/420) 提供复现数据、根因定位及修复建议。 - Fix Agent Teams cost aggregation with the subagent setting off; keep badge, selected-conversation statistics, details and session-list totals consistent without duplicating ledger entries. - 新增百度千帆 Token Plan 个人版额度查询,支持积分制和 Token 制、控制台 Cookie 凭据及登录过期提示;感谢 [@minevery512](https://github.com/minevery512) 在 [#418](https://github.com/Han-1413141/dsh-cost-meter/issues/418) 提出需求。[配置说明](docs/baidu-token-plan.md)。 - 验证 billion-context 0.1.208 与 dsh-codex-subscription 3.1.7 的实际发布包,更新兼容基线与 CI,处理自动监控 [#416](https://github.com/Han-1413141/dsh-cost-meter/issues/416)、[#417](https://github.com/Han-1413141/dsh-cost-meter/issues/417)。 - Add Baidu Qianfan Token Plan Personal quota via console Cookie, with separate credits/Token units; validate the latest billion-context and Codex subscription packages. - 新增官方余额“仅官方渠道显示”开关,默认关闭;按当前会话渠道显示侧栏官方余额,无渠道投影时参考今日官方调用,设置页与预览不受渠道限制。感谢 [@littleyellowbicycle](https://github.com/littleyellowbicycle) 在 [#421](https://github.com/Han-1413141/dsh-cost-meter/issues/421) 提出需求与判定规则。 - Add an opt-in official-channel filter for the sidebar balance, with current-session precedence and today's official-call fallback; keep settings and previews accessible. [更新说明 / Release notes](docs/update-notes-1.9.42.md) ## [1.9.41] - 2026-10-26 - 修复 Web 端 `conversation.chat.turnTail` 缺少 chain 插槽选择器导致的加载失败([#413](https://github.com/Han-1413141/dsh-cost-meter/issues/413),由 [@korion3](https://github.com/korion3) 报告、定位并在 [#414](https://github.com/Han-1413141/dsh-cost-meter/pull/414) 提供修复)。 - 账本替换前同步临时文件,增加独立的脱敏配置备份;账本损坏或缺失时恢复自定义余额源等设置,保留损坏文件。感谢 [@kevindawn11-hash](https://github.com/kevindawn11-hash) 在 [#412](https://github.com/Han-1413141/dsh-cost-meter/issues/412) 提供故障证据和修复建议。 - Flush ledger files before replacement and restore settings from an independent secret-free backup after ledger corruption or loss; fix Web startup chain-slot registration. [更新说明 / Release notes](docs/update-notes-1.9.41.md) ## [1.9.40] - 2026-10-26 - billion-context 费用误差说明移至“设置 → 费用 → 概览”,以普通灰字按需显示,不再自动弹窗打断聊天。 - 优化余额查询的等待策略,减少无效重复请求及相关使用风险。官方余额与通用 HTTP 自定义余额收到 401/403 后,自动查询等待配置间隔;429 遵守 `Retry-After`,连续手动刷新同样等待。 - 请求恢复成功或切换凭据、查询来源后清除对应等待状态,保持错误信息可见。 - 感谢 [@qingyu-ye](https://github.com/qingyu-ye) 在 [#409](https://github.com/Han-1413141/dsh-cost-meter/issues/409) 提供问题报告、截图及日志附件。 - Move billing accuracy guidance into settings and reduce redundant balance requests with authentication backoff and rate-limit-aware refreshes. [更新说明 / Release notes](docs/update-notes-1.9.40.md) ## [1.9.39] - 2026-10-25 - Zod 升级至 4.6.6,修复超长集合校验导致过量错误对象和内存占用的高危漏洞(GHSA-mrhx-c7xc-m3w5)。 - 修复代理计费扫描中断及文件、归档暂时读取失败后漏导入的问题;保留失败记录重试,正常记录继续处理,空闲目录保持增量扫描。 - 已封存日志压缩后先同步并发布归档,再移除原文件;写入或同步失败时保留原始记录。 - 本进程计费流使用已成功保存的元数据快照,避免 Windows 异步读取占用文件期间同步替换失败。 - 网关停用、删除、配置与凭据变化、插件卸载时取消旧请求;响应体读取、重试等待和后续账号查询统一响应取消。WorkBuddy / XD Pool 同步补齐响应体取消。 - 导出任务最后访问 10 分钟后主动释放,大量调用分批处理并在收集时限制数据量;CSV 按行检查输出大小。 - 非法 Token 分项不再使整次调用费用归零,其他有效分项继续计费。 - Recover transient billing reads, sync sealed archives before deleting originals, propagate quota cancellation, expire idle exports and preserve valid charges alongside invalid Token buckets. [更新说明 / Release notes](docs/update-notes-1.9.39.md) ## [1.9.38] - 2026-10-25 - WorkBuddy 积分增加 dsh-xdpool 适配,读取国内、国际账号池,支持当前、全部和勾选账号,沿用现有积分观测统计。 - WorkBuddy 设置增加“积分来源”:自动识别、WorkBuddy 连接插件、dsh-xdpool。账号标识按来源隔离,多个插件不会重复相加;失败、冷却无数据、账号移除时保留未知状态。 - xdpool / xdpool-global 精确归入 WorkBuddy 计费家族,沿用 API / Plan 设置及手动覆盖;历史修正不重算价格,不改变已记录的总金额。 - 修复 #404:感谢 @qiyeren 提出适配需求;接口兼容依据为 @XDTrees 的 dsh-xdpool 2.4.6 发布包。 - Add dsh-xdpool WorkBuddy credits with CN/global account selection and explicit source control; preserve unknown balances, isolate account identities and classify only the two WorkBuddy pool routes. [更新说明 / Release notes](docs/update-notes-1.9.38.md) ## [1.9.37] - 2026-10-25 - 单个对话的费用明细增加“导出费用记录”,支持 CSV 汇总、CSV 调用明细和 JSON 完整费用记录;导出完整记录,不受页面分页限制。 - 费用设置的概览和计费统计增加统一导出入口,可导出当前筛选范围或全部保留记录。文件包含对话标题、模型、Token、时间和费用,不含对话正文或凭据。 - 导出保留账本金额、历史价格、币种和 API / Plan 双口径;计入子代理时每条调用只导出一次。调用明细缺失或与账本不同会标注,支持取消和分块下载。 - 额度窗口统一按 5h → 日 → 周 → 月排列,只显示实际支持的窗口;火山 Coding Plan 去掉混入的日额度,只显示 5h、周、月。 - Export single-conversation or filtered/all retained billing records as summary CSV, call CSV or JSON; preserve recorded amounts, historical pricing/currency and subagent ownership. Order supported quota windows consistently and remove the unsupported Volcano Coding Plan daily window. [更新说明 / Release notes](docs/update-notes-1.9.37.md) ## [1.9.36] - 2026-10-24 - “DeepSeek 余额”名称改为可选:默认显示“余额”,在显示设置的官方余额组件中开启“显示余额来源(DeepSeek)”后显示来源;悬停提示始终保留账户来源。 - Coding Plan 与 OpenCode Go 的显示位置增加“输入框上方”,支持侧栏、设置页与输入框上方的组合选择;额度设置和显示预览使用同一选项。 - 单家位置可独立控制输入区额度横条,不会同时显示其他厂商,也不会启用原先关闭的查询;选择“仅输入框上方”后仍支持自动查询和点击刷新。 - 保留已有横条默认设置的显示效果;手动选择单家位置后,以单家选择为准。配置经过校验、保存、重新加载与双端 codec。 - Make the DeepSeek balance label optional and add per-vendor placement above the composer, including location combinations, persisted choices and composer-only refresh. [更新说明 / Release notes](docs/update-notes-1.9.36.md) ## [1.9.35] - 2026-10-24 - 修复 6 位 YYMMDD 快照模型名未匹配价格的问题,支持火山方舟 deepseek-v4-1-flash-260910 / -261017;精确匹配和独立快照价格仍优先。 - volcengine / ark 的 DeepSeek 峰谷计价采用火山工作日日历,不再继承中国法定节假日全天谷价;会话投影、侧栏进度和切换提醒同步跟随渠道。 - 官方余额卡明确标为“DeepSeek 余额”;保留仅官方渠道参与对账的规则,第三方渠道消费不会扣减或混入官方余额。 - 余额悬停提示改为短行并限制宽度;原生搜索缺失用量提示简化为“今日 N 次搜索未完整计入统计”,保留对账异常与点击刷新入口。 - 既有价格版本保留记录时的计价规则,不自动重算历史;需要修正历史时可在价格设置中手动重算对应模型。 - 感谢 @littleyellowbicycle 在 [#399](https://github.com/Han-1413141/dsh-cost-meter/issues/399)、[#400](https://github.com/Han-1413141/dsh-cost-meter/issues/400)、[#401](https://github.com/Han-1413141/dsh-cost-meter/issues/401) 提供复现、根因定位、快照匹配补丁建议和余额来源建议。 - Fix compact snapshot matching and Ark's weekday peak calendar; label DeepSeek balances explicitly and shorten hover warnings. Preserve saved historical pricing until explicit recalculation. [更新说明 / Release notes](docs/update-notes-1.9.35.md) ## [1.9.34] - 2026-10-24 - 修复 billion-context 空闲计费扫描同步遍历全部 stream 文件造成的主线程卡顿,改为异步目录变化检测,保留未完成流和调用日志的持续导入。 - 新增计费历史存储面板:文件数量、大小、修改时间、清理预览与确认;默认保留 7 天原始辅助文件,可选 30 天或全部保留,后台每小时维护。 - 已完成旧流先写入持久压缩归档再移除原文件,过期完成回执单独清理;保留账本、调用记录、费用明细和重放去重。新增默认预览、显式 --apply 的 CLI。 - 覆盖归档失败、并发修改、重复清理、费用重放、目录链接及损坏元数据;浏览器验证中英文、错误反馈和窄屏操作。 - 感谢 @ZiYuan258 在 [#397](https://github.com/Han-1413141/dsh-cost-meter/issues/397) 提供问题报告、复现证据、同步扫描定位及清理/保留时间建议。 - Replace synchronous full-file idle scans with asynchronous directory revisions. Add storage statistics, preview/confirm cleanup, hourly retention and a preview-first CLI; preserve billing history through durable stream archives. [更新说明 / Release notes](docs/update-notes-1.9.34.md) ## [1.9.33] - 2026-10-24 - 验证兼容 billion-context 0.1.205 / 0.1.206、dsh-codex-subscription 3.1.6 和 dsh-codex-connect 0.2.0-alpha.10,接受已验证的接口指纹及发布包完整性;费用插件运行时代码无需调整。 - 新增 Codex Connect 实际发布包的额度解析、公开状态类与 HTTP 状态路由检查,覆盖账号快照一致性、单周/双窗口、登录失效、额度失败和请求鉴权。 - 持续集成保留旧版本并加入上述版本;兼容监控基线更新为 0.1.206 / 3.1.6 / 0.2.0-alpha.10。 - 来源为 `github-actions[bot]` 的 [#392](https://github.com/Han-1413141/dsh-cost-meter/issues/392)、[#393](https://github.com/Han-1413141/dsh-cost-meter/issues/393)、[#394](https://github.com/Han-1413141/dsh-cost-meter/issues/394) 自动监控报告,报告提供新版版本号与接口指纹变化。 - Verify the new upstream releases without changing runtime adapters. Add published Codex Connect parser/status-route checks, expand the pinned CI matrix and accept only tested compatibility fingerprints and package integrity. [更新说明 / Release notes](docs/update-notes-1.9.33.md) ## [1.9.32] - 2026-10-24 - 新增 `dsh-chatgpt-sub` 图形化额度适配:侧栏和输入区显示 5 小时、每周剩余进度条及重置时间,只有周额度的账号仅显示周窗口;点击卡片可刷新。 - 先确认插件当前绑定状态,再使用它保存在 DSH 中的凭据查询额度;前端仅接收百分比和时间,不读取共享 Codex 登录文件。支持自动检测和单独指定来源,保留原有订阅插件接口。 - 覆盖登录恢复、解除绑定、凭据轮换、错误与超时、卸载、来源切换、严格 RPC 编解码及实际浏览器显示;适配依据为 [dsh-chatgpt-sub 0.6.3](https://github.com/songoao25/dsh-chatgpt-sub) 的公开状态接口和凭据约定。 - Display graphical ChatGPT quota for `dsh-chatgpt-sub`, including remaining 5h/weekly windows, reset times and refresh. Verify the active binding and query through the host-held credential; keep credentials out of the browser and shared Codex login files untouched. [更新说明 / Release notes](docs/update-notes-1.9.32.md) ## [1.9.31] - 2026-10-23 - 插件详情页接入完整费用设置,与左下角设置共用组件、实时快照、配置保存和按需加载;旧宿主保留设置入口。 - 预备只展示实时费用、余额、额度、预算、Token 用量和今日会话的设置页,不提供配置控件;本版本保持关闭,两个现有入口仍可配置。 - 修复两个入口并发保存时旧请求覆盖新操作的问题;共用串行保存队列,失败后后续修改仍可提交。 - 修复外部调用记录和旧账本价格修复使用显示汇率的问题;人民币价格统一使用 CNY 汇率,美元或欧元显示不再改变计费金额。 - 价格修复同步更新已冻结的人民币、欧元金额,保留记录时的汇率;日级模型汇总即使美元金额一致,也会修复可由完整会话记录确认的币种金额差异,缺失记录不当作零。 - Add shared settings to plugin details and prepare a disabled read-only overview. Serialize saves across both entries, use CNY FX for CNY billing, and keep repaired historical currency amounts consistent with recorded rates. [更新说明 / Release notes](docs/update-notes-1.9.31.md) ## [1.9.30] - 2026-10-23 - 后台账本线程启动、导入或超时失败后立即降级为同步保存,本次运行只告警一次且不再启动故障线程;日常定时保存继续工作。临时账本锁冲突仍可重试,已提交但丢失回执的交易仍先恢复回执,防止重复计费。 - 补齐 `dsh-opencode-go` 的 Go 套餐别名,服务端与前端同步识别;新调用遵循 Go 的自动归属与显式分类,套餐用量不再误计为 API 花费,保留 API 等值金额。 - 感谢 [@2239058652](https://github.com/2239058652) 在 [#387](https://github.com/Han-1413141/dsh-cost-meter/issues/387) 提供运行环境、最小复现、依赖链测试与异步失败定位;感谢 [@ZIye1208](https://github.com/ZIye1208) 在 [#389](https://github.com/Han-1413141/dsh-cost-meter/issues/389) 提供渠道对照、别名定位与补丁验证。 - Fall back to synchronous ledger saves once a worker fails, without repeatedly restarting it. Preserve transient lock retries and lost-acknowledgement recovery. Recognize the dedicated `dsh-opencode-go` route as the Go family in both host and client billing. [更新说明 / Release notes](docs/update-notes-1.9.30.md) ## [1.9.29] - 2026-10-23 - 修复 v1.9.28 后台账本线程缺少宿主模块解析器时找不到 `@deepseek-ai/dsh-home-paths`、反复写入失败的问题;工作线程独立打包,不再依赖 Desktop/Web 宿主的解析环境。 - 卸载插件时异步等待正在写入的账本,避免阻塞宿主事件循环;线程超时后终止并清理其独占锁,最终提交保留未保存用量。 - 修复桌面皮肤拉伸侧栏底部容器产生的大块空白,卡片随内容占高;OpenDesign 余额移至标题行右侧,保留 5h 和周额度行。 - 今日消费与余额同行时,今日金额和 Token 数按实际内容撑开行高,避免第二行被裁切;保留与余额首行对齐。 - Bundle the ledger worker independently of the DSH resolver; keep disposal responsive and recover a stopped worker's lock before the final write. Keep Desktop footer cards at their content height and show the OpenDesign balance in the title row. [更新说明 / Release notes](docs/update-notes-1.9.29.md) ## [1.9.28] - 2026-10-23 - 修复跨读取块的合法 zstd 大帧漏读,按实际解压输出执行预算;普通 JSONL、单行和事件数采用有界读取。 - 修复乱序并发调用的错误去重,以及 billion-context 完成但调用明细为空时的宿主用量漏记;覆盖重启、重复导入和归档后的恢复。 - 统一 Token 总量,推理作为输出细分;套餐统计按供应商实际重置周期聚合,小时桶保留 35 天并从可读会话恢复派生统计。 - 日常账本保存移入串行工作线程,保留跨进程合并、原子替换和卸载提交;提交回执防止确认消息丢失后重复计费。 - 保存自动套餐归属集合,额度查询及显示开关不再重新分类历史 API/Plan 费用。 - 辅助日志达到 8 MiB 后轮转,对封存分段受限压缩,保留可读取的历史明细;增加变更标记与增量文件发现。 - 余额、套餐、汇率和价格页面统一使用有界正文读取、解压输出限制与超时取消;网关不再把空百分比误报为 0% 已用。 - 修复发布说明生成被自身写入拦截,以及已有标签未核对提交的问题;同步网络声明、MiniMax 自定义来源文档和边界回归测试。 - Fix nine review findings covering compressed history, decompression limits, out-of-order deduplication, empty proxy streams, token totals, quota cycles, gateway percentages and release integrity. - Move routine ledger saves to a worker with atomic commit recovery; separate quota switches from billing ownership; rotate and archive journals without deleting history, bound network reads and expand behavior tests. [更新说明 / Release notes](docs/update-notes-1.9.28.md) ## [1.9.27] - 2026-10-23 - 修复 OpenRouter 每次启动都重拉价目表的问题:启动与小时级定时任务共用跨重启的一小时冷却,失败和中途退出也保留最近尝试时间;多个宿主共用一次自动刷新机会,冷却期间不改写账本或刷新状态。手动同步仍可立即执行。 - 感谢 [@yanzhaohui1999](https://github.com/yanzhaohui1999) 在 [#384](https://github.com/Han-1413141/dsh-cost-meter/issues/384) 提供重启循环的流量测量、代码定位与持久化冷却建议。 - Bound automatic OpenRouter catalog downloads with an hourly cooldown that survives restarts, failures and interrupted requests. Concurrent hosts share one refresh claim; manual sync remains immediate. - 修复 [@Sieuno](https://github.com/Sieuno) 在 [#382](https://github.com/Han-1413141/dsh-cost-meter/issues/382) 独立复现的 billion-context 漏记:持久化成功不再等同于用量完整。代理模型用量缺失、宿主用量有效时按调用流补记一次,保留独立压缩费用;重启和重复导入不重复入账。旧版已错误标记覆盖、但遗漏的宿主用量可从保留的桥接记录恢复;无法拆分的混合用量保留原始数据并提示核对。 - Recover missing host usage once per stream when proxy model usage is unavailable; preserve compression charges and prevent duplicate recovery after restart. Keep ambiguous mixed usage explicit instead of adding a potentially overlapping host total. - 支持直接读取 DSH 内置 pi-ai 登录的 Codex 额度,新增 `pi-ai` 数据源及自动回退;按实际窗口显示,兼容只有每周额度的账号。额度读取超时后释放等待状态,令牌更新后可重试恢复。 - 修复开发工具直接重载 `lib/index.js` 后未重新接入 billion-context 观察器、RPC 定义丢失的问题;保留冷启动时的提前观察器。卸载时取消 pi-ai 额度查询,不等待失去响应的请求。 - 修复今日消费与余额同行时的金额对齐:金额与余额首行对齐,Token 单独置于下方,覆盖标准、紧凑、摘要和简洁布局。 - 完成 [#379](https://github.com/Han-1413141/dsh-cost-meter/issues/379)、[#380](https://github.com/Han-1413141/dsh-cost-meter/issues/380) 的实际发布包兼容验证,更新 billion-context 0.1.204、dsh-codex-subscription 3.1.4 基线和持续集成。 - 合并 [@Oct1AtJoe](https://github.com/Oct1AtJoe) 的 [#381](https://github.com/Han-1413141/dsh-cost-meter/pull/381):过滤 Antigravity 占位项目 ID,补全 Gemini 模型额度;审查修正后逐模型保留额度和重置时间,取消查询后停止回退。 - Read Codex quota from native DSH pi-ai OAuth without an extra subscription plugin; bound requests and handle weekly-only accounts. Restore startup observers on direct host reload and align inline Today/Balance amounts. - 修复独立复现的 WorkBuddy 紧凑侧栏标题只占半行、余额无法靠右及被截断的问题,标题保持横跨整张卡片。[@SternChiri](https://github.com/SternChiri) 的 [#377](https://github.com/Han-1413141/dsh-cost-meter/issues/377) 反馈触发了排查;报告者随后撤回了原有“文字左对齐”定位,本修复依据实际浏览器中的标题宽度与余额位置验证。 - Keep the WorkBuddy heading across both compact sidebar columns so its balance reaches the card's right edge. [更新说明 / Release notes](docs/update-notes-1.9.27.md) ## [1.9.26] - 2026-10-21 - 修复 OpenDesign 的 5 小时与每周额度标签颠倒:按接口窗口时长识别,18,000 秒对应 5h,604,800 秒对应每周,额度百分比与重置时间保持配对。覆盖侧栏、设置页和输入区额度条。 - Fix reversed OpenDesign 5-hour and weekly quota labels by mapping each API duration to its matching window, preserving the usage percentage and reset time together across quota displays. [更新说明 / Release notes](docs/update-notes-1.9.26.md) ## [1.9.25] - 2026-10-21 - WorkBuddy 新增当前账号、全部账号和勾选账号统计,显示剩余积分及今日、近 7 天、启用以来观测到的积分减少;保留全部调用的 API 等值费用。 - 接入独立多账号接口,本地查询绕开全局网络代理;查询失败保留未知状态,旧接口保留单账号兼容,不把部分数据当作完整总额。 - 修复旧配置缺少新字段导致保存失败,以及旧宿主不支持新增侧栏字段时的兼容问题。已有价格、历史金额和非法值校验保持有效。 - 将峰谷与合并侧栏引导挂到页面顶层,保留非模态行为,修复被会话遮挡后无法点击的问题。 - 修复本轮费用强制显示至少 8 位小数的问题,金额遵循显示设置,单价保留精度;感谢 @mzjqwq 的 #374 报告。 - 感谢 @picklerick422(#371)、@hua0424(#372)和 @paperclip476-sys(#373)的报告、定位与复现,详细署名见更新说明。 - Add WorkBuddy account selection and observed credit changes, with explicit unknown/partial results and separate API-equivalent values. - Fix legacy configuration saves and sidebar update notices hidden behind the composer. Load subscription settings on demand. [更新说明 / Release notes](docs/update-notes-1.9.25.md) ## [1.9.24] - 2026-10-21 - WorkBuddy 积分新增兼容 `dsh-connect-workbuddy`,读取当前 DSH 的国内、国际版 usage 接口,显示已选账号的积分及最近到期时间;保留 `dsh-workbuddy-connect` 兼容。 - 跳过未登录或已关闭的区域,积分为零正常显示;登录被拒绝、账号选择失效或积分查询失败时显示错误,不误报为零,也不回退到其他账号的旧凭据。 - 国际渠道 `workbuddy-global` 沿用 WorkBuddy 套餐分类,升级时修正历史 API 归属,保留原金额、各币种记录、Token 和调用数。 - Read selected-account credits and nearest expiry from dsh-connect-workbuddy's CN/global usage routes while retaining dsh-workbuddy-connect support. - Skip signed-out or disabled regions, preserve valid zero balances, and report rejected credentials, lost selections or unavailable credits without stale credential fallback. - Classify workbuddy-global under the WorkBuddy Plan family and correct historical API attribution without changing recorded amounts, currencies, tokens or calls. [更新说明 / Release notes](docs/update-notes-1.9.24.md) ## [1.9.23] - 2026-10-21 - 智能体团队的主代理窗口自动汇总团队成员及其子代理的费用、Token 和调用明细,保留逐代理明细;父子会话仍分别入账,普通分叉会话不归并。 - 价格配置按宿主当前供应商和模型目录过滤,已删除的渠道、模型不再残留在待定价列表;历史费用、保存的价格和统计设置保留,目录读取失败时沿用原列表。 - 修复上下文洞察联动区固定显示 USD 的问题,跟随显示币种和当前显示汇率即时更新,并保留非缓存参考价说明。 - 感谢 [@Theicecold](https://github.com/Theicecold) 在 [issue #367](https://github.com/Han-1413141/dsh-cost-meter/issues/367) 报告币种不一致并建议统一显示。 - Include team members and their subagents in the lead's session costs, token totals and call details automatically, retaining per-agent records and separate ledger entries. Ordinary conversation forks stay separate. - Filter the pricing list against the host's current provider/model directory. Removed routes and models no longer remain in the unpriced list; keep historical costs, saved prices and preferences, and retain the previous list when directory metadata is unavailable. - Make the dsh-context integration follow the configured display currency and current display exchange rate, preserving the uncached reference-price explanation. [更新说明 / Release notes](docs/update-notes-1.9.23.md) ## [1.9.22] - 2026-10-20 - 修复 WorkBuddy 国际版 `workbuddy-ai` 未沿用套餐分类的问题。启用 WorkBuddy 积分查询或显式选择 Plan 后,国际版调用的等值金额不再计入 API 支出,服务端账本与界面统计保持一致。 - 升级启动时一次性修正历史日账本、单会话和模型明细中的 API 金额,保留原金额、各币种记录、历史价格、Token 和调用数。 - 自定义渠道的显式 plan/api 配置可正常保存并生效,模型级覆盖仍优先;DeepSeek 官方搜索和抓取请求费继续归 API。 - 费用明细优先显示包含子代理的完整汇总,再加载步骤图表;收起的逐次调用列表延后至展开时渲染,减少首次打开的等待。 - 感谢 [@pcs801](https://github.com/pcs801) 在 [issue #364](https://github.com/Han-1413141/dsh-cost-meter/issues/364) 提供复现数据、原因定位和修复建议。 - Recognize `workbuddy-ai` as a WorkBuddy route in server and client billing. When WorkBuddy credits querying is enabled or its classification is explicitly Plan, international calls no longer count toward API spend. - Correct historical daily, session and model API attribution once after upgrading, preserving recorded amounts in each currency, prices, tokens and calls. - Honor explicit custom-provider plan/api settings, with model overrides taking priority. Official DeepSeek search and fetch request fees remain API charges. - Prioritize full session totals before step-chart replay and defer collapsed call rows until expansion, reducing first-open latency. [更新说明 / Release notes](docs/update-notes-1.9.22.md) ## [1.9.21] - 2026-10-20 - 修复侧栏合并卡片、简洁卡片和模型费用等组件未跟随透明度设置的问题。开启“跟随皮肤透明度”后,侧栏卡片不再叠加独立底色,关闭后恢复原样。 - 覆盖标准、紧凑、简洁和合并四种布局,以及今日与余额同行、余额进度条和套餐卡片;弹窗继续保留至少 90% 不透明度。 - Fix sidebar cards that kept a solid background with Follow skin transparency enabled, including Combined, Simple and model-cost cards. Disabling the option restores the original surfaces. - Cover all four sidebar layouts, inline today/balance rows, balance progress and plan cards. Floating dialogs retain at least 90% opacity. ## [1.9.20] - 2026-10-20 - 修正 OpenDesign 的 5 小时与周额度对应关系,使用量百分比和重置时间跟随同一窗口对调,设置卡片、侧栏和额度横条使用统一结果。 - Correct the swapped OpenDesign 5-hour and weekly allowances. Keep each usage percentage paired with its reset time across settings, the sidebar and the quota strip. [更新说明](docs/update-notes-1.9.20.md) ## [1.9.19] - 2026-10-20 - 统一侧栏峰谷条、余额、今日用量、模型费用、预算、Coding Plan、Codex 与网关额度的内容边线;标题靠左,金额与比例靠右,模型卡片展开箭头移到标题后。 - 标准、紧凑、简洁和合并卡片沿用各自的留白,兼容“今日消费与余额同行”;长标题在窄侧栏内换行或省略,避免挤出金额。 - 显示设置顶部缩小留白,“使用示例数据”并入区域切换工具栏;透明度与 billion-context 兼容提醒移入右侧默认收起的“通用设置”。侧栏布局继续默认展开。 - 简洁卡片隐藏右侧滚动条和上下箭头,内容较多时仍可通过滚轮、触控和键盘滚动查看。 - Align sidebar content edges across peak indicators, balances, daily usage, model costs, budgets, Coding Plans, Codex and gateway quotas. Place the model disclosure arrow after its heading and keep amounts right-aligned. - Preserve spacing in Standard, Compact, Simple and Combined layouts, including the optional inline today/balance row. Keep long headings inside narrow sidebars. - Bring the Display preview closer to the tabs. Put example data in the preview toolbar and move transparency and compatibility notices into the collapsed General settings. Sidebar layout choices remain expanded by default. - Hide the Simple card scrollbar and its arrow buttons while preserving wheel, touch and keyboard scrolling. ## [1.9.18] - 2026-10-20 - WorkBuddy 积分优先读取连接插件的本地状态接口,兼容加密登录文件;移除“重新登录生成明文副本”的错误提示,同一条刷新错误只显示一次。已用真实加密登录文件验证查询值与上游一致。 - 更新公告改为非模态窗口,补齐皮肤兼容标记;被隐藏时不再让宿主进入 inert 状态。感谢 [@SherUnlocked-4869](https://github.com/SherUnlocked-4869) 在 [issue #355](https://github.com/Han-1413141/dsh-cost-meter/issues/355) 提供环境、A/B 复现和原因定位。 - Ollama Cloud 的 `deepseek-v4.1-flash:1017`、`deepseek-v4-pro:0813` 等快照与连续安全后缀可自动匹配,显式映射同样使用 Ollama 峰谷日历。冻结历史匹配策略,旧账本加载、回放和重启不自动改价;手动模型重算保留原汇率。感谢 [@LetterXbox](https://github.com/LetterXbox) 在 [issue #356](https://github.com/Han-1413141/dsh-cost-meter/issues/356) 提供复现、定位及历史保护要求。 - UI 设置增加“今日消费与余额同行”独立开关,保留现有布局、悬停详情和余额进度条。感谢 [@zhuwnq](https://github.com/zhuwnq) 在 [issue #359](https://github.com/Han-1413141/dsh-cost-meter/issues/359) 提出需求。 - 整合 [@LetterXbox](https://github.com/LetterXbox) 在 [PR #358](https://github.com/Han-1413141/dsh-cost-meter/pull/358) 提交的历史时间线恢复与升级测试,扩展自动匹配时继续保留原账单和策略切换时间。 [更新说明](docs/update-notes-1.9.18.md) ## [1.9.17] - 2026-10-20 - 主页侧栏恢复普通展示,移除六点拖动手柄、额外左侧留白和保存提示;拖动与方向键排序仅保留在“费用 → 显示”的预览中。 - 修复网关卡片拖动遗漏来源 ID 导致排序保存失败的问题;无效排序标识在提交前过滤,保存失败后仍可继续修改组件显示。 - “侧栏布局”默认展开,切换组件时保持用户的展开选择;四种布局缩略图在窄面板中排为两列。 - 合并卡片使用对称内边距和紧凑行高,统一简洁卡片的今日行背景;移除拖动造成的多余空间,三行卡片不再出现内部滚动条。 - `dsh-our-free-model` 免费计费选项改为同一行的开关与文字,说明缩短;仅该插件后续调用记为免费,Token、历史费用与其他渠道规则不变。 - 修复皮肤隐藏更新公告却留下模态锁定的问题:为公告补齐 dialog 语义与显示样式,无法显示时关闭模态,避免锁住整页。感谢 [@SherUnlocked-4869](https://github.com/SherUnlocked-4869) 在 [#355](https://github.com/Han-1413141/dsh-cost-meter/issues/355) 提供复现和定位。 - 纳入 [@LetterXbox](https://github.com/LetterXbox) 在 [PR #358](https://github.com/Han-1413141/dsh-cost-meter/pull/358) 提供的 Ollama Cloud 快照模型日历修复,问题来源 [#356](https://github.com/Han-1413141/dsh-cost-meter/issues/356)。带标签模型仍需已有价格或手动映射,历史金额保留原规则。 - Keep drag and keyboard reordering inside Display settings. The home sidebar no longer adds handles, padding or save-status nodes. - Preserve gateway source IDs when ordering cards; a failed save no longer blocks subsequent display changes. Sidebar layout choices start expanded. - Balance combined-card spacing, share the Simple card background with its Today row, and avoid an inner scrollbar for the three-row card. - Align the free-model checkbox with its label and shorten the explanation without changing billing behavior. - Keep update guides visible under skin dialog rules and close an invisible modal instead of blocking DSH (#355, reported and diagnosed by @SherUnlocked-4869). - Include @LetterXbox’s reviewed PR #358: configured Ollama Cloud snapshot models use its own calendar; historical prices are preserved and automatic price matching is unchanged. ## [1.9.16] - 2026-10-20 - 读取 DSH `web.searchProvider`/`web.fetchProvider`,在调用开始时保存所选提供方,并结合实际接口区分旧版 Messages 搜索与新版 Search/Fetch API。新版独立接口按成功请求每千次 ¥5 计费;旧版保留模型 Token 费用,已观察到的服务端成功搜索在北京时间 2026 年 11 月 1 日 00:00 前免请求费,此后按次收费。历史记录保持调用时的版本、单价与汇率。 - “今日”支持仅费用、仅 Token、同时显示;预览费用与 Token 子项各有独立虚线和开关,窄侧栏自动换行。 - 显示设置预览与实际主侧栏支持拖动排序和方向键移动;不同套餐卡片独立排序,Go 与预算分开显示。自动保存顺序,保存失败保留原顺序,隐藏再显示后仍恢复已保存的位置。[更新说明](docs/update-notes-1.9.16.md) - 新增“合并卡片”侧栏样式,将今日 Token 与费用、余额和峰谷进度放在同一张卡片中,提供一次性介绍与可选启用入口;原有布局、组件开关和拖动排序继续可用。 - 检测当前宿主已启用的 `dsh-our-free-model` 后,可在“价格 → 按模型设置”选择将其两个渠道之后的所有调用按零费用统计;保留真实 Token,不影响其他渠道和已保存的历史单价。 - 修复 Codex 显示开关只改变侧栏位置、没有启用额度查询的问题;查询开关可直接设置并保存,未开启时提供入口,页签统一对齐。感谢 [@forkhala](https://github.com/forkhala) 在 [issue #350](https://github.com/Han-1413141/dsh-cost-meter/issues/350) 提供重启和手改账本的对照复现。 - Go 悬浮详情同时显示 5 小时、周和月用量,以及三个窗口各自的重置时间;峰价浮层使用浏览器顶层显示和页面级后备挂载,限制低高度窗口中的弹窗高度。 - `billion-context` 兼容提醒的确认记录保存到账本;增加“不再弹出此提醒”及“费用 → 显示”设置开关,切换地址、重启及兼容状态往返变化后保留选择。 - 千问 CLI 的普通查询保留 15 秒超时,订阅兜底查询使用 60 秒,提示说明 CLI 响应耗时。感谢 [@forkhala](https://github.com/forkhala) 在 [issue #349](https://github.com/Han-1413141/dsh-cost-meter/issues/349) 提供计时与复现,感谢 [@orshih6](https://github.com/orshih6) 在 [PR #351](https://github.com/Han-1413141/dsh-cost-meter/pull/351) 提供分命令超时实现和回归测试。 ## [1.9.15] - 2026-10-19 - 新增默认关闭的“跟随皮肤透明度”:费用页复用设置窗口背景,统计正文共用弹窗背景;浮层保留至少 90% 不透明度。关闭后恢复现有遮挡效果。感谢 [@MuFeng262](https://github.com/MuFeng262) 在 [issue #345](https://github.com/Han-1413141/dsh-cost-meter/issues/345) 报告液态玻璃色块问题、定位强制 alpha 的原因并提出可选开关。 - 支持 Cline Pass 5 小时、周、月额度,汇总在一张卡片中;补齐前后端套餐名称识别,拒绝无效额度类型。感谢 [@kongxiangyiren](https://github.com/kongxiangyiren) 在 [PR #343](https://github.com/Han-1413141/dsh-cost-meter/pull/343) 提供实现和回归测试。[更新说明](docs/update-notes-1.9.15.md) ## [1.9.14] - 2026-10-19 - 支持 `@eddyskywalker/dsh-chatgpt-subscription` 的 Codex 额度:读取当前账号的实际 5 小时、周窗口及重置时间,复用侧栏和输入区额度条;点击刷新调用插件的额度刷新接口。 - 新增 `chatgpt` 数据源,自动检测依次尝试 `dsh-codex-subscription`、ChatGPT 订阅插件、`dsh-codex-connect`;固定来源失败时保留登录与重试提示。查询按需加载、合并并缓存,关闭显示后停止检查。[更新说明](docs/update-notes-1.9.14.md) ## [1.9.13] - 2026-10-19 - 新增 WorkBuddy 官方积分余额,读取本地登录文件,支持个人与企业账号;默认关闭。感谢 [@SternChiri](https://github.com/SternChiri) 在 [PR #341](https://github.com/Han-1413141/dsh-cost-meter/pull/341) 提供实现和测试,凭据与计费适配源自 [@corrinehu 的 dsh-workbuddy-connect](https://github.com/corrinehu/dsh-workbuddy-connect),已保留 MIT 许可。 - 新增会话列表行末金额,默认关闭,支持累计/今日、显示币种和金额精度,悬停查看 Token;可见行合并查询并缓存,收起侧栏时隐藏。感谢 [@2JumpSinA](https://github.com/2JumpSinA) 在 [#332](https://github.com/Han-1413141/dsh-cost-meter/issues/332) 提出需求与交互建议。 - CommandCode 根据当前账期用量和余额计算月额度使用率,辅助查询失败时保留余额。感谢 [@YQLiu-git](https://github.com/YQLiu-git) 在 [#334](https://github.com/Han-1413141/dsh-cost-meter/issues/334) 提供接口、样例与计算方法。 - 统计页和模型花费卡使用宿主模型目录中的可读名称,保留原始统计键。感谢 [@ArseneLupins](https://github.com/ArseneLupins) 在 [#335](https://github.com/Han-1413141/dsh-cost-meter/issues/335) 报告第三方模型名称问题。 - 修复本轮费用 RPC 丢失显示币种参数的问题。感谢 [@CelicaRTX](https://github.com/CelicaRTX) 在 [#338](https://github.com/Han-1413141/dsh-cost-meter/issues/338) 提供问题定位与修复建议。 - 合入 [PR #339](https://github.com/Han-1413141/dsh-cost-meter/pull/339) 的 Codex 额度进度条与重置时间显示;修复异步余额测试及 Windows 锁测试的等待方式。复核 [@weimingyu9312](https://github.com/weimingyu9312) 在 [#325](https://github.com/Han-1413141/dsh-cost-meter/issues/325) 报告的 OpenCode Go 401:现有认证处理通过回归,旧失败状态不会阻止更换凭据后重试。 - 感谢 [@LetterXbox](https://github.com/LetterXbox) 在 [#337](https://github.com/Han-1413141/dsh-cost-meter/issues/337) 提供 Ollama Cloud 问题复现,并在 [PR #336](https://github.com/Han-1413141/dsh-cost-meter/pull/336) 提交日历修复、历史兼容与测试。 - 修复 Ollama Cloud 的 DeepSeek V4.1 Flash / V4 Pro 套用 DeepSeek 官方峰谷时段与中国法定假日规则的问题:改按 Ollama 自己的日历计费(周一至周五 12:00–18:00 UTC 为峰时,其余时段与 UTC 周末为谷价,无假日规则)。此前 DeepSeek 工作日 01:00–04:00、06:00–10:00 UTC 按双倍入账,工作日 12:00–18:00 UTC 只记一半,其余时段金额正确。 - 宿主计费、日志重算与会话投影使用同一规则;单价、缓存价、汇率、价格历史及其他渠道不变。历史价格版本保留各自的时段规则:更新前的调用在加载、回放与明细中保持原金额,仅在「历史费用」按渠道模型手动重算时改用新日历(沿用原汇率)。峰谷状态指示与提醒仍只显示 DeepSeek 官方时段。构建时 CSS 词组打包改为按实测节省逐轮选择,样式内容不变。[更新说明](docs/update-notes-1.9.13.md) ## [1.9.12] - 2026-10-19 - 恢复左侧预览、右侧调整,根据设置面板自身宽度适配;缩短显示开关、成组排列相关选项,金额与语言收在右侧折叠区,预览画布内部滚动。 - 隐藏组件和关闭的内部子项保留淡灰预览,覆盖余额条、预算明细、Go 时段、模型 Token/占比及峰谷时间;点击侧栏子项定位对应设置,不保存示例配置或启动查询。 - 输入区补齐真实的最高花费模型摘要与独立额度胶囊;侧栏和输入区模型显示开关独立。 - 放大预览关闭按钮扩大到 40 × 40 像素,小屏为 44 × 44,避开窗口拖动区域并在内容滚动时固定可见;四角、中央和外侧鼠标点击回归通过。[更新说明](docs/update-notes-1.9.12.md) ## [1.9.11] - 2026-10-19 - 显示设置中每个组件统一使用右侧“显示此组件”开关,移除预览上方重复勾选项;组件选项的开关统一靠右,侧栏布局按需展开,窄窗口自动上下排列。 - 今日费用与模型花费收起摘要的金额、模型数靠右显示,覆盖标准、紧凑和简洁布局;单独开启输入区额度条不再顺带显示其他条。 - 官方 Flash 别名统一显示为 DeepSeek V4.1 Flash,涵盖本轮、原生搜索、逐次调用和统计图表;保留原始调用 ID、价格匹配及历史金额。 - 针对 GitHub Actions 机器人报告的 [#329](https://github.com/Han-1413141/dsh-cost-meter/issues/329) 与 [#330](https://github.com/Han-1413141/dsh-cost-meter/issues/330),使用实际 npm 发布包验证 billion-context 0.1.201 的直连与原生回退,以及 dsh-codex-subscription 3.1.1 的额度解析、RPC 和失败回退;更新监控基线及 CI 覆盖,不需要额外兼容包。[更新说明](docs/update-notes-1.9.11.md) ## [1.9.10] - 2026-10-19 - 费用明细单次计算复用模型查价、计费分类和每次调用的汇率结果;历史价格版本与覆盖配置分别匹配。4,800 次调用、两层嵌套子代理、冷缓存及浏览器 4 倍 CPU 限速下,费用合计首次显示从 4.53 秒降至 835 ms,调用数和金额一致。 - 修复午夜黑皮肤下模型花费“今日”选中按钮不清晰、显示设置原生下拉菜单白底白字的问题;仅调整费用插件的控件,其他插件的下拉菜单不受影响。感谢 [@transmerger](https://github.com/transmerger) 在 [#258 的最新反馈](https://github.com/Han-1413141/dsh-cost-meter/issues/258#issuecomment-6259570677) 提供两处截图。 - Windows 无锁竞争时直接记录 Node 启动时间,不再同步启动 PowerShell;仅在竞争旧版原生锁或查询其他进程时读取原生身份,并缓存结果。 - 毫秒身份改用 v2 锁元数据,旧版保留仍在使用的新版锁,避免把毫秒当作 Windows ticks 导致两个进程同时进入账本写入。 - 统一毫秒与原生 ticks 的比较,回收 PID 复用后的旧锁;原生身份继续精确比较,未知身份、探测失败与时间误差范围内的锁继续保留。账本文件格式和金额不变。 - 增加冻结 v1.9.9 读写器、真实 Windows 新旧进程互斥、近期文件时间的 PID 复用、死亡进程及启动零 PowerShell 调用回归。感谢 [@Oct1AtJoe](https://github.com/Oct1AtJoe) 在 [PR #327](https://github.com/Han-1413141/dsh-cost-meter/pull/327) 提供性能定位和原始优化实现。[更新说明](docs/update-notes-1.9.10.md) ## [1.9.9] - 2026-10-19 - 修复 OpenCode Go 登录态自动读取未遵循 `OPENCODE_AUTH_CONTENT`、`XDG_DATA_HOME` 的问题,避免误读旧登录文件;保持费用插件专用 Key 与模型路由凭据的既有优先级。 - 兼容专用凭据、模型路由和登录态中带 `Bearer` 前缀的 Key,避免重复拼接认证头导致 401;无效的整段请求头不发往接口。 - HTTP 401 明确显示认证失败,不再判断成无订阅;只有明确的 `EntitlementError` 403 才显示工作区无 Go 权限,其他拒绝单独提示。修正凭据后可立即刷新。 - 增加单独保存、自动读取、轮换、清除、登录态覆盖、401/403、错误缓存与脱敏回归。感谢 [@weimingyu9312](https://github.com/weimingyu9312) 在 [#325](https://github.com/Han-1413141/dsh-cost-meter/issues/325) 报告刷新额度出现 401。[更新说明](docs/update-notes-1.9.9.md) ## [1.9.8] - 2026-10-19 - 修复峰谷提醒在 Deep Whale 等皮肤中被页面内容压住、继承鼠标禁用或窗口拖动属性而无法点击的问题;提醒使用浏览器最上层浮层,保持不透明主题背景,居中与右下角位置均可关闭。 - 修复悬浮挂件在 document 捕获阶段按图像坐标拦截鼠标,导致侧栏引导按钮虽在最上层仍点不动的问题;在费用插件自己的引导范围内提前处理关闭及布局选择,不改动第三方插件代码。 - 保留从引导外部开始的拖动与页面其他操作,避免关闭兼容影响挂件的释放事件;选择按钮只提交一次,触屏关闭继续可用。 - 使用实际发布的 Wallpaper Engine、鲸鱼挂件、Archive Manager、Mnemon、Free Search 和 dshmarket 前端组合验证,并用不透明角色图重叠按钮复现问题。[验证范围与更新说明](docs/update-notes-1.9.8.md) ## [1.9.7] - 2026-10-18 - 修复“试试更轻巧的侧栏”提示的关闭按钮进入桌面端标题栏区域的问题;按照 DSH 的浮层位置变量定位,窗口变窄时继续避开标题栏,全屏和网页端按实际空间回退。 - 侧栏引导使用非模态浏览器浮层,避免皮肤或布局插件的容器变换、裁切、鼠标事件设置和普通高层级元素遮挡关闭按钮;保留主题色并使用不透明背景。 - 同一页面重复挂载引导时,一次关闭同步隐藏所有实例;关闭不等待设置保存,保存失败、等待中或本地存储不可用时也能关闭。 - 增加已构建客户端的真实浏览器回归,覆盖三种皮肤、五种窗口环境、按钮边缘点击、刷新、重复挂载、键盘关闭与旧浏览器回退。[更新说明](docs/update-notes-1.9.7.md) ## [1.9.6] - 2026-10-18 - 修复官方余额关闭显示后,被“已关闭”缓存阻挡,重新开启必须等待刷新间隔或重启的问题;恢复显示立即查询并返回结果,切换侧栏/设置页位置继续复用有效缓存。 - CLIProxyAPI 来源卡片补齐“允许非回环 HTTP”和带主机、端口说明的凭据白名单;每个来源分别设置,不向其他来源继承。感谢 @snhun 在 [#321](https://github.com/Han-1413141/dsh-cost-meter/issues/321) 的问题报告与配置建议。 - 输入框上方额度组件使用透明背景,与所在页面背景一致,保留文字与进度条颜色。 - 使用已构建客户端、生产宿主服务及本机局域网 HTTP 服务验证关闭/退出/重新进入/恢复显示,以及来源配置、查询、权限隔离和深色背景。[更新说明](docs/update-notes-1.9.6.md) ## [1.9.5] - 2026-10-18 - Codex 额度启用后保留侧栏入口,查询失败显示登录与点击重试提示,不再静默隐藏;成功后恢复真实额度。 - Codex 改为简洁的剩余额度文字卡,例如“周额度 · 剩余 83% · 10/25 08:10 重置”;会话额度条也明确标注“剩余”,不再单独显示含义不清的百分比。 - 输入区的组件列表补齐 Codex 额度,并提供独立显示开关;关闭输入区额度条不影响侧栏,两个位置都隐藏时停止额度查询。 - 实际显示和预览都按接口返回的窗口展示;只返回周额度的账户不补造 5h,没有账号数据时默认只预览周额度,多窗口明确标注周期。 - 增加按需恢复检查:成功数据缓存五分钟,失败一分钟后重试,手动刷新立即查询;关闭显示后清理检查定时器。 - 修复当前数据预览读取旧 Codex 快照的问题;示例与当前数据预览仍不查询真实账户。 - 增加 GitHub Actions 每日监控 billion-context、dsh-codex-subscription、dsh-codex-connect 的 npm 版本、导出入口、宿主依赖与接入函数指纹。变化或检查失败时由机器人创建或更新对应 issue,相同结果不重复通知。 - 使用已构建客户端与真实 DSH Connection RPC 验证登录后恢复、双窗口显示、手动刷新及关闭清理。[更新说明](docs/update-notes-1.9.5.md) ## [1.9.4] - 2026-10-18 - 模型定价改为固定顺序的紧凑列表,输入、缓存、输出单价对齐显示,编辑内容按需展开;切换自定义价格不再跨分组移动模型。 - 切换自定义后定位到编辑区开头并聚焦首个价格输入框,自动保存和普通编辑保持滚动位置与焦点。 - 峰谷时段新增时间进度条、倒计时和切换时间选项,保留细条与分段样式;首次介绍可关闭或保留原样,预览不发起账户查询或模型请求。 - Codex 设置页签与兼容提示跟随宿主中的实际启用状态;仅安装但未启用、依赖未就绪、停用或卸载时隐藏,并从 Codex 页返回概览。 - 每个模型可独立设置是否计入今日费用、月度与累计费用、预算。原始调用、金额和计价记录保留,重新勾选即可恢复统计。 - 合并显示页中重复的开关与位置选项,移除模型花费的重复启用项、重复自动保存说明,以及入口开关下不相关的会话摘要设置;模型定价卡片缩小间距。 - 显示页直接提供预算、今日用量、峰谷时段和模型花费四个开关,不必进入组件的二级设置;今日用量行与模型花费摘要各自控制。 - 侧栏预算、今日用量与峰谷时段独立显示,修复只开启峰谷、套餐、自定义余额或网关额度时侧栏未挂载的问题;隐藏侧栏今日用量不再连带隐藏概览今日卡片。 - 套餐显示开关与位置统一放入显示面板,支持选择对应账户;凭据与查询参数保留在额度页,可直接跳转、展开并定位到账户。 - 修复 OpenDesign Control Key 无法从凭据编辑器保存的问题,并补齐旧配置迁移。感谢 @unifilitence 在 [#317](https://github.com/Han-1413141/dsh-cost-meter/issues/317) 的问题报告与根因定位。 - OpenDesign 整体修正:`VELA_CONTROL_KEY` 别名与环境变量正确显示凭据状态;额度/钱包部分失败的原因在卡片及提示中显示;无生效套餐时仍保留经过校验的 preflight 余额,成员身份不一致时拒绝混用。补充保存、读取、清除、工作区/密钥切换、凭据库与查询链路验证。 - 修复 Codex 数据源切换时复用旧请求、显示旧来源额度的问题;订阅查询沿用宿主 Connection RPC,支持自定义连接传输。 - **Codex 额度双窗口与可配置数据源**:Codex 额度卡片、输入框横条与窄栏现在同时读取 `dsh-codex-subscription` 的 5 小时(18000s)和 7 天(604800s)窗口;新增 `codexQuotaSource`(`auto` / `subscription` / `connect`),`auto` 优先订阅插件的 `/api/codex-subscription/usage`,读取失败时回退既有的 `dsh-codex-connect` 周额度路由,显式选择则只读对应来源。保留仅提供周窗口的旧路由兼容,不影响 Plan/API 计费归类。 - 本版包含本地 `1.9.4-preview.6` 的预览改动。感谢 @lewispumpkin 在 [PR #316](https://github.com/Han-1413141/dsh-cost-meter/pull/316) 的 Codex 额度接入贡献。[更新说明](docs/update-notes-1.9.4.md) ## [1.9.3] - 2026-10-18 - 费用概览卡片去掉说明文字底部的多余边距;计费统计先显示标题和数据,计费兼容说明及 dsh-context 设置合并为默认折叠的一行。 - 修复 Codex 标签页加载后未渲染组件的问题;复用按需页面加载、预加载缓存和失败重试,恢复订阅兼容信息与历史归类入口。 - Codex 兼容提示的 ×、Esc 与“保持现状”立即关闭,不再等待接口;请求中、接口失败或浏览器存储不可用时仍可关闭,关闭状态在本地保存。设置页显示归类失败信息并防止重复提交。 - 热更新保留旧宿主接口清单时,补齐缺失的 Codex 历史归类与关闭接口,修复 HTTP 404;归类结果直接返回本地快照,不等待远程额度刷新。 ## [1.9.2] - 2026-10-18 - OpenDesign 直接查询接受 Control Key 的 `/billing/preflight`,省去先失败的请求;保留钱包独立查询和身份校验,补充只使用 DSH API 时的配置说明。感谢 @playgithub、@codeforker654、@yunjuanhuakai 在 [#274](https://github.com/Han-1413141/dsh-cost-meter/issues/274) 的需求、复现与端点定位,以及 @unifilitence 在 [#313](https://github.com/Han-1413141/dsh-cost-meter/issues/313) 的独立验证。 - 自定义余额支持跟随宿主随机端口的相对路径、端口改变后的缓存失效,以及显式允许的局域网 HTTP;新增 WorkBuddy2API 活跃账号池积分预设。感谢 @Jav1es 的 [#311](https://github.com/Han-1413141/dsh-cost-meter/issues/311),以及 @snhun 的 [#309](https://github.com/Han-1413141/dsh-cost-meter/issues/309) / [#310](https://github.com/Han-1413141/dsh-cost-meter/issues/310)。[配置说明](docs/custom-balance-sources.md) - 修复皮肤背景透明度导致费用页面和浮层透出后方内容,132 个浏览器场景通过。 - 缓存宿主语言探测结果并随事件失效,处理设置描述事件重入;同条件隔离基准中,每轮 2,000 次费用读取从 1,719.58 ms 降至 40.19 ms。感谢 @XHPAN 的 [#312](https://github.com/Han-1413141/dsh-cost-meter/issues/312)。CSS 无损压缩后主客户端为 260,671 字节。[测量方法与原始数据](docs/performance-2026-10-18.md) - 发布同步:v1.9.1 未单独发布到 npm,其记账、落盘、渲染与设置比较优化一并包含在本版;最终皮肤处理以本版说明为准。[完整更新说明](docs/update-notes-1.9.2.md) ## [1.9.1] - 2026-10-18 - 修复皮肤类插件把主题别名(`--dsw-alias-bg-*`)调成半透明后,插件浮层与弹窗透出后方页面内容的问题:主包统计明细弹窗、额度引导、峰谷提醒与精简底栏,统计页费用明细弹窗、上下文费用开关引导与 billion-context 提示,定价页模型/价格组合浮层,统一改为「本地不透明基底(浅色 `#fff` / 深色 `#151517`)+ 皮肤色渐变叠层」合成——保留皮肤色调,半透明皮肤下不再透出内容,默认主题与不透明皮肤视觉完全不变。新增 `test/skin-occlusion-static.mjs`(源码规则 + 构建产物标记双重断言)并在真实浏览器回归中模拟 Dream Skin 半透明场景。详见[更新说明](docs/update-notes-1.9.1.md)。 - 记账性能:不再每笔用量入账都重建整张价格历史快照(原占单笔记账耗时 99.8%),改为在落盘合并的锁内一次性推进;1000 笔连续记账 1308ms → 93ms,短窗口(1/5/20/50 笔)约 -26% / -43% / -62%。 - 落盘性能:`mergeLedger` 不再无条件做 3 次全账本深拷贝(本地快照自有对象时跳过、磁盘快照与基线相同时复用),普通 flush 约 40ms → 30ms;合并后的内存/磁盘账本内容与语义哈希(`30f37c10373d0a50`)和原实现完全一致。 - 渲染与设置页性能:统计页渲染缓存键改用 `pricesRev`,不再每帧序列化整张价格表(178KB,2.55ms → 0.015ms,约 170 倍;旧宿主自动回退);设置页自动保存的逐键差异比较增加引用短路,未变化项不再序列化。 - 测试:新增皮肤遮挡静态断言与真实浏览器 Dream Skin 回归(`test/statistics-dialog-titlebar.mjs` 229 条断言、`test/session-costs-browser.mjs` 含不透明合成断言),全量 `node test/verify.mjs` 通过;无配置或账本格式变化,升级无需迁移。 ## [1.9.0] - 2026-10-18 - 新增 **Codex 订阅插件兼容**(`dsh-codex-subscription`):启动时从 Profile 的 `node_modules` 检测插件,把其产生的 Codex 订阅调用归为 Plan 订阅额度,不再计入 API 按量花费;首次检测到该插件时弹出一次性「兼容修复」提示,可关闭并永久记住选择,也可随时在「设置 → 费用 → Codex」重新操作;历史 Codex 计费仅在用户确认后重算(`apiCost` 归零、Plan 等值保留,幂等)。显式 plan/api 配置不被覆盖。详见[更新说明](docs/update-notes-1.9.0.md)。 - 新增 **ChatGPT 订阅插件兼容**(`@eddyskywalker/dsh-chatgpt-subscription`):识别九条订阅线路 `codex-chatgpt` / `kimi-code` / `command-code` / `workbuddy-subscription` / `claude-subscription` / `minimax-code` / `antigravity` / `glm-coding-plan` / `step-code`,映射到 Codex / Kimi / CommandCode / WorkBuddy / Anthropic / MiniMax / Antigravity / Z.AI / StepFun,并在 `plan-billing` 新增 `workbuddy`、`antigravity`、`stepfun` 三个 Plan 厂商;启动时把分类仍为「自动」的对应厂商归为 Plan,不覆盖用户显式选择。 - 新增 **better-session SQLite 会话存储兼容**(`@morlay/better-session` / `@morlay/session-rdb`):新增会话存储适配层,自动探测宿主会话后端;当 better-session 接管会话存储、不再产生 JSONL 日志时,历史回填、旧账本导入、按模型历史重定价、小时桶修复、fork 种子清洗、逐会话费用/轨迹/调用详情/标题与统计缓存仍可正常工作。JSONL 路径逐字节不变;RDB 模式走宿主 `sessionPersistence`/`sessionQuery` 接口,不直接读 SQLite 文件,也不自动合并旧 JSONL 与 RDB 历史。修正 5 个一次性迁移标记在 RDB 空扫描时被误消费的问题;启动日志打印会话存储后端,会话修复 CLI 检测到 RDB 时明确提示不支持并以退出码 2 结束。详见[兼容说明](docs/better-session.md)。 - 全部费用界面适配 **dsh-pocket 手机端**:主设置面板、侧栏卡片、额度横条、预算框、统计页、显示设置、定价页、OpenRouter 与社区面板、Codex 兼容面板在 `≤1023px` 窄屏与 `body[data-dsh-pocket-layout="mobile"]` 移动布局下单列排列、标签横向滚动、按钮/标签 36px 触控高度、对话框不超过 90vh 并避开安全区、宽表横向滚动;桌面布局不变。 - 修复 [@playgithub 反馈的 #274](https://github.com/Han-1413141/dsh-cost-meter/issues/274#issuecomment-6215322540) OpenDesign 额度查询:按 [@codeforker654 的 401 复现报告](https://github.com/Han-1413141/dsh-cost-meter/issues/274#issuecomment-6236228870) 与 [@yunjuanhuakai 的端点实测](https://github.com/Han-1413141/dsh-cost-meter/issues/274#issuecomment-6236591566),Control Key 以 Bearer 调用主端点返回 401/403 时,保守回退一次 `/billing/preflight`(同 Bearer + `x-vela-workspace-id`、不发送 Cookie,仅回退一次;主端点其它失败不回退),恢复窗口查询。解析器支持解包 preflight 的 `codingPlan`,`balanceUsd` 仅在钱包接口不可读时兜底显示。 - OpenDesign 窗口与钱包读取完全独立并行:单侧失败只降级该部分(窗口失败 → 仅显示钱包余额并标记 partial;钱包失败 → 保留窗口),两者都失败才报错;错误区分鉴权失败 / 无生效订阅 / 响应无效 / 网络失败,提示不再混同。文档补充端点权限、Control Key 适用范围、`workspaceId` 必须取 `GET /api/v1/workspaces` 的 `items[].workspaceId`(误用用户 id 会 403)以及 401 排查步骤,见[OpenDesign 计费与排查](docs/opendesign-billing.md)。 - 测试:新增 Codex / ChatGPT 订阅插件兼容、OpenDesign preflight 与窗口/钱包独立降级、会话存储适配层与 RDB 读取路径、手机端静态适配等 fixture;全量 `node test/verify.mjs` 通过。账本格式、价格规则与历史金额口径不变;除用户主动确认的历史 Codex 归类外不自动重算历史金额。 ## [1.8.36] - 2026-10-17 - 修复 [@uahoi 报告并定位的 #302](https://github.com/Han-1413141/dsh-cost-meter/issues/302):赠送余额「部分」减少(到期/回收)且充值余额未变、本地官方渠道费用远低于该减量时,不再把整块失效金额误报为消费对账偏差;改为重置对账基准并给出一次性「更可能是赠送余额到期/回收」的说明。#89 的赠送余额归零重置行为保留,本地费用能解释减量 1/4 以上时仍按真实 drift 提示。 - 修复 [@ZIye1208 报告并定位的 #300](https://github.com/Han-1413141/dsh-cost-meter/issues/300):从 1.8.26 升级到 1.8.35 后,升级前产生的老会话费用显示 ¥0 而 Token 正常。加载时为旧账本回填的冻结汇率金额只在内存中,首次三方合并按磁盘副本把它们当成陈旧数据丢弃;现在合并基线按磁盘实际字段对齐,未落盘的冻结金额作为本地值保留并继续累加,跨进程合并与重复落盘均不丢失、不重复。 - 客户端在冻结金额缺失或为 0 而 USD 金额非 0 时回退到 USD 原值 × 当前汇率(含含 Plan 总额、会话徽章与分渠道明细);会话与统计聚合不再把缺失的冻结字段补成有限的 0。USD 计费数据未受影响,不自动重算历史金额。 - 修复 [@XHPAN 报告并定位的 #297](https://github.com/Han-1413141/dsh-cost-meter/issues/297):历史价表无损差分保存,每 24 层保留完整快照;旧账本自动转换前原样备份,所有时间点、历史金额与重算记录保留。另提供离线转换命令。 - 账本合并共享不可变历史价表,跨进程用量更新复用已验证版本;自己的落盘不再触发下一轮重复读盘与深拷贝。普通写入遇锁保留待提交记录,交由定时器重试,不同步等待。详见[存储与迁移说明](docs/pricing-history-storage.md)。 - 修复 [@playgithub 反馈的 #274](https://github.com/Han-1413141/dsh-cost-meter/issues/274#issuecomment-6215322540):后台旧查询不能再覆盖刚保存的 OpenDesign 开关、工作区及其他费用配置;保存期间暂停重复读取,保存失败后恢复轮询。 - 最低兼容要求从 DSH 0.1.x 提升到 **0.2.0**,适配目标为 npm `next` 标签的 `0.2.1-rc.2`:`package.json` 新增 `engines.dsh` 准入闸门(0.2.1 起的宿主按它判定,`0.2.0-rc.x` 仍按收紧后的 peer 判定),`dsh.compatibility.dsh` / `dshhub.compatibility.dsh` / `dsh.compatibility.dshReleases` 同步收紧并只保留 0.2.x 逐版本记录,两个宿主 peer 去掉全部 0.1.x 备选(旧范围里的 `^0.1.5-0` 会放行 `0.1.5-alpha.1`;该组合历史上通过安装与启动检查,本轮起不再支持),开发回归依赖升到 `0.2.1-rc.1` 并同步锁文件与供应链排除表。**DSH 0.1.x 不再支持。** 字段取值、范围写法、peer 第二段的保留理由与两套 semver 语义的差异见[兼容性说明](docs/dsh-0.2.1-compatibility.md)。 - 文档口径统一:双语 README 与[宿主兼容验证](docs/host-compatibility.md)改为「最低 DSH 0.2.0、目标 0.2.1-rc.2、0.1.x 不再支持」,并补上 0.2.1-rc.1 / 0.2.1-rc.2 的实测记录;alpha.5 专题改写为 [最低 0.2.0 / 目标 0.2.1-rc.2 兼容性说明](docs/dsh-0.2.1-compatibility.md),`package.json` 的 `files` 清单同步。 - 补充 DSH `0.2.1-rc.2`(当前 npm `next`)真机覆盖:next-host 夹具升到 rc.2,`dsh.compatibility.dshReleases` 增加 `0.2.1-rc.2: compatible`;按真实 rc.2 宿主复核准入判定、依赖闭包与运行时导入面,并与 rc.1 逐项对比。同时修正兼容性说明中关于旧版宿主下限的表述、`0.1.5-alpha.1` 的历史状态描述,以及 1.8.35 更新说明的验证链接。 - 文档:说明 DSH 0.2.1-rc.x 宿主内置 pnpm 11.28.5 的 24 小时 `minimumReleaseAge` 策略导致的安装/卸载失败(`ERR_PNPM_RESOLUTION_POLICY_VIOLATIONS_UNHANDLED`,与 [#250](https://github.com/Han-1413141/dsh-cost-meter/issues/250) 同族日志),给出等待 24 小时、Profile 精确排除、CLI 透传 `--config.minimum-release-age=0` 等绕行方案。见[pnpm 供应链策略](docs/pnpm-supply-chain-policy.md)。 ## [1.8.35] - 2026-10-16 - 适配 DeepSeek 独立 Search/Fetch API:只对 HTTP 200 且有结果的请求按 ¥0.005/次入账,分别显示次数与单价,复用账本、预算及历史汇率;请求去重,不把次数混进 Token,不套用模型倍率、峰谷价或订阅计费。 - 网页抓取从网页搜索中独立分类,更新用途图、代理归属及步骤筛选;本地 HTTP 抓取不添加官方次数费,内置搜索免费期不猜测结束日期。详见[计费范围](docs/web-request-fees.md)。 - 适配新宿主的旧会话离线修复命令:存储类不再公开导出时,通过官方插件在空临时目录加载,只取得宿主独占锁;不在初始化时扫描或迁移用户日志,保留写入前备份及旧宿主路径。 - 验证现有 v1.8.34 可在 DSH 0.2.1-alpha.5 中安装、启动和计费,计费代码不变;补充该版本的兼容性标记与标准 npm 语义下的 0.2.1 预发布 peer 范围。 - 新宿主自动回归从 0.2.0-rc.1 更新至 0.2.1-alpha.5,保留既有旧宿主检查;覆盖真实安装、RPC 热加载、原生搜索和上下文校准联动。 - 测试环境为新网关加载实际 RemoteAccess 服务并显式提供调用方身份,兼容旧网关的原有调用方式;不修改生产权限策略。 ## [1.8.34] - 2026-10-16 - 修复 [1349422030 报告的 #293](https://github.com/Han-1413141/dsh-cost-meter/issues/293):上下文费用优先采用宿主 `contextPressure` 校准总量,与 dsh-context 标题及输入区占用环一致;无校准时保留旧宿主回退。 - 组成按校准总量等比例估算,长上下文费率采用同一总量;标明单次非缓存输入参考金额与会话累计费用的区别,实际调用与历史费用不变。 - 上下文占用单独变化时也刷新联动,保留不可见区域暂停查询、生成及摘要期间暂缓测量。 ## [1.8.33] - 2026-10-16 - 修复 [ztszzz733 报告并定位的 #292](https://github.com/Han-1413141/dsh-cost-meter/issues/292):移除 V4 Pro 错套 Flash 价的规则,恢复官方独立 CNY/USD 峰谷价格;只升级可识别的旧错误模板,保留手动价格、倍率与第三方渠道价。 - 官方同步尊重页面实际报价,补齐旧 Flash 名称,并修正英文价格页地址;不再由内置迁移覆盖刚解析的官方价。 - 新增按渠道+模型重算历史费用,复用可搜索选择框、明确确认与完整备份;只扫描有关会话,保留其他模型、Token 和原调用汇率,日志不完整的记录不改。 - 重算记录保存范围与对应币种金额,各模型的价格修订独立持久化,重启后统计与明细一致。升级不自动重算原金额。[操作说明](docs/model-history-repricing.md) ## [1.8.32] - 2026-10-16 - 新增 [Token Rhythm 可用余额](docs/tokenrhythm-balance.md):额度页专用入口,使用官网网站登录 Cookie,只读查询当前钱包接口的 `availableBalanceCny`,按人民币显示。 - 复用余额卡片、缓存、请求合并、取消及 DSH 只写凭据库;支持显示位置、刷新间隔、手动刷新和环境变量 `TOKENRHYTHM_COOKIE`。 - 固定官方域名与 GET 请求,仅发送 `tr_session`,拒绝重定向,响应限制 256 KiB;真实零余额正常显示,缺失金额和登录失效不伪造余额。 - 感谢 [ykoneee](https://github.com/ykoneee) 在 [#290](https://github.com/Han-1413141/dsh-cost-meter/issues/290) 提出需求并提供参考,感谢 [162568316/dsh-tokenrhythm-bill](https://github.com/162568316/dsh-tokenrhythm-bill) 提供认证与字段参考。 ## [1.8.31] - 2026-10-16 - 接入 [Oct1AtJoe 的 PR #288](https://github.com/Han-1413141/dsh-cost-meter/pull/288):Antigravity 额度优先查询生产端点,daily 与 sandbox 保留回退;修复备用端点成功后仍解析首个空响应槽位的问题,保留 Gemini 筛选及原有凭据处理。 - 接入 [UNscientific-9 的 PR #287](https://github.com/Han-1413141/dsh-cost-meter/pull/287):价格模型搜索与选择合为单框,支持键盘和输入法,候选浮层沿用宿主主题并避开滚动裁剪。 - 修复该选择器搜索新模型后 Enter 仍选择旧值的问题;先定位并限制面板高度,再把末尾已选项滚入视野,搜索词改变时同步滚动。保留当前自定义价格、倍率和设置预览。 - 价格表展开图标统一为 SVG 箭头,展开时旋转;OpenRouter 面板重开时立即恢复上次价格、搜索、排序和页码,一分钟内复用快照,刷新失败保留旧表,关闭重开共用进行中的请求。 - 概览按可见数量等宽排列:显示今日费用时三张卡片同排,隐藏时两张平分;窄窗口统一纵向排列,避免“2+1”留白。 - 价格设置拆为模型定价、参考价格表、同步与规则三个分区;默认显示常用的渠道模型定价,按需挂载其他分区。 - 模型先显示当前单价摘要,展开后以四个来源按钮切换自动、价格表、自定义、本地计价,只挂载对应控件;搜索复用已匹配结果,准备价格表选择时不改配置。 - 参考价格表改为可搜索、可按厂商筛选的列表,逐行展开编辑;统一输入、缓存读写、输出顺序,窄窗口使用带标签的输入区。 - 模型按卡片显示渠道、完整模型名、价格来源与匹配状态,加入已用模型搜索;首屏限制 24 个,搜索覆盖完整列表,可展开更多。 - 自定义价格使用完整宽度,币种、单价与倍率分组,实际价格分项显示;长名称换行,窄窗口调整列数,深浅色跟随 DSH 主题。 - 保留原有配置、倍率输入、价格匹配和历史计费规则;搜索及分区切换不保存配置,不触发历史重算。 ## [1.8.30] - 2026-10-16 - 模型映射下拉新增“自定义价格(此渠道模型)”,按渠道+模型分别保存 USD/CNY 单价;自动匹配、价格表映射和自定义之间可切换,已填写价格保留。复用原倍率输入组件和计费逻辑,支持统一与独立倍率、实际单价预览。 - 补充 StepFun 全球站 5 个 Token 计费模型的官方美元价格及来源日期;保留既有自定义条目,历史费用不变。 - 自定义单价支持直接输入 `2 × 0.8`(也支持 `*`、`x`),保留原单价并显示倍率。默认修改同一模型全部价格的倍率,勾选“分别设置倍率”后可独立调整;取消勾选恢复统一倍率。 - 倍率覆盖基础、峰谷、缓存与长上下文单价,保存时检查无效输入和数值溢出。官方 DeepSeek 价格同步保留倍率,历史调用继续使用当时保存的价格版本。 - 余额、套餐额度和峰谷提示改用宿主页面浮层,避免被其他插件的面板遮挡;保留悬停关闭和点击刷新。隐藏今日费用后,概览卡片按实际数量铺满可用宽度。 - #284:会话费用刷新改为依赖实际用量数值,修复投影每次返回新对象时“回读 → 渲染 → 再回读”的请求循环。页面隐藏时暂停,重新可见后刷新。 - 费用徽章只读取汇总,不再触发完整明细预计算;明细入口保留悬停、键盘聚焦预加载及已有缓存,打开页面后再计算缺失内容。 - 启动只恢复近期会话的轻量元数据,不扫描旧明细;只有实际查看的会话接收后台更新,关闭后 90 秒停止该后台工作。 - 上下文联动已挂载后不再随内部 DOM 更新反复查找卡片;提示弹窗打开后停止等待轮询,隐藏页面暂停等待。 - 刷新提示动画限定为两次,避免长时间查询时持续合成。 - 感谢 @KezhiAdore 在 #284 提供 macOS 开关对照、CPU/GPU 数据和代码线索。本地浏览器回归复现并修复重复请求,未将 Windows 测试结果当作 macOS 原机 CPU 复测。 ## [1.8.29] - 2026-10-16 - 显示设置复用实际侧栏、模型和额度卡片;选择虚线框直接调整,右侧用实际组件预览简洁、标准、紧凑样式。正常字号、分区加载、局部尺寸监听,关闭后清理监听器。 - 可勾选“使用示例数据”,展示预算、余额、Go、套餐、模型等完整效果;示例不写入账本、不启用账户请求。修复组件菜单的提示文字选项,简化“仅显示金额”说明。 - 自动保存从 600ms 缩短到 120ms,连续编辑串行提交,关闭设置时提交待保存项;显示修改不再触发套餐历史重算,也不等待远程额度查询。 - 货币符号随币种选择,移除独立编辑框;保留升级前保存的自定义符号。 - 每日后台更新 ECB 参考汇率,失败保留旧值,支持手动关闭;历史费用保存当时的折算金额,汇率更新不重算旧账。缺少历史汇率的旧聚合记录保留升级前显示金额。 - #282:价格映射选择器按模型和提供商筛选,大目录只渲染前 80 个结果,保留当前选择与键盘操作。感谢 @lxz946786639 提出渠道价格下拉筛选建议。 - #279:生成、摘要期间暂停联动上下文测量与历史扫描,保留上次结果,结束后刷新;加入不包含会话内容的断流诊断说明。感谢 @nico-zhuang 提供故障场景和因果边界。尚未复现原始上游断流。 ## [1.8.28] - 2026-10-15 - 直接接入原版 billion-context 0.1.181 及更新版本,取消配套兼容包的安装要求;按实际接口判断后续版本,不修改原包文件。 - 0.1.180 及更早版本提示升级;必需接口变化时提示到项目交流群反馈或提交 issue,保留普通 DSH 计费。 - 提前安装接入逻辑,覆盖插件并行启动和费用插件重载;修复原版响应结束后保存会话导致计费回执等待超时的问题。 - 修复 Windows 读取回执期间短暂拒绝替换文件的问题,重试保存最新状态,避免已采集用量回退到不完整的宿主汇总。 - 保留压缩、重试、并发子代理、历史价格与重复导入保护。更新后完全重启 DSH 及本地代理。 - OpenDesign 的 #274 已在 1.8.27 实现并关闭,感谢 @playgithub 提出需求。详见 [1.8.28 更新说明](docs/update-notes-1.8.28.md#中文)。 ## [1.8.27] - 2026-10-15 完整说明:[2026-10-15 计费更新](docs/update-notes-2026-10-15.md#中文)。本版本包含以下改动。 ### 历史费用与模型选择 - 请求按发起时间使用已保存的价格版本。修改单价、模型价格映射或价格币种只影响后续调用,会话、单轮和图表沿用相同版本;启用前缺失的历史价格版本不能还原。 - 新增“按当前价格重算历史”,警告并确认后才执行。每次保留原金额、原价格版本、前后结果和完整账本备份;日志或用量不完整的记录保持原样,重算记录可在设置中查看。 - 模型价格映射下拉支持按模型和提供商搜索、多个关键词及清空筛选,保留原选择。 ### 会话费用与插件兼容 - 修复异步账本读取后会话费用消失的问题;加载、缺少记录和真实零费用保持可见,统计栏拥挤时优先保留金额,完整分项可悬停查看。 - 修复分叉会话的单轮费用重复计算继承历史的问题,单轮与整段会话使用相同的创建边界。 - 接入 billion-context 内部压缩、重试和追加请求,支持四种模型协议的 JSON/流式回执;主/子会话、日周统计及单轮/步骤共用逐次记录,并沿用历史价格版本。 - 调用序号随账本原子保存,防止重启或多进程重复入账。需要配套 `billion-context 0.1.181+` 本地兼容包;旧代理或写入失败保留普通记账,缺失用量和价格明确标出,不补算未知费用。 - billion-context 接入改为检查实际调用接口,取消固定版本和校验值白名单;接口一致的后续版本自动兼容。0.1.180 及更早版本提示升级到 0.1.181 或更新版本;接口变化或兼容桥未连接时弹窗,提供交流群和 issue 入口,同一问题关闭后不重复提示。已用 0.1.181、0.1.185、0.1.190、0.1.196、0.1.197 实际发布包验证。 ### OpenDesign、价格与套餐 - 实现 #274:新增 OpenDesign 独立渠道的 35 个模型价格,包含已公开的缓存读写和长上下文档位;支持刷新目录,保留自定义价格与取消挂载。默认计为 Plan 等值费用,钱包付款可显式改为 API。感谢 @playgithub 提出需求。 - 新增 OpenDesign 工作区额度与钱包查询,使用固定官方只读端点和独立 Control Key,核对工作区及可用成员身份,各窗口单列;不使用推理密钥查询。默认关闭,认证查询使用模拟数据验证,未使用真实账户。 - 按 2026-10-15 官方资料新增 19 条渠道模型价格(12 个新模型 ID),补齐 Claude Haiku 5.5、Gemini 4 Argon、Mistral Large 4、OpenCode 新模型和 OpenAI 专项模型;修正直连 Sonnet 5.5 与 Zen GPT-6.1 Sol 的缓存读取价,保留直连与网关差异。 - 套餐归属新增 Codex / ChatGPT、火山 Agent Plan、腾讯 Coding Plan、腾讯 Token Plan、百度千帆 Coding Plan;支持手动选择、明确套餐名称识别及 Go Plus 别名。新归属不会虚构厂商剩余额度。 - 新价格以独立迁移应用,保留用户自定义单价、取消挂载、套餐覆盖及已记账金额。更新公开价格校验器以支持 OpenCode 新文档地址和促销划线价。 - 修复 #271:拓展价格表和直接显示的价格卡支持编辑缓存写入价,包含第三方 USD/CNY 及 DeepSeek 基础、峰谷档;留空恢复缓存读取价,显式 0 保留。感谢 @XHPAN 提出需求。 ## [1.8.26] - 2026-10-14 - 修复讨论 #164:自定义 Provider 虽已标记为 Plan,仍未关联具体套餐,导致“本周期实际(本地账本)”为零。按模型统计的计费方式支持选择全部已接入套餐,保存后用于本地窗口统计、历史分类、千问和 SCNet Credits。 - 自动识别 Provider ID 或 Model ID 中明确的厂商名与套餐特征,兼容 Coding Plan、Token Plan、Subscription 和中文套餐名;手动归属与 API 选择优先,不仅凭共享模型名推断订阅,多个厂商的歧义名称不自动归属。 - 后台恢复近期 48 小时的小时统计,写入前核对完整日志与账本,并保护并发调用、配置变化和历史清空;不重复增加调用次数或费用。升级只恢复一次,普通额度刷新不扫描日志,设置保存不等待恢复。 - 合入 #266:说明文件新增微信交流群入口和二维码;费用设置中的首次提示可以关闭,关闭后入口移至页面底部。二维码和运行时链接均使用正式 GitHub 地址。 - 验证手动选择、双端识别一致性、配置与 RPC 保存、Credits 渠道隔离、历史恢复及并发保护;原生选择框适配长套餐名、明暗主题与窄窗口。 ## [1.8.25] - 2026-10-14 - 实现 #263:Factory(Droid)订阅额度读取固定官方 billing/limits GET 接口,显示 5 小时、每周和每月的已用百分比与重置时间;支持 Standard、Droid Core 或两者,保持两套额度独立。 - 接入设置页、侧边栏和输入框上方额度横条。横条分别显示 Standard/Core,每套包含三个窗口;支持点击刷新、可配置刷新间隔、可选组织 ID及明暗主题。 - 凭据通过 DSH 凭据库中的 FACTORY_API_KEY 或同名环境变量解析,可在卡片中编辑;密钥不回显、不写入账本。默认关闭;组织或额度类型变化会取消旧请求并清空旧缓存。 - Factory 的已发生调用支持 factory-a/factory-g/factory-o 的 Plan 分类,不用账户额度比例推算本地每 1% 成本。增加解析、固定只读请求、凭据、缓存、取消、codec、落盘与 Chromium 界面回归。 ## [1.8.24] - 2026-10-13 - 修复 #260:千问 CLI 的 usage summary 未提供有效订阅额度时,补查 subscription status,读取有效个人订阅的月/周额度百分比、重置时间和总 Credits;保留小数百分比,不将比例当作余额或把订阅到期时间当作额度重置时间。 - 修复 #261:「按模型统计」的计费方式选择、Plan 标签移出模型名称的省略号区域。长名称只截断文字,明暗主题、窄窗口和近 90 天统计均能操作并保存计费方式。 - 新增千问真实子进程回退查询和 Chromium 布局回归;客户端 CSS 复用重复前缀,恢复后的样式保持一致,构建产物继续符合 DSH 单文件大小限制。 ## [1.8.23] - 2026-10-12 - 修复 #258:价格设置的原生下拉选项明确使用 DSH 的背景和文字颜色,解决 dream-skin“午夜黑”皮肤下白字浅底、需要悬停才能看清模型的问题;自动匹配、模型映射及其他费用设置下拉菜单一并适配。 - 增加真实 Chromium 回归,覆盖深色皮肤叠加浅色宿主、DSH 深色和浅色主题、移开鼠标后的显示及模型映射自动保存。样式仅作用于计费插件自己的控件。 ## [1.8.22] - 2026-10-12 - 修复 #256:百炼 CLI Token Plan 个人版的 per1MonthPercentage / per1MonthResetTime 解析为月额度窗口,正确显示用量、重置时间和来源;常规查询无有效额度时通过固定只读 API 取得原始用量,兼容 CLI 2.1.0 丢弃月字段的情况;无可识别字段时不再直接判定为未订阅。 - 修复 #253 新反馈:dsh-context 联动不再向宿主原始会话页签列表添加同名注册,保留原生“上下文”页签,并继续在会话页、右侧栏及 /context 弹窗展示费用区域。 - 修复同步插槽变更通知引起的安装重入及关闭残留;反复开关、刷新、卸载和部分安装失败均清理自己的注册与观察器,保留对方插件和会话计费数据。 - 增加真实宿主页签、Cordis/SlotRegistry 生命周期及 Chromium 回归,覆盖发布的 dsh-context 0.62.0 / 0.66.0 / 0.68.1、多会话隔离和延迟请求。旧客户端若已累积重复页签,更新后需重新加载客户端或重启宿主一次。 ## [1.8.21] - 2026-10-11 - 修复 #253:费用明细与计费统计的“计费口径”写入插件配置,关闭重开及重启后保留 API / Plan / 合计选择;保存失败显示重试提示并恢复已保存口径。首次选择前沿用原有“含 Plan 总额”设置。 - dsh-context 联动移除精确版本白名单,按启用状态、公开插槽与注册形态检测,支持 0.68.1;未安装、无法读取状态及接口不匹配时给出对应处理提示。保持首次选择、关闭和开关行为。 - 增加真实配置落盘、弹窗重开和 RPC 验证,并用 npm 发布的 0.62.0 / 0.66.0 / 0.68.1 客户端验证会话页、右侧栏及 /context 弹窗。 ## [1.8.20] - 2026-10-10 - 费用主页面保留输入、输出、缓存构成,新增步骤费用构成和紧凑计费轨迹。逐步显示输入、输出、缓存金额、总额及占比,展开可看 Token、每百万 Token 单价和各项金额。 - 按 DSH 已记录的轮次、步骤与工具名称关联模型费用,不分析消息内容。多工具步骤只计入一次费用;压缩、原生搜索与未标明步骤的调用独立列出。常规步骤连续展示,超过 100 步原位展开更多。 - 单次调用新增费用与内容并排视图:圆环图与计费表,以及按需展开的输入记录、模型回复、已记录思考、工具参数、返回结果、状态和耗时。核对事件序号与时间,限制文本和分页大小,内容按纯文本呈现。 - 保留费用概览,将“上下文”改为“费用明细”,默认用一张圆环图汇总全部轨迹步骤费用,每块代表一步;逐步圆环与计费表默认折叠,展开后连续显示,逐次调用明细原位展开;清理兼容预览、设置和统计中的重复说明。 - 合入 #251:CLIProxyAPI 网关来源卡片新增刷新间隔设置,范围 1–1440 分钟,保存后回读。 ## [1.8.19] - 2026-10-10 - 费用明细改为“费用概览、上下文、调用明细”三个视图,首屏集中显示指标与占比;上下文和最近一次调用并排,轮次、步骤和单价收起。移除两项说明折叠栏,统一使用“费用构成”等直接文案。 - 统一明亮的圆环图配色;新增逐次调用费用占比、缓存 Token / 输入费用对比,以及多模型和多环节费用分布。高费用的 7 次调用单列,其余合并,分母始终覆盖全部调用;点击可跨页定位,展开每次调用可看输入、输出和缓存构成。 - 提前准备当前对话的统计,概览不再等待上下文测量;同一会话和计价配置的内存结果先显示、后台刷新,切换会话或价格后隔离。缓存限制 32 项,卸载时清理。 - 同时读取子代理目录时合并请求,持久化目录短暂复用 5 秒,实时会话每次合并;显示设置保存不等待无关的冷额度查询。明确的余额、额度刷新仍等待对应结果。 - 增加跨页占比、图例跳转、缓存打开、目录并发与显示设置保存回归;保持只读、零额外模型请求与 dsh-context 原有兼容开关。 ## [1.8.18] - 2026-10-10 - 新增只读的上下文费用构成:系统提示、工具定义、输入、技能、历史回复等按 Token 和参考输入费拆分;最近一次调用展示非缓存输入、缓存、输出与推理的用量计费。金额与占比采用圆环图和紧凑图例;悬停或键盘聚焦临时查看详情,移开后清除高亮,完整明细默认折叠。 - 对话入口直接显示当前对话的调用日志汇总、上下文费用和轮次明细,移除全局日期、排行与全部对话导航;日志可用但账本已过保留期时,不再先显示误导性的全局零费用。 - dsh-context 0.62.0 / 0.66.0 联动默认关闭,首次提供启用前后预览;用户选择后,在会话页、右侧栏及 /context 弹窗的当前上下文卡片内加入费用。关闭提示后不反复弹出,开关和预览保留在折叠设置中。 - 弹窗标题与关闭按钮固定在滚动内容之外,遮罩避开完整桌面标题栏;遵循 DSH 弹窗背景变量,修复 dsh-dream-skin 透明度设置未作用于费用弹窗的问题(#247)。 - 可见界面响应上下文和用量变化,并每 10 秒补充刷新;隐藏时暂停,失败保留同一对话的旧值。只读取宿主数据和已有价格,不发送模型请求、不改写上下文或账本。 - 性能:会话/统计页按会话、筛选条件和计价配置复用最近结果,合并在途请求;入口悬停或聚焦时预加载。OpenRouter 价格页复用最近快照;首次设置页先返回本地数据,再补齐余额和额度,不等待慢网络才显示整个页面。缓存只存在于当前客户端内存,限制数量与有效期。 - 增加真实 DSH 服务、两版 dsh-context 客户端及真实浏览器回归,覆盖会话隔离、弹窗关闭与键盘操作、明暗/窄屏布局、透明度变量和禁止外部请求。 ## [1.8.17] - 2026-10-09 - 响应 #244 的后续建议:在输入框旁的模型选择菜单中,悬停 OpenRouter 模型即可通过 DSH 原生提示查看输入、输出、缓存单价、上下文长度和最近成功更新时间,无需先打开设置页。 - 按提供商和完整模型 ID 取价,区分付费与 `:free` 版本、零价格与缺失字段;其他提供商保持原提示。菜单在前台打开时每分钟刷新,悬停和返回前台可触发更新,两次请求至少间隔 15 秒;失败保留旧价格与时间,关闭菜单后停止请求。 - 复用不带凭据的公开目录查询,不调用模型、不产生模型使用费用;支持中英文,卸载插件后恢复原提示。价格模块按需加载,保持主客户端低于 256 KiB。 - 增加真实 DSH 模型选择组件及主客户端按需加载回归,覆盖模型选择、提供商隔离、重复名称、刷新失败、后台暂停和卸载清理。 ## [1.8.16] - 2026-10-09 - 新增 OpenRouter 模型价格面板(#244):在设置 → 费用 → 价格中按模型名称或完整 ID 搜索,按输入或输出价排序,展示缓存单价、上下文长度和官方模型链接。 - 打开面板及回到前台时查询,前台每分钟刷新,支持手动刷新、最近成功时间及价格变动提示;后台暂停轮询,失败保留旧价格与时间。查询只读取公开目录,无需 API Key,不产生模型调用费用,不修改计费配置和历史账本。 - 面板沿用 DSH 明暗主题、表格和控件,中英文对应,窄窗口内价格表可横向滚动;使用独立按需加载模块,保持主客户端低于 256 KiB。 - 修复 CodeQL 告警 14、18、19:构建脚本对嵌入 JavaScript 的字典和 CSS 增加安全转义;浏览器测试拒绝非法场景参数并移除请求参数的脚本插值;价格测试通过 URL origin 精确匹配官方地址。新增脚本注入、原型属性名和伪造域名回归,生成的客户端文件保持字节一致。 ## [1.8.15] - 2026-10-07 - 合入 UNscientific-9 的 #240,修复 #239:费用明细弹窗在桌面标题栏下方的可用区域居中,兼容旧版 Windows 标题栏变量、macOS 顶部空间及全屏归零;宽度包含边框与内边距,窄窗口不再横向溢出。 - 弹窗样式支持皮肤覆盖;客户端热更新按内容更新已有样式节点,避免旧样式使定位失效。 - 统计、单对话明细和已展开轮次刷新时保留已有内容;新用量、日期和计费配置变化后同步更新,单纯时间戳变化不再触发取数。后台失败保留旧值并显示错误,明细提供重试入口。 - 新增真实浏览器几何、刷新行为及样式替换回归;完整本地回归、242 条浏览器断言和 PR CI 通过。双语字典无损打包,主客户端 261,470 字节,符合 256 KiB 限制。 ## [1.8.14] - 2026-10-07 - 修复 #237 的账本锁 PID 复用:新锁记录 Linux 系统启动/PID 命名空间/进程启动身份或 Windows 进程创建时间;兼容旧空锁文件,确认文件早于原生进程启动时自动恢复。保留有效写入锁、身份不明的锁和账本原始金额。 - 新增进程身份与真实持锁进程回归、真实 Cordis 旧锁冷启动回归及双语账本锁恢复说明;已失败的旧宿主条目升级后重启即可恢复,无需临时配置覆盖。 ## [1.8.13] - 2026-10-07 - 新增设置开关「输入区下方只显示金额」(`sessionCostCompact`,默认关):输入区下方会话费用行只显示金额;完整命中/输入/缓存/输出分项保留在悬停提示与「费用明细」弹窗,不影响标题栏徽章。设置页显示页签与三个隐藏开关同组渲染,新增配置键同步补齐服务端校验、清洗与严格 schema,zh/en 双语文案齐备。 - 补齐紧凑模式悬停的完整费用行,保留模型金额;新增中英文渲染回归,覆盖 API / Plan 拆分、含 Plan 总额、无输入缓存命中率、子代理账本优先及标题栏内容不变。感谢 JanEickholt 提供 #236。 ## [1.8.12] - 2026-10-05 - 合入 #235 的百炼 CLI 控制台登录入口。仅在认证状态明确缺少控制台凭据或 CLI 返回认证失败时显示“登录”,登录后核验凭据并刷新额度;查询或认证检测异常仍显示查询失败。 - 登录命令只在明确点击后执行,合并并发登录;切换额度来源、关闭显示或卸载插件时取消子进程。错误使用脱敏的双语提示,登录成功与订阅额度可用分别说明;远程或无界面主机提供手动登录说明。 - 更新两版真实客户端注册回归,逐项检查服务端 RPC 方法与前端注册对应关系;扩展 CLI 子进程和设置按钮测试,双语字典无损打包保留全部文案并满足 256 KiB 限制。 ## [1.8.11] - 2026-10-04 - 为 #232 增加凭据输入的自动填充隔离:费用概览默认不挂载密码框,明确编辑后使用独立表单;取消、成功保存或清除后移除并清空草稿。保留宿主搜索状态,不删除/重建会话或账本;报告者浏览器中的具体触发原因仍待确认。 - 添加[无损侧栏搜索恢复说明](docs/session-sidebar-recovery.md)、18 个工作区与 78,000 次调用账本回归、旧版自动填充配对模型对照及凭据编辑 DOM 回归;Bug 模板要求其他插件完整包名、版本、相关配置和浏览器扩展信息。 - 对双语字典重复短语进行可逆打包,逐项核对 1,054 条翻译,保留客户端 256 KiB 发布上限。 ## [1.8.10] - 2026-10-04 - 会话徽章统一以账本金额为准,不再按 Token 数量在账本与日志投影间选数。单对话统计默认跟随侧栏 API / 含 Plan 总额口径。 - 修复旧日总额与完整会话记录的金额差额,使用已有记录,不重新定价、不修改 Token 和调用次数;保留匿名调用和旧裁剪残差。共享账本合并后保持该规则,对账日期金额变化时重置余额基准。 - 取消每日 200 个会话的账本裁剪,超过该数量的对话仍可统计;跨天排行合并同一对话,费用排序跟随当前展示口径。 - 开启子代理费用合计时,排行把所有子代理后代归入所属主会话,点击后的明细与排行保持一致;每笔费用只计一次。排行条数限制明确提示,不把当前页小计当成全部金额。 - 复核并关闭已发布修复的 #226,自动语言相关源码与发布产物测试均通过。 ## [1.8.9] - 2026-10-03 - 余额对账保存起点对应的账本费用,只比较同一时间范围内的费用增量,修复重启、充值或账号基准重置后的误报;旧基准缺少费用起点时自动重建。 - 官方美元余额的当日已用不再乘人民币汇率,余额进度条各部分使用同一币种。 - 包装 Provider 去重加入真实上游身份,修复不同渠道同模型、同用量请求被漏计的问题;实时入账、会话投影和日志回放使用同一规则,旧投影自动重放。 - 读取概览和统计时同步其他进程已写入的账本,保留本地待写用量,修复桌面端、Web 和后台进程共用账本时显示旧数据的问题。 - 开启“本会话费用包含子代理”后,会话徽章、单会话日/周/全部汇总及费用明细统一包含全部子代理后代。明细单列各代理账本费用;调用、轮次和步骤标注所属会话,展开子代理轮次读取其自身输入和工具记录。全局统计仍每笔计入一次,普通分叉及继承历史不重复收费。 ## [1.8.8] - 2026-10-03 - 修复 Desktop 登录账号路由 `deepseek-account` 被官方费用筛选漏掉的问题:官方余额对账和余额进度条的当日已用均包含账号调用及 `llm-` 别名,仍排除第三方渠道。历史账本已包含这些费用,更新后直接读取,无需重算历史。 ## [1.8.7] - 2026-10-03 - **#201 建议 3**:DSH 桌面版登录官方账号后,无需开放平台 API Key 也能读取余额。插件经宿主 `deepseekAccount` 服务取用与「设置 → 账号」同源的钱包(充值 + 赠送钱包),沿用多币种挑选规则;凭据由宿主账号服务持有,插件不接触 token,也不直接请求 `platform.deepseek.com`。来源优先级为 余额专用 Key → 已登录官方账号 → 模型凭据;账号侧查询失败按查询失败提示,不改用模型凭据重试,也不退化为零余额。 - 同步更新「余额专用 API Key」的界面说明、[余额凭据来源](docs/balance-credentials.md)与安装排障文案:账号登录令牌仍不能直接查询 `/user/balance`,但已登录账号的余额不再需要该 Key。 - 账号查询异常、失败或钱包格式损坏时显示脱敏错误,按刷新周期重试,手动刷新可立即重试;不切换到模型 Key 的另一账户。退出、凭据更换及账号服务替换会作废余额缓存、在途结果与对账基准,基准清空持久化后不会被旧磁盘快照恢复。 - 优化模型识别:自动模式支持 NFKC 全角/兼容字符、已知厂商的冒号前缀、Gemini `models/` 资源名及带空格/渠道附注的日期快照;前后端统一保留型号语义、未核价条目、本地来源和手动零消耗指定。跨厂商同等级匹配不再按名称长度猜价,明确厂商与 Zen/Go 历史渠道保持隔离;已记录的历史金额不自动改写。 - **#226**:自动语言改为跟随 DSH 当前语言,覆盖设置导航、会话/侧栏与按需加载的统计页;支持宿主语言服务延迟到达、切换、替换和卸载清理。显式中英文覆盖保持优先,自动解析结果不写回配置。服务端提示采用 DSH 已保存偏好并作废旧语言缓存;无可观察偏好时保留中文兼容回退,详见双语 README。 - **#224**:补齐 GPT-6 Sol/Luna、GPT-6.1 Sol、Gemini 3.8 Flash、Claude Fable 5.1 / Opus 5.5 / Sonnet 5.5,扩充公开的一手 API 价表。第三方目录共 271 个厂商/模型条目、179 个不同 ID(含别名和历史快照),269 条可执行价格、2 条明确未核价。独立 `opencode-zen` 覆盖当前全部 83 个 Zen 按量端点;`opencode-go` 覆盖全部 30 个 Go 订阅参考端点。保持历史 `zen` / `opencode` Go 路由及用户覆盖,按量 Zen 使用明确渠道。 - 修复前后端 OpenRouter 精确变体与渠道隔离、唯一别名/厂商前缀匹配、直接厂商跨家族误套价;缓存读写、单次请求上下文阈值、Go 的 UTC 峰谷与 USD 币种分别保存。新增目录不会仅凭模型名改变订阅分类。 - 一次性目录升级保留手写/未核价/缓存 TTL 字段与取消挂载的模型,不修改已记录的历史支出。客户端字典采用经完整往返校验的无损打包,继续满足 256 KiB 门禁。价格来源、促销期限和计费限制见 [2026-10 价格说明](docs/provider-pricing-2026-10.md)。 ## [1.8.6] - 2026-10-02 - **#219**:为单会话费用明细的原生 `` 补上显式 `role="dialog"`,使皮肤的弹窗样式生效,修复弹窗及内部控件继承透明背景的问题。标题栏和输入框下方入口共用此修复。 ## [1.8.5] - 2026-10-01 - 统计界面改用 DSH 原生主题颜色、轻边框、紧凑分段控件及折叠说明,支持浅色、深色和窄窗口。新增费用构成、调用类型与步骤占比图;步骤可切换费用或次数,以完整筛选范围为分母,跨页合计,前 12 项之外合并显示。 - 每轮可按需展开原始用户输入及工具调用,继续展开工具查看参数、结果和完成状态。工具独立分页、长文本明确截断,不加载系统提示、请求头或二进制附件;无费用记录但有日志的轮次也可查看。 - #203:为搜索范围内的官方 Messages fetch 观察已解析 JSON,兼容无 Undici 事件的 transport,与原诊断路径去重。增加匹配前计数;使用反馈中的 Node 24.15.0 / Undici 8.10.2 及 DSH 代理安装链验证代理与直连。该组合本身未复现现场故障,fnOS 继续等待升级复测。 ## [1.8.4] - 2026-10-01 - 输入框下方的「费用明细」紧跟宿主轮数、速度和 Token 统计,预算标签取消整行宽度和额外边距;上下文用量保留在同一行,消除中间空白。按钮保留完整悬停提示和无障碍名称。 - Desktop 一键安装默认使用固定版本的 npm 包,避免相同 Git 地址重复安装触发宿主 `ambiguous-install` 判断;显式 `-Rev` 保留固定 Git 提交安装。补充 pnpm 成功但宿主恢复旧清单/锁文件的诊断与恢复步骤。 ## [1.8.3] - 2026-10-01 - **#213 显示开关**:可分别隐藏标题栏费用明细入口、输入框下方入口和本轮费用,默认保留显示;关闭本轮费用后停止对应的明细请求。中英文设置支持自动保存,配置经过服务端校验、严格 RPC 与客户端读取。 - **#214 窄屏布局**:视口不超过 640px 时自动隐藏标题栏入口,保留输入框下方入口的独立设置;按钮采用 12px 字号和紧凑间距。中英文 320–1440px 的 18 个浏览器场景通过 138 项断言。 - **#203 诊断补充**:搜索事件未匹配到请求时记录覆盖缺口;coverage 文件新增本次运行的服务、事件、请求、响应和入账计数及运行时版本,不保存查询或凭据。fnOS 实际漏记仍待该运行时证据,未标记为修复;#197 仍待安装失败的原始 pnpm.log。 - 合并 PR #215,将 Zod 从 4.5.1 升级到 4.6.5。 ## [1.8.2] - 2026-09-30 - **#210**:修复计费统计及单会话明细打开时报 `Remote package "dsh-cost-meter" is already registered`。统计模块使用独立的 Remote contribution 标识,保留原 RPC 端点、严格类型和按需加载,与主客户端共用 costMeter 命名空间。 - 在统计 API 边界执行参数和结果校验。补充真实客户端 registry/gateway 测试,覆盖主客户端与统计模块组合注册、重复/并发打开、失败重试、两个统计接口、卸载及重新加载;CI 同时覆盖 DSH 0.1.7-rc.2 和 0.2.0-rc.2。 ## [1.8.1] - 2026-09-30 - 会话输入框下方新增常驻「本会话费用明细」按钮,标题栏保留同名入口,不依赖费用徽章开关。初始状态查询失败时仍显示入口和重试;切换会话关闭旧弹窗。 - 单会话入口默认展示全部保留记录及 API + Plan 等值,先显示费用构成,再展示趋势与排行。新增按轮次和调用类型汇总,逐次调用显示轮次、步骤、Token、单价和费用。 - 轮次与调用独立分页,整轮金额在调用跨页时仍保持完整。缺少轮次编号的搜索、压缩或旧日志单列,保持金额完整且不猜测归属。 ## [1.8.0] - 2026-09-30 - 新增“设置 → 费用 → 计费统计”和对话标题栏“费用明细”入口,支持今天、近 7 天、近 30 天、全部保留记录和自定义日期;按提供商、模型和 API / Plan 等值口径筛选。 - 展示费用趋势、模型费用排行、对话费用排行、调用次数、平均费用、缓存命中率和 Token 构成。跨天对话合并,子代理各自计入一次,历史未归属金额单独提示,长区间合并柱形仍保留全部金额。 - 单对话明细按需读取用量日志,列出输入、输出、缓存读写、推理费用及逐次模型、压缩和搜索调用。支持长上下文与历史价格规则、八位小数小额金额、缺价和缺失日志提示;明细与账本不同会明确列出,分页不改变合计。 - 统计页使用 DSH 0.2.0-rc.2 的异步模块加载器,两个客户端文件分别遵守 256 KiB 限制;旧宿主没有该能力时提示升级,原有功能保留。补充双语统计口径及 dsh-context 设计参考。 - 通过完整回归、组件交互和真实 DSH 0.2.0-rc.2 打包模块 / RPC 验证。浏览器工具拦截本地测试地址,本轮未完成浏览器视觉验收。 ## [1.7.49] - 2026-09-30 - **#207**:显示设置新增 `codexQuotaSidebar` 独立开关,默认开启。关闭后隐藏侧栏 Codex 额度卡,保留会话输入区的 Codex 额度条;原 `codexQuotaEnabled` 总开关继续控制两处显示。 - 补齐默认值、配置校验、严格 RPC schema、客户端读取和中英文文案。旧配置沿用原显示行为,隐藏侧栏卡后解除对应额度订阅;验证设置自动保存、配置往返、卡片重新开启与总开关行为。 ## [1.7.48] - 2026-09-30 - **#205 每轮费用**:在 DSH 轮次尾部插槽加入可展开的费用明细,显示输入、输出、缓存读取、缓存写入和推理 Token × 单价 ≈ 金额。按配置显示美元或人民币,Plan 单独标注等值费用;保留流式最终用量去重、峰谷价格、长上下文档位和搜索独立明细。 - 进一步展开逐次调用,可按时间查看模型回复、上下文压缩和原生搜索,各自列出路由、Token、单价、金额及长上下文档位。金额最多显示八位小数;缺价用量以问号和明确提示展示,不将其当作免费调用。 - 读取已完成轮次的精确事件边界,优先使用正在运行的 Session,避免宿主尚未刷盘时缺失明细;磁盘回退缓存随文件变化失效,界面拒绝切换会话后迟到的结果。缺少价格或完整用量时显示对应提示。 - **#203 搜索捕获补强**:使用宿主 `web/deepseek-search-llm-request` 事件,在相同异步调用上下文内捕获随后的一次官方搜索请求,覆盖原始 search 方法绕过包装器的路径。与原包装器并存时只计一次,工具完成后清理标记;完整 Web profile 集成验证覆盖真实 Session、保存的方法、持久化和本轮费用。 - 客户端构建共享双语词典键,逐项校验还原结果,保持翻译与 256 KiB 包体限制。#203 的 fnOS 实际触发原因仍待复测确认;#197 继续等待原始 `pnpm.log`。 ## [1.7.47] - 2026-09-30 - **#203**:原生搜索计费观察所有 Cordis web 服务实例,覆盖插件加载前已有的隔离服务、后加载服务和服务重载;保留调用者会话归属,卸载时恢复原方法和诊断监听器。旧版仅通过根作用域注入 web,隔离服务中的搜索会漏记。 - 新增真实 DSH 0.2.0-rc.2 / Cordis / DeepSeekSearchProvider / Undici 集成测试,官方请求 URL 仅连接本地测试服务器。验证账本费用、会话独立明细、无 usage 的覆盖缺口、服务重载和卸载;同一测试在 1.7.46 上复现漏记。新增 Node 24 CI。 - 已向 #203 报告者索取 fnOS 日志和配置以确认其实际触发路径;#197 继续等待安装失败的 pnpm.log,不将该安装问题标记为修复。 ## [1.7.46] - 2026-09-30 - **#201**:官方余额新增独立的开放平台 API Key 输入,写入宿主凭据库的 `DEEPSEEK_BALANCE_API_KEY`,优先于模型凭据,避免账号登录的推理令牌覆盖余额 Key。未配置时保留原有模型凭据回退。 - 401 提示说明账号推理令牌与开放平台 Key 的区别,自动查询遵守刷新间隔。保存或清除专用 Key 会取消旧请求、清空旧余额并重建对账基准;密钥不进入插件配置、账本或 RPC 返回值。专用 Key 固定请求官方 HTTPS 端点,拒绝重定向。 - 中英文设置页加入专用凭据状态和输入框,复用现有刷新逻辑并防止并发点击。完整回归、真实凭据服务及前后端契约验证通过。 - Desktop:安装脚本按指定 Profile 提示重启、验证和卸载,`-Profile desktop` 使用应用自带的 pnpm。实际 Windows Desktop 0.2.0-rc.2 的隔离安装、启动、合成用量和余额凭据保存/查询/清除通过,并新增可复用的桌面运行时验证脚本。 - 补充安装排障及市场禁用后的重新启用说明,一键安装结束时提示重装保留禁用状态。**#197 仍待原始 `pnpm.log`**,未将缺少日志的安装错误标记为修复。 ## [1.7.45] - 2026-09-29 - **#198**:输入框下方的插件费用行不再占满整行,移除多余顶边距,与 DSH 官方统计胶囊并排显示;较窄窗口仍允许插件文字省略。 - **#199**:侧栏今日 Token 计入输入、输出、缓存读取、缓存写入和推理五类;会话费用悬停明细列出各 `provider:model` 的已记费用。最终消息携带的模型来源可修正缺失切换头记录的会话投影和历史回放。 - **#197 安装路径核验**:在隔离的 Windows、DSH 0.2.0-rc.1 环境分别验证 Git 地址和 npm 1.7.44 安装成功,并新增 Windows CI 覆盖插件市场使用的 Git URL。报告者的 `pnpm.log` 未附在 issue 中,其环境的失败原因仍待日志确认。 - 完整回归与客户端 256 KiB 包体限制通过。 ## [1.7.44] - 2026-09-28 - **#195**:修复 DSH 0.2.0-rc.1 拒绝安装或启动时跳过插件的问题。两个宿主 peer 保留原有 0.1 范围,追加 `>=0.2.0-rc.1 <0.3.0-0`,无需使用版本豁免。 - 使用官方 DSH 0.2.0-rc.1 验证安装包、Web 启动、宿主模块复用、费用 RPC 和三次合成用量入账;新增 CI 覆盖真实兼容检查、旧范围拒绝对照和安装启动流程。 - 会话回归改用宿主生成的头记录,并补齐 v4 标题元数据;压缩日志完整性通过实际打开日志验证,兼容新宿主的延迟目录扫描。完整回归通过。 ## [1.7.43] - 2026-09-28 - **#192 追加反馈**:修复 v1.7.42 在 DSH 0.1.7 中仍将其他插件入口挤出侧栏的问题。宿主的 `SlotOutlet` 含有 `display: contents` 包装层,分行规则现在直接匹配其外侧实际参与布局的 flex 容器,并兼容旧宿主的直接子节点结构。 - 补齐浏览器回归中遗漏的插槽包装层;覆盖新旧结构的 48 种布局及 20 次动态切换。v1.7.42 在同一用例中复现挤压,修复版 598 项断言通过。 ## [1.7.42] - 2026-09-28 - **#192**:修复与 dsh-context 等插件同时启用时侧栏底部按钮被挤压的问题。展开时费用区独占一行,其他插件按钮按可用宽度排列;收起时保留纵向图标布局。 - 侧栏布局由 CSS 随费用区挂载、隐藏和卸载自动切换,移除手动调整 React DOM 顺序及覆盖宿主内联样式的逻辑。 - 新增浏览器布局回归页面,覆盖中英文、标准/紧凑/简化模式、四种宽度及动态启停。旧版复现失败,修复版 282 项断言和完整仓库测试通过。 ## [1.7.41] - 2026-09-28 - **PR #188 / #187**:合并社区贡献,按小米官方价补齐 MiMo V2.6 Pro、Flash 和 Pro UltraSpeed 的美元价格,并把 Pro 与 Flash 加入 OpenCode Go 目录。 - **#185**:官方余额对账加上 24 小时内有效外部快照的今日费用;过期快照暂停偏差提示,缺少今日条目按零计。DSH 会话账本和预算仍独立。 - **#186**:显示设置可选择侧边栏今日费用或 Token 用量,普通、简化和预算视图共用该选项。 - **#189**:第三方价格条目可存官方人民币档位;CNY 价格模式使用人民币档位计价,再按显示汇率折回美元账本。无人民币档位的模型继续按美元价计。MiMo V2.6 三型号提供官方人民币价。 - **#190**:自动匹配只接受同名及日期、版本、上下文长度后缀;不同模型变体保持未定价。任意 `provider:model` 的 `planBilling.models` 覆盖优先于未知渠道的 API 默认分类,模型统计页可直接选择自动、Plan 或 API。OpenCode Go 未收录的 UltraSpeed 不再套用 Pro 价。 - 更新双语说明、目录 JSON 和回归测试;客户端压缩产物满足 256 KiB 限制。 ## [1.7.40] - 2026-09-27 - 合并社区贡献 PR #184:新增 `locale/en.json` 与 `locale/zh.json`,通过包导出和发布文件列表让 DSH 插件列表读取中文名称及简介;英文回退到现有 `package.json` 元信息。 - 使用 DSH 0.1.7 的 `readPluginMeta()` 验证双语读取,并确认 npm 包包含语言文件;仓库完整测试通过。 ## [1.7.39] - 2026-09-26 - 修复网关额度缓存遗漏配置与凭据状态标识的问题;轮询与首次并发读取复用请求,刷新失败保留上次成功额度,无关设置修改不丢弃缓存。 - 自定义余额修改地址、请求内容、条目顺序或启用状态后及时更新缓存;配置切换、凭据修改和插件卸载取消失效请求,迟到结果不能覆盖新来源。阿里云余额适配器同步支持取消,并释放被拒绝的自定义余额重定向响应。 - 官方余额、OpenCode Go 与其他订阅额度同步取消失效请求;修改或删除订阅凭据后立即作废旧缓存,关闭查询后不再由迟到结果恢复额度或写入采样。 - 修复会话数量超过 1024 后包装路由转发重复入账,清理不再访问的会话指纹,并限制全表清理频率。 - 格式错误但可解析的账本(如 `null`)按既有损坏恢复流程保留原文,恢复后续写入;外部用量快照拒绝不存在的日历日期和类型错误的 `sources`。 - 补充缓存生命周期、超过会话阈值、账本恢复与外部快照边界回归,更新贡献指南中的客户端构建说明。 ## [1.7.38] - 2026-09-26 - **#181 外部用量源**:读取同账户其他进程原子替换的 `external_usage.json`,按来源隔离 DSH 与外部用量,并在费用设置展示日/月/累计合计及近期逐日 token、调用、美元费用。支持多来源每日准确费用汇总和逐次调用记录;逐次记录按插件价表与调用时间计费。 - 快照有大小、数量、时间及字段边界;重复读取不重复计入,超过 24 小时标记过期,超过 30 天或无效文件忽略。外部数据不混入 DSH 会话金额、预算和官方余额对账。新增[双语快照格式说明](docs/external-usage.md)。 - 精简双语设置说明以保持 DSH 256 KiB 客户端文件限制;新增外部快照解析、来源隔离、计价、过期与读取失败回归。 ## [1.7.37] - 2026-09-25 - **#178 / #179 中国法定假日计价**:按 DeepSeek 官方峰谷规则,将预置的 2026 年中秋、国庆假期北京日期设为全天谷价;`peakHolidays` 可在设置页修改,调休上班的周六、周日仍按周末全天谷价。服务端实时计费、历史回放、客户端估算、时段条、倒计时和提醒统一使用该日期表。 - **历史金额修正**:升级时对假日及相邻本地日期的 DeepSeek 记录按完整会话日志逐次重算,并同步会话与每日金额;日志缺失或与账本 token 不一致的记录保持原值,不按日聚合量猜测峰谷。 - 增加假日零点、中秋与国庆跨日倒计时、调休周末、配置覆盖与无效日期回归;客户端包保持在 DSH 256 KiB 上限以内。 ## [1.7.36] - 2026-09-24 - **CommandCode 裸压缩响应体**:`fetchWithRetry` 在调用方未显式指定时统一默认 `accept-encoding: identity`(显式指定值不覆盖)。实测 api.commandcode.ai 的 CDN 在客户端协商内容编码(br/gzip)时返回压缩响应体却缺失 `Content-Encoding` 响应头——违反 HTTP 语义,fetch 不做自动解压,`response.json()` 对压缩字节报「额度响应无法读取为有效 JSON」;DSH 0.1.7 宿主的全局 undici 8 dispatcher 默认协商 brotli,正好触发。brotli 流无可靠魔数,事后嗅探无法稳健补救(#172/#173 的裸 gzip 场景同族但更难防),而这些额度/余额接口的响应都很小、压缩本无收益,关闭内容协商从请求侧根除。补充默认注入与调用方覆盖回归。 ## [1.7.35] - 2026-09-23 - **#170 模型全名提示**:用量设置中的费用排行、Token 消耗、缓存命中率和性价比图为模型标签补充原生悬停提示,完整显示被省略的 provider/model 名称。 - **#171 百炼 CLI 额度来源**:整合贡献者的第三种千问额度来源、共享 CLI 子进程执行和双语设置。按官方源码修正 Token Plan 扁平字段与 Coding Plan 嵌套字段的解析,统一将 CLI 比例乘以 100;保留有效来源,隔离另一来源的格式或查询失败。固定参数、隐藏窗口、超时与输出上限继续生效,账号总量不写入账本。 - **#172 / #173 裸 gzip 响应体**:整合有界 gzip 解压修复,兼容 CDN 缺失 Content-Encoding 的压缩 JSON;压缩前后均受读取上限约束,损坏正文不会回显内容。 - **#174 GLM 失败诊断**:GLM 查询接入有界 JSON/gzip 读取,失败信息保留全部候选的 HTTP 状态、网络/TLS 错误类别、JSON 或用量解析阶段及数字业务码;不再由链尾 404 覆盖首个失败。调试日志仅记录端点与分类,不记录凭据、响应体或代理配置;释放 HTTP 错误响应并响应取消。宿主内具体失败原因仍待报告者通过新诊断复测确认。 - 验证:补充真实 HTTP 裸 gzip 与 GLM 回退/脱敏/取消回归,修正百炼官方字段、比例、异常输入与 Unix 子进程测试;保留既有客户端 256 KiB 上限。 ## [1.7.34] - 2026-09-22 - **#168 多进程账本覆盖**:保存时以跨进程锁串行执行读取、合并和原子替换;每次模型调用按新增用量合并,修复 web/headless 并发或常驻进程旧快照覆盖其他会话的问题。 - 同步合并同一会话追加、匿名调用、每日/厂商模型合计、套餐小时桶及采样;重复保存不重复入账,200 条明细上限不影响每日总量。合并配置的独立修改,并对重叠的历史导入去重。 - 清空历史写入重置标记,阻止旧进程恢复被清空的历史,同时保留重置后新增调用。独立临时文件、异常退出锁恢复和读取失败保留待写数据覆盖写入失败路径。 - 增加八个真实 Node 子进程并发回归与常驻快照、同会话追加、套餐统计、历史导入、重置、失败重试和锁恢复测试。升级所有使用插件的 profile 后重启全部 DSH 进程。 ## [1.7.33] - 2026-09-22 - **#165 POST 余额请求体**:自定义 Provider 余额设置新增“请求体 (JSON)”编辑框。有效 JSON 按原文保存并发送,格式错误保留上次有效配置;清空后移除请求体,GET/HEAD 不发送,切回 POST 保留配置。 - 兼容已有对象与原始字符串请求体,支持多条独立配置、RPC 与重启保存;Content-Type 按 HTTP 规则忽略大小写,尊重自定义值。补充双语操作示例及真实 HTTP 请求回归。 - **小米 MiMo Token Plan 额度**:Quotas 面板新增「小米 MiMo Token Plan」厂商卡片(第 11 家):套餐积分 / 补偿积分用量窗口、周期截止(北京时间)重置时刻与余额文本行,与其余 Coding Plan 同款启用开关、显示位置与刷新间隔,侧边栏卡片 / 额度横条 / Token Plan 用量统计一并接入。 - 凭据为小米开放平台控制台 Cookie(整段 cookie 请求头粘贴,必需 serviceToken 与 userId,DSH 凭据库以 `MIMO_COOKIE` 托管,过期后重新复制);tp-\*/ttp-\* 专用 Key 无用量端点,不支持 Key 鉴权。查询走 platform.xiaomimimo.com/api/v1 的 tokenPlan/usage、tokenPlan/detail、balance 三端点:用量为主,详情重置时刻与余额为尽力而为的增强行,失败不阻塞主窗口。 - 缺凭据 / Cookie 缺字段 / 登录态过期三类情况各有双语专属文案;plan/API 双轨分类新增 mimo 别名归并(`xiaomi-token-plan-*` 等 provider id 计入 MiMo 订阅轨)。回归见 test/mimo-quota.mjs(Cookie 归一化、三端点解析、配置清洗、双端接线),网络权限补 platform.xiaomimimo.com。 - 为守住 DSH STORE 256 KiB 单文件上限,等价压缩了既有双语长说明(volcengineNote / syncScopeNote / modelStatsNote / priceTableNote / cardsFootnote / unmatchedHint / planStatsNote,保留全部事实与 #85 消歧措辞),MiMo 的 Cookie 获取提示以内联 label 呈现、详细步骤走报错文案。 - 整合 #166 时补齐重定向拒绝、取消请求、有界响应读取、空数字/Cookie 校验与凭据隔离回归。MiMo 主套餐统计按自然月汇总,补偿积分与余额仅展示查询结果,不参与本地估算。 ## [1.7.32] - 2026-09-22 - **#162 自定义余额显示币种**:每条自定义 Provider 余额新增 `convertToDisplayCurrency` 开关,默认关闭;开启后,USD 余额、已用金额及额度上限按全局显示汇率和精度一起折算,覆盖侧栏余额行、图框、设置页预览及悬停明细。 - 原始接口快照、余额查询、账本和进度比例不变;CNY/EUR 原始余额与 Credits 不套用美元汇率,阿里云余额尊重实际返回币种。“余额币种”改称“余额原币种”,并补充双语操作说明。 - Host / Client codec、配置校验、旧单条迁移、多条独立设置和重启读写保留开关。回归覆盖开关交互、金额与符号一致换算、手动上限、精度、非美元单位、RPC 与持久化;合并等价格式化及字段解析逻辑以保持 256 KiB 客户端上限。 ## [1.7.31] - 2026-09-22 - **#157 DeepSeek 人民币对账**:价格设置提示当前金额采用美元价 × 显示汇率,提供 CNY 选择按钮,并说明随后同步价格与历史重算的影响。提示以实际价目表币种为准,同步回退到美元表时仍保留;不自动改动币种、汇率或历史。双语文档说明 Flash 报价在 7.2 下的 8% 差异及余额结算延迟。 - **#158 macOS / Linux 安装**:双语首页明确 npm 包名和插件市场安装也依赖 pnpm,补充固定版本安装、Node.js 版本要求、PATH 检查、nvm/fnm 与 DSH 进程重启步骤。此报错发生在插件加载之前,需要在报告者的机器上补齐环境。 - **#159 MiniMax 无限额度与倒计时**:保留接口明确返回的无限量窗口,7D 显示 ∞,未知值不误判;5h 重置倒计时在侧栏直接显示,每分钟本地刷新,悬停和键盘聚焦可查看具体重置时间。Host / Client 保留状态,无限量不参与百分比估计。 - **#160 底部缓存命中率**:在输入框下方的“输入”前显示缓存读取占全部输入的比例,缓存写入只计入分母,输出不参与,无输入时显示 —;兼容 API / Plan 金额与子代理汇总。修复尚无会话 ID 时的空快照访问。 - 合并重复客户端校验及费用展示逻辑,保持 256 KiB 单文件限制;保留英文首页和中文切换。 ## [1.7.30] - 2026-09-18 - **PR #156 OpenRouter 定价**:保留 @GnaneshKunal 的原始提交,新增四模型离线快照与公开目录刷新,按 USD/token 换算为 USD/百万 token,支持输入、输出和缓存价格。 - 启动、手动价格同步、每小时刷新共享在途请求;总超时覆盖响应体,限制目录大小并拒绝重定向,卸载时取消请求并阻止迟到写入。目录失败保留本地价格;DeepSeek 同步失败时仍独立尝试 OpenRouter,并返回最新快照。 - 自动合并只更新未被手改的目录条目,价格指纹随账本持久化;刷新期间的配置改动保留。OpenRouter 完整模型 id 精确匹配,免费变体与聚合路由不被误配,目录不参与其他厂商的模糊匹配。 - 回填仅处理 OpenRouter 零费用桶,保留其他厂商、已记金额和显式价格映射;离线启动先处理快照覆盖模型,首次目录成功后再完成迁移。回归覆盖解析、持久化、并发、故障、生命周期、双端 codec 和真实服务调用。详见[定价说明](docs/openrouter-pricing.md)。 ## [1.7.29] - 2026-09-17 - **#154 市场热安装账本不可用**:dshmarket 的独立 Include 使用文件入口,未被宿主的包名 RPC 扫描发现。插件在文件入口下补注册 Host 清单;通过注入上下文支持注册服务晚到、卸载撤销和重新挂载,正常包名启动沿用宿主注册,保留已有清单的所有权。 - 首屏读取失败按 2/4/8/16/32/60 秒退避重试,成功后恢复原轮询间隔;页面隐藏暂停轮询,并发读取合并,卸载后的迟到结果不再更新快照。“账本不可用”显示底层错误和手动刷新按钮,重试只针对读取。 - 新增真实 Cordis Loader/Include、typert-loader/registry/gateway 的热安装回归与失败对照,覆盖 DSH 0.1.5-rc.1、晚到服务、卸载重装和正常启动;CI 增加报告版本的 Linux / Node 22 检查,保留 Windows/Linux 最新宿主安装及固定源码 RPC 验证。复用等价对象校验器,构建客户端保持在 262144 字节以内。 ## [1.7.28] - 2026-09-16 - **#152 MiniMax 查询域名**:额度卡片新增持久化的 HTTPS 查询域名,留空自动选择官方端点并优先 `www.minimax.cn`;手动模式只查询指定 origin 的新旧额度路径,不跨域回退。网络权限声明补充新国内域名。 - Host / Client codec、配置补丁与账本读写保留 `codingPlans.minimax.baseUrl`;拒绝包含路径、凭据、参数或片段的地址。切换域名、禁用或关闭显示会取消旧请求,旧缓存和迟到结果不能覆盖新来源;并发查询合并,失败遵守刷新间隔,手动刷新可立即重试。 - MiniMax 请求拒绝重定向并限制响应体;回归覆盖新默认域名、国际站回退、自定义域名隔离、非法配置、持久化、发布客户端与双语输入框。复用现有客户端校验器以满足 262144 字节上限。详见[配置说明](docs/minimax-quota-endpoint.md)。 ## [1.7.27] - 2026-09-15 - **#149 源码宿主加载失败**:Host 和 Client 的全部 strict codec 同时提供 `schema` 与 `create()`,修复新版 DSH 源码启动时报 `result codec has no create() factory`,保留 npm 旧宿主的 schema 接口及原有参数/结果校验。 - CI 新增固定上游提交 `0d1f50007f9bca3f52b06e1c3074fa14d5fb0720` 的真实 loader、registry 和双端 RPC 检查。已发布的 DSH 0.1.6-alpha.1 npm 包仍使用旧契约,不能代替源码版回归;既有安装测试继续覆盖 Windows / Linux,并修正回归脚本忽略 `DSH_TEST_NODE_MODULES` 的问题。 - **#140 恢复反馈**:补充手工备份应放在 sessions 根目录外、Zstandard 头帧必须独立且保留换行的说明。真实宿主回归确认工具生成的相邻非规范备份不会被扫描,且未修改帧原样保留;再次明确 1.7.22+ 搜索明细写入插件独立文件,`ignorable: true` 仅用于旧日志修复。详见[恢复说明](docs/session-history-recovery.md)。 ## [1.7.26] - 2026-09-15 - **#146 千问官方 CLI**:额度来源新增官方 CLI,查询当前订阅 Credits 与可选加量包,保留本地估算及其配置。提供刷新间隔、并发合并、超时、输出限额和登录错误提示;不复制登录凭据、不将账号总量写入账本。CLI 订阅到期时间不当作月度重置,缺少周期边界时不生成每 1% / 满窗 Token 估算。详见[使用说明](docs/qwen-cli-quota.md)。 - **PR #145 Antigravity 分组**:保留 @Oct1AtJoe 的提交,新增按来源的「只显示 Gemini 额度」。补齐未知组过滤及全过滤后的空状态,保留真正异常数据的报错;配置、缓存指纹及界面回读均覆盖。 - **PR #147 自定义余额 `CREDITS`**:保留 @Oct1AtJoe 的提交,新增积分单位并支持本机回环 HTTP。补齐小数积分与单位显示,排除美元今日消费和全局货币预算对积分的影响。 - **自定义余额放行 loopback 明文 HTTP**:端点主机为 `127.0.0.1` / `localhost` / `[::1]` 时允许 `http://`,用于只监听回环、不提供 TLS 的本机只读路由(如 `dsh-workbuddy-connect` 的 `/plugins/dsh-workbuddy-connect/status`,可直接读出 WorkBuddy 聚合积分,无需复制凭据)。**非回环主机仍强制 https**,`ftp://` 等其它协议依旧拒绝;判定复用网关层的 `isLoopbackHost`,与 `gatewayQuotas` 同口径。 - 回归覆盖 CLI 真实子进程、登录与格式错误、超时、缓存、并发与切源、账本及 strict codec;网关过滤链路、真实回环 HTTP、重定向拒绝、小数积分与双语设置。复用 RPC 描述符构造,完整客户端仍低于 262144 字节上限。未使用真实千问订阅账号验证。 ## [1.7.25] - 2026-09-15 - **#142 侧栏按模型花费**:新增可折叠卡片,默认关闭、首次收起;支持今日 / 近 90 天、Top-N(1–10,默认 5)、其它模型汇总、占比条及可选输入/缓存/输出 Token。复用设置页分模型账本,按现有 API / Plan 展示口径与币种计算。 - 显示设置可配置卡片位置、总额/Top-1 摘要、默认展开、展开记忆、10–60 秒快照刷新和 Top-1 dock 角标;简化侧栏显示摘要,rail 显示图标并通过悬停查看总额。长模型名省略,金额保留。 - **#143 统一额度卡片**:整合 @UNscientific-9 的实现,保留原始提交;网关、Go、10 家 Coding Plan、自定义余额使用同级卡片,启用项优先,各组保持网关 → Go → Coding Plan → 自定义余额的顺序。标题左侧开关、右侧刷新,逐卡展开和独立刷新;展开与排序不落盘。 - 补齐 Go 卡片内配置,保留网关 4 条 / 自定义余额 8 条上限和重复条目。重排及删除保留对应条目的编辑状态;未保存启用或删除变更时刷新受控,防止错误下标查询。 - 增加模型金额、90 天边界、旧账本、双币种、strict codec、持久化、展开记忆、卡片身份、并发刷新、共享快照轮询与插槽门控回归;完整验证通过,客户端仍低于 262144 字节上限。 ## [1.7.24] - 2026-09-14 - **#139 OpenCode Go 凭据发现**:读取 DSH `llm-pi-ai.providers` 中官方 Go 端点的 `apiKeyEnv`,支持 `opencodego` 等任意路由名。查询与配置状态使用同一候选顺序,保留专用 Key 优先、环境变量和 CLI 登录态回退;下一次刷新读取当前路由配置。 - 仅匹配 `https://opencode.ai/zen/go/v1`(可带尾斜线),不使用 Zen、代理或相似域名路由的凭据;设置和清除 Go Key 只操作专用引用。缺失提示补充模型路由检查路径,详见 [凭据说明](docs/opencode-go-credentials.md)。 - **#140 旧版会话恢复说明**:确认该报告中的 1.7.21 日志写入问题已由 1.7.22 修复;补充插件实际版本检查与桌面端升级说明。已有受影响日志仍需使用带备份的恢复工具。 ## [1.7.23] - 2026-09-14 - **#137 自定义余额靠右显示**:侧栏普通余额行的金额与官方余额一样靠右对齐;长名称省略显示,悬停可查看全名,金额不被名称挤压。查询失败状态采用相同布局。 - 标准与简化侧栏、中英文、180px / 280px 布局已通过浏览器检查;现有全量回归与客户端构建门禁通过。 ## [1.7.22] - 2026-09-13 ### 会话日志与历史恢复 - **#132 / #133 / PR #135**:停止向宿主会话日志追加原生搜索私有事件,解决搜索后重启时整份会话被拒绝读取的问题。保留 PR 的止损目的与作者提交,移除不能证明持久化契约的函数源码探测。 - **原生搜索明细**:真实 usage 继续写入账本,并独立保存于账本旁的逐会话文件;历史导入与币种重算按请求 UUID 合并新明细和旧日志,重复搜索分别计数,重叠记录只计一次。不保存查询、响应正文或凭据。 - **旧会话修复工具**:新增 `dsh-cost-meter-repair-sessions`,默认只读检查;显式 `--write` 时取得宿主内核会话锁,保留原样备份后,只给本插件合法事件补 `ignorable: true`。保留未改动压缩帧;占用、截断、异常或超出预算的日志拒绝写入。详见 [恢复说明](docs/session-history-recovery.md)。 - **#134 版本化日志**:识别 `session.vN.jsonl[.zstd]`,每个会话按数字选择最高代际,同代际优先压缩格式,排除备份、临时文件及非规范名称。历史回填、安装前导入、币种重算和 fork 种子清洗均覆盖新版文件名。 - 已运行过首次自动导入的用户,可在「设置 → 费用 → 用量 → 导入安装前历史」重跑。插件不自动重写宿主日志,也不重新导入用户主动清空的数据。 ### 验证 - Asia/Shanghai 与 UTC 全量回归;DSH 0.1.5-rc.1 / rc.2 真实写盘、冷读拒绝、锁竞争、备份修复、继续追加和再次重启。 - 搜索独立文件落盘、会话金额、坏行恢复、UUID 去重、跨峰谷与双币种重算;版本化日志四条历史路径与重复导入。 - CI 安装测试使用已安装宿主执行真实日志冷读回归,防止仅内存 Session 验证漏掉持久化门禁。 ## [1.7.21] - 2026-09-11 ### 会话与搜索计费、额度切换 - **#130 重启后会话费用**:使用宿主提供的会话头与继承事件数,普通重启不再把已计费用当作 fork 种子扣除;旧投影 checkpoint 自动重放。会话显示优先采用完整账本,保留实时投影回退。 - **#127 子代理费用**:新增「本会话费用包含子代理」开关,默认关闭。按宿主明确的父子关系汇总连续子代理后代,保留 API/Plan 区分;普通 fork 不合并,今日及历史账本不重复入账。 - **#128 原生搜索**:捕获 DeepSeek 官方原生 web_search 的真实响应 usage,按请求时间、渠道和会话入账并保存用量事件。兼容 Node 20/22/24,不替换全局 fetch。未取得完整用量或事件无法保存时提示统计缺口;旧版未保存 usage 的搜索无法精确补回。 - **#129 Codex 探测**:新增默认关闭的 Codex 额度显示开关;未开启时不请求可选插件的 auth/status 端点,消除未安装插件时的启动 404。 - **PR #124 Astra 定价**:纳入 GPT-6 Astra,补齐独立缓存写入费率和单次完整输入超过 272,000 token 的长上下文档位;历史聚合 token 不再被误当成一次长请求重算。 - **PR #125 多账号额度**:网关卡片支持鼠标及键盘切换账号,按来源与账号 ID 保存选择;修复同名账号、重排、空额度、窄栏切换和预警颜色覆盖。 - 构建时压缩完整 CSS,并复用 RPC 描述符公共字段,保留全部功能及 262,144 字节单文件门禁。 ### 验证 - Asia/Shanghai 与 UTC 全量回归;真实 DSH 0.1.5-rc.1 Session/Registry 的重启、fork、checkpoint 与增量恢复。 - Node 20.20.2、22.23.2、24.19.0 的本地 HTTP 原生搜索计量;真实宿主 provider、Cordis 和 Session 接线,无付费调用。 - 浏览器验证空账号及窄栏切换、刷新后保留选择、同卡预警颜色、子代理开关保存及未启用 Codex 时零控制台错误。 ## [1.7.20] - 2026-09-10 ### 简化侧栏修复与优化 - **#121 弹窗关闭**:首次引导新增关闭按钮与 Escape 支持,保存失败或仍在等待时也可关闭。同源浏览器记住关闭状态;关闭不修改显示配置,也不冒称服务端保存成功。设置仍可随时调整。 - **#122 峰谷条恢复**:简化宽栏独立保留峰谷条,修复未开启预算时完全不渲染的问题;预算合并后仍只有一条,继续遵守样式、启用及隐藏配置。 - **#123 面板布局**:分隔线改为卡片自身绘制,浮动提示插入节点时不再改变边框和高度;余额数值右对齐,充值入口移到标签旁并使用矢量图标;压缩千问等额度行的上下留白。 - **今日与预算合并**:简化宽栏显示类似「今日 / 本月预算 · ¥1 / ¥10」,保留周期、悬停明细与按预算周期计算的预警。隐藏今日金额时仍遵守隐藏设置。修正自定义预算周期的翻译键。 ### 验证 - Asia/Shanghai 与 UTC 全量回归通过;新增 256 种显示组合检查,以及失败/等待中关闭、刷新保留、预算周期和充值链接交互回归。 - 在隔离 DSH 0.1.5-rc.1 的实际浏览器页面验证正常设置保存、模拟保存失败后的关闭与刷新、无预算峰谷条、金额对齐、预算合并及提示展开前后布局稳定;截图使用合成数据。 ## [1.7.19] - 2026-09-10 ### 可选简化侧栏(#118) - 新增独立的简化显示开关:统一卡片分区,缩减空白和重复明细,保留费用、额度、预警颜色、刷新操作与悬停详情。 - 面板最多占视口高度的 38%,上限 320 像素;支持面板内滚动及键盘操作,今日金额固定在顶部。 - 更新首次提供「开启简化显示 / 保留当前显示」选择,保存后刷新和重启不再询问;失败可重试,新旧引导串行显示。 - 可在「设置 → 费用 → 显示」调整;关闭后恢复此前标准/紧凑两列偏好,沿用用户隐藏项。 ### 验证 - 双时区全量回归通过,新增选择、保存失败、防重入、RPC、重启持久化、引导顺序与布局恢复回归。 - 在隔离 DSH 0.1.5-alpha.1 浏览器页面实测:示例多提供商配置从 626.19 像素降至 320 像素,英文、深色、窄栏、键盘滚动、悬停详情及设置切换通过。示例使用合成数据,详见[使用与验证说明](docs/sidebar-simple.md)。 ## [1.7.18] - 2026-09-10 ### DeepSeek 9 月定价 - Flash 自北京时间 9 月 10 日 12:00 使用新价:谷价人民币 0.02 / 1 / 4,美元 0.003 / 0.15 / 0.60(每百万 tokens),峰价两倍。 - 此版本错误加入了 V4 Pro 转 Flash 价规则,已在 v1.8.33 按 [#292](https://github.com/Han-1413141/dsh-cost-meter/issues/292) 修正;Pro 应保持独立官方价格。 - 升级可识别的旧官方表,防止旧文档同步回滚;保留自定义价格与第三方渠道。仅用完整日志修正生效后的账本,缺失日志保留原金额。 - 修复人民币价格目录挂载及旧配置加载时混入美元默认历史的问题;设置页按当前时刻显示价格。 - 新美元报价以腾讯云官方厂商直连公告交叉核验,DeepSeek 主价格文档核验时仍为旧价;人民币报价及 Pro 日期来自控制台公告。币种与汇率不自动修改,详见[政策与换算说明](docs/deepseek-pricing-2026-09.md)。 ### 验证 - Asia/Shanghai 与 UTC 全量回归通过,覆盖切价边界、历史账单、RPC、双币种目录、旧配置升级及完整/缺失日志回放。 ## [1.7.17] - 2026-09-09 ### SCNet 外部控制台额度快照 - **整合 PR #114**:支持读取账本目录的 `scnet_official.json`,有效时以快照的已用 Credits / 总额度展示;不把其他工具的用量写进本地账本。 - **数据契约**:严格校验有限数值,保留 Credits 小数和采集时间;区分 `fetchedAt`(兼容 `at`)与可选 `resetsAt`,不再把采集时间作为重置时间。中英文界面明确标记外部控制台快照。 - **失效回退**:缺失、不可读、损坏、超过 16 KiB、未来时间、采集超过 24 小时或已跨周期时回退原有本地估算;采用有界异步读取,状态组装等待本地快照,不使用旧缓存冒充最新读取结果。 - **接入说明**:新增双语格式和原子写入建议。外部采集器由用户提供,插件不负责登录或自动采集;切换账号/套餐时应更换快照。 ### 项目审查修复 - **SCNet 渠道隔离**:本地估算只计 SCNet 订阅渠道,遵守显式 Plan/API 分类;其他渠道的同名模型不再消耗 SCNet Credits。前后端补齐订阅别名,历史分类进行幂等迁移,保留原始用量与等值金额。 - **自定义余额校验**:空白、布尔值、十六进制等无效金额不再被强转成零或其他数字;可选预算/支出缺失时保留为空。 - **请求边界**:自定义余额和网关按实际响应流限制大小,超限立即取消读取;无效 JSON 错误不包含响应片段。调用方取消后停止重试,退避等待也及时结束。 - **凭据脱敏**:动态占位符不再豁免同一请求头里的静态密钥。混合模板保留为待手动迁移项,阻止写入账本与下发浏览器;纯凭据引用继续可用。 - **测试隔离**:全量回归使用独立临时目录,避免并行时区测试互相覆盖或删除数据。 ### 侧栏提示 - **侧栏提示(PR #117)**:移除额度行的原生 `title`,避免与卡片 Tooltip 重叠;保留完整窗口名称、百分比方向、重置时间和倒计时。回归覆盖 MiniMax、通用 Coding Plan、网关和 Codex 卡片的展开/收起状态。 ### 验证 - Asia/Shanghai 与 UTC 全量回归通过;覆盖快照、渠道分类、异常余额、流式读取、取消请求、凭据脱敏及迁移。 - DSH `0.1.2-rc.1`、`0.1.3-alpha.2`、`0.1.5-alpha.1` 的安装包与当前 alpha.2 的本地链接加载验证通过;补入 `0.1.5-alpha.1` 精确兼容声明及相应宿主 peer 范围。费用设置页、合成用量及 SCNet 回退检查见[兼容记录](docs/host-compatibility.md);[审查记录](docs/project-audit-v1.7.17.md)说明证据与边界。 ## [1.7.16] - 2026-09-08 ### 侧栏布局与额度悬停提示 - **紧凑两列(PR #112)**:每个额度窗口恢复单行布局,长标签按可用宽度省略,进度条和百分比保留。 - **重置倒计时(PR #110)**:MiniMax、Codex、通用 Coding Plan 和网关卡片展示完整窗口名、百分比方向、重置时间与剩余时长,悬停或键盘聚焦时更新。补齐中文/英文配置传递、无效日期过滤和到期语义,多账号网关保留来源前缀。 - **构建可移植性**:以构建脚本所在目录解析源码及产物,移除贡献者电脑的固定 esbuild 路径。 ### 验证 - 新增实际客户端函数与组件回调回归,覆盖双语、到期边界、无效日期、剩余方向和四类卡片的交互刷新;浏览器使用合成窗口数据检查标准/紧凑布局。 - 宿主兼容声明沿用 1.7.15 的独立宿主证据,本次未新增宿主版本声明。 ## [1.7.15] - 2026-09-08 ### 千问渠道隔离与 DeepSeek 默认峰谷计价 - **千问 Credits(#108)**:保留 provider 维度,仅折算 `qwen`、`qwen-tokenplan`、`qianwen-tokenplan`、`qwen-token-plan`、`qianwen-token-plan` 订阅渠道(支持 `llm-` 前缀);同名模型经 `qianwen` 等按量渠道调用时不消耗订阅估算额度。显式 API 分类继续优先,前后端分类一致,升级时同步历史 API/订阅金额。 - **默认峰谷价(#109 排查)**:内置美元/人民币默认价及官方同步结果保留完整峰、谷和历史档位。修复未知/缺失模型或显式默认映射在峰时套用谷价、费用约少算一半的路径;未改变官方单价和峰谷时段。原 issue 未提供模型配置及逐次日志,截图中的具体调用路径仍待反馈者核实。 - **历史修复与配置保留**:仅为符合旧内置三桶数值、没有自定义档位的默认价执行一次补齐;按完整会话日志逐事件修复受影响金额,保留 token、未选中模型和无明细残差,缺失或不完整日志保持原金额。修复重放时遗漏旧模型键校验及分段日志合并问题,投影升版以重建历史金额。 - **默认价格编辑**:默认价卡片采用完整记录替换,主动清空档位后保存、重载不会被深合并复活。 ### 验证 - Asia/Shanghai、UTC 全量回归;新增真实服务的同名渠道 Credits 用例,前后端美元/人民币峰、谷、周末、历史计价一致性,以及迁移、缺失日志、分段日志、配置清空与幂等检查。 - 未取得 #109 反馈者的原始账本,不能将此修复视为对其全部历史费用的逐笔核对。可重放的默认价调用自动修复,其余记录保留原金额。 ## [1.7.14] - 2026-09-08 ### 设置保存、隔离调用计费与宿主适配 - **子代理与后台调用(#101)**:将 `llm/stream` 账本监听设为全局,接收隔离 LLM 服务的 usage。子会话保持各自记录,不重复计入父会话;无会话调用进入日/月总计。直接请求外部 API 且不向宿主上报 usage 的插件调用仍无法统计。 - **千问费率行(#103)**:新增行和未填齐的三项费率留在本地编辑状态,完整后才自动保存,避免服务端清洗空对象导致行消失。补齐输入/缓存/输出标签,修复带点号、连字符的模型名覆盖匹配;清空三项或移除时真正删除旧费率。 - **未知模型移除(#104)**:清除手动映射并持久隐藏该行,刷新后不再从账本重建;新增恢复入口,用量记录保留。费率与映射表采用整表替换,避免深合并恢复已删除的键。 - **侧边栏与网关(PR #102 / #105)**:保留并整合社区贡献的 Antigravity 友好分组名、长标签布局、标准/紧凑两列切换及 daily 双语标签;补充紧凑模式下的长标签和进度条宽度约束。 - **宿主依赖预检(#106)**:DSH 凭据和路径模块移为宿主提供的 peer dependencies,避免安装第二份旧宿主包;`zod` 继续精确锁版。添加 `0.1.2-rc.1`、`0.1.3-alpha.2` 的精确兼容声明,无法获取官方安装包的 `0.1.3-alpha.1` 保留 unknown。[兼容验证记录](docs/host-compatibility-v1.7.14.md) - **安装 CI**:Windows、Linux 均安装本次被测提交,避免旧发布 tag 或 master 的安装成功掩盖 PR 回归。 ### 验证 - Asia/Shanghai、UTC 全量回归;新增双语设置真实回调/配置往返测试,以及真实 Cordis 隔离服务用量回归。 - 两个隔离 DSH 宿主通过安装、启动、宿主模块路径复用、三条合成 usage 入账及卸载检查,卸载后账本保留;alpha.2 实际 Web 页面完成费率、移除/恢复、刷新持久化和侧边栏视觉检查。 - 没有发起模型请求;未验证 Desktop 整壳、alpha.1 运行时或指定记忆插件的真实外部账单。DSH STORE 重新上架取决于新固定 commit 的自动复检结果。 ## [1.7.13] - 2026-09-06 ### 千问余额与网关查询稳定性 - **千问 / 阿里云余额(issue #98)**:额度页新增专用入口,使用 RAM AccessKey 调用阿里云中国站 `GetFundAccountAvailableAmount`;显示可用金和响应币种,与千问 Token Plan 额度独立。ACS3 签名仅在服务端执行,密钥沿用 DSH 只写凭据库,支持环境变量和可选 STS token;固定官方端点、拒绝重定向、响应限制 256 KiB,错误响应不伪造零余额。 - **CLIProxyAPI 暂态重试(PR #99,YiHui-Liu 贡献)**:管理端和封装的上游 `408 / 429 / 500 / 502 / 503 / 504` 最多重试一次;管理端优先按 Retry-After 等待(上限 5 秒),否则退避 300ms。认证、策略、重定向、解析错误不重试。审查补充错误响应体释放与重试耗尽回归,防多账号轮询占用连接池;缩短 Codex 主限额窗口标签。 - **余额设置**:最后一条自定义余额也可删除,并清掉旧单条配置镜像,防止加载后重新出现;带空白的 `{{ VAR }}` 凭据引用同样参与缓存作废。 - **发布同步**:本版包含已合入 master、尚未发布到 npm 的 1.7.11 / 1.7.12 修复,包括网关侧边栏显示、来源卡片折叠及删除、客户端源码文件大小约束和安装脚本的 tag 窗口期处理。 ### 验证 - 全量回归在 Asia/Shanghai 与 UTC 下通过;新增签名、金额/币种、鉴权、响应大小、凭据存储/移除、RPC strict codec、网关重试边界和双语界面组件交互测试。 - 隔离的 DSH 0.1.2-alpha.5 宿主成功加载插件;客户端重新构建并通过初始化执行和 256 KiB 大小检查。 - 未使用真实阿里云账户查询;浏览器工具未能打开本机测试页,界面验证采用真实组件及回调测试。 ## [1.7.12] - 2026-09-03 ### DSH STORE 重新上架修复(issue #239:更新暂缓 + 兼容性暂时下架) DSH STORE 固定 Commit 自动复检对本仓库给出两条确定性整改原因,本版逐一清除: - **runtime source 超单文件审核上限**:人类可读源码 `src/client.js` 437,004 字节,超过 DSH STORE 自动审核的 256 KiB(262,144 字节)单文件上限——此前只有压缩产物 `lib/client.js`(261,598 字节)受控贴线,源码侧从未设防。浏览器端是单个 `__ModuleLoader__` factory 闭包,无法按 ES 模块拆分,现按区段切为 `src/client/` 三个**顺序片段**(01 样式+i18n / 02 校验器+助手+侧边栏 / 03 设置页+主体,101,630 / 165,068 / 171,182 字节),`scripts/build.mjs` 按文件名排序拼接后仍经 esbuild 压缩生成 `lib/client.js`。切片本身不改变程序文本——切片当步的压缩码与 v1.7.11 逐字节一致(仅生成头注释指向更新),vm 编译与执行门禁照跑。 - **DSH_LATEST_THREE_COMPATIBILITY_HOLD**:`package.json` 新增 `dsh.compatibility` 块,对官方最新三个 DSH 发行版(0.1.2-alpha.3 / 0.1.2-alpha.4 / 0.1.2-alpha.5)逐项声明 `dshReleases: compatible`(与既有 `dshhub` 范围声明 `>=0.1.0-rc.5` 同口径)。DSH STORE 规则:仅范围匹配不足以保留上架资格,必须有逐版本精确记录;同时补齐 `dsh.compatibility.dsh` 范围与 `os` 声明(darwin/linux/win32,对齐商城既有的三系统条目),manifest 端兼容声明完整。 - **SemVer 1.7.11 → 1.7.12**:DSH STORE 仅接受「插件 SemVer 高于商城版本(1.5.7)」的新固定 Commit;版本链五处对齐(package.json / install.ps1 ×3 / 双语 README 徽章与安装行)。 ### 网关(CLIProxyAPI)额度侧边栏卡片(issue #96) - **`display: sidebar/both` 此前是未接线开关**:宿主侧每个刷新周期正常下发 `state.gatewayQuotas`,但客户端侧边栏渲染路径(`SidebarFooter`)没有任何 gateway 分支——配置好 CPA 并开启侧边栏显示后什么都看不到(issue #96 的证据链:gateway UI 仅存在于设置页面板)。 - **现按来源出卡**:来源启用 + `display` 为侧边栏/两者 + 快照有账号数据(`ok`/`partial`/`stale`;`error`/`loading`/`off` 留在设置页展示)才渲染,挂载在计划卡之后、Codex 探测卡之前,`SidebarFooter` 早退条件同步纳入。行渲染复用 MiniMax 卡(已用口径,≥80 warn / ≥100 over,进度条方向跟随 `barDirections.plan`);多账号时行标签加 Provider 前缀(`GATEWAY_PROVIDER_LABELS`),行数上限 4 防撑爆;仅有 credits 无窗口的账号(如 WorkBuddy)退化为文本行。卡片可点击触发 `refreshGatewayQuota`,窄栏(rail)显示百分比方块,tooltip 含各窗口重置时间与抓取时间。i18n 全部复用既有网关键,无新增文案。 - **bundle 转 UTF-8 原文输出**:esbuild 增加 `charset: 'utf8'`——宿主模块路由本就按 `text/javascript; charset=utf-8` 下发、页面亦为 UTF-8,此前默认把全部中文转义成 `\uXXXX`(每字 6 字节 vs 原文 3 字节)纯属浪费。仅此一项 `lib/client.js` 从 261,614 降至 246,238 字节;叠加 #96 卡片后 **248,282 字节**(上限 262,144,余量回到 ~13.9 KB)。顺带清理死文案键 `periodCustom`(zh/en 各一处,全源无引用;`barDirection_*` 键经 `t('barDirection_' + kind)` 动态引用,保留)。 ### 验证 - `node scripts/build.mjs`:三片段拼接 → **248,282 字节**(上限 262,144); - `test/verify.mjs` 新增 **issue #96 侧边栏接线回归**(display 门控 / 状态白名单 / 挂载顺序 / miniMaxRow 复用 / credits 兜底 / 点击刷新 / `charset: 'utf8'` 契约与产物无 `\uXXXX` 转义); - `test/verify.mjs` 新增 **src/client/ 逐片段字节门禁**(每片 ≤ 262,144,与 DSH STORE 审核同口径),31 处源码文本断言改读 `readClientSource()` 拼接视图(与 build 同口径),防下一版再卡同一道门禁; - 全量测试通过;`scripts/release.mjs --dry` 五处版本引用对齐检查通过。 ## [1.7.11] - 2026-09-03 ### 网关额度(CLIProxyAPI)设置 UI 修复 - **仅剩一个来源时删不掉**:「删除来源」按钮此前仅在来源数 > 1 时渲染,最后一个来源永远删不掉、面板删不空。现在按钮始终渲染,可一路删到 0,面板回到「尚未配置网关来源」空态。 - **来源卡片一直展开占位**:每张来源卡片改为可折叠——标题行三角展开/收起,默认收起只占一行,收起时标题旁显示该来源的实时状态;「添加来源」新增的卡片自动展开便于直接填写。与历史 / 价格表等折叠面板同一交互(`collapseHeader`)。 - **补漏**:`gatewaySourceFetchedAt` 文案键此前缺失,状态行里的抓取时间会直接显示键名;现补上中英文案。顺带删除客户端字典里从未使用的 `credentialUnknownTarget`(宿主侧另有带 `{target}` 插值的同名文案,客户端这份是死键),并把六处重复的折叠标题行 JSX 合并为 `collapseHeader` 助手——客户端 bundle 有 262,144 字节的 DSH STORE 单文件上限,本次修复后 261,598 字节。 ### install-smoke 窗口期误红修复 Windows leg 跑 `install.ps1`,而脚本固定到发布 tag——发版链合入 master 到 tag 推送之间有一个「tag 尚不存在」的窗口(v1.7.10 实测:合并后 18 分钟才补 tag,CI 已红)。现 install-smoke 优先安装固定 tag;tag 未推送时退回本次被测提交 SHA 冒烟并在日志明示。`install.ps1` 新增 `-Rev` 参数供 CI 覆盖安装 rev,默认行为不变(仍固定 tag)。 ## [1.7.10] - 2026-09-03 ### 紧急修复:v1.7.9 浏览器端 bundle 仍然 TDZ 崩溃(第二个 Ge) **现象**:v1.7.9 修复了 Desktop 宿主侧的模块环,但 dsh 仍报 `failed to import loader entry …(dsh-cost-meter): Cannot access 'Ge' before initialization`——这次崩在 web 客户端 bundle:宿主 `__ModuleLoader__` 首次调用 client factory 即抛错。 **根因**(与 v1.7.8 是**两处独立的雷**,错误文案恰好相同):v1.7.8 的 gateway 提交(经 v1.7.9 重新合入保留)在 `src/client.js` 写下了自引用常量 `const GATEWAY_PROVIDERS = GATEWAY_PROVIDERS`——网关 Provider 白名单的真值从未给出,esbuild 压缩后即 `const Ge=Ge`,factory 求值到该语句必然 TDZ。v1.7.9 的无环回归只覆盖宿主侧 `lib/*.js`(且 client.js 被显式排除),浏览器端 bundle 门禁又只编译不执行,双双漏过。 **修复**:改为与服务端 `lib/store.js` 的 `GATEWAY_PROVIDER_IDS` 完全一致的六家字面量数组(antigravity / claude / codex / kimi / xai / workbuddy);重建 `lib/client.js`(262074 bytes,仍在 262144 DSH STORE 上限内)。 **验证**:新增浏览器端 bundle **执行**门禁——vm 内用良性 DOM 桩真正执行 bundle 顶层并全程求值 factory,任何初始化期引用错误(自引用 const / 顶层 use-before-init)当场失败;v1.7.9 形态在此门禁下必崩(已复现),修复后全量测试绿。 ## [1.7.9] - 2026-09-03 ### 紧急修复:v1.7.8 在 DSH Desktop 无法启动(ESM 循环导入 TDZ) **现象**:v1.7.8 在 DSH Desktop 上加载即报 `failed to import loader entry …(dsh-cost-meter): Cannot access 'Ge' before initialization`(Ge 是 CODING_PLAN_PROVIDER_IDS 的 minified 名)。 **根因**(非 PR #90 引入,是 v1.7.6 埋的雷被引爆):v1.7.6 把 `looksLikeSecretHeaderValue` 放在 store.js 并让 custom-balance.js 导入它,叠加既有的 store → plan-billing → coding-plans → custom-balance 边,构成 ESM 环 `coding-plans → custom-balance → store → plan-billing → coding-plans`。环上 `plan-billing` 顶层有 `PLAN_PROVIDER_IDS = [...CODING_PLAN_PROVIDER_IDS, 'go']`(模块初始化即读邻居导出)——原生 ESM 的固定执行序掩盖了环,但 Desktop 的模块加载顺序不同,环重排后顶层 const 处于 TDZ。v1.7.8 新增的 gateway 模块改变了加载图,恰好把环翻转到了崩溃序。CLI(dsh web)两种加载序都能跑,所以此前冒烟未暴露;独立首导入 `coding-plans`/`plan-billing` 在 1.7.7 与 1.7.8 同样必崩(已复现)。 **修复**:把 `looksLikeSecretHeaderValue`(及其私有正则助手)迁到 **net.js**——插件里唯一零本地依赖的底层模块(store / custom-balance / coding-plans / gateway 全都依赖它);custom-balance.js 改从 net.js 直接导入;store.js 保留 re-export 兼容既有消费方。导入图自此**无环**,任何加载顺序都不再可能触发 TDZ。 **验证**:新增回归块——导入图静态无环断言(DFS)+ 六个环敏感模块各自独立子进程首导入(1.7.8 形态必崩的用例)+ re-export 绑定一致性;双时区全量绿;dsh web 实机冒烟绿。 ### gateway 功能重新合入 v1.7.8 的 CLIProxyAPI 网关额度层(六家 Provider + WorkBuddy,详见 1.7.8 条目)在破环修复之上重新 cherry-pick 合入,功能与 1.7.8 完全一致。发布顺序:master 先 revert 到 v1.7.7(0ddcbe6,恢复用户可用)→ 破环修复(b095a36)→ gateway 两个提交重新合入。 ## [1.7.8] - 2026-09-03 ### 新功能(issue #87 / PR #90:CLIProxyAPI 网关额度适配层) 新增独立的「网关额度(Gateway quota)」数据源层,经 CLIProxyAPI(CPA)Management API 查询多账号多 Provider 的额度窗口——与既有直连 Coding Plan 并列,而不是塞进 codingPlans(单厂商/单 key 模型装不下多账号/auth_index 结构)。由 CDeZT 贡献 PR #90,本地审查后合并。 - **配置**:`config.gatewayQuotas.sources`(上限 4 个):id / baseURL(仅 loopback 默认放行,远程主机须显式加 allowedHosts 精确匹配)/ includeProviders / 刷新间隔 / 显示位置;严格校验(origin 形状、精确 host[:port] 白名单、非 loopback HTTP 须显式 allowInsecureHttp);顶层数组旧草案形态加载时自动迁移。 - **凭据**:Management key 走 v1.7.6 的 customVar 凭据机制(write-only 输入框、只进 DSH 凭据库、不落盘不回显);派生变量名 CLIPROXYAPI_MANAGEMENT_KEY__ 经 config.keyVar 下发给客户端定位。 - **Provider 适配器**(纯函数层,注入时钟,不猜语义):Antigravity(三端点回退的配额摘要,5h/weekly)/ Claude(OAuth usage,5h/7d/模型级周窗)/ Codex(usage,主/副窗+code review 限额)/ Kimi(usages,5h/周窗)/ xAI(grok 代理的周 credits + 月 billing 只读双端点)/ WorkBuddy(插件管理面 credits)。percent 语义唯一为**已用** 0–100。 - **传输安全**:插件自身只请求 CPA 管理端点(auth-files / api-call / workbuddy credits),上游 Provider URL 仅作为 api-call body 由 CPA 转发(token $TOKEN$ 在 CPA 侧替换,永不进插件);auth-files 只取白名单字段(auth_index/provider/email/plan 等),token/cookie/id_token 一律丢弃;响应体上限 256KB;redirect 拒绝;错误消息脱敏(URL → [endpoint])。 - **副作用端点硬闸**:FORBIDDEN_REQUEST_MARKERS(消费积分/对话补全端点)在 apiCall 发出前强制比对,命中即拒发——额度表绝不允许产生计费副作用(review 修复:PR 只定义未实装,本版接线)。 - **缓存与容错**:每 source 独立缓存 + inFlight 去重 + last-known-good(失败时 stale 状态保留上次快照);配置指纹变化作废缓存;逐账号错误不拖垮整个 source(partial 状态)。 - **UI**:额度页新增「网关额度」面板——per-source 刷新/启停/白名单/凭据输入,account 级窗口进度条(复用既有 Go/Plan 条样式);RPC refreshGatewayQuota(sourceId?)。 - **兼容**:旧客户端/state 快照经 optional 字段自然降级;managementKey 等密钥字段在补丁/落盘/下发三条路径全部剥离。 ### 审查修复(合并前) - FORBIDDEN_REQUEST_MARKERS 从死代码改为 apiCall 内实装闸门(URL+data 序列化比对),附行为级回归测试(拒发路径 fetch 恒不调用); - refreshGatewayQuota 的三处英文硬编码消息并入 tmsg 双语体系; - 移除 package.json 中多余的直连上游网络权限(chatgpt.com/googleapis/grok.com/x.ai——插件不直连这些域,所有请求经 CPA); - 修正指向不存在文档(gateway-design.md / protocol-evidence.md)的注释;构建 keepNames 关闭(客户端不依赖函数名,262,019 字节 < 262,144 上限)。 ### 验证 - verify.mjs 新增两大块(纯 parser/registry/负边界 + 宿主传输安全/鉴权失败/redirect 拒绝/畸形 auth/WorkBuddy + 副作用闸门);双时区全量通过;dsh web 实机启动冒烟通过。 ## [1.7.7] - 2026-09-02 ### 修复(issue #88:大日志回填 OOM;issue #89:对账余额变动口径) - **回填流式化(issue #88,P0)**:用户实测一份 168MB(压缩后)的 `session.jsonl.zstd` 在启动回填时把 Electron 主进程堆耗尽崩溃(STATUS_BREAKPOINT),且同步解压全程占住事件循环(agent 界面卡死)。旧缓解(逐帧解压)只压了解压峰值,records 数组物化与巨长打包行的整行 JSON.parse 仍在。现三层防御: - **流式迭代器 `iterateSessionRecords`**:分块读文件(8MB) + 增量扫描帧边界,完整帧立即解压逐行产出并释放引用——任一时刻只持有单帧解压结果;每 64 帧 / 4096 事件 `setImmediate` 让出一次,回填期间宿主 UI 保持响应; - **打包行探针**:超 4096 字节的行先看头部 512 字符,命中 `text-chunks`/`reasoning-chunks`/`tool-call-chunks` 模式直接跳过,不再付出巨长行的 JSON.parse 瞬时峰值; - **解压预算**:单文件累计解压超 4GB 抛错(防解压炸弹),调用方按「单文件损坏」跳过,绝不拖崩主进程;结构损坏(连续一个分块无完整帧)按旧版全量扫描语义停止。 回填/导入/重算/fork 清洗四条路径全部切到流式读取。 - **对账「官方余额当日变动」口径(issue #89)**:赠送余额(granted)当日到期归零时,total 减量混入整块赠送失效金额——不是消费,与账本今日费用必然对不上,造成「变动虚高」误报。现该日重置基准不对账(与既有「授予增加→重置」守卫对称),从零余额起继续对账;granted 维持剩余的场景口径不变。 ### 验证 - verify.mjs 新增回归块(19-1/19-2/19-3):打包行探针行为、流式迭代器语义(多帧跨块行/解压预算抛错/结构损坏停止/打包行过滤)、大日志流式回归(500 事件+500 打包行,只保留事件行);对账新增赠送归零日重置 + granted 剩余场景两用例。 - 双时区全量通过;`dsh web` 实机启动冒烟通过;lib/client.js 无变化(262,062 字节)。 ## [1.7.6] - 2026-09-01 ### 安全与体验(issue #86:自定义余额凭据治理) - **明文密钥永不落盘/下发**:v1.6.8 的密钥治理只覆盖 goQuota/codingPlans 专属字段,自定义余额请求头里的明文 key(`Bearer sk-…`、`X-Api-Key: …`)会原样写进 `ledger.json` 并随 getState 抵达浏览器。现 `stripSecrets`/`stripSecretPatch` 对 `customBalances[].request.headers` 按值形态判定脱敏——敏感头名(Authorization/api-key/token/secret/cookie 等)的非占位符值、典型密钥形状(Bearer/sk-/AIza/ghp_/JWT/≥32 位混合长串)一律置空;`{{VAR}}` 占位符与普通头(Content-Type 等)照常保留。落盘、下发、补丁三条路径同一闸门。 - **存量明文自动迁移**:启动时把请求头遗留明文导入 DSH 凭据库,并把头值替换为 `{{CUSTOM_BALANCE_KEY_…}}` 占位符(名称由条目 host + 头名稳定哈希派生,跨重启一致,重启后功能不丢)。与 runSecretMigration 同一套结局语义:凭据库已配置不覆盖、不可写保留明文并提示,绝不静默丢密钥。 - **凭据外带防护覆盖明文 key**:`usesCredentials` 判定从「{{VAR}} 占位符」扩展到「占位符或疑似明文密钥」——明文 key 发往白名单外主机同样直接拒绝(此前明文完全绕过 allowedHosts 校验,恰是最常见的外带场景)。 - **UI 补齐**:条目面板新增「凭据白名单主机」输入框(allowedHosts,逗号分隔,此前有字段无 UI);「凭据输入」区为请求头中每个 `{{VAR}}` 占位符渲染 write-only 输入框(经 setCredential 新增 `customVar:` 目标写凭据库,状态经 `customVarStatus` 下发,写后作废相关余额快照缓存);「请求头 (JSON)」上方新增变量命名规则说明(`_API_KEY`:Provider ID 大写、非字母数字换下划线,与模型页同名即共用同一把密钥)。 - **文档**:中英 README 补 `allowedHosts`、`{{VAR}}` 占位符、命名规则、明文迁移与白名单行为说明。 ### 验证 - verify.mjs 新增回归块(18-1/18-1b/18-2/18-3/18-4/18-5):启发式判定、脱敏三路径(落盘/下发/补丁,含旧单条键)、迁移三路径(成功/已配置/不可写)+ 幂等、customVar e2e(写入/非法名/保留前缀/内置冲突/移除/状态下发)、外带防护覆盖明文 key、客户端与 schema 接线。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);`dsh web` 实机启动冒烟通过(端口 3998/3999,插件加载无报错);lib/client.js 重建 262,062 字节(上限 262,144)。 - 构建脚本字节口径统一:build.mjs 改用 UTF-8 字节(与 verify.mjs 门禁一致,此前为 UTF-16 字符数,中文文案下两者有差)。 ## [1.7.5] - 2026-09-01 ### 修复(issue #85:GLM-5.3 定价与目录缺失) - **GLM-5.3 补价**(z-ai 目录):此前标记 `unpriced` 的依据「官方/Zen 均未公布单价」已不成立——智谱官方定价页已公布(国内 ¥8/¥28/缓存 ¥2),现按 OpenCode Go 目录核价收录 **$1.40 / $0.26 / $4.40**(输入/缓存/输出;与 Cloudflare Workers AI 目录一致,notes 注明国内直连价差约 20%)。 - **新增 GLM-5.3-Flash**(Ox Alpha 普惠版,2026-08-26 发布):z-ai 与 OpenCode Go 双目录收录 **$0.15 / $0.03 / $0.50**;大小写/归一化匹配命中;扩展目录家族(GLM-5 Flash / GLM Flash)同步,可挂载编辑。 - **同步范围消歧**:设置页「数据与同步」区新增说明——「从官方文档同步价格」仅更新 DeepSeek 官方模型价(含峰谷档),第三方扩展目录价不随该按钮变化(随插件版本发布维护,可在拓展价格表挂载编辑或经模型名匹配手动指定),消除「按钮会更新所有提供商」的歧义。 - docs/provider-pricing.json(随包发布)再生成同步。 ### 验证 - verify.mjs 新增回归块(三档价锁定/双目录命中/大小写归一/扩展目录收录/发布 json 同步/计价冒烟 $0.65);更新旧断言「GLM-5.3 维持 unpriced」为已核价形态。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);lib/client.js 重建(261,301 字节,上限 262,144)。 ## [1.7.4] - 2026-09-01 ### 维护(依赖升级,#82/#83/#84) - **生产依赖**:`@deepseek-ai/dsh-credentials` 与 `@deepseek-ai/dsh-home-paths` 0.1.0-rc.6 → **0.1.0-rc.8**;`zod` 4.4.3 → **4.5.1**(devDependencies `esbuild` ^0.28.1 → ^0.28.2)。 - **兼容性验证**:本地冻结安装(`pnpm install --frozen-lockfile`)下全量 104 测试块通过(本地 +8 与 TZ=UTC)、dsh 宿主级 typert manifest 校验通过、`dsh web` 实机启动冒烟通过;rc.8 的 peer 树(dsh-invariants@rc.8)与宿主 rc.1 共存无冲突。 - **锁版门禁断言修正**:此前断言硬编码具体版本号(`zod 锁定 4.4.3` 等),任何 Dependabot 升级都会误报红——这是三个 PR CI 全红的根因(升级本身无问题)。现改为锁「精确版本格式 + zod 大版本 4」,并新增 workspace 排除表与 package.json 锁版的一致性断言(升级漏改 `pnpm-workspace.yaml` 的 `minimumReleaseAgeExclude` 会在测试期暴露,而不是 CI 安装失败)。 - pnpm-workspace.yaml 排除表与 lockfile 同步升级到 rc.8 / 0.28.2。 ## [1.7.3] - 2026-09-01 ### 改进(issue #65 讨论:中转链路缓存字段未上报的显式标注) - **背景**:经中转/代理(如 cherrystudio)调用时,usage 里的缓存扩展字段(`prompt_cache_hit_tokens` 等)可能被剥离,或中转请求导致 prefix cache 真实未命中——两种情况插件端缓存命中都恒为 0,界面显示「命中率 0.0%」且金额按全未命中价计(上界),此前无从区分「真零命中」与「数据缺失」,造成「金额比官方账单高」的观感。 - **改进**:按模型统计新增「未上报?」标注——累计 ≥3 次调用、非缓存输入 ≥100k token 而缓存命中恒为 0 时(直连 DeepSeek 的 prefix cache 在此形态下几乎必然命中),命中率单元格显示「未上报?」、费用与命中率行均附 ⚠ 悬停说明:命中率无法统计、金额为全未命中价上界、直连官方 API 可恢复准确缓存命中。真零命中(单轮/短上下文/冷启动)不满足量级阈值,不会被误标。 - **边界说明**:插件无法恢复被剥离的数据或修复中转导致的真实缓存未命中(请求由宿主/中转组装,插件仅为计量方)——本改进是消除误导性显示,不是恢复数据。 ### 验证 - verify.mjs 新增回归块:判定函数行为级(多轮长上下文恒零命中标注/有命中不标/量级不足的真零命中不标/空桶安全)+ 接线哨兵(单元格文案/双 tooltip/阈值锁定)。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);lib/client.js 重建(260,211 字节,上限 262,144)。 ## [1.7.2] - 2026-09-01 ### 修复(issue #81:对账警告同句币种符号不一致) - **现象**:余额对账触发 drift 警告时,同一句话出现「本地账本今日官方渠道费用 **$3.99** 与官方余额当日变动 **¥42** 偏差较大」——本地费用侧恒用 `$`(账本美元口径),而余额变动侧按账户真实币种(CNY)显示 `¥`,同句混排误导。 - **修复**:两侧统一由同一币种判定驱动——余额账户为 CNY 时,本地费用按展示汇率折算为 `¥` 显示并附 `≈$` 参考值(与变动侧的 `¥ 原生 + ≈$` 对称);USD 账户维持两侧均为 `$`。折算率与展示口径一致取设置中的汇率(非法回落 7.2)。 ### 验证 - verify.mjs 新增 2 个回归块:源级接线(currencyOf 统一判定/nativeCost 折算/spentCurrency 单点读取)与 e2e(注入 CNY 账户余额查询触发 drift,断言警告文案两侧均为 ¥ 且 cost 侧附 ≈$)。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑)。 ## [1.7.1] - 2026-08-31 ### 修复(P0:v1.7.0 导致 dsh 无法启动) - **根因**:v1.7.0 给 `refreshCustomBalance` 新增的 `index` 参数,其 codec **裸传了 zod schema**(而非 typert 契约要求的 strict codec 对象 `{ mode: 'strict', typeSymbol, schema }`),typert-loader 在注册期即拒绝——**整个插件树加载失败,`dsh web` 无法启动**(`typert-loader: parameter codec must use a strict codec`)。verify 只测服务端逻辑,测不到 manifest 注册层,因此逃过了发布前检查与 CI。 - **修复**:两侧 manifest(宿主 typert.host.js + 客户端)的 `index` 参数改为 strict codec 对象;并补 `acceptsUndefined: true`(网关按 wire 字段是否在 args 中判缺失,无此标志的 json 参数缺省会以 `arguments-invalid` 拒绝调用)——旧客户端的无参调用(等价全量刷新)继续可用。 - **回归加固**:verify.mjs 新增「宿主级 manifest 校验」块——直接调用本机安装的 dsh 携带的 `dsh-typert-loader` 导出的 `validateTypertManifest`,对本插件真实 TYPERT 清单全量校验(所有参数/result codec 的 strict 形态逐项断言;无宿主环境时退化为形态自检)。此类错误此后在测试期即暴露,不再等到用户启动失败。 - 附:用户侧观察到的 `dsh-typert-registry/client.js failed to load` 是宿主自身组件的浏览器端加载问题(与本插件无关,本插件不依赖也不引用该包);本机实测 v1.7.1 修复后 `dsh web` 正常启动。 ### 验证 - 全量 101 块通过(TZ=本地 +8 与 TZ=UTC 双跑,含新增宿主级 manifest 校验块);本机 web profile(link: 本仓库)实测 `dsh web` 启动成功、无 typert 报错;lib/client.js 重建(258,211 字节,上限 262,144)。 ## [1.7.0] - 2026-08-31 ### 新增(issue #79:自定义 Provider 余额多配置) - **支持同时配置多个自定义提供商(最多 8 条)**:设置页「自定义 Provider 余额」改为多条编辑--每条独立的名称/币种/显示位置/刷新间隔/请求与解析规则/启用开关,可添加与删除;侧边栏按条目逐卡显示(图框或余额行),点击逐条刷新。 - **每条独立缓存与刷新**:`customBalances[i]` 按条目缓存(独立 TTL/在途去重/软硬失败策略与原单条一致);ambient 快照刷新全部可见条目;`refreshCustomBalance(index)` RPC 按索引强刷单条(缺省全量,旧客户端调用不变)。 - **无缝迁移**:旧 `customBalance` 单配置在配置清洗时自动迁移为 `entries[0]`(有实际内容时),升级零操作;旧单条 config/state 键保留为兼容镜像(旧快照/旧宿主不破),运行期以数组为真源。 - **快照扩展**:`state.customBalances[]`(各条独立快照,含 `index` 定位);config 侧 `customBalances` 数组进 strict codec;降级兜底路径同步。 - 配置校验:逐条与原单条同口径(非法值报错/加载清洗回落),上限 8 条;`allowedHosts` 凭据外带白名单随条目保留。 ### 验证 - verify.mjs 新增 3 个回归块:配置层(迁移/多条写入/上限/加载清洗)、e2e(快照数组/兼容镜像/RPC 索引刷新/strict codec)、客户端接线哨兵(逐条编辑/逐条刷新/多卡判定);既有断言更新 2 处(逐条 index 刷新形态、多条硬失败缓存形态)。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);lib/client.js 重建(257,961 字节,上限 262,144)。 ## [1.6.13] - 2026-08-31 ### 新增(issue #78:千问 Qwen Token Plan) - **千问 AI 平台(platform.qianwenai.com)Token Plan 个人版接入**:设置 → Coding Plan 新增「千问 Qwen Token Plan」卡片,支持侧边栏/设置页展示月度 Credits 用量百分比与已用/总额文本。 - **实现方式:本地 Credits 计量(SCNet 同模式)**——调研确认千问平台未提供 API-Key 化的额度查询端点(额度仅控制台可见,查询需浏览器 cookie + 网关 sec_token 会话,第三方 CLI 无法安全复用);与 SCNet 一致按官方 Credits 抵扣率对本地账本估算当前计费周期(自然月或订阅锚日)用量,无需任何凭据,不发起网络请求。 - **内置抵扣表**:Token Plan 个人版 10 个文本模型(qwen3.8-max-preview / qwen3.7-max / qwen3.7-plus / qwen3.6-flash / glm-5.2 / deepseek-v4-pro / deepseek-v4-flash / kimi-k2.7-code / kimi-k2.6 / minimax-m2.5)的输入/缓存读/输出三费率(每百万 token 抵扣的 Credits);模型名归一比较(大小写/连接符差异等价),不在表内且未手动指定的模型不计入。 - **可配置**:月度 Credits 额度、订阅起始日(留空按自然月)、逐模型抵扣率覆盖(官方调整费率或表外模型可手动指定);非法值经配置清洗收敛(额度缺省 500000,费率仅正有限数保留)。 - **计费归类**:qwen 渠道默认 `auto`(启用即按 Plan 类,金额只记等值不动真金白银,与 SCNet 一致);plan-billing 默认表与域名白名单(package.json dshhub 权限)同步登记。 ### 验证 - verify.mjs 新增 2 个回归块:估算窗口(抵扣表折算含 cacheWrite 并入未命中/归一模型合并/覆盖优先/周期外日期不计/未匹配不计/非法额度 null)与配置清洗 + 默认归类 + 接线哨兵 + e2e(启用后快照状态/窗口/strict codec)。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);lib/client.js 重建(253,754 字节,上限 262,144)。 ## [1.6.12] - 2026-08-29 ### 修复(issue #77:压缩摘要调用漏计,compaction/summary 不进折叠) - **报告**(lizhuojunx86):压缩(compaction)摘要调用是一次真实的 provider 计费(把旧上下文发给模型总结),usage 记录在 `compaction/summary` 事件上——但该事件是 log-only、不是循环步,折叠此前只认 `assistant/chunk` 与 `assistant/message` 两种事件,摘要调用的 token 全部漏计(报告者语料:3 次压缩共 48,895 token,单次 MiniMax-M3 摘要 44,444 token)。上游 DSH 自己的投影也有同样缺口(tokscale 已在 junhoyeo/tokscale#1162 侧修复)。 - **核实**:摘要调用走 `ctx.llm.stream()`(上游 summarizer.ts `llmStreamCall: true`),**实时账本钩子本就覆盖**(侧边栏今日费用/账本不漏);漏的是会话投影(徽章)与历史回放。 - **修复**:投影折叠与历史回放计入 `compaction/summary` 的 `data.usage`(可选字段,缺省不入账)——归因优先用事件自带路由(两代宿主形态 `data.message.source.{provider,model}` 与 `data.{provider,model}` 都兼容),缺省回落 header 计费口径;摘要样本用独立去重键 `compaction:`(不占 `(turn, step)`,与循环步的样本替换互不干扰);豁免包装层指纹窗口(单源事件,无转发对,消除与邻近循环步同指纹的极小误杀面)。 - **stateVersion 7 → 8**:触发宿主对旧 checkpoint 全量重放,历史会话的摘要用量随之补齐(v1.6.11 的包装层改挂计数也一并自愈)。 ### 验证 - verify.mjs 新增 2 个 v1.6.12 回归块:折叠(两代路由形态/缺省回落/无 usage 不入账/包装改挂/与邻近循环步同指纹互不误杀)与回放(计入摘要 + 折叠/回放净聚合逐位一致漂移守卫);stateVersion 哨兵更新。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);客户端未改动,lib/client.js 无需重建。 ## [1.6.11] - 2026-08-29 ### 修复(issue #76:modlens 包装路由整单漏计) - **根因**:`modlens-go-ds4f` 命中包装层判定(`modlens-` 前缀),而 #70 时代的修复对包装层 provider 的 usage **一律丢弃**、只记「上游真实流」——当整条链路都是包装型 id(modlens 转售路由,上游不产生独立非包装流)时,唯一到达的 usage 也被丢弃:会话日志有 usage、账本 sessions=0、今日费用恒 ¥0。同一缺陷也存在于会话投影(徽章恒 0)与历史回放。 - **修复:指纹窗口去重取代「一律丢弃」**(lib/usage-dedup.js,账本入账钩子/投影折叠/历史回放三入口同语义):包装层样本先经 `wrapperUpstreamProvider` 改挂上游 id,再按 `(model, 五桶逐位指纹)` 10s 窗与已计入样本互斥——#70 的急切转发对无论到达顺序只记一次(语义保持),包装层单链照常入账(不再漏计);合法的两次同量普通调用互不去重(与旧行为一致,零回归)。 - **回放两遍扫**:历史回放对完整会话日志先收集非包装指纹集再逐事件判定,与实时折叠同结果(回归测试锁定双序一致性)。 - **provider 硬化**:非字符串 provider(日志实测 `[object Object]` 形态)归一为空串,按缺省渠道入账,不产生脏键。 - 注:此前被整单丢弃的 modlens 调用无账本数据可恢复,只有此后发起的调用会入账。 ### 修复(issue #76 附带:本地模型被按云端价误计) - **根因**:本地网关模型(如 `lmstudio:qwen3.8-9b-heretic-uncensored-i1`)经跨厂商兜底的模糊匹配误套同家族云端价(实测按阿里 `qwen3.8-max` 单价 64 次多计 $3.29)。 - **零价守卫**:价格解析在覆盖之后、目录匹配之前对本地来源直接判未定价(token 照记、费用 0);本地来源判定覆盖 provider(lmstudio / ollama / jan / gpt4all / koboldcpp / llamacpp / localai / **vllm / sglang / tabbyapi / lmdeploy / oobabooga / text-generation-webui / llama-server**)与模型 id 前缀(`lmstudio:` / `ollama:` / `vllm:` / `sglang:` / `gguf:` / `local:` 等)。 - **一次性清洗迁移 `local-model-unprice-v1`**:历史存量中本地来源桶的费用归零(token 保留,日/会话合计同步扣回,幂等)——报告者 8/28 被多计的 $3.29 即由此修正。 - **显式覆盖仍可定价**:priceOverrides 把本地模型改指任意条目时自然放行(逃生门)。 ### 新增(UI:已命中模型可改映射 + 本地模型零消耗) - **「本地模型(零消耗)」覆盖哨兵 `__local__`**:模型名匹配的目标下拉新增该选项;服务端把它解析为未定价(token 照记、费用恒 0),写入 `updateConfig` 时**历史桶即时归零**(幂等;取消标记后历史 0 值不自动回溯)。 - **「本月已命中价格的模型」区块**:设置页此前只能为「未命中」的模型手动指定条目;现把本月已自动命中的模型同样列出,行内选择目标即可改挂其它条目或标记为本地模型,写入后转入手动指定区。界面中英双语。 ### 改进(今日费用实时化) - **此前「今日费用」更新慢的原因**:侧边栏依赖 `getState` 快照,而客户端**纯 60s 轮询、无推送通道**(流结束入账是即时的,写盘防抖仅影响持久化不影响 UI)——对话结束后平均要等 30s、最坏 60s 数字才变;「本会话费用」徽章走宿主投影推送所以实时,反差更明显。 - **投影联动刷新**:客户端监听 costUsage 投影(宿主在每次 usage 入账时推送)的变化,800ms 防抖触发一次 `getState`——今日费用在**流结束后 ≈1s** 更新;60s 轮询保留作兜底。 - **getState 供陈值(serve-stale)**:有过任一快照后,过期的余额/额度刷新转入后台,getState 立即用现有值返回——ambient 快照不再被 15-20s 的网络查询内联阻塞;首次加载仍内联等待保证首屏真实数据;显式点击刷新保持内联强刷。 ### 验证 - verify.mjs 新增 9 个 v1.6.11 回归块:去重器单元(改挂/双序互斥/窗口过期/普通互不去重/硬化)、投影折叠(包装单链计入/急切对单记/旧 checkpoint 兼容/recent 有界)、回放两遍扫、本地零价 + 覆盖逃生门、清洗迁移幂等、`__local__` 哨兵(解析/入账/updateConfig e2e/strict codec)、客户端镜像双侧漂移守卫、实时化接线哨兵。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);`node scripts/build.mjs` 重建 lib/client.js(249,751 字节,上限 262,144)。 ## [1.6.10] - 2026-08-29 ### 修复(issue #74:跨天会话「今日 ¥0」) - **结论先行:归账口径本就正确**——`Ledger.account()` 的日键取**每次调用的发起时刻**(与官方请求侧计费同口径,v1.6.6),跨天会话按调用发生日拆分:同一会话 id 在每个发生日各有条目与会话行,token/费用独立。本次新增行为级测试锁定该保证(时间戳按「今日本地午夜 ±60s」构造,任意时区自洽,本地 +8 与 CI UTC 双跑验证)。 - **真正的根因:宿主进程时区与用户浏览器时区错位**——「今日/本月」日键按宿主机进程时区取(账本由服务端持久化,日键必须与查看端无关,这是刻意设计);当宿主跑在 UTC 而用户在 +8 时,本地午夜后(0-8 点)的调用记前一日——「今日」显示 ¥0、官方余额对账报偏差、月合计正常,与 #74 的全部证据吻合(账本无当日键、凌晨调用在前一日、12:58 会话正常)。此前 UI 对这种错位无任何提示,极易误判为漏计。 - **修复**:宿主在 `meta.timezone`(可选键,有值才携带)下发 IANA 时区名(偏移 `meta.timezoneOffsetMinutes` 原本就有);客户端检测到与浏览器时区偏移不同时,在概览页口径脚注下方显示双语提示——说明「今日/本月按宿主机时区统计、本地午夜后的调用记前一日(并非漏计)、可在宿主机以本地时区运行 dsh 对齐」。 ### 验证 - verify.mjs 新增 v1.6.10 回归块:跨天归账行为锁定(两日条目/会话行按日重开/at 取当日首次调用/today() 可见);e2e `getState` 的 `meta.timezone` 下发与 strict codec;客户端 `formatTzOffset`/`timezoneMismatchOf` 行为(同偏移不提示、错位提示、无 IANA 名回退纯偏移、非法不误报);宿主/客户端/schema 接线源哨兵。 - 全量通过(TZ=本地 +8 与 TZ=UTC 双跑);`node scripts/build.mjs` 重建 lib/client.js(246,156 字节,上限 262,144)。 ## [1.6.9] - 2026-08-28 ### 修复(计费审计:客户端/服务端口径漂移) 背景:对全仓计费与核心链路做了一次完整代码审计(报告:[docs/code-audit-2026-08-28.md](docs/code-audit-2026-08-28.md))。核心计费链路(实时钩子 → 账本 → 投影 → 回放/回填 → 双轨 apiCost)复核无误;本版修复审计确认的三处客户端漂移与三处服务端加固。 - **官方余额条「当日已用」漏计 `deepseek-official` 键(客户端)**:`todayOfficialUsd` 只把 provider 前缀为 `deepseek` 的桶计入官方渠道,而 profile 内置官方路由实际落账键形如 `deepseek-official:模型`(v1.6.5 服务端已确认)——侧边栏官方余额进度条的当日段在纯官方路由账本上恒为 0/偏低,且与服务端 `officialCostOfDay`(双前缀口径)数字不一致。修复:客户端补 `deepseek-official` 双前缀判定,并同口径剥离宿主包装路由 `llm-` 前缀。 - **客户端回退计价丢失峰谷子档(峰时低估约 50%)**:`normalizeClientPrice` 只保留 `{cacheHit,cacheMiss,output,reasoning}`,把 `offPeak/peak/legacyBase` 子档剥掉;`usageSplit`(会话含 Plan 类模型时的 API/Plan 拆分路径,以及旧快照缺精确成本时的回退路径)据此调 `tierFor`,峰时只能取基础档(=谷价)。实测:峰时 2M 输入 + 1M 输出,服务端 $2.20、客户端回退估 $1.10。修复:子档随主档一并保留(`normalizeClientTier` 与服务端 `completeTier` 同口径),客户端 `tierFor` 补峰谷时代分界 `legacyBase` 分支——四相位(峰/谷/周末/分界前)档位与金额恢复与服务端逐位一致。 - **decimals=0 显示被抬成 2(客户端,纯显示)**:`formatMoneyValue` 的 `Number(config?.decimals) || 2` 把合法的 0 抬成 2,与服务端 `formatMoney`(专门修过同款坑并注释)实现漂移。修复:0 保留,缺省才回落 2。 - **官方渠道判定补 `llm-` 前缀剥离(服务端 `officialCostOfDay`)**:计价(`providerPriceEntryFor`)与 Plan 归类(`planProviderIdOf`)都会剥宿主包装路由的 `llm-` 前缀,官方渠道判定此前不剥——`llm-deepseek` 形态落账会被漏计。现剥前缀后判定(`llm-zen` 等第三方网关仍不计入)。 - **包装层重复清洗保留键优选(服务端 `repairProviderDupes`)**:指纹分组此前恒保留字母序第一个键,而 `deepseek-modlens:` 恰排在 `deepseek-official:` 之前——官方键被删、包装层键存活,需依赖后续 `modlens-wrapper-dedup-v1` 形态 3 改挂才恢复正确。现排序优先保留非包装层(上游真实)键,同包装层性时仍按字母序;合并语义不变。 - **`tierFor` 对 NaN 生效时刻口径归一(服务端 + 客户端)**:`effectiveAtMs` 为 NaN 时,`isPeakHour` 视作已生效而 offPeak 分支视作未生效——谷时段落 base 档、峰时段取 peak 档的不对称。现非有限值一律归一为「未知生效时刻」,两侧同口径(默认表 base=offPeak 同值,实际行为不变,仅消除 footgun)。 ### 修复(CI:install-smoke 两腿回归门禁红) - **时区炸弹:自然月用例硬编码期望值,v1.6.8 起回归门禁进 CI 后首跑即红**:`scnetPlanPeriod` 自然月用例断言输入 `2026-08-01T00:00:00+08:00` 的周期起点恒为 `'2026-08-01'`,而实现按**运行时本地日历**取自然月——CI(UTC)上该时刻是 7 月 31 日,函数正确返回 `'2026-07-01'`,ubuntu(51s)与 windows(9m59s,大头是 pnpm 安装耗时)两腿同断言失败。修复:期望值改由测试进程本地日历推导(起点取 `new Date(p2Now)` 的年月、月末同法),断言与实现同口径、任意时区自洽;本地以 TZ=UTC / UTC-8(洛杉矶)/ UTC+14(基里巴斯)/ UTC+8 四种时区全量复跑通过(Windows Node 支持 TZ 环境变量,可在本机模拟 CI 时区)。 ### 已知边界(复核确认,文档化,本版不改) - `repairProviderDupes` 的跨渠道指纹合并是启发式:两个真实渠道的桶六值全等且模型同名时会被误合并(一次性迁移,`provider-dedup-v1` 已打标不再重跑,存量风险有限);`deepseek-modlens-vision` 等深层变体不在 `isWrapperProviderId` 判定范围,同组无上游键时仍按字母序保留(既有测试 8g 语义)。 - billing-stream ALS 嵌套标记的设计边界(R-7,源码注释已声明):若未来包装路由改为「拉取期惰性」发起上游流,需改按流实例区分标记;当前 modlens 实测为瀑布派发期急切发起,语义正确。 - `canonicalWindowKey('2d') → weekly` 等滚动窗量级归并为刻意近似(源码注释已声明)。 ### 验证 - verify.mjs 新增「v1.6.9 计费审计回归」块:NaN 生效时刻与 undefined 双口径一致;`llm-` 前缀官方渠道判定(llm-deepseek 计入 / llm-zen 不计);保留键优选(成对镜像保上游键 + 无包装层组仍按字母序的对照);**客户端助手区段抽取行为级漂移防护**——从 `src/client.js` 抽取纯计费助手在 Node 求值,断言子档保留、四相位档位与金额双端逐位一致、峰时金额级佐证(0.44/M,修复前 0.22)、decimals=0、`todayOfficialUsd` 双前缀。 - 测试 8g 注释补充深层变体保留原因;issue #36 源哨兵更新为双前缀判定。 - `node test/verify.mjs` 全量通过;`node scripts/build.mjs` 重建 lib/client.js(244,427 字节,DSH STORE 单文件上限 262,144)。 ## [1.6.8] - 2026-08-28 ### 修复(密钥治理,安全专项) - **API Key 明文落盘(P0)**:v1.6.7 及更早把整个 config 原样序列化进 `$DSH_HOME/storages/cost-meter/ledger.json`——其中含 `goQuota.apiKey`、9 家 `codingPlans[*].apiKey`、火山方舟 `accessKeyId/secretAccessKey`,且写入未指定 mode(POSIX 下 0644),本机实测账本里存有两把明文 `sk-` 密钥。修复:新增 `stripSecrets`(store.js)——`flush()` 序列化前清空全部密钥字段(空占位字符串保形,strict codec 不受影响),**内存 config 仍保留明文供运行时解析兜底**;`applyConfigPatch` 最底层入口新增 `stripSecretPatch` 闸门,密钥不再能经配置补丁回到 config(updateConfig、测试、未来新增 RPC 一并受保护)。 - **密钥明文回传前端(P0)**:`buildState` 把 `ledger.config` 原样下发、`mergedCodingPlans()` 再带一次 `apiKey`——前端 `type="password"` 只是 UI 掩码,值早已抵达浏览器。修复:`buildState` 转异步并下发 `stripSecrets` 后的副本;`mergedCodingPlans` 转异步,`apiKey` 恒为空串,改以 `keyConfigured/keySource`(来自凭据库 `describe()`,该接口专为配置 UI 设计、永不返回值本身)描述配置状态;前端设置页全部密钥输入框(OpenCode Go / 各 Coding Plan / 火山 AK/SK)替换为 write-only 的 `CredentialField` 组件——值只沿 `setCredential` 单向上行,保存后不回显,仅显示「已配置(来源 x)」状态;新增 `SecretMigrationNotice` 组件提示未能自动迁移的密钥。 ### 改进 - **密钥统一由 DSH 凭据库托管**:新增 `setCredential(target, value)` / `clearCredential(target)` 两个 RPC(`target` ∈ `goQuota` | `codingPlans.` | `codingPlans.volcengine.ak` / `.sk`),值只进宿主凭据库(`credentials.set/unset`),不再经 `updateConfig` 传递;读路径优先级调整为 **DSH 凭据库 → 环境变量 → 自动发现(opencode auth.json / Claude 登录态)→ config 遗留明文兜底**(末位兜底保证迁移时间窗内功能不中断),每次 per-operation 重新 resolve 不缓存。 - **存量明文自动迁移**(升级即迁移):新增带 ctx 的异步启动钩子 `runSecretMigration`(挂在 `apply()` 内与历史导入同一个 3 秒延迟定时器,**先于**回填执行),把账本遗留明文逐项导入凭据库后清空 config 字段,迁移 id `secrets-to-credential-store-v1` 记入账本 migrations 防重跑。逐项四种结局:① 凭据库/环境已有值 → 只清空遗留明文,不覆盖;② 可写 → `set()` 成功后清空;③ 不可写且未配置 → **原样保留明文**并记入 `secretMigrationPending`(UI 提示手动导出对应环境变量),下个启动周期重试——绝不静默丢弃用户密钥;④ describe 不可用(宿主版本较旧)按③处理。火山 `AKID:SK` 整串先拆成 AK/SK 两字段再导入;全部处理完后立即落盘。 - **自定义余额端点收紧**:`customBalance.request.url` 强制 https(明文 http 直接报错);`fetchWithRetry` 显式 `redirect: 'manual'` 并拒绝 3xx 响应——禁止自动跟随重定向把凭据头转发到其他主机;请求头含凭据占位符(`{{VAR}}`)时,目标主机不在 `customBalance.allowedHosts` 白名单内则拒绝,未配置白名单则放行但警告提示收紧。 - **权限声明补真**:`dshhub.permissions.network` 从 4 个域名补全为代码实际出站的 16 个(opencode.ai、api.anthropic.com、api.z.ai、open.bigmodel.cn、www.minimaxi.com、www.minimax.io、api.kimi.com、api.moonshot.cn、openrouter.ai、api.siliconflow.cn、api.commandcode.ai、ax.ac.sugon.com + 既有 4 个);README 中英版补「密钥不落盘 / write-only 输入框」与「额度类端点仅在显式启用对应 Provider 时出站」说明。 ### 工程化 - **CI 接入回归与产物门禁**:install-smoke workflow 在安装冒烟后追加 `node test/verify.mjs` 回归与 `node scripts/build.mjs && git diff --exit-code lib/client.js` 产物漂移检查(lib/client.js 是提交进仓库的压缩产物且无 prepack 钩子,此前全靠手工构建,实测发生过漂移);package.json 新增 `npm test` 与 `engines: node>=20`(与 dshhub.compatibility 对齐)。 - **CodeQL 误报抑制**:#10(`test/check-opencode-catalog.mjs` 价目表单元格文本提取)与 #7(`test/verify.mjs` 充值链接存在性断言)均为测试断言而非安全净化,按真实告警规则加 `codeql[...]` 抑制注释;补发 v1.6.4 / v1.6.5 / v1.6.6 三份 release notes。 ### 破坏性变更 - 密钥配置方式变更:设置页密码框从「可回填值的掩码框」变为 **write-only**(保存后不回显,只显示配置状态);升级后首次启动会自动把存量明文密钥导入 DSH 凭据库,宿主凭据服务不可写的场景下密钥保留在账本中并提示手动导出环境变量(见升级说明)。 ### 验证 - verify.mjs 新增「密钥治理」回归块:`stripSecrets` 输出与 `flush()` 落盘文件不含任何密钥明文(空占位保形)、真实 `apply()` → `getState()` 下发 state 不含明文且可过 getState strict codec(新增 `secretMigration` / `keyConfigured` / `keySource` 字段已入 schema)、迁移五路径(成功 / 已配置不覆盖 / 不可写保留 + pending / 幂等零重复 set / 火山 AKID:SK 拆分)、`setCredential`/`clearCredential` descriptor 双侧对齐与 write-only 组件接线、配置补丁密钥剥离闸门。 - `node test/verify.mjs` 全量通过;`node scripts/build.mjs` 后 lib/client.js 无漂移并同步提交(243,991 字节,DSH STORE 单文件上限 262,144)。 ## [1.6.7] - 2026-08-27 ### 修复(计费正确性) - **价格同步把「峰谷生效时刻」重置为「现在」,峰时历史事件被半价重算(高危)**:官方价格页已无「生效时间」字段,`parsePricingHtml` 恒返回 null,`fetchPrices` 的兜底分支于是把 `peakEffectiveAt` 写成同步时刻——此后任何历史重算(会话投影 refold / 按模型回填)中,同步时刻之前的峰时事件全部回落基础档(= 谷价,半价);用户账本实证该键两次被重置为同步时刻(与 fetchedAt 逐毫秒相同)。修复:官方页无生效时间时不再改写该键(删除 else 兜底);新增幂等迁移 `peak-effective-at-clamp-v1` 把存量账本的 `peakEffectiveAt` 钳制到 2026-08-16 16:00 UTC 历史分界(tierFor 的硬编码分界先行生效,≤ 分界的取值对全部历史判档均正确,顺带修复已被污染的配置)。 - **币种切换不重算历史 → 新旧口径并存(用户「误差更大」的直接来源)**:切到 CNY 后价格表换 ¥ 价而存储账本不动(USD 口径),会话徽章(投影 refold 按当前表重算)却是 CNY 口径——插件自身两个表面对同一天差 ~5%。修复:新增 `recomputeLedgerPricingBasis`(backfill.js)——全量回放会话日志、按当前价表 + 修正后的生效时刻逐事件重定价,回放覆盖完整的日子整体替换,日志已清理的会话保持原口径,重算后跑 `splitLedgerApiCost` 防 apiCost 倒挂;触发点两处(设置页改「价格币种」/ 官方页同步前后币种翻转),异步执行让出事件循环,完成后提示重算天数与会话数;升级迁移 `currency-basis-recompute-v1` 对存量混口径 CNY 账本自动重算一次;设置页「价格币种」说明改为新语义(切换即全量换基准)。 - **已知近似(文档化)**:客户端回退计价(会话徽章的估算路径)以当前时刻档位给全部桶定价——含 Plan 类会话的徽章估算在峰时会高估谷时部分;README 中英版「已知限制」补充说明,精确金额以账本为准。另:#65 的 6 倍高估形态与 #62 修复前(CNY 数字按 USD 计)+ 环境不报缓存字段的历史组合吻合,现行代码端到端验证无此问题,升级即解。 ### 验证 - verify.mjs 新增:effectiveAt 源哨兵(同步不再写键)、tierFor 半价缺陷回归(污染时刻 vs 分界时刻恰为两倍)、clamp 迁移幂等、USD 口径账本切 CNY 重算后 = CNY 口径(含峰时事件 2 倍档)端到端断言。 - 真实账本影子验证(副本,不落盘):今日总额 ¥5.8315(USD 口径)→ ¥5.7369(CNY 口径,vision 峰时按 2 倍档),与官方 ¥5.64 偏差从 ~3.4% 收窄至 ~1.7%;残差来自日志覆盖不全而保持原口径的会话,符合设计。 ## [1.6.6] - 2026-08-27 ### 改进 - **峰谷档位改按请求发起时刻判定**:流式调用可能跨峰谷边界整点——一次 17:59 发起、18:01 完成的调用,按完成时刻归档会被算进谷时档,而官方口径为请求侧计时。billing-stream 现在在瀑布分发(即请求发起)时刻捕获时间戳并传给账本,`deps.now` 作为可注入时钟供测试使用;verify.mjs 新增开始时刻传递断言与跨整点两侧费率恰为两倍的金额级佐证。消除跨点调用的档位分歧(vision 实测案例)。 - **概览页新增口径脚注**(用户实测对账疑问驱动):汇总卡片下方固定一行双语说明——本地金额为最近一次落盘快照(2 秒防抖,正常关闭先强制落盘),与官方实时账单存在分钟级时差属预期;关停瞬间仍在途的流被服务端照常扣费而 usage 无人接收;tokens 列为五桶合计且 reasoning 由 API 单列上报但不计费(官方并入输出列展示),对账以金额为准。README 中英版计费规则同步补「峰谷发起时刻」与「官方账单对齐口径」两条。 ## [1.6.5] - 2026-08-27 ### 修复 - **官方余额对账双错:今日官方费用恒 $0 + ¥ 变动错标 $(用户实测反馈)**:① 官方渠道判定只认 `deepseek` 前缀键,而 profile 内置官方路由的实际 provider id 是 `deepseek-official`(账本键形如 `deepseek-official:deepseek-v4-flash`)——「今日官方渠道费用」与余额条「当日已用」恒为 $0.0000,CNY 余额一旦减少必然误报 drift;② 对账比较直接拿「¥ 计价的余额差」减「USD 计价的本地账本」,跨币种错配,¥ 账号即使有正常消费也几乎恒报 drift。修复:渠道白名单补入 `deepseek-official`;余额差先按 `config.exchangeRate` 折算为 USD 再比阈值(事件携带原生币种/原生金额/折算值);提示文案的变动金额按余额真实币种取符号并附 ≈USD 折算参考(zh/en 模板零改动)。`deepseek:v4:x` 这类模型名含冒号的键取前缀判定不受影响;go/zen 等第三方网关仍不计入。 ## [1.6.4] - 2026-08-27 ### 修复 - **全新安装报 `ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION`(issue #72)**:生产依赖此前是浮动区间(`^0.1.0-rc.6`、`^4.4.3`),首次安装时 pnpm 会把区间解析到**当时最新发布版**——实测 `^0.1.0-rc.6` 漂到 2026-08-19 才发布的 rc.8;启用了「最小发布年龄」供应链策略的 pnpm 环境(pnpm 配置或上层安装器自带)在校验 profile lockfile 时直接拒绝这类过新条目,一键安装失败。三个运行时依赖 `@deepseek-ai/dsh-credentials`、`@deepseek-ai/dsh-home-paths`、`zod` 全部改为精确锁版:锁定版本的发布时间是固定值,对任意年龄阈值永远满足,该错误对本插件不再可能复发。附带说明:插件仓库内的 `minimumReleaseAgeExclude` 只在本仓开发/CI 安装(读取本仓 workspace 配置)生效,end-user 安装的外层校验读取的是 profile 目录自己的配置,不能替代锁版——文件内已加注释固化该边界,排除表补入 `esbuild@0.28.1`;README 中英版安装章节同步新增该错误的排障条目。 ## [1.6.3] - 2026-08-27 ### 修复 - **modlens 视觉包装层重复计费(issue #70,报告 @lucas-wang-1)**:modlens 插件为承载纯文本模型的 provider 路由自动注册 `modlens-`(官方路由为 `deepseek-modlens`)视觉包装模型,并在监听器体内再发起一次上游 `llm.stream` 转发同一份 usage——该内层分发逃逸 billing-stream 的 ALS 嵌套深度标记,实时钩子、会话投影与历史回放照单全收,同一次调用在上游与包装层两个 provider 键下各入账一次,token/费用整体翻倍。新增统一判定 `isWrapperProviderId` / `wrapperUpstreamProvider`,三个计费入口(实时 llm/stream 钩子、costUsage 投影、backfill 回放)对包装层 provider 事件一律跳过,只记上游真实流。 - **modlens 历史翻倍账本一次性清洗(迁移 `modlens-wrapper-dedup-v1`)**:与 #48 指纹合并(provider-dedup-v1,保留字母序第一个键)的遗留交互区分四种形态逐容器(day 与其下每个 session)修正——镜像对扣除包装层份;#48 合并残留 + 新镜像混存(上游 ⊆ 包装层)扣除上游键、包装层全量改挂上游;仅包装层入账的残留改挂上游;同日直连 + 包装混存(包装层 ⊆ 上游)扣除纯镜像份。互不为子集的条目保守不动;改挂后按新 provider 重算 plan/api 分类;幂等。 - **火山方舟 Coding Plan 额度解析失败(issue #71,报告 @suyukun)**:管控面 Action 白名单缺 `GetCodingPlanUsage`——该接口才是 CodingPlan 官方用量接口,无参即返回 `Result.QuotaUsage[]` 三窗(session/weekly/monthly,只含 `Percent`);而位列首位的 `GetAFPUsage` 实为 AgentPlan 接口,CodingPlan 用户拿到全 0/空。`GetCodingPlanUsage` 置于白名单首位,解析器补 `QuotaUsage` 数组与 `Level` 窗名字段(session/weekly/monthly),原 Action 保留作兜底变体。 ## [1.6.2] - 2026-08-26 ### 修复(计费逻辑专项审计) - **客户端回退计价金额放大汇率倍(高危)**:设置页 `parseConfig` 白名单丢失 `prices.currency`——官方价格币种为 CNY 时,会话徽章/明细的回退估算不除汇率入账,展示时又乘回汇率,金额被放大汇率倍(默认 7.2×)。补齐白名单键。 - **第三方模型「取消挂载」永不生效**:`applyConfigPatch` 只对 DeepSeek 主表 models 做替换语义,`prices.providers[*].models` 走深合并把已删除模型原样复活,下次轮询重新出现在价格表。补齐同款替换语义。 - **自定义余额空值强转残留(B-3 变体)**:`extractByRule` 内部 `Number(null)/Number('')/Number(false)` 均为 0 并通过 isFinite 守卫,提取失败仍可伪造成「余额 $0 / 预算打满」的成功读数;subtract/add/divide 成员缺失也静默按 0 参与运算。改严格数值解析:null/布尔/非数值串一律 fail-loud。 - **模型名匹配数字分叉绕过(issue #18 残留)**:跨版本守卫此前只在家族 token 阶段,宽泛包含/前缀/token 耗尽三条路径仍会把 `glm-5.3` 匹配到 `glm-5`(实测低计 ~29%)、`gpt-5.9` 匹配到 `gpt-5-nano`。三个阶段全部补齐守卫(≥3 位日期快照与 `-128k` 容量后缀不受影响),pricing.js 与 client.js 镜像同步。 - **usage:null 击穿判空**:投影与计费流对 usage 块用 `!== undefined` 判空,null 可通过——宿主异常收尾路径会打断成本投影,或用 null 覆盖已捕获的有效 usage 快照导致整次调用漏计。统一改 `!= null`。 - **Anthropic 子配额窗口覆盖主周窗**:`seven_day_sonnet` 等子配额与主窗共用归一键,后解析者覆盖采样列与面板百分比(`seven_day: 12%` 显示成 sonnet 的 3%),周窗满窗估算严重偏低。子配额窗口整体丢弃,只保留主窗口。 - **MiniMax 双域 Key 401 不换域重试**:国际域(minimax.io)发放的 Key 在国内域(minimaxi.com)首端点即报「凭据无效」,第二域永远轮不到——与 zai/kimi 双域同待遇(issue #42 同型),单域 401 继续换域尝试。 - **清空价格档被写成显式 0 价**:价格输入框全选删除后空串按 0 提交并持久化,该档位之后所有调用静默变免费;汇率清空则触发整包校验报错。输入组件新增 emptyMode 三档语义:offPeak/peak 清空删档恢复「无档按基础价计」、基础价/第三方三桶/汇率忽略清空、预算等 0 为合法值的场景保持不变。 - **官方余额符号错位**:¥ 计价的官方余额在 USD 显示档渲染成 "$53"(数值不换算、符号却切换)。符号改按 `balance.currency` 取,与数值同币种。 - **客户端跨厂商兑底 billingMode 失步**:徽章回退计价硬编码 flat,服务端同路径保留峰谷两档(billingMode),口径漂移。与服务端 bestMode 对齐。 ### 加固 - `splitLedgerApiCost` 以容器 cost 封顶 apiCost:桶级合计异常超过容器总额时不再下发 apiCost>cost 的倒挂数字(下次冷加载钳制前)。 - backfill「全覆盖重算」判定补 reasoning 字段:旧样本缺失 reasoningTokens 时其余四桶恰好相等,会以不含推理成本的回放值无痕覆盖当日 cost;会话级 reduce 同步补齐。 - Kimi 滚动窗命名(`'1w'/'2d'/'30m'`)在 `canonicalWindowKey` 按时间量级归入最近标准周期,不再落进 periodStartOf 的 48h 兜底导致满窗估算单位错配(分钟级维持原样;窗口键名不变)。 - 中文峰时段窗口解析允许省略冒号/空白(`北京时间9:00` 紧凑排版),解析失败静默沿用上一次同步旧窗口的隐患消除。 - 投影去重键 turn/step 缺省值与 backfill 回放器对齐(`?? 0`),实时与回放对同一事件产生同一去重键。 - `fetchWithRetry` 单次尝试超时信号与调用方取消信号用 AbortSignal.any 组合,不再无条件吞掉外部 signal。 - hunyuan-a13b 目录价由 CNY 原值(¥0.5/¥2)改为按默认展示汇率折算的 USD($0.0694/$0.2778)入账,消除 ~7 倍高估。 ## [1.6.1] - 2026-08-26 ### 修复(全仓安全审计) - **账本退出丢写(高危)**:`Ledger.close()` 先置 `closed` 再调 `flush()`,而 `flush()` 对 closed 状态直接返回——「卸载/退出前最终落盘」从未生效,每次进程退出丢失最后 ≤2 秒防抖窗口内的全部入账。现先强制落盘再关门;顺带修复写失败后 `pendingWrite` 已复位导致数据永不重试的问题(失败自动按防抖重排,关门前不丢)。 - **发版脚本命令注入(高危)**:`scripts/release.mjs` 把取自 UPDATE-HISTORY 标题的发布标题未转义拼进 `execSync` shell 串——恶意 PR 可在维护者发版机上以仓库凭据执行任意命令。全部改为 `execFileSync` 数组参数绕开 shell,并新增 tag 格式白名单校验。 - **面板空指针崩溃(高危)**:Go 额度框对 `monthly` 窗口未判空(rolling/weekly 均有守卫),宿主下发单窗空值时整个渲染树崩溃。补齐空值守卫,与侧边栏口径一致显示 '—'。 - **路由调用小时桶漏记(计费正确性)**:provider 为空/'deepseek' 且命中第三方目录的路由调用被归为 plan 类却不写 provider×小时桶,而整天段聚合又计入——今日段本地量系统性偏低,额度估算同步失真。现在 account 与聚合共用同一路由兜底判定(`isRoutedThirdPartyCall` 转正为导出)。 - **官方余额对账告警失效**:客户端 `parseState` 重建 state 时丢弃宿主下发的 `reconcile` 字段,漂移警告 ⚠ 永不显示。补齐解析。 - **自定义余额提取失败误显 $0**:`extractByRule` 失败返回 null 而 `Number(null)===0`,提取规则配错时静默变成「余额 0/预算打满」的正常读数。null 不再被当作 0,缺失/非法照常报错。 - **历史重算后 apiCost 倒挂**:backfill 按事件时刻重算容器 cost 后不重算 apiCost,向下修正出现 apiCost>cost 的双轨倒挂。重算末尾统一跑一遍幂等的 `splitLedgerApiCost`(有变化才触发落盘)。 - **非法会话条目残留空指针**:`sanitizeDays` 对损坏会话 `continue` 保留 null 元素,后续 `account()` 的 `sessions.find` 读 `.id` 即崩。改为原地过滤剔除。 - **计费流中断泄漏**:llm/stream 计费包裹在消费方提前 break 时从不关闭下游迭代器——上游请求继续跑到完(厂商照扣全额)而 usage 无人消费。finally 中向下游传播取消(`iterator.return`)。 - **额度查询击穿回退链**:coding-plans 非 volcengine 路径的 `response.json()` 无保护,200+HTML(Cloudflare 页)直接抛异常冲出多端点串行回退。补 try/catch 归一为软错误继续下一端点。 - **DeepSeek 分支价格条目未规范化**:同函数内 provider 分支与跨库兑底均做 normalizePrice,唯独 DeepSeek 直查路径原样返回——两桶简写配置产出 NaN 成本入账。全路径统一 normalize。 - **SCNet 订阅周期末日少一天**:显式 planStart 时周期末日落在次月对应日前一天,对应日全天用量滚入下期、resetAt 显示偏早。改用排他次日边界(含对应日 23:59:59.999)。 - **设置页自动保存基线竞态**:防抖保存 diff 对最新服务端配置比较,并发写入方(另一窗口/引导按钮/轮询)的键会被草稿旧值回滚。改为每份草稿冻结基线(frozen baseline)后再 diff。 - 其余批次:历史表格并行加载互斥导致的假「暂无会话」、会话排行乱序响应覆盖、「添加模型」首帧空指针、Codex 徽章误随 Coding Plan 开关隐藏、token 格式化 1000K 边界、numInput 负数入参、峰谷生效时刻非法日期静默失效、Kimi/MiniMax 百分比负值钳制、格式化注释与实现矛盾等。 ### 加固 - 账本文件损坏/版本不受支持时先把原文件改名备份(`ledger.json.corrupt-*`)再按空账本启动,不再被下一次落盘无声覆盖。 - 配置补丁合并前结构化克隆,拒绝的补丁不再把就地规范化泄入活配置;mergeDeep 跳过 `__proto__`/`constructor`/`prototype`;价格表查询全部改自有属性判定(模型 id 为 `__proto__` 不再把原型当价格);默认价表深拷贝,杜绝嵌套档位跨实例共享。 - 凭据模板替换改函数形式,密钥值含 `$&`/`$$` 等特殊序列不再损坏 header;HTML 实体解码单趟化消除双重解码;官方页金额解析支持千分位逗号与括号价;目录抓取/校验脚本加超时。 - 路由分类缓存改 WeakMap(长驻进程不再随配置保存次数线性增长);小时桶修剪结果回赋内存;启动导入扫描让出事件循环(大会话库不再冻结 UI);backfill 提前丢弃打包行(内存占用减半以上);AbortError 仅在旧版 undici 超时形态下重试,手动取消不再盲重。 - install.ps1:corepack 引导兼容 PS5.1 stderr 重定向坑(npm 回退分支恢复可达),profile 清单解析失败给出明确报错;清空全部历史时连 Plan 采样/小时桶/余额基准一并清理;插件卸载时清理启动导入定时器。 ## [1.6.0] - 2026-08-25 ### 修复 - **累计费用失真(桶/容器 apiCost 脱节,用户实测:插件 $5.26 vs 桶级分布 $12.41)**:`splitLedgerApiCost` 此前只重算容器级(day/session)、从不回写桶级;而每次加载时 `sanitizeDays` 会把缺 `apiCost` 的旧桶回落为「全额 cost」——各天容器值来自不同时刻的计算,互相矛盾且与桶级分布脱节。现升级为**计费口径一致性重建**(迁移标记 `billing-rebuild-v3`,幂等):桶级 apiCost 按分类回写、容器 = Σ桶。 - **无模型明细的历史残差漏计**:日合计存在但 byProviderModel 缺失的差额(用户账本 08-17 达 $2.80)此前不进任何口径。按用户决定,**残差归 API**(宁多勿少):容器 apiCost = Σ桶 + max(0, cost − Σ桶cost),会话级同理。 - **modlens-zen 包装前缀不做任何特判**:统一按普通规则计费(该前缀不在订阅别名表 → 全部计入真金白银 API 口径,历史存量与新增一致;重建迁移 v4 按此重算)。 ### 新增 - **路由调用归类**:provider 为空/'deepseek' 且模型不在 DeepSeek 主表(canon 等价)、但在第三方目录命中的调用(Go/Zen 网关路由落账 provider 缺失的场景),自动按 'go' 归类继续判定——不再误入真金白银;真 DeepSeek 官方模型不受影响,`planBilling.models` 覆盖优先。宿主 account/重建迁移/backfill 回放/客户端镜像全链路生效。 - **「含 Plan 总额」全局开关(showTotalWithPlan)**:概览页汇总卡片下方新增快捷开关(随自动保存即时生效);关闭(默认)= 真金白银口径(apiCost,全部按量渠道);开启 = 总等值金额(cost,含 Plan 订阅等值)。作用范围:概览三卡、侧边栏今日徽章及悬停、预算图框与预算已用%(宿主 budgetUsed 同步分支)、历史/今日会话/会话排行表格、热图悬停、会话徽章与 dock(开启时回到单一总额展示)。配置全链路(defaultConfig/校验/清洗/strict codec/读侧白名单)齐备。 ## [1.5.53] - 2026-08-25 ### 修复 - **DeepSeek/空 provider 渠道误套默认低价(用户实测反馈:773M tokens 仅计 ¥51,差 5-15 倍)**:provider 缺失或为 deepseek、但模型实际属于 Go/厂商目录时(`minimax-m3`/`kimi-k2.6` 等),auto 模式此前直接回退 DeepSeek 默认价($0.22/M)。现于 DeepSeek 分支内先做**跨目录最佳匹配兑底**(精确命中加权 +1000 分,unpriced 跳过),真 DeepSeek 模型不受影响仍走峰谷主表;既有跨厂商兑底同步采用精确优先评分。 - **百分比量化误差(用户复核追问)**:各家额度接口的百分比读数存在个位级量化——显示 `1%` 的真实值可能在 `0.5%~1.5%`,此前逐对采样差分把显示值当真值,小跨度时每 1%/满窗估算相对误差可达 ±50% 以上甚至更宽(live 折算的分母同样受影响)。现改为**段式首尾差分**:把样本序列切成「连续可信段」(周期切换/p 或本地累计单调性破坏/7 天滑动上限处切段),每段做端点差分——中间读数的量化误差两两抵消,只剩段首尾两点;段跨度越大误差越小(Δp=20 时 ≤±5%)。 - **置信分档与标注**:估算新增 `confidence` 字段——差分跨度 Δp ≥ 5 个百分点为 `high`(个位量化误差压到 ±10% 以内),不足或 live 回退为 `low`,设置页方法列附「读数精度受限」标注,口径说明同步补充。日/周/月曲线按桶聚合 Σtokens÷Σpct,多区间累加天然抗量化,不受此问题影响。 - **「账本不可用」修复(confidence 击穿 strict codec)**:`planStats.windows[*].confidence` 在 `method='none'` 时返回 `null`,而 schema 误声明为 `z.enum(['high','low']).optional()`(不接受 null),导致每次 getState 被拒、整个快照走降级链(目录/额度状态被剔除)。现改为 `z.union([z.enum(['high','low']), z.null()]).optional()`,并补 method=none/live/sample 三形态的 codec 防回归断言。 - **历史定价修复器 apiCost NaN 防护**:`repairLedgerPricing`(pricing-go-fix-v1 迁移,修复第三方模型被误套 DeepSeek 默认低价的历史账目)对缺失 `apiCost` 的旧记录存在 `Number(undefined) ?? fallback` 失效问题(`??` 不兜底 NaN),会把日/会话 `apiCost` 写成 NaN 并随 JSON 序列化为 null;现显式判有限数后再钳制,并补行为级测试(flat 重算/peak 跳过/三级联动/幂等)。 - **zen 路由真实 id 精确计价**:对表夹具发现 Zen 目录新增 `gemini-3.1-pro`(≤200K:$2/$12/缓读 $0.20)补入 google 键,消除对宽泛包含匹配 `-preview` 条目的依赖;对表夹具现为 70 条全对齐。 ## [1.5.52] - 2026-08-25 ### 修复 - **Token Plan 周/月估算系统性偏低(用户反馈复核)**:`aggregateUsageSince` 的完整天过滤把**周期首日**(每周一/每月 1 日)整天丢弃——既不进日账本聚合又超出旧环形缓冲 24h 保留期,导致「本周期实际」「每 1% 额度」「满窗」全部低估;凌晨场景 5 小时滚动窗还会丢失昨日尾部。现改为**时间区间与「日」求交**:start 恰为午夜时该日即为完整天,首日尾部与今日部分由小时桶精确覆盖,无遗漏无双计。 - **重度使用下 5 小时窗低估**:旧近期调用环形缓冲有 2000 条硬上限,子代理/压缩密集的会话单日即可触顶截断;现改为 **provider×小时聚合桶**(整点对齐、保留 48h、体积恒定无截断),v1.5.51 的旧缓冲数据加载时自动转换;窗口边界按小时粒度近似(误差 ≤1 小时,口径说明已注明)。 ### 新增 - **历史 Plan 渠道静默自动归类**:启动时扫描账本中出现过的 provider 前缀(`zen:`/`minimax:` 等),对「分类仍为 auto 且额度查询未启用」的已用厂商自动写入 `providers[id]='plan'` 并幂等重算全量历史 `apiCost`(migrations 标记 `plan-autodetect-v1` 保证只跑一次,用户事后手动改回不翻转);`updateConfig` 触及 `planBilling/codingPlans/goQuota` 任一键时同样自动重算,手动调整分类也保持历史一致。openrouter/siliconflow 默认显式 api 永不翻转。 - **采样差分区间 7 天时效**:最近区间超龄不再参与估算(回退「当前用量折算」并在方法列标注基准时刻 sampleAt),避免展示过期数字。 - **zen 路由真实 id 精确计价**:对表夹具发现 Go/Zen 目录新增 `gemini-3.1-pro`(≤200K:$2/$12/缓读 $0.20)补入 google 键,消除对宽泛包含匹配 `-preview` 条目的依赖;`llm-` 包装路由前缀归并与 pricing 对齐(`llm-zen:` 历史键正确计入 go 统计);对表夹具现为 70 条全对齐。 ## [1.5.51] - 2026-08-25 ### 新增 - **Plan/API 双轨计费分离(issue #64,感谢 @mumchristmas 报告)**:MiniMax/Codex 等「订阅制(额度制)」渠道的调用此前仍按目录 API 价计入账本金额,导致每日真实支出虚大(Z.ai 等家因模型未核价计费为 0 而未被察觉)。现引入 `planBilling` 分类配置:厂商级默认(auto = 跟随该家额度查询启用开关;openrouter/siliconflow/deepseek 默认按量)+ `provider:model` 级显式覆盖(如 Codex 手动标记),优先级为 模型覆盖 > 厂商配置 > auto。账本 day/session/byProviderModel 三级新增 `apiCost`(真金白银部分,`cost` 语义不变仍为总等值金额),同一会话同时使用两类渠道时可精确区分。**全部金额展示切换为真金白银口径**:今日费用徽章、概览三卡、预算(含宿主 `budgetUsed` 聚合)、历史/会话表格、会话徽章与 dock——有 Plan 类用量时徽章显示 `¥x(API)`、dock 追加「Plan 等值 ¥y」,悬停明细单列;历史数据由一次性迁移 `plan-billing-split-v1` 按分类回溯重算(幂等);回填/导入回放同口径写入。 - **Token Plan 用量统计面板(设置 → 用量)**:各已启用 Plan 厂商(9 家 + OpenCode Go)当前窗口卡:已用% | 本周期实际(本地账本)| **每 1% 额度 ≈ token 数 · 等值金额** | **满窗 100% ≈ token 数 · 等值金额** | 重置时刻 + 估算方法标注(采样差分/当前用量折算/样本不足)。估算采用**另存百分比采样历史**方案:每次额度刷新成功记录 `{t, p%, 本地累计token/等值额, 重置标记}`(每 provider×窗口上限 400 条 / 90 天,SCNet 本地自估不参与),相邻采样差分(Δ本地用量 ÷ Δ百分比)即每 1% 与满窗值;样本不足时回退「本周期实际 ÷ 当前已用%」。附日(30 天)/周(12 周)/月(12 月)三档粒度曲线(采样区间聚合,悬停见每 1% 折算与区间明细)。Plan 类调用同步进入 24h/2000 条环形缓冲支撑 5 小时滚动窗聚合。按模型统计行新增「API 按量 / Plan 订阅」计费方式标记;verify.mjs 新增分类器/三级拆分/迁移幂等/估算数学(含重置断开与 live 回退)/采样裁剪/strict codec 漂移/配置校验/UI 接线九组断言。 ## [1.5.50] - 2026-08-25 ### 修复 - **对话框下方本会话费用/Token 与今日会话不一致(issue #63, 感谢 @Alan0x01 报告)**:`v1.5.47` 为修复 fork 徽章全量而引入 `seedLength` 时,`lib/index.js:326` 将 `event.length`(普通会话日志总长度)无条件回退为 `seedLength`,导致非 fork 会话早期的 `seq < length` 事件被误判为种子段过滤(例: 89 次调用的会话若 `length=80`,则前 80 段被过滤,仅余少量),表现为对话框下方“本会话 ¥0.31 · 输入 9K …”远小于设置页“今日会话”(账本 `today.sessions`)与 DSH 原生行的 127K/8.3M。`v1.5.50` 改为仅显式 `seedLength` 字段生效,`length` 仅当 header 携带 `parentSession` (确认为 fork 会话)时才回退;投影 `stateVersion` `6→7` 使旧 checkpoint 全量重放自愈,`verify.mjs` 新增非 fork/ fork length 行为级断言。 ## [1.5.49] - 2026-08-25 ### 修复 - **官方价格币种为人民币时会话费用虚高(issue #62, 感谢 @Alan0x01 报告)**:切换为 `CNY` 并同步中文官方页后,会话标题栏/输入区徽章仍按人民币价直接计为美元,再经展示汇率 `×7.2` 放大,导致费用偏高约 7 倍。`store.account` 对 DeepSeek 主表 `CNY` 成本已正确 `÷exchangeRate` 落库为美元,而会话投影 `lib/index.js` 的 `makeCostUsageProjection` 与客户端回退路径 `lib/client.js` 的 `usageCost` 未做同口径折算。`v1.5.49` 在投影与客户端回退路径均补上 `usdFromCost` 判定(`deepseek-peak` 且 `prices.currency==='CNY'` 时 `÷exchangeRate`),使徽章与账本/预算/历史保持同一汇率往返,切换币种前后成本一致;`verify.mjs` 补充 CNY 投影单测与显示往返断言。 ## [1.5.48] - 2026-08-25 ### 修复 - **火山方舟 GET 用量探测优化(issue #60 反馈, 感谢 @sanqiPanax 实测)**:`GetAFPUsage` 无参即可返回 5h/weekly/monthly+daily 三窗,而 `GetUsageDetails` 裸调 400(缺 `Filter.StartTime`),原顺序 `GetUsageDetails → GetPersonalPlan → GetAFPUsage` 会先 400 再成功。`v1.5.48` 将 `VOLCENGINE_ACTIONS` 优先级调整为 `GetAFPUsage → GetUsageDetails → GetPersonalPlan`,减少一次 400 探测;同时解析器新增 `daily`/`AFPDaily` 归一(映射为 `daily` 窗口)与中文“日”兼容,未知小写窗口保留原名展示而非丢弃,避免 `AFPDaily 0%` 等窗口丢失。 ## [1.5.47] - 2026-08-25 ### 修复 - **fork 会话徽章仍显示全量费用(issue #61, 感谢 @csliuchi 跟进 #55 的完整根因与复现数据)**:`v1.5.43` 的 `session/end-seed` 延迟边界在种子段含多个 `end-seed`(父会话重启标记被拷贝)时,取“首个”边界导致中间种子段漏扣——父会话 256 条 usage(11309~273547)被计入子会话,徽章显示全量 ¥59/156M 而非 ~¥17/65M。`v1.5.47` 改为“取种子段内最大 end-seed、延迟至首个 own 事件再整段扣回”: `session` header 现记录 `seedLength`/`parentSession`(0.1.1-rc.2 起)并作为边界, `end-seed` 仅更新 `seedEndSeq = max` 且过滤 `time ≥ createdAt` / `seq ≥ seedLength` 的子会话自身重启标记;首个 own 事件到达时一次性扣回全量影子累计并标记 `seedDeducted`,后续 `end-seed` 忽略。`stateVersion` 5→6 触发重放自愈,旧污染投影自动修复;`stateSchema` 新增 `seedLength`/`seedDeducted`; `verify.mjs` 新增多 end-seed 延迟扣除断言与源码接线断言,原单 end-seed 用例保持兼容。 ## [1.5.46] - 2026-08-25 ### 新增 - **火山方舟 Volcano Ark Coding Plan 额度查询支持(issue #60, 感谢 @sanqiPanax 提交需求与参考 CCswitch 实现要点)**:作为第 9 家 Coding Plan 接入,复用管控面 OpenAPI(open.volcengineapi.com/?Action=GetUsageDetails / GetPersonalPlan / GetAFPUsage, Version=2024-01-01, service=ark, region=cn-beijing)的 AK/SK HMAC-SHA256 签名查询(非 ARK_API_KEY Bearer)——需在火山引擎控制台创建 IAM 子用户并授予 ArkReadOnlyAccess + BillingCenterReadOnlyAccess,得到 AccessKeyID/SecretAccessKey;按官方文档 [1298459](https://www.volcengine.com/docs/82379/1298459) / [2479849](https://www.volcengine.com/docs/82379/2479849) / [1390291](https://www.volcengine.com/docs/82379/1390291)实现签名与用量解析。三窗口归一化为 5h / weekly / monthly(与 Lite≈5h1200/周9000/月18000、Pro 5倍 的套餐档位对应,5h 滚动刷新、周一 00:00 重置周额、订阅月 1 日 00:00 重置月额),侧边栏/设置页/额度横条与其它 8 家同款展示与点击刷新;配置新增 accessKeyId / secretAccessKey 双字段(兼容 VOLC_ACCESSKEY/VOLC_SECRETKEY 等环境变量与 apiKey: "AK:SK" 冒号写法,凭据仅发往 open.volcengineapi.com);端点硬编码白名单与签名参数固定,新增 parseVolcengineUsage / volcengineAuthorization / normalizeVolcengineKey 纯函数与端到端 verify 覆盖(arkcli 形态/UsageDetails 数组/扁平窗口/空结果四形态,签名 determinism 与 CredentialScope 校验,配置清洗与客户端双输入框接线)。 ## [1.5.45] - 2026-08-25 ### 修复 - **Plan 类余额进度条方向统一(issue #57,感谢 @mumchristmas 报告)**:同时配置智谱与 MiniMax Coding Plan 时,侧边栏两张卡片的进度条填充方向相反——通用卡片(Z.ai/Anthropic/Kimi 等)按「已用」填充,MiniMax 专用卡片按「余量」(100−已用)填充,同屏并列时无法直观比较(报告案例:Z.ai 已用 18% 显示 18%,MiniMax 已用 0% 却显示满条)。数据层两家的 `percent` 本就同为已用口径,仅 MiniMax 卡片在渲染层做了 `100−` 翻转。现移除该翻转:`MiniMaxPlanCard`(侧边栏 + 设置页)与通用卡片、输入框上方额度横条、Codex 周额度卡片全部统一为「已用」方向——条越满用得越多;告警阈值同步对齐(≥80% 预警、≥100% 超支),悬停提示与收起态百分比同步改为已用口径。余量换算函数(`miniMaxRemainPct`/`miniMaxRemainLevel`)删除。verify.mjs 新增渲染口径断言(余量路径已删/阈值一致)。 - **OpenCode 目录价格漂移(issue #58,感谢 @xyzs996 的逐条实测与对表脚本)**:目录页会自己变而表里没有东西盯着——本次核对(2026-08-25 抓取 zen/go 两页,与报告者 08-24 数据逐位一致):① `gpt-5.6-sol` 于 08-19–08-24 间降价六成(≤272K 档 $5/$30/$0.50/写$6.25 → $2/$10/$0.20/写$2.50;>272K 档 $10/$45 → $4/$15,缓存读 $1→$0.40、写入 $12.50→$5),旧价高估输入 2.5×/输出 3×/缓存读 2.5×;页面注明 2026-09-18 前为五折促销价,已记入 notes。② `glm-5.3` 登上 Go 目录价目表($1.40/$4.40/$0.26,与 GLM-5.2/5.1 同价),`opencode-go.glm-5.3` 由 unpriced 改为目录价;`z-ai.glm-5.3` 维持不编造原则不变(Go 目录价不是智谱官方价)。③ 收录三个新模型:Zen 的 `muse-spark-1.2`(Meta,$1.25/$4.25/缓存读$0.15,新增 `meta` 厂商键)、Go 的 `longcat-2.0`(美团,$0.30/$1.20/$0.006,新增 `meituan` 键)与 `muse-spark-1.2-contributor`($0.10/$0.20/$0.002,notes 注明低价换训练数据授权、限地区)。Go 目录注释更新为「非 DeepSeek 的 19 个」;`docs/provider-pricing.json` 再生成并补交生成脚本 `scripts/gen-provider-pricing.mjs`;**新增 `test/check-opencode-catalog.mjs` 对表夹具**(零依赖抓取两张目录页,Endpoints 表官方名→id 映射,分档行取 ≤ 档为基线,缓存读缺省按原价折算,免费档与「页面有价、表里没有」只提示不判红;当前 69 条全对齐,退出码 0)。verify.mjs 新增 Sol 三项新价/glm-5.3 目录价/三个新模型断言。 ### 新增 - **DeepSeek 充值直达 + ChatGPT(Codex)周额度显示(issue #59)**:① 官方余额行与余额图框的金额旁新增「↗」小链接,点击新开 `platform.deepseek.com/usage` 平台账单页直达充值;链接 `stopPropagation`,不会误触发图框本身的点击刷新(issue #37),中英悬停提示,收起窄栏不加(保持单图标)。② 安装了 dsh-codex-connect 插件并登录 ChatGPT 后,自动在侧边栏显示 Codex 周额度卡片并在额度横条追加 Codex chip——数据经该插件暴露的同源只读路由 `/plugins/dsh-openai-codex/auth/status` 探测(不读凭据、无需配置 Key),解析 `codex` 桶 7 天窗口的 `remainingPercent` 为已用%(与 #57 统一后的方向一致)与重置时刻;插件不在/未登录/路由 404 一律静默隐藏,探测结果模块级缓存 5 分钟,bundle 装载即做一次被动探测(其余显示全关时也能出卡片),点击卡片/chip 手动重探。宿主进程无法感知 web 端口,故由浏览器端同源 fetch 实现。verify.mjs 新增充值链接/探测模块/卡片与 chip 接线断言。 ## [1.5.44] - 2026-08-24 ### 修复 - **Kimi 订阅端点识别的 URL 子串匹配隐患(CodeQL alert no. 6,`js/incomplete-url-substring-sanitization`,高危)**:`queryCodingPlan` 用 `url.includes('api.kimi.com')` 判定「本次请求是否 Kimi Code 订阅端点」——子串匹配可被形如 `api.kimi.com.attacker.tld`、`not-api.kimi.com` 的主机名误命中,进而选用错误的解析器。现改用 `new URL(url).hostname` 精确等值匹配(小写归一;非法 URL 按非订阅端点处理,走该厂商默认解析器),对现有双端点(`api.kimi.com` 订阅配额 / `api.moonshot.cn` PAYG 余额)行为逐位一致,仅排除恶意相似主机名。GitHub Copilot Autofix 提交(5fc035f)原样纳入,本版补齐版本发布链(版本号/安装脚本/README/发布说明)。 ## [1.5.43] - 2026-08-24 ### 修复 - **fork 会话徽章仍显示全量费用(issue #55,感谢 @csliuchi 的完整根因分析)**:v1.5.34 起的投影 fork 过滤依赖在 `apply` 中收到 `event.type === 'session'` 来记录 `createdAt`,但 dsh 0.1.1-rc.1 的会话头(`createdAt`/`parentSession`/`seedLength`)从不进入投影折叠的事件流("Kept out of the event log"),`state.createdAt` 恒为 0 → 种子判定恒 false → fork 会话的「本会话」徽章把父会话拷贝段一并计入(报告案例:缓存 157M 全量 vs 自己的 ~65M)。经宿主源码确认:带种子的会话在构造时于日志末尾追加 `session/end-seed` 边界事件(seq = 种子事件数),且随日志持久化、进入 refold/restore 重放——投影改按「seq < 边界」识别种子段:单遍正序折叠中边界前的用量先照常入主聚合并同步记入影子累计(shadow),边界到达时整段扣回并清空去重基准;非 fork 会话无边界事件,行为分毫不变。`stateVersion` 4→5 触发宿主对受污染投影状态全量重放自愈。verify.mjs 新增投影行为级测试(refold/live 双路径、非 fork 不变、键复用防负数、旧宿主 createdAt 规则兼容、stateSchema/wire 三调用点 parse)。 - **第三方渠道手动指定 DeepSeek 价格显示 0(issue #56)**:设置页「手动指定价格」下拉框存 DeepSeek 目标模型时写的是裸名(如 `deepseek-v4-flash`),而映射值按「带渠道前缀为跨渠道引用、裸名为同渠道换名」解析——跨渠道映射(如 `cephalon:deepseek-v4-flash → deepseek-v4-flash`)因此去 cephalon 渠道查一个不存在的模型,查无此价金额归零。两层修复:① 下拉框现存储带前缀的值(`deepseek:deepseek-v4-flash`,与第三方目标格式一致);② 宿主与客户端解析器对「裸值 + 非 DeepSeek 渠道解析失败」回退 DeepSeek 主表再查一次(仅显式条目/归一化匹配,不吃默认兜底价,未知名字保持未定价)——存量错误配置无需手工修正即自愈,客户端未命中列表与徽章估算同口径。verify.mjs 新增 exact/auto 双模式命中、旧语义保留(裸值同渠道换名、带前缀引用)、未知裸名不误配断言。 ## [1.5.42] - 2026-08-24 ### 修复 - **额度横条三处缺陷(issue #52,感谢 @ProximaCentauri0 的根因分析)**:① 迷你进度条填充永远不可见——`.cm-qbar` 不是 flex 容器,内部 `.cm-qfill` 保持默认 `display:inline`,行内元素宽高被浏览器忽略且空内容行内盒零尺寸;现两处均补 `display:block`,填充按 ok/warn/over 变色真实可见。② chip 无法点击刷新——现点击任意 chip 即刷新对应数据源(budget → getState 重取、Go → Go 额度、Coding Plan 厂商 → 该家全部窗口一次刷新),复用既有 `clickableRefreshProps`(role=button/tabIndex/aria-busy/Enter+Space 键盘触发)与 busy 呼吸互斥,刷新中显示「刷新中…」,失败原因进悬停提示。③ 同一厂商多窗口占多个 chip——现按厂商分组融合为一条(如 `Z.ai [5h 条] [周条]`,竖线分隔),告警级别取所有窗口最差,悬停仍可见各窗口重置时刻与更新时间。 ### 新增 - **Kimi Code 订阅配额查询(issue #53,感谢 @Angelyeye 提供已验证端点与实测实现)**:接入 Kimi CLI 实际使用的订阅接口 `GET api.kimi.com/coding/v1/usages`(404 回退 `/v1/usage`),显示本周配额与 5 小时滚动窗口的用量百分比与重置时刻;该端点校验客户端标识,请求固定 UA `KimiCLI/1.6`。凭据发现优先 `KIMI_CODING_API_KEY`(sk-kimi-* 订阅 Key,与开放平台 PAYG Key 不通用),订阅端点 401 视为无订阅 Key 自动降级到原 PAYG 余额端点(`MOONSHOT_API_KEY` / `KIMI_API_KEY`),行为与旧版一致;设置面板 Key 提示同步更新。端点非公开文档化,解析失败自动回落,README 已注明。 - **周末全谷价一致性回归夹具(issue #54,感谢 @xyzs996 提供 CC0 一致性向量)**:引入 15 条档位向量 + 3 条下一切换向量钉住周末规则——现行两个峰窗都在 16:00 UTC 前收尾,而 16:00–24:00 UTC 是北京日历与 UTC 日历唯一分歧段,若有人把 `weekendZoneAt` 的「+8h 后取日序」简化成 `getUTCDay()`,真实时段用例一条都不会红;其中 3 条走明确标注为合成的时段(峰窗 16:00–22:00 UTC,非真实厂商时段)专门暴露这条日历轴,另有生效闸边界与倒计时直达周一入峰的防回归断言。 ## [1.5.41] - 2026-08-23 ### 修复 - **启动期历史回填内存耗尽导致 dsh web 崩溃(issue #50,PR #51,感谢 @cftest120241104-lang 的完整根因分析与修复)**:会话日志存在解压后数百 MB 的大文件(长期会话每次追加批次写一个独立 zstd frame,实测一份 50MB / 11.5 万帧日志)且账本存在标题滞后的活跃会话时,启动后约 20 秒内 V8 堆(4GB 限制)耗尽崩溃。两层修复(PR 原样采用):① `readSessionRecords` 改为逐帧解压、逐帧按行解析(行缓冲跨帧拼接兜底),任一时刻只保留单帧结果——旧版 `frames.map(zstdDecompressSync)` + `Buffer.concat` + 全量 split/parse 把单文件峰值推到 ~3GB(11.5 万小帧的临时对象与拼接副本是主要增量),流式后峰值降至 ~1/4(实测 2969MB → 749MB,耗时 2022ms → 1713ms,解析行数一致);② 纯标题/时间戳补齐模式按缺失会话 id 定向扫描(`listSessionLogs(root, onlySessionIds)`,目录名即会话 id)——活跃会话的标题要等下次启动才写入日志,旧版只要存在一个滞后会话就每次启动全量重扫全部日志(实测 163 份),定向后扫描量 163 → 1、补齐后零扫描;日期级缺失(`needDates`)仍走全量,行为不变。两项均幂等,回填 calls 总量不变、无重复计数;`importLegacyHistory` / `repairForkSeed` 共用读取路径同步受益。verify.mjs 新增多帧 zstd 流式解析与整段明文逐位一致、定向枚举、纯标题补齐只扫目标日志与补齐后零扫描断言。 ## [1.5.40] - 2026-08-22 ### 新增 - **周末全谷价适配(官方通知:2026-08-23(周日)00:00 北京时间起,周六及周日全天不再区分峰谷,统一按低谷时段价格计费)**:计费侧新增「周末全谷价」区间(北京时间周六/周日日历日,生效时刻起)——周末恒按谷时档(offPeak)计费,峰窗口在周末不再生效;生效前的费用仍按原峰谷规则结算(首个受覆盖的周末仅周日全天,自 2026-08-29 起周六、周日全天均为谷价),历史账单分毫不受影响。展示侧四处时段条(展开/收起 × 简洁/经典)周末显示「周末时段——全谷价 · 倒计时」(收起态短词「周末全谷」,绿色系标识省钱档,标记线居中指向全谷轨道);倒计时直达下个工作日首个峰时段起点(周五晚 → 周一 09:00 之间不再出现虚假的「进入平价」切换提示);设置页峰谷面板状态行同步周末感知,并新增新规说明文案。verify.mjs 新增周末区间边界、窗口判定、计费档位与相位倒计时全套断言。 ## [1.5.39] - 2026-08-22 ### 修复 - **隐藏官方余额/今日消耗金额改为真正的 UI 隐藏(issues #45 / #46 实现方式修正,感谢 @JayWu199751 的两个建议)**:v1.5.38 的「隐藏金额(隐私模式)」把余额与费用金额打星(`$ ***`),并非两位报告者想要的——期望是开关开启后对应 UI 区块整体消失、不再显示。现已移除隐私模式遮罩,改为两个独立开关(位于 设置→显示→金额):「隐藏官方账户余额」开启后侧边栏余额行/余额进度条盒、会话页与设置页的官方余额面板整体不渲染;「隐藏今日消耗金额」开启后侧边栏今日费用行、预算盒明细与悬停提示中的今日金额行、概览页今日汇总卡片整体不渲染,token 与调用次数统计不受影响。v1.5.38 期间写入的隐私模式配置字段在升级后自动清理。 ## [1.5.38] - 2026-08-22 ### 修复 - **包装路由重复计费(issue #48,感谢 @aiseaai 的 byProviderModel 铁证分析)**:modlens / vision-router 等包装路由插件在自身 stream() 体内再次发起 `ctx.llm.stream()` 换上游 provider,同一次请求沿 `wrapper-vision → wrapper → official` 每层都完整走过一遍宿主 `llm/stream` 监听器瀑布,旧版计费监听器每层都把 usage 记进账本——同一次请求被记 2~3 份(报告者账本:official / modlens / modlens-vision 三行 40 次调用 token 逐位相同)。现计费包裹用 AsyncLocalStorage 深度标记识别嵌套调用:只有最外层记一次账,直连官方路由行为不变,并发请求互不误伤。升级后首次启动自动一次性清洗已被污染的账本(按「模型相同 + 六值 token 指纹逐位相同」识别重复,每组保留一份并修正日/会话合计;指纹不全同的真实调用分毫不碰)。 - **隐藏金额隐私模式(issues #45 / #46,感谢 @JayWu199751 的两个建议)**:新增「显示设置 → 隐藏金额(隐私模式)」开关,开启后全部余额与费用金额(会话费用/今日费用/历史/预算/余额进度条/汇总卡片等)统一遮罩为「$ ***」——保留币种符号与布局、不泄露数字,token 统计不受影响,适合共享屏幕与截图;服务端对账提示中的金额同步遮罩。 ## [1.5.37] - 2026-08-22 ### 修复 - **GLM Coding Lite 套餐(CREDIT_LIMIT)额度查询失败(issue #44,感谢 @always190515 的完整根因分析)**:Lite 套餐的 monitor 端点响应中 limits 条目为 `CREDIT_LIMIT` 类型(按 Credit 计费),与 #42 适配的 `TOKENS_LIMIT`(Pro/Max)不同,被解析器跳过导致解析为空、回落到 404 的旧计费端点,报错误导。现监控窗口映射同时接受 `CREDIT_LIMIT`——其 `percentage`/`currentValue`/`usage` 与 `unit` 语义和 `TOKENS_LIMIT` 完全一致(unit=3 → 5 小时档、unit=6 → 周档)。 - **Coding Plan 端点循环错误优先级(issue #44 建议 2)**:全部端点失败时,「200 但解析失败」的结构化错误(业务信封 / 结构已变)优先于最后端点的传输层错误(404 等)抛出,不再让兜底端点的 404 盖住主端点解析失败的真实原因。 ## [1.5.36] - 2026-08-22 ### 修复 - **Z.ai / 智谱 GLM Coding Plan 额度查询迁移到新监控端点(issue #42,感谢 @ProximaCentauri0 报告)**:智谱官方将额度查询接口变更为 `/api/monitor/usage/quota/limit`(国内 `open.bigmodel.cn` / 国际 `api.z.ai`),旧 `coding/paas/*/dashboard/billing/coding_plan/usage` 端点对新套餐不再返回数据。解析器新增监控端点形态:`data.limits` 中 `TOKENS_LIMIT` 条目按 `unit`(3=小时档,6=周档)分配 5 小时/每周两窗口,`unit` 缺失时按 `nextResetTime` 升序兜底(0% 用量的滚动窗口不返回重置时间,排最前),老套餐仅一条时只出 5 小时档;`TIME_LIMIT`(MCP/工具调用月度额度)量纲不同不纳入;`percentage` 缺失时用 `currentValue/usage` 反推。新端点两域优先,旧 v3/v4 计费端点保留兜底;同时修复国内/国际 Key 互通误判——两域 Key 不互通,单域 401 继续换域尝试,全部 401 才提示凭据无效(此前国内 Key 请求国际域名 401 即直接报「凭据无效」)。 ## [1.5.35] - 2026-08-21 ### 修复 - **「未命中模型」列表不再误报已正确计价的模型**:计费解析链(精确 → 归一化 → 宽泛包含 → 跨厂商兑底)早已能正确给路由 provider 前缀(`go:deepseek-v4-flash`、`opencode:gpt-5.6-luna` 等)按模型名命中价格,但设置页「未命中模型」列表的判定仍是裸精确键查找——provider 前缀不在价格表登记即列入,导致实际已正确计价的模型长期挂在待处理列表里。现判定走与计费完全一致的 `resolveClientPrice` 解析链(按当前匹配模式,含跨厂商兑底):已命中(含兜底命中)的模型不再列入,仅 DeepSeek 默认价兜底与完全未命中者需要人工指定;已手动指定的键仍保留在列表中便于复核/移除。双语文案同步更新。 - **外部查询硬失败不再钉死缓存、软失败不再无意义重试(PR #40,感谢 @yanzhaohui1999 的贡献与根因分析)**:四处 `ensure*`(余额/Go 额度/自定义余额/Coding Plan)此前失败时也推进 `fetchedAt`,瞬时网络错误被缓存有效期钉死,轮询一直跳过重试,只能手动刷新绕过。现区分软/硬失败:软失败(未配置 Key、非官方端点、未登录/无订阅等不会自愈的守卫错误,官方余额路径补齐 `soft` 标记)仍完整缓存避免每个周期重抛;硬失败(网络超时等临时性问题)写入 error 状态但**保留旧 `fetchedAt`**——UI 仍显示失败原因(不静默吞错、不显示陈旧成功值),且下次轮询自动重试。合并时回退了 PR 中 `.gitignore` 的 `undefined*` 行(本仓库测试不产生该目录)。 ## [1.5.34] - 2026-08-21 ### 修复 - **fork 出来的会话不再把父会话的历史费用重复计算(issue #38,感谢 @csliuchi 的报告与根因分析)**:DSH 的 fork 不是引用,而是把父会话事件流**整段拷贝**进子会话日志(header 带 `parentSession`/`seedLength`,拷贝事件的时间戳早于 `createdAt`);旧版对事件流无差别计数,子会话徽章与账本日合计都把父会话历史又记了一遍。三层修复:① 回放器把 `time < createdAt` 的种子事件单独聚合(状态机与旧版逐字一致,仅聚合目标分段路由),不再计入导入/回填;② 一次性账本清洗(账本 `migrations` 标记防重跑)按种子聚合从已污染的会话条目与日合计中精确扣除,父会话真身条目与普通会话分毫不碰;③ `costUsage` 投影 stateVersion 3→4 记录 `createdAt` 并跳过种子事件,宿主重放自动自愈。verify.mjs 新增 fork 种子去重全套断言(双段路由/跨段键复用替换语义/污染账本清洗/父会话与普通会话不动)。 - **dsh 0.1.1-rc.1 下输入区下方的会话费用不再显示(PR #39,感谢 @aaronlei 的贡献)**:DSH 0.1.1-rc.1 起,会话投影需声明 `wire`(viewSchema + view)才会向客户端推送——无 `wire` 的投影在快照(snapshot)、变更推送(onChanged)与历史重放(refold)中全部被跳过,导致客户端 `useProjection('costUsage')` 恒为空,会话费用随用量为 0 隐藏。现为 `costUsage` 投影补充 `wire` 并同时声明新契约的 `stateSchema`(持久化恢复路径 `restore()` 会调用 `stateSchema.parse` 且无容错,缺省会在 checkpoint 恢复时抛 TypeError);旧字段 `schema` + `view` 保留,dsh 0.1.0 及更早宿主不受影响;新旧 view 复用同一实现,取值逻辑不漂移。verify.mjs 新增投影 wire 双兼容结构断言。 ## [1.5.33] - 2026-08-21 ### 修复 - **点击刷新引导卡刷新后不再重现**:「知道了」的已读标记此前只存于配置(balance.clickHintSeen),经 RPC 链路往返;当服务端/网关与客户端版本错位(如 dev link 模式下 dsh web 未重启,网关仍按旧版 typert schema 解码),decode 的 zod parse 会剥离 schema 未声明的键——v1.5.32 新增的 clickHintSeen 在到达浏览器前被剥掉,配置标记虽已成功落盘、客户端却永远读不到,导致引导卡每次刷新后重现。现已读标记改为**双通道**:配置标记(跨设备) + localStorage 本地兜底(读经 useState 惰性初始化、写先于 RPC 且不受其成败影响,隐私模式 try-catch 静默),任一生效即不再打扰。重启 dsh web 使服务端 schema 对齐后,配置标记通道亦恢复正常。 ## [1.5.32] - 2026-08-21 ### 新增 - **点击余额图框立即刷新(issue #37,感谢 @hi-wenw 的报告)**:侧边栏的官方余额 / 自定义余额 / Coding Plan 额度图框(含窄栏收起态)现可点击,立即触发一次对应查询,无需等待自动刷新间隔或进入设置页;刷新中图框呼吸闪烁并标记 aria-busy,失败时保持原值、失败原因进入悬停提示,刷新中忽略连点防并发;键盘 Enter/Space 同样可触发,悬停提示固定附带「点击立即刷新」说明行。更新后首次进入时弹非模态引导卡告知此功能(仅当侧边栏确有可点击图框时展示,「知道了」永久消失)。verify.mjs 新增配置标记 / 六类图框接线 / 防连点 / a11y / 引导卡断言,并扩展 Hook 顺序门禁识别自定义 Hook。 - **DeepSeek-V4-Flash-Vision-Exp 计价适配**:新模型与 deepseek-v4-flash 同价(谷时 $0.007/$0.22/$0.66、峰时 $0.014/$0.44/$1.32,基础档 = 谷时档),内置价格表、设置页价格目录(DeepSeek v4 家族)与模型名自动匹配同步支持;峰谷时代后发布,无历史基础价档(legacyBase),分界前时刻回退基础档。存量配置经 sanitize 自动补齐新条目,升级用户无需手动操作。README.en.md 宣传图换用英文版(docs/promo.en.png)。 ### 修复 - **峰/谷切换的浏览器(系统)通知不再连发**:旧实现的防重是「上次通知时的 tick 时间戳 === 本次 tick 时间戳」,而组件每 10 秒 tick 一次,比较永远不相等等于没有去重——提前量窗口内(默认 2 分钟)每 10 秒弹出一条,最多可达 12 条。现改为按切换点时刻在模块级去重,同一切换点只发一次;配置变化导致提醒组件重挂载后(组件内状态会归零)也不会重发。弹窗本体(手动关闭)本就按切换点去重,不受影响。 - **余额点击刷新引导卡「知道了」体验加固**:引导卡与额度横条首次引导卡同为屏幕顶部 fixed 卡片,旧版可同屏重叠(点掉一张露出另一张,像「点了没反应」),现改为串行展示(横条引导处理完再出现);「知道了」点击后乐观立即消失(RPC 落盘失败才恢复),彻底规避宿主渲染时序导致的延迟;点击引导的 RPC 往返(含网关 JSON 安全校验与持久化读回)已 e2e 验证。 ## [1.5.31] - 2026-08-21 ### 修复 - **官方余额进度条「当日已用」不再混入 Coding Plan / 自定义 Provider 的费用(issue #36,感谢 @hi-wenw 的报告)**:三段进度条的「当日已用」此前取整本账本当日合计(全渠道),订阅/自定义渠道的消耗也被算进官方余额条,与开放平台实际扣款不一致。现官方余额条只统计会扣 DeepSeek 开放平台余额的调用(账本 byProviderModel 中 `deepseek:` 前缀条目,含未标注 provider 的历史调用),Plan / 自定义 Provider 的消耗只体现在各自的额度条上;同一根因的余额差对账(issue #18 ⚠ 提示)同步改为只对官方渠道费用,订阅用户不再恒报「偏差较大」,提示文案同步改准确。旧账本无按渠道拆分的数据退回全量保持既有行为。verify.mjs 新增官方渠道费用拆分单测(纯函数/Ledger 聚合/对账与进度条接线/模型名含冒号的键不误命中/旧数据退回)。 ## [1.5.30] - 2026-08-21 ### 新增 - **自定义 Provider 余额 extract 规则新增 `divide` 除法运算(PR #34,感谢 @CialloAlone 的贡献)**:此前 extract 只支持点路径、数字常量与 add/subtract,无法表达 NewApi 等以 quota 整数计量的端点(1 USD = 500000 quota,需 `total_available / 500000` 才能得到美元)。现支持 `{ "op": "divide", "path": "data.total_available", "by": 500000 }` 按 `by` 除数缩放;路径缺失 / 除数为 0 / 缺除数 / 目标非数字时返回 null(与 add/subtract 的非法路径行为一致)。README(中/英)新增 NewApi 模板完整配置示例,verify.mjs 新增 divide 换算与边界单测。 ## [1.5.29] - 2026-08-20 ### 新增 - **Coding Plan 各家「刷新间隔(分钟)」设置控件(issue #33,感谢 @hi-wenw 的报告)**:`codingPlans..refreshMinutes` 此前只有后端缓存语义(默认 15 分钟,`ensureCodingPlan` 按其过期),设置页没有控件,只能手改账本。现每家 Coding Plan 配置区(启用后、显示位置与 Key 之间)新增「刷新间隔(分钟)」数字输入,合法范围 1-1440(客户端与服务端双重钳制,与官方余额 / Go 额度 / 自定义余额同款),保存后立即生效;SCNet 为本地计量(每次状态组装随账本重算,无缓存间隔),不渲染该控件。verify.mjs 新增控件结构断言(双语文案/写回/钳制/SCNet 排除)与 sanitizeConfig 上限收敛断言。 ## [1.5.28] - 2026-08-20 ### 修复 - **首次额度横条引导点击后触发 React #300(issue #32,感谢 @kk3ya03-star 的报告与根因分析)**:`QuotaStripGuide` 的 `useRef` 位于两个条件 `return null` 之后,当 `promptSeen` 从 `false` 翻为 `true`(点击「开启/暂不」)时,下一次渲染在 `useRef` 前提前返回,Hook 数量比上一次少一个,触发 React #300「Rendered fewer hooks than expected」,sidebar footer 被 React 错误恢复流程重新挂载。修复:把 `useRef` 上移到所有条件返回之前,与 `useCost` 一起构成每次渲染固定的 Hook 序列。 - **verify.mjs 新增 Hook 顺序门禁**:扫描 `client.js` 全部组件函数,断言任何 Hook 调用不得出现在组件级条件 `return` 之后(箭头函数回调体内的 return/Hook 不计入);门禁自带自检(违规片段必须被抓到、合法片段不误报),并对 `QuotaStripGuide` 的 `useRef` 先于首个 `return null` 做定点断言,防止同类回归。 ## [1.5.27] - 2026-08-20 ### 新增 - **输入框上方额度横条**:挂在宿主 `conversation.input.dock` 插槽(渲染于输入卡片上方),以一条横排 chips 实时显示**预算已用%**(预算图框同口径:周期+汇率)、**OpenCode Go 主窗口**(与右下角 chips 主窗口口径一致)与**各已启用且查询成功 Coding Plan 的前两个百分比窗口**(厂商短标签:Claude / Z.ai / MM / Kimi / OR / SF / CC / SCNet);每片「短标签 + 44px 迷你进度条 + 百分比」,≥80% 预警、≥100% 超支着色,悬停 tooltip 见全部窗口、重置时刻与更新时间;无可用数据时整条自动隐藏。配置 `quotaStrip`(enabled/budget/go/plans/promptSeen 五布尔)默认关闭。 - **首次更新引导**:`promptSeen` 未标记时弹一张非模态小卡片(屏幕顶部居中,常驻 `sidebar.footer.action` 插槽挂载,与仅会话页渲染的 dock 插槽无关),由用户自主选择「开启横条 / 暂不开启」,任一选择写回 `promptSeen: true` 永久消失;设置页显示标签新增「输入框上方额度横条」分组(总开关 + 预算/Go/Coding Plan 三项内容开关 + 说明),在设置页改动同样标记 `promptSeen`。 - 双端接线:store.js 默认配置/校验(vmsg 双语)/清洗收敛、typert.host.js configSchema 五布尔声明、client parseConfig 归一;verify.mjs 新增默认值/部分补丁/非法拒绝/清洗/结构接线断言(含语法门禁 vm 编译覆盖)。 ## [1.5.26] - 2026-08-20 ### 新增 - **Coding Plan 额度侧边栏显示**(issue #31,感谢 @zhaoyun-plus 的建议):每家 provider 新增「显示位置」配置(主页面侧边栏 / 设置页 / 两者 / 关闭,默认设置页),选侧边栏/两者后该厂商额度以图框卡片常驻侧边栏——与 Go 额度/余额同款样式,每窗口一行进度条(余额等文本窗口整行文本),≥80% 预警、≥100% 超支着色,悬停 tooltip 见全部窗口、重置时刻与更新时间;侧边栏收起(rail)窄栏显示前两档百分比;MiniMax 沿用专用 5h/7d 余量卡片,其余七家走通用卡片。设置入口:额度标签 → Coding Plan → 各家行内「显示位置」下拉。 - **一次性配置迁移**:v1.5.26 前 MiniMax「启用即在侧边栏展示卡片」而无显示位置 UI(存量配置 display 恒为 schema 默认 'settings',非用户选择);升级后由账本根 `migrations` 标记(只跑一次,不覆盖用户后续显式选择)把启用态 MiniMax 迁移为「两者」,保持旧版侧边栏行为不回归;新装默认 MiniMax「两者」、其余厂商「设置页」。verify.mjs 新增迁移 e2e(标记幂等/落盘/用户选择优先)与 display 配置断言、客户端结构断言(display 门控/通用卡片/双语文案/设置页下拉)。 ## [1.5.25] - 2026-08-20 ### 新增 - **CommandCode(commandcode.ai)接入为第 8 家 Coding Plan**(issue #30,感谢 @zhaoyun-plus 的报告与端点调研):官方 billing credits 端点(`GET api.commandcode.ai/alpha/billing/credits`,硬编码白名单)查询 **5 小时/周窗口用量%**(used/cap,进度条 + epoch 毫秒重置时刻)与**月度 Credits 余额文本**(1 credit ≈ $1,与 Kimi/SiliconFlow 余额同形态);凭据走通用发现链(面板 Key → DSH 凭据库 `COMMANDCODE_API_KEY` → 环境变量),无订阅为中性软提示。解析器容错:非法窗口(cap≤0/负 used)剔除、未知窗口名透传、零余额仍展示;verify.mjs 新增解析器单测、域名白名单与凭据 env 断言。 ## [1.5.24] - 2026-08-19 ### 修复 - **v1.5.23 导致插件整体加载失败(紧急修复)**:1.5.23 的标签页改造在 `client.js` 引入两处括号缺失(「用量」标签的历史数据分组、「价格」标签的官方价格同步区块各少一个闭合括号),浏览器端 bundle 存在语法错误无法解析——classic `