Skip to content

Releases

v0.8.1

Choose a tag to compare

@2006spy 2006spy released this 11 Sep 16:09

🔧 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

Choose a tag to compare

@2006spy 2006spy released this 11 Sep 15:52

🛠 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,与本机在跑的核心版本一致;dshReleases 15 项)。
  • 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),不属于测试套件。

⚠️ 升级提示

  1. 必须重启 DSH(宿主侧 lib/*.js 改动),并刷新页面(客户端 bundle)。
  2. 历史账本记录不会被改写 —— 修复只影响新产生的 step;统计页的历史总额仍是旧值(本机约 ¥3055,按新规则重算约 ¥310)。
  3. 价格缓存会在下一次抓取(默认 1 小时周期,或手动「立即刷新价格」)时被重写为规范键。

Full Changelog: v0.7.2...v0.8.0

v0.7.2

Choose a tag to compare

@2006spy 2006spy released this 25 Aug 10:29

🛠 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

Choose a tag to compare

@2006spy 2006spy released this 24 Aug 09:02

🛠 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

Choose a tag to compare

@2006spy 2006spy released this 21 Aug 16:26

🎉 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.mjs 101 项、schema-check、ledger-test(新增 perDay/days 断言)、bundle-smoke(新增)全部通过
  • 新增 scripts/render-preview.mjs 开发预览工具

📸 统计页仪表盘(v0.7 · 纯手写 SVG 图表)

统计页仪表盘