中文EN

dsh-turn-price

usage已测通过npmMIT

在每个已完成回合的下方单独一行显示这一轮的花费金额(人民币),点击展开明细,列出各 token 类别的数量、单价、命中的价格规则与计费时刻;单价可在 DSH 设置页里按模型维护,含四类 token 单价、每周循环的峰谷规则(系数自定)与绝对时间区间的限时优惠价。0.2.3 起还能看账户:读取 14 家 provider 的余额或剩余额度(DeepSeek、OpenRouter、智谱 GLM、月之暗面、MiniMax、Kimi Coding、OpenAI 兼容中转站等),在旁边显示今日 / 本月 / 本会话花费;花费记在本机日账里(原子写、按 API key 分本、保留 1-24 个月、可导出

下载量 / Downloads
967
依赖体积 / node_modules
0.9 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-turn-price

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-turn-price

![npm version](https://www.npmjs.com/package/dsh-turn-price)

![license MIT](./LICENSE)

![dsh-plugin topic](https://github.com/topics/dsh-plugin)

![DSH](https://github.com/deepseek-ai/deepseek-harness)

在 DeepSeek Harness(dsh)的 Web 界面里,在每个已完成回合的下方单独一行显示这一轮花了多少钱,点击可展开明细(各 token 类别的数量 × 单价 = 金额、命中的价格规则、计费时刻)。

A DeepSeek Harness (dsh) web plugin that shows what each turn cost, in CNY, on its own row under the turn. Click the amount for a breakdown: tokens per category × unit rate = money, which price rule matched, and the billing instant.

金额按当前价格表实时计算:token 用量取自 dsh 会话日志里每个步骤的 usage,插件不做字符数估算,所以你事后修改价格,所有历史回合的金额会立刻跟着更正 —— 这正是「忘了提前改价」的补救方式。

界面上的金额是预估,不是账单:它等于 provider 上报的 token 数乘以你本地价格表的单价,实际结算以平台为准。

安装

本插件是标准的 dsh 组合包(dsh.bundle.patch + dsh.client),三种地址形式等价:

地址形式 · 命令

npm 包名 · dsh plugin --profile <profile> add dsh-turn-price

Git 仓库 · dsh plugin --profile <profile> add github:littlefish04/dsh-turn-price

本地目录 / tarball · dsh plugin --profile <profile> add <绝对路径>

也可以在应用内侧边栏的插件页用「添加插件」,填入上面任一形式的地址。

  • 把 <profile> 换成目标 profile 名(桌面版是 desktop,dsh web 常见 web)。
  • 装好后需要重启该 profile 才生效:插件行在启动时确定(桌面应用完全退出后重开,或重启 dsh web)。
  • 卸载:dsh plugin --profile <profile> remove dsh-turn-price。

装哪个版本

推荐 0.2.3 —— 本文档〈它是怎么记账的〉〈设置页的 4 张卡片〉里写的余额、日账、消费日历、

手工记账,都是 0.2.x 才有的(npm 上目前有 0.1.0 / 0.1.1 / 0.2.3):

dsh plugin --profile desktop add dsh-turn-price@0.2.3

想要 · 版本号写 · 说明

完整功能(推荐) · @0.2.3 · 余额 / 今日 / 本月 / 会话汇总、消费日历、手工记账、日账导出

只要最初那版:每轮花费 + 价格表 · @0.1.1 · 没有余额与日历;功能稳定,但不再更新

—— · @0.1.0 · ⚠️ 不要装:它会让 dsh 起不来(客户端模块 id 与包名不一致),0.1.1 就是修这个的

从 git 仓库装 · 不写版本号:github:littlefish04/dsh-turn-price · 取 main 分支的当前内容(当前 = 0.2.3),不走 npm

  • 建议钉死版本号(写成 dsh-turn-price@0.2.3)。不写版本号会装 npm 上的 latest,

而国内镜像(npmmirror)同步有延迟,裸包名可能解析到旧版。核对官方源上的最新版:

  npm view dsh-turn-price version --registry https://registry.npmjs.org
  • 升级 = 先卸再装(dsh 目前不支持插件自动更新;价格表存在 profile 配置的同一命名空间里,

卸载重装不会丢):

  dsh plugin --profile desktop remove dsh-turn-price
  dsh plugin --profile desktop add dsh-turn-price@0.2.3
  • 各版本要求的 dsh 版本都是 >=0.2.0-rc.1 <0.3.0(见〈兼容性与边界〉);

每一版改了什么见〈版本更新〉。

<details>

<summary>从源码目录安装(开发用)</summary>

dsh plugin --profile desktop add "<本仓库的绝对路径>"

本插件没有构建步骤(lib/ 既是源码也是发布产物),所以 git 安装不需要 prepare 脚本、

也不需要用户在 pnpm-workspace.yaml 里批准构建脚本。

</details>

它长什么样

每个已完成回合的操作行上方多出一行金额(不占用 hover 才出现的操作行):

上图里那一行由四部分组成:本轮花费 + 金额 ¥0.0874 + 徽标 限时优惠 + 展开箭头 ▼。
徽标只在命中规则时出现,显示规则名,系数不是 1 时写成 高峰×2 这样。

点击金额展开明细:

显示项 · 内容

面板标题 · 本轮花费明细 + 合计金额

模型 · 模型:<provider> / <model>;一个回合换过模型时附注 (本轮经过 N 个路由,按路由表中的最后一个计价)

计费时刻 · 计费时刻:2026-10-03 19:16(UTC+8,星期六)

token 来源 · token 来源:宿主折叠的会话事件,按每步 usage 容错求和(N 个样本);宿主不可用时写明「本页会话数据」

生效价格 · 生效价格:基础价(DeepSeek Flash),或 高峰 ×2 / 限时优惠 ×1

单价口径 · 单价口径:每 1,000,000 tokens

明细表 · 类别 / tokens / 单价 / 金额 四列,之下是 合计 行

设置 → 每轮花费:按模型分页签维护价格表,改完保存,所有历史回合的金额立即重算。

它是怎么算的

token 用量来源

按每个步骤的 usage 容错求和,而不是直接用 dsh 内置的严格折叠:

宿主(lib/session-usage.js)折会话事件 → 每轮 { buckets, routes, endSeq, endTime, reason }
  桶 = { inputTokens, outputTokens, cacheReadTokens ?? 0, cacheWriteTokens ?? 0 }

为什么要换掉严格折叠(deriveTurnTokenUsage):它要求「有 totalTokens,或 cacheRead + cacheWrite 都有」,

否则整轮判为不可证、一个字都不显示。实测(本机 24 份真实会话日志 / 79 个回合)有 15 个回合因此

连金额都出不来 —— 它们的共同形状是 {inputTokens, outputTokens, cacheReadTokens}

(zai/glm-5.3-flash、deepseek-vision/deepseek-v4-flash 都这样:有缓存命中、缺缓存写入、缺 total)。

被手动停止的回合也一样会整轮消失。

容错求和的口径(与 dsh 的 tokenUsage 投影逐项相等,测试里拿官方定义对拍过):

  • 缺 cacheReadTokens / cacheWriteTokens → 记 0;
  • 缺 usage 的步骤(中途被停止的那一步)→ 跳过,其余步骤照常计;
  • totalTokens / reasoningTokens 不参与计价;
  • 同一步的后续样本替换前一个;llm/retry-started 之后的样本累加(重试的两次尝试都算钱);
  • 整轮一个样本都没有 → 不显示金额(而不是显示 ¥0.0000)。

浏览器侧还有一条回退路径:宿主不可用时按页面上每步的 assistant-step.usage 同样容错求和。

回退路径拿不到路由时会借用严格折叠留下的 routes,明细里会注明数据来源。

计价公式

金额 = Σ( 类别 token 数 ÷ 每单位 tokens × 该类别的生效单价 )
类别 = 未缓存输入 / 缓存命中 / 缓存写入 / 输出

生效单价的优先级

按回合结束时间判定(时区用设置里的「时区偏移」,默认 +8 北京时间):

优先级 · 机制 · 说明

① 最高 · 限时特价 promos · 绝对时间区间。区间内自成一套价格:基础价 × 系数,再用各项「覆盖价」单独替换。不叠加峰谷系数。

② · 峰谷规则 rules · 一周内的循环时段(可选星期 + 起止时刻),价格 × 系数。支持跨零点(end < start)。

③ · 基础价 · 上面都没有命中时使用。

同类规则多条命中时,列表靠后的优先(便于后来追加例外)。

DeepSeek 官方口径怎么填

DeepSeek 的价格政策是「空闲时段价 = 高峰时段价的一半;高峰时段为北京时间周一至周五 09:00–12:00、14:00–18:00」。

所以本插件推荐的填法是:

  • 基础价 = 空闲时段价(平时就是原价,直觉一致)
  • 峰谷规则填 ×2,两条:周一~周五 09:00–12:00、周一~周五 14:00–18:00

插件默认已按此预填 deepseek-flash 与 deepseek-v4-pro,设置页里也有「恢复 DeepSeek 官方价」按钮。

法定节假日整天都是空闲时段,无法用「星期几」表达;用限时特价把该日期区间的系数设为 1
(或直接写覆盖价)即可单独处理。

设置项

设置路径:设置 → 每轮花费,同一节内 4 张卡片:模型价格 → 账户与余额 → 消费记录 → 显示项。

逐项说明见下面的〈设置页的 4 张卡片〉一节;这里只列最常用的几个数:

项 · 默认 · 说明

显示每轮花费与汇总行 · 开 · 总开关,关闭后不渲染任何金额

货币符号 · ¥ · 估算金额用它(余额段用余额接口返回的币种)

明细小数位 · 4 · 轮尾明细的位数

汇总行小数位 · 2 · 输入框下方汇总行的位数

时区偏移 · +8 · 判定峰谷/特价、以及日账归属哪一天都用它

每多少 tokens · 1000000 · 单价分母,与官方口径一致

未配置的模型 · 不显示金额 · 或「用兜底价计算」;默认不显示以免误导

兜底价 · 全 0 · 选择兜底时使用的四个单价

模型价格 · 见上 · 每个模型:模型 id / 提供方 / 显示名 / 四个基础单价 / 峰谷规则 / 限时特价

提供方留空 = 不限提供方:同一个模型在多个 provider 下价格相同时只写一条即可;

若某个 provider 价格不同,再单独加一条并填上 provider(精确匹配优先)。

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:3,最后更新 2026-10-07

链接

GitHub · Homepage · npm

同类插件