# Changelog ## 0.3.1 (2026-09-14) ### 修复 - **底部摘要条与设置页在新版 UI 下整体消失**:DSH 0.1.5 起客户端插件必须用 `inject: ['slots']` 声明依赖的 cordis 服务,再通过 `ctx.slots` 访问;旧写法 `ctx.get('slots')` 在新版取不到(`apply` 提前 return,两个槽位都没挂载)。 已改为声明式注入;定时器改为可选探测(`ctx.get('timer')`,取不到就靠 SSE 刷新)。 ### 样式 - 底部摘要条对齐系统自带 `stats` 行(`client-ui-chat` 的 StatsPills):**单行、居中、不换行**, 同样的 pill 语言(24px 圆角、1px/8px 内边距、tertiary 文字、`tabular-nums`、悬停高亮)与 新版排版 token(`--dsh-content-font-size-secondary`、`--dsh-chat-content-width`、 `--dsh-composer-side-clearance`);去掉方括号时段标记与分隔点,改为原生 pill 表达。 ### 测试 - 前端渲染用例改为锁定新契约:即使 `ctx.get` 返回 undefined,插件也必须靠 `inject: ['slots']` + `ctx.slots` 完成两个槽位注册;并断言摘要条为一行 pill 结构。 ## 0.3.0 (2026-09-14) ### 价格表同步官方最新(2026-09-10 12:00 生效) DeepSeek 发布 V4.1 Flash 并调整定价,插件按官方页面同步(`PRICING_VERSION` → 2): | 模型 | 输入·缓存未命中 | 输入·缓存命中 | 输出 | |---|---|---|---| | `deepseek-flash`(V4.1-Flash) | 高峰 ¥2.0 / 空闲 ¥1.0(原 3.0 / 1.5) | 高峰 ¥0.04 / 空闲 ¥0.02(原 0.10 / 0.05) | 高峰 ¥8.0 / 空闲 ¥4.0(原 9.0 / 4.5) | | `deepseek-v4-pro` | 高峰 ¥9.0 / 空闲 ¥4.5(未变) | 高峰 ¥0.30 / 空闲 ¥0.15(未变) | 高峰 ¥27.0 / 空闲 ¥13.5(未变) | - **模型改名同步**:官方 Flash 更名为 `deepseek-flash`;旧名 `deepseek-v4-flash`、`deepseek-v4-flash-0731`、 `deepseek-v4-flash-vision-exp` 由 V4.1-Flash 提供服务,因此按 Flash 单价计费并归并到 `deepseek-flash` 一行 (`MODEL_ALIASES` 别名表,双向归一后新旧 key 互相命中)。 - **高峰时段改为工作日**:高峰 = 北京时间**周一至周五** 9:00-12:00、14:00-18:00,周末全天按空闲价。 - **换表迁移**:启动时若计价缓存版本落后于 `PRICING_VERSION`,按各分桶**记录的时间**用新表重算一次 (时间取自记录、只换表),并把旧模型名 key 合并到新名;时段标记按新规则重判。 差额同步进总计 / 按模型 / 按会话 / 会话分模型各处,保证界面数字一致;无时间记录的历史 token 不参与重算。 - 设置页显示当前生效价格表(版本、生效日期、高峰规则、各模型单价)。 ### 修复 - **统计文件位置**:此前 `HOME` 为空时(Windows 常见)统计被写到**当前盘根**的 `\.dsh\`(如 `D:\.dsh\`), 与 DSH 其余用户数据分离。现在优先 `$DSH_HOME`,其次 `~/.dsh`,并自动从旧位置迁移已有统计; 调试时可用 `DSH_BALANCE_AND_COST_FILE` 指定文件。 - 总计「含无时间记录的历史 token」标注:同一模型族被新旧两条 per-model 行分摊时不再误判为已全覆盖。 ## 0.2.0 (2026-09) ### 修复 - **计费不再随时段跳变**:此前三档悬停与摘要条的费用按「当前时间」的时段单价重算历史 token, 高峰/空闲切换(北京 9-12 / 14-18)会让已经产生的花费突然翻倍或减半,与真实花费不符。 现在每次消耗都会写入**计价缓存**(`ledger`):记录消耗发生的具体时间(北京整点)、 当时单价、三档 token 与按该单价结算的真实花费,费用一经记录即冻结。 所有展示(悬停三档、本会话、总计)都从缓存求和,不再用当前时间重算。 ### 新增 - **计价缓存(按小时)明细**:设置页列出最近各整点的时段(高峰/空闲)、调用次数、token 与冻结费用, 悬停可见当时单价快照;CSV 导出新增「时段」行。 - 缓存保留最近 720 个整点(30 天),更早的分桶折叠进归档合计——只丢时间粒度、不丢费用。 - 旧版本落盘的历史 token 没有时间记录:其费用仍取「已记录的真实花费」, 仅三档拆分按权重估算并在界面标注(合计始终等于真实费用)。 ### 兼容 DSH 0.1.5 - 适配 DSH 0.1.5-rc.1:`webServer.register` / `llm/stream` / 槽位(`settings.plugins.tab`、 `conversation.composer.dock`)/ `dsh.client` 客户端契约均未变,已验证可用。 - `@deepseek-ai/dsh-client-ui-primitives` 在 0.1.5 起不再作为独立依赖发布(模块 id 仍由前端 模块注册表提供):悬停取不到 Tooltip 时回退原生 `title`,不再是「没有悬停」。 - 模型名比对改为归一化后双向匹配:会话配置里带版本后缀的模型名(`deepseek-v4-flash-0731`) 也能命中已归一化的统计 key,修复「本会话(模型)」显示为 0 的情况。 ## 0.1.0 (2026-08) - 消耗统计:监听 `llm/stream`,按 DeepSeek 路由累计 token(输入 / 输出 / 缓存读取 / 缓存写入 / 推理),区分总计与当前会话 - 计价:官方 v4 价格表(deepseek-v4-flash / deepseek-v4-pro),按每次调用时刻的北京时间高峰/空闲时段计价(CNY) - 余额:经 `credentials` 服务解析 `DEEPSEEK_API_KEY` 查询官方余额接口,60 秒缓存 - 持久化:统计落盘 `$DSH_HOME/dsh-balance-and-cost.json`,重启后恢复 - Web UI:主页输入框下方摘要条(余额 / 本会话 / 总计 / 时段标记)+ 插件中心「DeepSeek 用量」面板(按模型、按会话明细) - 纯 JavaScript、零依赖、零构建,GitHub 直装无需 `allowBuilds` 授权