dsh-turn-cost:在 DSH Web 界面按轮显示费用与上下文占用

前言

DeepSeek Harness(DSH)跑在本机,对话按 token 计费。默认 Web 界面里,你往往只能等到账单周期结束才知道总花费,很难对应到「哪一轮、哪一段长会话」最耗钱;上下文变长时,也缺少和每一轮回复绑在一起的占用提示。社区插件 dsh-turn-cost(维护者 xinshang777,分类:客户端)在每轮 assistant 回复旁,把时间戳扩展为「上下文百分比 · 本轮估算金额 · 原时间戳」,并按 DeepSeek 官方峰谷价目表做本地估算。下面介绍它做什么、怎么装、怎么用,以及适用边界。

这是什么

一句话:把「这一轮花了多少钱」变成回复时间戳旁的具体数字(如 ¥0.0123),并在金额前显示该轮结束时的上下文占用(如 28%),点击百分比可走 DSH 官方 command 触发 /compact。

插件只展示、不拦截花费;数值是 token × 价目表的估算,不与官方账单对账。数据与账本均在本机,插件自身不发起外部请求。

核心功能

单轮费用

订阅 DSH 运行时产出的 usage 事件,经 lib/pricing.mjs 按事件时间判定峰谷,写入本地账本 ~/.dsh/dsh-turn-cost/turns.json,前端 assets/client.js 挂在原生时间戳同一节点上。默认只对 DeepSeek 系(provider 或模型名含 deepseek)计价;其他模型显示为 ¥0.0000,除非在配置里打开 priceUnknownProviders。

上下文占用与压缩

在金额前显示该轮结束时的上下文占用百分比(showContext 默认 true)。点击百分比数字,插件走官方 command 路径触发 /compact,等价于手动输入该命令;默认超时 120 秒(compactTimeoutMs)。

历史会话回填

启用 backfill(默认 true)时,利用 DSH 的 sessionPersistence 回填历史会话,切回旧会话时之前的轮次也可显示金额,峰谷仍按各轮事件发生时间计算。

显隐规则(对齐 DSH)

金额与原生时间戳共享同一套显隐规则:时间线最后一轮常显;其余轮次需鼠标移到该轮上才显示。这是刻意对齐 DSH 上游交互,不是缺陷。

安装与启用

前置条件

  1. Node.js ≥ 18
  2. pnpm(dsh plugin 的剩余参数会原样转发给 pnpm;缺则先 npm i -g pnpm)
  3. 已安装 DSH 且 dsh web 可用
  4. 若主要用 DeepSeek 系模型,默认可直接看到非零金额

推荐:GitHub 直装

在终端执行:

dsh plugin --profile web add github:xinshang777/dsh-turn-cost

安装成功后,插件会登记进 profile 的 dsh.profile.bundles,无需手动改 bundle 配置。新装或卸载后须完整重启 dsh web;若浏览器里看不到金额,可先硬刷新(Ctrl + F5)。

三十秒验证

打开 dsh web,随便问一句。回复下方时间戳旁出现 ¥0.xxxx 即表示生效(最后一轮常显,其余轮 hover 可见)。

若仍无金额,依次检查:~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 是否含 dsh-turn-cost;是否完整重启过 dsh web;该轮是否为 DeepSeek 系模型。

本地开发、Download ZIP 等方式见仓库 README;改 profile 配置后需重启 dsh web;仅改 assets/client.js 时硬刷新即可。

典型用法

  1. 看费用:装完重启并刷新页面,正常对话即可;最后一轮金额常显,历史轮次 hover 查看。
  2. 压缩上下文:点击百分比(如 28%),等待 /compact 完成(默认最长 120 秒);若无效,先确认该会话手动敲 /compact 是否正常。
  3. (可选)调显示与账本:编辑 ~/.dsh/profiles/web/cordis.patch.yml,在 dsh-turn-cost 的 config: 下调整。注意 profile 层 config 为整体替换,只写字段则其余回落插件默认值;改完需重启 dsh web。

常用配置示例(字段含义见仓库 README 配置表):

# ~/.dsh/profiles/web/cordis.patch.yml 片段示意
dsh-turn-cost:
  config:
    showContext: true
    priceUnknownProviders: false
    backfill: true
    ttlDays: 30

若希望所有轮次金额常显,可自行注入 CSS(代价是该轮所有操作按钮也会常显,与 DSH 默认不一致):

[data-actions-reveal=hover]:has([data-dsh-turn-cost]) .xzv4MW_actions { opacity: 1 }

适用场景与注意

适合谁

  • 按量/按月计费,想看清哪一轮、哪段会话最烧钱
  • 长会话,需要每轮旁的上下文占用提示
  • 关心提问是否落在峰谷时段(按官方峰谷价估算)
  • 常忘手动 /compact,希望点百分比即可压缩

不适合谁

  • 包月订阅且完全不关心单轮开销
  • 主要用非 DeepSeek 模型且不愿打开 priceUnknownProviders(默认不计价)
  • 需要预算封顶、拦截或精确对账官方账单——应使用服务商后台报表,本插件仅作趋势与异常参考

安全与权限

DSH 插件以当前 dsh 进程权限运行。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认行为符合你的环境策略。账本与配置均在 ~/.dsh/ 下,卸载可用:

dsh plugin --profile web remove dsh-turn-cost

可选删除数据目录 ~/.dsh/dsh-turn-cost/。

已知限制

价目表为静态复制(README 说明复制自 dsh-whale-widget@0.3.15),官方调价后需手动更新 lib/pricing.mjs;节假日谷价表需按年维护。与 dsh-per-turn-isolation 等同开时,压缩后百分比语义变化属正常。

结尾

dsh-turn-cost 把 DSH Web 里每轮对话的估算费用和上下文占用拉到时间戳旁,并支持点击百分比触发 /compact,适合在本机 DSH 上细粒度观察 token 开销。社区插件目录独立于 DeepSeek / 幻方,并非官方应用商店。

  • 目录页:https://www.skillhub.cn/plugins/xinshang777/dsh-turn-cost
  • GitHub:https://github.com/xinshang777/dsh-turn-cost
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜