dsh-token-bi:把 DSH 跨会话 Token 用量汇总成一张看板

前言

DeepSeek Harness(DSH)在单条会话里会展示本轮、本会话的 token 统计,但用量往往分散在几十个会话里:这个月一共花了多少、哪一天突然拉高、缓存读占了多少、父会话和子代理各烧了多少,Host 自带界面没有一张跨会话的总表。

社区插件 dsh-token-bi(维护者 361533652)在 DSH Desktop / Web 客户端里增加全局面板「Token 账单」,从会话日志里折叠 provider 上报的用量,并按日与 Host 的 tokenUsage 投影(@deepseek-ai/dsh-token-meter)对齐,避免和会话内数字对不上。分类为客户端插件;当前 GitHub 星标为 0,许可证 MIT(package.json 版本 0.1.0)。

下面介绍它做什么、怎么装、界面怎么用,以及数据来源和限制。

这是什么

dsh-token-bi 是 DSH 的 token 消耗看板:把散落在各会话里的用量汇总成每日柱图、按小时节奏、模型与工作区拆分、父子会话调用树,以及单会话逐轮时间线。

插件只读 DSH 的会话事件与持久日志,不写库、不改会话;依赖 Host 的 webServer 提供 HTTP 接口,纯 TUI profile 下不会激活。

核心功能

入口在左侧栏全局面板(与「插件」「自动化任务」同级),不绑定单个会话。

顶部指标

指标 含义
累计 token 当前时间窗口内四类 token 总和
今日消耗 本地时区当天总和
会话 窗口内会话数;副标题为正在运行的个数
轮次 去重后的 turn 数
缓存命中占比 cacheRead / 总量,通常较高,反映上下文复用

四类桶为:inputTokens、outputTokens、cacheReadTokens、cacheWriteTokens,总量为四者之和。

图表与会话表

  • 每日消耗:堆叠柱状图(输入、缓存读、缓存写、输出)。
  • 最近 7 天节奏:按小时聚合的折线。
  • 模型分布:按 provider/model 拆分。
  • 工作区分布:按会话 cwd 分组;超过 8 个时折叠并显示被折叠部分合计。
  • 会话明细:主表;展开一行可拉取该会话逐轮时间线(每轮三段式条形;极长会话最多显示最近 60 轮,总量不受影响)。
  • 调用树:父会话下挂子会话;深浅色区分「本会话自用」与「子会话合计」。父会话数字不包含子会话,整棵子树需叠加查看。

右上角时间窗口:7 天 / 30 天 / 全部。切换会向 Host 重新取数并按日重算,不是只过滤前端已有数据。

导出 CSV:导出当前窗口内的会话列表,UTF-8 BOM,便于 Excel 打开。

安装与启用

前置条件

  • DSH Desktop 或 dsh CLI(Web 界面)
  • Node.js ≥ 22.15(会话日志为 zstd 压缩,需要 Node zlib 的 zstd 支持)

从本地目录安装(README 记载的当前可用方式)

先把仓库放到本机,再用 link: 软链安装(改仓库代码无需重装):

git clone https://github.com/361533652/dsh-token-bi.git
dsh plugin --profile desktop add "link:/绝对路径/dsh-token-bi"

Windows 示例:

dsh plugin --profile desktop add "link:E:\gitbub-project\dsh-token-bi"

安装后完全退出并重启 DSH Desktop(不是刷新页面);客户端 bundle 路径表在进程启动时构建一次。

验证

重启后左侧栏应出现「Token 账单」,紧挨「插件」。若未出现,依次检查:

  1. 设置 → 插件 → 已安装插件 中是否有「Token 账单」且开关为开
  2. dsh --profile desktop --dump-config 输出是否含 id: token-bi
  3. Host 日志(Windows:%APPDATA%\DSH Desktop\logs\host\)中搜索 token-bi 是否有激活失败

加载时浏览器控制台(经 Host 日志)可能出现 [token-bi] factory、[token-bi] apply、[token-bi] slot:xxx,用于区分未下载、未激活或未注册成功。

配置

无配置项。 时间窗口与筛选均在界面操作。profile 中仅插入插件条目:

- insert:
    - id: token-bi
      name: dsh-token-bi

典型用法

  1. 安装并重启 Desktop 后,打开左侧 Token 账单。
  2. 在右上角选择 7 天 / 30 天 / 全部,观察顶部累计与今日消耗、缓存命中占比。
  3. 用每日柱图定位用量突增的日期,用「最近 7 天节奏」看高峰时段。
  4. 在「模型分布」「工作区分布」里看哪条模型线、哪个 cwd 占主导。
  5. 在会话明细中展开一行,查看逐轮 input / output / cacheRead / cacheWrite;有子代理时切换到调用树对比父子分层。
  6. 需要表格分析时,点 导出 CSV 导出当前窗口会话列表。

需要程序化取数时,插件在 Host 注册同源路由(浏览器默认使用;参数含时区偏移与窗口):

GET /api/dsh-token-bi/report?offset=<分钟>&days=<窗口>&refresh=1
GET /api/dsh-token-bi/session?id=<会话 id>&offset=<分钟>

days 为 0 或 all 表示全部;refresh=1 跳过 10 秒报告缓存。

数据从哪来、怎么算

数据源按会话 id 合并,活跃会话优先:

来源 作用
ctx.sessions 当前打开会话,内存事件,最新
ctx.sessionQuery 冷启动持久日志,未打开的历史会话

不直接读 .jsonl.zstd 文件,走 DSH 公开服务。

计量规则对齐 Host:

  1. 只统计 provider 上报的用量(assistant/message 的 usage,或 stream 最后一个 type: 'usage' chunk),不估算。
  2. 同一 (turn, step) 后到的样本替换先到的,避免重试重复累加。
  3. 四桶分开记,总量为四者之和。

事件时间按浏览器传入的 getTimezoneOffset() 落到本地时区日期。单会话按 (会话 id, revision) 缓存;整份报告缓存 10 秒。

适用场景与注意

适合谁:长期用 DSH 做智能体开发、并行子代理、多工作区切换,需要回答「本月总量」「哪天变贵」「缓存读是否主导」「哪个目录在烧 token」的开发者。

运行与信任:插件以当前 DSH 进程权限读取本机会话存储;数据只覆盖本机。安装前请自行查看 源码 与 MIT 许可证,社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,生态理念是「一切皆插件」。

已知限制(摘自 README):

  • 仅统计上报了 usage 的步;无 usage 的 provider 不可见。
  • 统计为日志口径,被压缩的历史消息仍计入会话总量。
  • 子会话独立计费,父会话总量不含子会话。
  • 需要 Web 界面与 webServer;不做成本金额估算。

结尾

dsh-token-bi 补上 DSH 缺的一层:跨会话、可对账 Host 的 token 看板——日柱、小时节奏、模型与工作区、调用树与逐轮时间线,安装后从左侧「Token 账单」即可使用。

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

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

Xiaoye