Repository navigation
Releases
v0.8.1
🔧 v0.8.1 — 费用行「当前模型」不再显示官方档位名
仅修显示,计费金额一直是正确的。
问题
费用行里「当前模型 + 单价」那一段,此前渲染的是命中那条价目行的名字。走全局价目表
(官方定价页)时那个名字是官方档位名,于是中转路由下的模型会被显示成另一个名字:
改前: deepseek-flash ¥4/M ← 看着像「插件认错了模型」
改后: deepseek-v4.1-flash ¥4/M(按 deepseek-flash 计价)
为什么金额没问题
档位归一化只影响匹配哪条价目,不影响金额。实测(本机重启后 27 条记录):
| 项 | 值 |
|---|---|
deepseek-v4.1-flash @mxy 记录值 |
¥1.07 |
| 按官方空闲价重算 | ¥1.07 |
| 倍率 | 1.0000×(逐位吻合) |
对比:重启前由旧代码记录的 10442 条,倍率为 9.85×(那是 v0.8.0 修掉的计价问题,
不是本版)。v0.8.1 只动显示。
改动
- 决策逻辑抽为具名函数
priceLineParts(selectedModel, current):优先显示用户实际选中的
模型名;仅当它与计价档位名不同(按归一化后比较)时附注「(按 X 计价)」。读不到选中模型时
回落档位名且不附注;无命中价目时返回空。 - 渲染处改为调用该函数;不再直接把价目行名当模型名渲染。
tests/client-alias-parity.mjs增加 5 条行为断言 + 2 条接线/回归断言,全部从
lib/client.js源码按名字提取真实函数后执行(不手抄副本);该测试 10 → 17 通过。
验证(全部 exit 0)
simulate 206/0 · route-pricing-test 62/0 · provider-pricing-test 15/0 ·
view-findprice-test 16/0 · client-alias-parity 17/0 · schema-check(校验器自检 16 项
- 6 场景)·
ledger-test·bundle-smoke·check-schema-parity(镜像 ≡ 运行时一致)
Full Changelog: v0.8.0...v0.8.1
v0.8.0
🛠 v0.8.0 — 让「按路由计价」真正生效 + 计价正确性修复
三件事:计价正确性修复、让「按路由计价」真正生效、补齐兼容声明与自包含测试。
一 · 计价正确性(修复本机实测的错误计费)
- 官方页脚注污染:官方定价页模型表头带脚注,被解析成脏 key
deepseek-flash(1)/deepseek-v4-pro(2),且已持久化进价格缓存 → 官方抓取价从未匹配成功,一直回落陈旧内置价。新增canonicalModelId(脚注剥离 + 档位归一化),解析层与写入层共用;存量脏缓存在读取层即被拦截(无需清缓存或迁移脚本)。 - 模型改名与档位别名:官方现名
deepseek-flash(V4.1-Flash)。新增档位映射,deepseek-v4-flash/deepseek-v4.1-flash/-0731/-ga-260731/-vision-exp/DeepSeek-V4-Flash-0731/deepseek/deepseek-v4-flash-0731等 10 个真实写法全部命中 flash / pro 档。 - 内置价表更新为官方现值 + 引入价格政策时间线(按消息发生时刻取价):
- 2026-08-17 峰谷定价起点
- 2026-08-23 高峰仅周一至周五(周末全天空闲价)
- 2026-09-10 12:00 flash 系列调价
- 历史回看不被新规追溯改写
- 修复
windowsAreDefault:旧 Config 默认(UTC 无 days)与内置默认(北京带 days)语义等价即视为未自定义 —— 否则官网带工作日的窗口会被拒绝应用、周末空闲规则静默失效。
实测影响(只读重放本机真实账本 10368 条 step):记录 ¥3055.52 → 按修复后规则重算 ¥310.49(差异 −¥1145,其中缓存读一项占 87%)。此前对 DeepSeek 家族约多记 10 倍。
二 · 按路由计价(per provider + model;此前形同虚设)
- 根因:provider 级取数指向本机并未安装的
@earendil-works/pi-ai目录,取数函数恒返回空表,spec.providerPrices恒空 —— 「按路由计价」从未生效。实际 catalog 封在 DSH 的app.asar内。 - 三层取数:磁盘 →
app.asar(候选路径探测,不硬编码) → 随包内置表;实际命中层如实写入providerSources(空表不登记,修掉旧实现谎报'pi-ai'的问题)。 - 新增内置价表
lib/coding-plans.js:从本机 asar 内 pi-ai v0.85.1 catalog 生成(9 provider / 151 条模型定价,逐条可追溯到structureHash),配套scripts/sync-coding-plans.mjs。 - 移除跨 provider 串价:
priceAt未命中不再扫描其它 provider 的同名模型价,回落全局表 / 官方政策链;客户端状态条同步修正(原会显示别的 provider 的同名模型价,导致界面单价与实际计费不一致 —— 这正是它此前对 DeepSeek 别名族显示空白的原因)。 - 价目行保留原始模型标识(宿主内部确定性选择:长度升序、同长字典序),别名不进 wire schema。
- 来源信息走 HTTP 路由(
GET /token-billing/prices扩展 + 新增只读GET /token-billing/providers),不动投影viewSchema。 - 设置卡新增「按路由」价目编辑:可增删 provider + model 行、填四项价与币种、逐 provider 选收费形式。
- 修复 first-party
deepseek旧快照越权:内置表原含 pre-2026-08-17 的静态快照,若某路由恰名为deepseek,会按「provider 表优先」盖住政策时间线(输出折算约 ¥2 vs 官方空闲 ¥4、cacheWrite记 0、不参与峰谷、绕开历史回看保护)。现按精确 provider id 跳过 catalog 取数;用户显式配置的 provider 价仍优先(逃生口保留)。同源旁证:上游bpc-oss/dsh-web-billing的价表只有 9 个 provider、没有deepseek条目,该条目是本项目自加的。
三 · 兼容与工程化
package.json补齐engines/peerDependencies/dsh.compatibility(下界>=0.1.0-rc.8,与本机在跑的核心版本一致;dshReleases15 项)。tests/schema-check.mjs改为自包含:移除硬编码绝对路径与外部 zod 依赖(原在本机必然MODULE_NOT_FOUND),改用内置极简校验器并保留原断言强度。- 新增
scripts/check-schema-parity.mjs(npm run check:parity):一条命令程序化校验「测试镜像 schema ≡ 运行时 wire schema」,含承重自检存在性与windows无.rest()的硬断言,防止「测试比 runtime 宽松 → 假绿」。
四 · 验证
| 测试 | 结果 |
|---|---|
simulate |
206 通过 / 0 失败(基线 123) |
route-pricing-test(新增) |
62 通过 / 0 失败 |
provider-pricing-test |
15 通过 / 0 失败(此前 7 通过 / 8 失败) |
view-findprice-test |
16 通过 / 0 失败(此前 13 通过 / 3 失败) |
client-alias-parity(新增) |
10 通过 / 0 失败 |
schema-check |
exit 0(校验器自检 16 项 + 6 场景) |
ledger-test / bundle-smoke |
exit 0 |
check-schema-parity |
一致 |
请按清单逐个运行,不要用
tests/*.mjs目录通配:tests/debug-*.mjs是临时诊断脚本(需特定会话输入文件,缺文件即 ENOENT),不属于测试套件。
⚠️ 升级提示
- 必须重启 DSH(宿主侧
lib/*.js改动),并刷新页面(客户端 bundle)。 - 历史账本记录不会被改写 —— 修复只影响新产生的 step;统计页的历史总额仍是旧值(本机约 ¥3055,按新规则重算约 ¥310)。
- 价格缓存会在下一次抓取(默认 1 小时周期,或手动「立即刷新价格」)时被重写为规范键。
Full Changelog: v0.7.2...v0.8.0
v0.7.2
🛠 v0.7.2 — 高峰窗口支持星期几维度:2026-08-23 起官方高峰仅限周一至周五,周末全天空闲价
官方于 2026-08-23(北京时间)起调整峰谷规则:高峰时段只落在周一至周五,周六周日全天按空闲价(半价)。
旧版窗口数据结构只有 [起分, 止分](一天里的分钟),抓下来的「周一至周五」没处放,周末请求仍按高峰价计费(每周约 14 小时多计一倍)。本版为窗口增加星期几维度:
修复
- 窗口支持第三维 days:
[起分, 止分, [1,2,3,4,5]](0=周日…6=周六,缺省 = 每天);新增weekdayInTz(atMs, tz)按同一 tz 读星期几(不退回getUTCDay(),规避 UTC/北京两本日历在周五/周日 16:00-24:00 UTC 的分歧) - 官网解析:中文页识别「周一至周五 / 工作日」,英文页识别 "Monday through Friday" / "weekdays",自动写入 days;英文页窗口 +8h 折算为北京时间,与中文页同一日历
- 历史回看不减半:周末空闲规则加 effectiveAt 门控(生效时刻
2026-08-22T16:00:00Z),生效前的周末仍按高峰价计费——回看旧账不会少算一半 - 默认窗口/时区改为北京时间(Asia/Shanghai)+ 工作日限定
验证
用 deepseek-peak-hours 的 15 条边界向量验证:15/15 通过(修复前 10/15);本地测试套件 123 通过 / 0 失败。
Full Changelog: v0.7.1...v0.7.2
v0.7.1
🛠 v0.7.1 — 修复 DSH 桌面端 2.0.2(核心 0.1.1-rc.1+)费用行不显示
这是桌面端 2.0.2 用户的必更版本。 升级桌面端后如果输入框下方的实时费用行消失、
统计账本停止累积,就是本修复针对的问题。
根因
核心 0.1.1-rc.1 起,sessionProjections.register() 改为只读 wire: { viewSchema, view } 块,
旧顶层 schema / view 字段被忽略,投影被当成「仅宿主内部」:宿主照常计费,但浏览器端
永远收不到数据——费用行隐藏,账本(靠变更通知记账)自升级起静默冻结,且无任何日志报错。
修复
- 按官方 dsh-context 插件的兼容写法,注册时同时提供新旧两套字段
(wire块 +stateSchema: zod.json()+ 保留顶层schema/view),rc.8 与 rc.1+ 双核心通用,
安装方式不变,更新插件后重启 DSH 即可 blocks初始化从数组改为对象,修复宿主 plain-JSON 序列化契约告警usage.inputTokens/outputTokens缺失时回退 0- 费用行在投影缺失/hook 异常时静默隐藏(不再显示诊断文本)
其他
- 新增诊断工具:
tests/debug-*.mjs(投影序列化检查 / 缓存状态体检 / 真实会话分帧解压全量重放) - 新增
scripts/fix-deps.ps1:pnpm install 清空 link 包依赖后一键重建 Junction 链接
Full Changelog: v0.7.0...v0.7.1
v0.7.0
🎉 v0.7.0 — 统计页仪表盘
参考中转站(one-api / new-api)首页与 dsh-web-billing 费用页,统计页升级为仪表盘,纯手写 SVG 图表(零构建依赖,深浅主题自适应,hover 查看明细):
- KPI 概览卡:今日 / 昨日 / 本月 / 累计 / 调用次数;今日卡带 vs 昨日环比(▲ 红 = 花多,▼ 绿 = 省了);本月卡带预算进度环
- 📈 费用趋势折线图:近 14 天每日费用(面积渐变 + hover 竖线与明细 tooltip)
- 📊 Token 用量趋势折线图:近 14 天输入 / 输出 / 缓存读三条线 + 图例
- 🍩 按模型费用占比环形图:扇形占比 + 中心合计 + 图例(超 8 项自动合并「其他」)
- 🍩 按 Provider 实际花费占比环形图:按量实付分布;全为订阅/免费/本地时给出提示
- 月度预算预警:新增
monthlyBudget配置(基础选项卡),进度条绿 → 琥珀 → 红,超支红色高亮并显示超支金额 - 仪表盘顶部「↻ 刷新」;按天明细表新增每日 token 总量
数据层
- 账本
perDay增加 token 分桶(uncachedInput / output / cacheRead / cacheWrite) computeStats返回days(today / yesterday 本地时区键);stats 路由附带近 14 天时间轴seriesLabels与budget
验证
simulate.mjs101 项、schema-check、ledger-test(新增 perDay/days 断言)、bundle-smoke(新增)全部通过- 新增
scripts/render-preview.mjs开发预览工具
