DeepSeek Harness dsh-usage-stats 插件

前言

DeepSeek Harness(DSH)的会话日志里只提供单个会话的 tokenUsage 投影,没有按天分桶的全局用量服务。开发者要了解累计使用情况、模型分布与连续活跃天数,往往需要自己从会话日志里汇总。dsh-usage-stats 插件在 DSH 左侧栏提供一个使用统计面板,汇总全部历史 Token、峰值、连续天数、活动热力图与每日分模型趋势。

插件定位

插件名 dsh-usage-stats,作者 zazzzzzzzz。它是一个基于 cordis 的 bundle,负责在 DSH 客户端侧展示统计看板,在宿主侧从会话日志中计算并缓存汇总数据,通过私有路由 /dsh-usage-stats/usage 供前端读取。

核心功能

1. 历史累计与峰值

面板顶部显示五个数字,始终描述全部历史:

  • 全部历史累计 Token
  • 单日峰值 Token
  • 最长单次会话时长(量的是单次连续活动最长的一段,两次活动相隔超过 host/usage.js 中的 IDLE_GAP_MS 视为断开)
  • 当前连续使用天数
  • 历史最长连续使用天数

2. Token 活动热力图

按天显示活动热力图,支持切换三种口径:

  • 每日
  • 每周
  • 累计

指针停在某一天上时,显示当天用量与轮消息数。

3. 时间范围

可切换的时间范围:

  • 近 7 日
  • 近 30 日
  • 全部

决定趋势图与模型占比看哪一段。

4. 每日 Token 趋势图

在选定时间范围内,每个模型一条折线。指针移上去会画出竖线与当天的点,并列出当天合计与分模型明细。

5. 模型用量

环形图与排名列表,显示每个模型的占比与 Token 数。

数据来源与计算

宿主没有提供按天分桶的全局用量服务,插件宿主半边自己读会话日志:

  • 用宿主的 sessionQuery.readSession() 读取每个会话的完整事件(会话日志是多帧 zstd,必须交给宿主的读取器解码)
  • 折叠 assistant/message 与 assistant/attempt 上携带的使用量样本,同一 turn/step 上的重试替换而不是叠加,四个桶 input / output / cacheRead / cacheWrite 互不重叠
  • 在此基础上补日期与小时两个维度,让界面能画热力图与趋势线,并按范围重新求和

汇总结果按「日志大小 + 修改时间」缓存在 $DSH_HOME/cache/dsh-usage-stats/usage.json,热启动只重读变过的日志。汇总结果有 60 秒保鲜期,过期后下一次请求会在后台重算。

汇总通过私有路由 GET /dsh-usage-stats/usage 交给界面,该路由只接受同源只读请求,并与宿主的 /api 使用同一道来源校验。

刷新时机

  • 面板挂载时取一次
  • 之后每 20 秒取一次
  • 窗口重新可见或重新获得焦点时立即取一次
  • 面板被切走即停止,不留后台轮询

宿主侧的汇总有 30 秒保鲜期:保鲜期内直接返回上一次的结果,过期后的第一次请求会在后台重算,界面先拿到旧值、稍后自动补上新值。重算只重读「大小或修改时间变了」的会话日志。

安装

插件是一个普通的 cordis bundle:包放进 profile 的 node_modules,再让 profile 认得它。本机开发时用 link: 依赖最省事——源码改了不用重新拷贝。

以桌面 profile(%USERPROFILE%\.dsh\profiles\desktop)为例:

  1. 在 profile 的 package.json 里加依赖并挂进 bundle 清单:
{
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-claude-style",
        "dsh-usage-stats"
      ]
    }
  },
  "dependencies": {
    "dsh-usage-stats": "link:D:/BigModel/DSH_PLUGIN/dsh-usage-stats"
  }
}
  1. 装依赖:
cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm install
  1. 重启 DSH。插件包内的 cordis.patch.yml 会自己把 ui-usage-stats 这一行插进 Web 客户端清单,不需要另外改 profile 的 cordis.patch.yml。

如果不想走 bundle 清单,也可以只把包拷进 node_modules,再在 profile 的 cordis.patch.yml 末尾加一条:

- id: ui-usage-stats
  name: dsh-usage-stats
  disabled: false

两种方式都需要重启 DSH 才会装载:profile 的 bundle 清单与 patch 文件在启动时读取。

典型用法

安装并重启 DSH 后,左侧栏会出现「使用统计」入口。点击后中间区域显示统计看板,可切换时间范围、查看热力图与趋势图,并通过指针交互查看明细。

适用场景与注意

适合需要长期跟踪 DSH 使用情况、关注模型用量分布与连续活跃天数的开发者。

插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证(MIT)。

结尾

dsh-usage-stats 为 DSH 提供了一个从会话日志自算的统计面板,帮助开发者量化使用情况与模型偏好。

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

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

小夜