dsh-token-cost:在 Harness Web UI 里按轮查看 token 用量、费用与余额

前言

在 DeepSeek Harness(DSH)里跑长会话时,token 会分散在多轮、多次 attempt 和不同模型路由上。Harness 内置 meter 能反映用量,但若要在 Web 界面里直接看到「这一轮花了多少、本会话累计多少、账户还剩多少」,并把历史轮次留成可复查的记录,通常还要自己查日志或外接脚本。

下面介绍社区插件 dsh-token-cost(仓库 BigFatFish4Wm/dsh-token-cost)。它在每一轮已完成对话下方挂载用量条,按会话与轮次把工作区内的 JSON 账本持久化,并可选读取 DeepSeek 账户余额或预算/手动余额。插件由 BigFatFish4Wm 维护,在 SkillHub 目录中归类为 admin-security;DSH 生态主张「一切皆插件」,SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-token-cost 是面向 Harness Web UI 的 DSH 插件:在每轮对话尾部显示本轮 token 用量、估算费用、会话累计与当前余额;数据按「会话 + 轮次」写入工作区 .dsh-token-cost/ledger.json,刷新页面、重开 Harness 或重新打开历史会话后仍可还原,后续对话不会覆盖旧记录。

Host 侧通过 tokenCost 投影从 Session 事件日志折叠出每轮 attempts、tokens 与费用;Web 客户端在 conversation.chat.turnTail 槽位(条目 id token-cost,order = 30)订阅该投影,余额摘要经 GET /api/token-cost/summary 获取。余额与费用仅用于展示,不参与 Harness 的上下文或压缩决策。

核心功能

每轮用量条与明细

收起态可显示本轮总 tokens、费用、本会话累计和当前余额(显示项均可配置)。展开后可查看:

  • 输入、输出、缓存读取、缓存写入、推理 tokens 及请求数、模型;
  • 本轮费用、会话累计、工作区账本累计;
  • 各 provider/model 路由的 tokens、费用与每百万 token 单价;
  • 余额来源、钱包明细、更新时间;
  • 账本文件绝对路径与累计已保存轮数。

界面位置在内置交付文件卡片、计划卡片之后、完成轮次操作行之前,不会替换任何内置条目。插件内置简体中文与英文,数字、时间和费用随当前 Harness 语言格式化。

按模型与时段计价

计价口径与 Harness 内置 token-meter 一致:inputTokens 为未缓存输入,cacheReadTokens / cacheWriteTokens 分别计费,outputTokens 含推理(reasoningTokens 不重复计费)。每条 Assistant 的 usage 按 assistant/message / assistant/attempt 事件时间判断高峰或空闲窗口,再套用对应单价;同轮混用多个模型时分别计价并汇总。默认单价参考 DeepSeek 开放平台 2026-10-24 公开价(部署时请以官方价格页为准并在配置中覆盖)。

modelPricing 支持按 provider/model、provider/* 等键覆盖单价。重试(llm/retry-started)会累加重试 attempt 的用量;若某条 Assistant 未上报 usage,界面会标「部分未上报」,费用显示为下限(≥)。

余额来源

balance.mode 支持:

  • account:通过 Host 的 deepseekAccount.getBalance() 读取 DeepSeek 账户余额(含充值与赠送钱包);
  • budget:初始预算减去工作区账本累计消费;
  • manual:固定手动余额;
  • auto:依次尝试 account → budget → manual;
  • off:不显示余额。

Host 对账户余额有进程内缓存;前端刷新最短间隔 15 秒,明细内可手动「刷新」。

工作区账本与安全

默认账本路径:

<session workspace>/.dsh-token-cost/ledger.json

写入采用临时文件加 rename 的原子替换;损坏文件会先改名为 ledger.json.corrupt-<timestamp> 再重建。storage.dir 仅允许落在工作区内,越界配置会回退到 .dsh-token-cost。账本中费用为写入时快照,改单价不会重写历史;界面上的本轮/会话费用会按当前配置实时重算。

Host 只暴露余额与账本摘要路由,并复用 Harness 的 connection.requestRejection 鉴权;无 connection 服务时仅允许回环地址与同源请求。

安装与启用

前置条件:已安装 DSH 本体,Node ≥ 22。

Web(dsh web)

在终端执行(命令来自插件 README):

dsh plugin --profile web add github:BigFatFish4Wm/dsh-token-cost

装完后重启 dsh web,浏览器按 Ctrl+F5 强刷。若已从源码拿到本地目录,可用:

dsh plugin --profile web add link:<本目录绝对路径>

桌面端(官方 Electron 客户端)

dsh plugin 不操作 desktop profile。在客户端插件市场中,来源填写:

https://github.com/BigFatFish4Wm/dsh-token-cost

装完后若界面未出现条目,需完全退出客户端(含托盘)再打开。安装后在插件页启用,或在 profile 的 cordis.patch.yml 中保留 token-cost 行;替换已安装包通常需重启 Host 以加载新的 Host JavaScript。

典型用法

默认启用

插件 cordis.patch.yml 中默认 enabled: true。安装并激活后,有 Assistant 消息的已完成轮次会在 turnTail 出现 token-cost 条;空白会话不显示。

在 profile 中改配置

可在 profile 的 cordis.patch.yml 覆盖 token-cost 行,或在插件配置页编辑。修改 patch 后由 Loader 热重载;浏览器未更新时刷新页面即可。示例:使用预算模式并关闭高峰计价(节选):

- id: token-cost
  name: 'dsh-token-cost'
  config:
    balance:
      mode: budget
      budgetInitial: 100
    pricingSchedule:
      enabled: false

多模型场景可在 modelPricing 中为 deepseek-account/deepseek-v4-pro 或 openai/* 等键单独设 inputPerMillion、outputPerMillion 及 peak / offPeak 子表。完整字段与默认值见仓库 README 的配置表。

查看与排查账本

展开用量条可看到账本绝对路径。若未写入,检查 storage.enabled、工作区是否只读,以及明细中的 ledger.error;插件激活且 storage.backfill: true 时会回填当前存活会话中已完成的轮次。

适用场景与注意

适合需要在 Harness Web UI 里长期盯会话成本、对比调价前后费用、或把工作区消费留痕的团队与个人开发者。目录归类为 admin-security,与账户余额读取及受鉴权保护的摘要 API 相关;安装前仍应自行审阅源码与 MIT 许可证(当前 package 版本 1.0.0)。

插件以当前 dsh 进程权限运行:读取工作区账本、调用账户余额 API、暴露 Host 路由均发生在 Host 内。安装前请确认仓库来源与变更记录;SkillHub 目录页:https://www.skillhub.cn/plugins/BigFatFish4Wm/dsh-token-cost。

常见问题:条形未出现——确认 turnTail 槽位中 token-cost 已激活且本轮有 Assistant 消息;余额不可用——检查登录与 balance.mode,或为 auto 配置 budgetInitial / manualAmount 回退;费用偏差——核对 pricingSchedule、modelPricing 与 attempt 事件时间是否落在高峰窗口。

结尾

dsh-token-cost 把每轮 token、费用、会话累计和余额收进 Harness 对话尾部,并用工作区账本保留历史轮次,适合在 DSH Web 工作流里做成本可见性而不改 Harness 核心行为。源码与文档:https://github.com/BigFatFish4Wm/dsh-token-cost;社区目录:https://www.skillhub.cn/plugins/BigFatFish4Wm/dsh-token-cost。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye