Back to home

HABIDSKOFT

dsh-turn-usage

A dsh plugin for recording tokens and costs in every requests and let them displayed.

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-turn-usage

DeepSeek Harness 的 token 用量与费用显示插件 · a dsh-plugin for the DeepSeek Harness web UI

📦 仓库:https://github.com/HABIDSKOFT/dsh-turn-usage

DeepSeek Harness Web UI 增加逐轮 token 消耗与估算价格显示:输入(缓存未命中/命中)、输出、以及单次任务的实时费用。

功能

  • 每轮完成后的尾部行conversation.chat.turnTail): 显示如输入 2.1K未命中 · 3.4K命中 · 输出 5.2K · 费用 ≈¥0.0035的信息。
  • 底部 StatsLine 增强:以同 id(stats)完整保留原有内容(轮数 / 耗时 / 速率 / 缓存命中 / 输入输出),并在 token 计数组内追加「最新任务累计费用 ≈¥X」
  • 中断(停止)的步骤:若停止前收到了 usage chunk,其消耗会计入该轮行与最新任务费用(折叠读取视图节点 data.usage,与 harness 服务端投影同源);若停止过早连 usage chunk 都没收到,则该步无数据可计(harness 自身投影同样不计)。
  • 价格可配置:内置 8/17 起峰谷后自动切换DeepSeek价格表;设置界面GUI编辑 JSON,可根据需求修改模型对应价格。

数据来自每个 assistant 节点自带的 provider usage(inputTokens=未命中、cacheReadTokens=命中、cacheWriteTokens=写缓存、outputTokens=输出)。

截图

输入框底部单次任务消耗显示
image

对话末尾消耗显示
image

安装

方式一:手动安装(推荐,无需 pnpm)

  1. 获取插件文件夹 —— 克隆本仓库:
    git clone https://github.com/HABIDSKOFT/dsh-turn-usage.git
    
    或从仓库主页 Code → Download ZIP 解压,得到 dsh-turn-usage/ 文件夹。
  2. dsh-turn-usage 文件夹复制到你的 web profile 依赖目录:
    Copy-Item -Recurse dsh-turn-usage "$env:USERPROFILE\.dsh\profiles\node_modules\"
    
  3. 在 profile 的 cordis.patch.yml%USERPROFILE%\.dsh\profiles\web\cordis.patch.yml)追加启用条目:
    - insert:
        - id: turn-usage
          name: dsh-turn-usage
    
  4. 重启 dsh web,浏览器硬刷新(Ctrl+Shift+R)。

方式二:dsh plugin 从本地路径安装(需要 pnpm)

# 写法 A:克隆后进入克隆出的文件夹,用 . 表示"当前目录本身"
git clone https://github.com/HABIDSKOFT/dsh-turn-usage.git
cd dsh-turn-usage
dsh plugin --profile web add .

# 写法 B:或在任意目录用克隆文件夹的完整路径
dsh plugin --profile web add C:\你的路径\dsh-turn-usage

然后同样在 cordis.patch.yml 加上面的启用条目并重启。

注意:本插件尚未发布到 npm,所以 dsh plugin --profile web add dsh-turn-usage(不带路径)会找不到包。想一行命令安装,可以先 npm publish 发布到 npm,之后直接 dsh plugin --profile web add dsh-turn-usage 即可。

卸载

  1. 删除 cordis.patch.yml 里的 turn-usage 条目(或加 disabled: true
  2. (可选)删除 %USERPROFILE%\.dsh\profiles\node_modules\dsh-turn-usage\
  3. 重启 dsh web

价格配置

推荐:界面化 —— 设置 → 通用 → 「Token 价格表(dsh-turn-usage)」:

  • 「添加模型」按钮:弹窗输入模型名 + 缓存命中/缓存未命中/缓存写入/输出四个价格(¥/Mtokens),保存后写入价格表
  • 「修改模型」按钮:下拉选择已有模型,修改四个价格后保存更新(保留峰谷结构,仅更新平铺价)
  • 「当前模型」下拉框:从价格表已有模型中选择用于定价匹配(选择即保存),留空按 * 兜底价估算
  • 也可直接编辑 JSON 保存即生效,费用行实时重算。

缓存写入(cacheWrite):新 prompt 内容首次处理时写入缓存所计的费用。DeepSeek 不单独计费(未命中价已含,adapter 也不上报该桶);Anthropic 等厂商按此参数单独计价。

默认价格(人民币 / 每百万 token,来源 DeepSeek 官方定价):

当前价(2026-08-17 前生效)

模型输入(未命中)缓存命中输出
deepseek-v4-flash¥1¥0.02¥2
deepseek-v4-pro¥3¥0.025¥6
deepseek-chat(旧)¥2¥0.5¥8
deepseek-reasoner(旧)¥4¥1¥16

2026-08-17 起峰谷定价(插件自动切换,无需手动改):高峰时段 = 北京时间 09:00-12:00、14:00-18:00;空闲时段 = 高峰的一半。

模型时段输入(未命中)缓存命中输出
deepseek-v4-flash空闲¥1.5¥0.05¥4.5
deepseek-v4-flash高峰¥3.0¥0.10¥9.0
deepseek-v4-pro空闲¥4.5¥0.15¥13.5
deepseek-v4-pro高峰¥9.0¥0.30¥27.0

JSON 支持两种结构:

  • 平铺:{ "deepseek-v4-flash": { input, cacheRead, cacheWrite, output } }
  • 峰谷自动切换:{ "deepseek-v4-flash": { input, cacheRead, cacheWrite, output, switchAt: "2026-08-17T00:00:00+08:00", peak: {...}, offPeak: {...} } }switchAt 之前用平铺价,之后按北京时间自动选 peak/offPeak)

运行时可覆盖(无需改文件,JSON 合并进默认表):

localStorage["dsh.turnUsage.prices"] = JSON.stringify({
  "deepseek-v4-flash": { input: 1.0, cacheRead: 0.2, cacheWrite: 1.0, output: 4.0 }
});

设置窗口高度默认较大(360px),手动拖动后自动记住高度(localStorage["dsh.turnUsage.editorHeight"])。

工作原理

  • 纯客户端插件:无 host 端逻辑,lib/index.js 为空 apply,浏览器半部经 exports["./client"] + dsh.client.platform: "web" 被发现并注入 boot graph
  • 注入点:
    • conversation.chat.turnTail(每轮尾部,priority -1 赢得选举并组合渲染产物卡片)
    • conversation.composer.dock id stats(priority -1 替换自带 StatsLine,token 组内追加最新任务费用)
    • settings.general.item(价格配置行)
  • 价格读取优先级:用户设置「当前模型」→ 节点模型(harness 未投影,通常无)→ * 兜底

兼容性

  • 开发/验证环境:@deepseek-ai/dsh@0.1.0-rc.6(web profile)
  • 依赖 @deepseek-ai/dsh-client-ui-deliverables(产物组件,缺失时优雅降级只显示用量行)

License

MIT © HABIDSKOFT