Skip to content

Releases

dsh-spend v0.6.3

Choose a tag to compare

@nonewind nonewind released this 07 Sep 02:40

dsh-spend v0.6.3

性能修复:大会话历史不再让 usageStats 查询卡住数分钟(#11),由 @LiuRJ99 在 PR #12 完成。

⚡ 性能

  • 异步 zstd 解码:会话日志帧改用 libuv 线程池解码(并发上限 4),扫描期间不再阻塞事件循环——实测扫描中事件循环最大延迟约 27ms,其他 DSH RPC 不再被拖住
  • 流式聚合:事件逐帧流入现有 fold 逻辑,不再全量保留/重复解析 JSONL 历史
  • 按文件缓存:未变化的 session.jsonl.zstd 按 size/mtime 直接复用结果,并持久化到 ~/.dsh/storages/dsh-spend-scan-cache.json,DSH 重启后免冷扫描
  • 活跃会话快照复用:拥有完整内存快照的 live session 不再重放其仍在增长的历史文件
  • 浏览器刷新去重:in-flight 刷新合并;切换工作目录时丢弃过期响应并在完成后自动补一次刷新

🧪 测试

  • 21/21 通过(新增 scanSessions 流式解码 + 缓存复用用例)
  • 实测 329 个会话 / 约 2.6 万次调用 / 0 解码错误:首次扫描约 7.3s,二次刷新约 1s

dsh-spend v0.6.2

Choose a tag to compare

@nonewind nonewind released this 27 Aug 00:43

dsh-spend v0.6.2

MiniMax Token Plan(Coding Plan)用量修复:接入 minimax-cn 提供商后自动显示 5h/周实时额度。

🐛 修复

  • MiniMax 计划卡不显示用量:minimax-cn(dsh 国内区命名)未进别名表 → 自动发现匹配不到知识库;且知识库把 MiniMax 标成 token 计划,但 MiniMax Token Plan 有实时额度适配器(5h/周窗口)而非余额适配器——只有 code 计划才会请求厂商用量接口,所以卡片静默缺失额度
    • lib/knowledge.js:新增别名 minimax-cn→minimax、zhipu-cn→zhipu;MiniMax 计划类型 token→code
    • lib/providers/quota-minimax.js:凭据默认 MINIMAX_API_KEY,未配置时兜底 MINIMAX_CN_API_KEY(默认端点即国内 minimaxi.com;显式 usageEndpoints.apiKeyEnv 覆盖优先且不回退)
  • 文档同步:README / README.en 别名表与凭据表更新

🧪 测试

  • 新增 10 个用例(共 20/20 通过):别名发现、别名用量计入 code 计划窗口、payload 归一化(剩余% → 已用%)、密钥兜底链、显式覆盖优先级

🚀 使用

配置了 minimax-cn 提供商 + MINIMAX_CN_API_KEY 凭据后,计划卡自动出现(或加显式 plans: [{provider: minimax, type: code}] 立即显示)。

dsh-spend v0.6.1

Choose a tag to compare

@nonewind nonewind released this 27 Aug 00:26

dsh-spend v0.6.1

鲁棒性修复版:Performance 页崩溃修复 + 别名提供商去重(两张 DeepSeek 卡合并为一张)。

🐛 修复

  • Performance 页崩溃(fixes #9):当某模型无有效生成速度样本时 tpsAvg 为 null,表格 tooltip 直接调用 .toFixed(2) 抛出 TypeError,整个性能页白屏。新增 msTitle/tpsTitle 守卫(非有限值不显示 tooltip,单元格保持 “—”),并顺带修复 Math.round(null) 渲染错误 “0 ms” 提示的隐患
  • DeepSeek 别名重复计划卡(fixes #10):会话日志上报 deepseek-official 而知识库/余额适配器以规范名 deepseek 为键,自动发现卡与钱包卡并存——一张显示本地估算但无实时余额,另一张余额真实但用量为 0。现在全链路(计划去重、窗口记账、usedCost 归集、适配器查找、缓存槽、计费行匹配)统一按规范 provider id 归一化,合并为一张卡:别名聚合的估算花费 + 真实钱包余额

📚 文档

  • README 全面重构:新增目录、功能特性速览、交互方式表、凭据来源表、liveRate 配置说明、lib/providers/ 目录结构逐文件注释
  • 新增 README.en.md:与中文版同结构同步

🧪 测试

  • 新增 node:test 测试套件(npm test,10 个用例):覆盖别名归一化、计划去重、显式计划优先、别名用量记账、code 计划窗口累积、非别名回归

完整变更:git log v0.6.0..v0.6.1

dsh-spend v0.6.0

Choose a tag to compare

@nonewind nonewind released this 25 Aug 03:05

dsh-spend v0.6.0

实时额度 / 余额直读(厂商接口)—— 吸收 GCMP (vicanent.gcmp) 的用量/余额查询思路,全套适配器重构。

✨ 新功能

  • 订阅商实时额度(合并 PR #8):opencode-go / OpenAI Codex / Claude Code / GitHub Copilot 官方(部分逆向)用量接口直读,计划卡展示各窗口(5小时/周/月)实际已用百分比 + 重置时间 + 供应商特有额度(Codex 代码评审、Claude Opus/Design 周窗口、Copilot Premium/Chat 快照)
  • 账户余额直读(新):DeepSeek(/v1/user/balance)、Moonshot(/v1/users/me/balance)官方钱包接口,显示可用余额 + 充值/赠金拆分,随 $/¥ 开关自动换算
  • 更多额度适配器(新):智谱 Coding Plan(5h/周限额 + MCP 月度次数)、MiniMax Token Plan(5h/周)、ClinePass(300分钟/周/月)
  • 凭据驱动的自动余额卡:凭据缝($DSH_HOME/.credentials.yaml)配置了 DEEPSEEK_API_KEY / MOONSHOT_API_KEY 时,即使该提供商未出现在会话日志中也会自动生成余额卡
  • hover 胶囊悬浮窗增强:一行展示各订阅商实时额度剩余(tooltip 带重置时间)与账户余额
  • Copilot 适配器支持 keyring 登录态(gh auth token 回退)

🛠 重构

  • lib/providers.js 单文件 → lib/providers/ 适配器目录(common / oauth-* / quota-* / balance-* / 注册表)
  • 服务端 fetchProviderBalance() + token 计划挂载 providerBalance(独立 TTL 缓存,失败降级不崩溃)
  • 客户端计划卡余额展示 + usageEndpoints 可覆盖内置地址/超时/凭据名

🔒 兼容与降级

  • 未配置 / 未登录 / 超时 / 非 200:卡片显示原因并回退本地配额行,widget 不崩溃
  • 逆向接口(Codex/Claude/Copilot)随时可能变化,解析全部防御式
  • 零配置即可用:凭据只读复用本机登录态与凭据缝

Fixes #7 货币切换($ / ¥)与图表整理(0.5.0 已发布)。

dsh-spend v0.5.0

Choose a tag to compare

@nonewind nonewind released this 25 Aug 00:59

dsh-spend v0.5.0

Fixes #7 — 新增 USD / CNY 货币切换按钮。

✨ 新功能

  • $ / ¥ 货币切换:悬浮预览气泡和面板标签栏右侧均有切换按钮,一键切换美元 / 人民币显示
  • 实时汇率:服务端定时拉取 USD→CNY 报价(6 小时缓存),拉取失败时静默回退到可配置固定汇率(usdCnyRate,默认 7.2;可用 liveRate 关闭实时拉取)
  • 切换后全部视图即时换算:摘要卡片、排名表格、独立明细窗口、定价表(订阅按其计价币种换算)、CSV/JSON 导出(元信息标注显示币种)
  • 货币选择持久化(localStorage),刷新页面保持
  • 按你的要求重构:【总览】回归纯 KPI + 排名摘要(不再含图表);时间曲线(24h/72h/7d)与活跃热力图移至【今日】

🐛 修复

  • getRates() 首次调用崩溃(汇率缓存字段未初始化导致 Cannot read properties of undefined),修复后台数据链路中断
  • 组件渲染时 rate 暂时性死区(TDZ)崩溃,导致悬浮窗整体不可见
  • 调用集中在单个小时内时,时间曲线误报「暂无曲线数据」——现在单活跃小时渲染为可视化单点(性能图同理)

零配置升级:发布后右下角悬浮窗即出现 $ / ¥ 切换;想自定义汇率可在 profile 的 cordis.patch.yml 中覆盖 usdCnyRate / liveRate。