dsh-usage-panel:在 DSH 里本地汇总 Token 用量

前言

用 DeepSeek Harness(DSH)跑会话时,Token 会分散写在 $DSH_HOME/sessions 下的 Session 日志里。想回答「总共用了多少、按模型和按天怎么分布、哪几个 Session 最费 Token」时,若只靠翻 JSONL 或凭印象估算,既慢又容易漏。下面介绍的 dsh-usage-panel 是社区维护者 AlexLin0803 发布的客户端插件:在 Harness 内增加 Token usage / 用量 页面,从本机持久化 Session 日志折叠统计,不发起模型或 Provider 请求。

这是什么

dsh-usage-panel(GitHub:AlexLin0803/dsh-usage-panel,SkillHub 分类:客户端)在 DSH Web 界面提供与设置页同源的用量视图。数据只读当前机器上的 Session 文件,不汇总其他安装实例,也不换算费用。

同一套页面有两个入口:

  • 左侧边栏一行,在主栏打开(不经过 Settings 对话框);
  • Settings → 用量 / Usage,与其他设置页并列。

页面语言(zh / en)与明暗主题随 Harness 设置壳的设计 token 自动对齐。

核心功能

README 中列出的区块如下(均来自本地 Session 日志折叠,非云端报表):

区块 含义
KPI 卡片 总 Token、输入/输出、缓存读取与命中率、Session 数、活跃天数与当前连续活跃天数
活动热力图 近 26 周按本地日的 Token 量,悬停可看明细
Tokens by model 近 7 / 30 / 90 日按模型堆叠的日总量
Model share 各模型占全部 Token 的比例(环形图)
Providers 按实际处理请求的 Provider 拆分 Token
Busiest Sessions 按累计 Token 排序的 Session,含消息数与所用模型

Export 可在页面内导出:当前时间范围的日序列或按模型表格为 CSV,或整份 summary 为 JSON;均在浏览器端生成,不上传。

实现上分为 Host 与 Browser 两半(同一 npm 包):

  • Host(lib/index.js):Cordis 插件,注册 GET /usage-panel/api/summary?days=30[&refresh=1],扫描 $DSH_HOME/sessions/**/session.v*.jsonl[.zstd],解码 Zstandard 帧并折叠 assistant/message 的 usage 记录;按文件 size/mtime 缓存, warm 请求可走内存。
  • Browser(lib/client.js):通过 window.__ModuleLoader__.load 注册 settings.section 页面并拉取 summary;仅依赖平台 react 模块与内联主题 token。

插件面向界面与本地统计,不提供 model-facing 的 tool、prompt 或 Provider 请求。

当前 package 版本为 0.2.0,许可证 MIT。

安装与启用

DSH profile 通过 bundle 树组合插件。本包在 package.json 中声明 dsh.bundle.patch = ./cordis.patch.yml,作为 profile bundle 安装即可。

1、让 profile 能解析到该包(本地开发可用 link):

dsh plugin --profile desktop add link:E:/path/to/dsh-usage-panel

2、在 profile 的 dsh.profile.bundles 中选中该 bundle(与 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 等并列):

"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-usage-panel"

若已开启 HMR,运行中的组合会立即拾取 bundle;否则需重启 Harness。然后打开 Settings → 用量 / Usage,或使用左侧边栏入口。

若不想手改 profile,可通过 Web 侧栏 Plugins 页或 plugin_manager 工具安装,由工具维护 dsh.profile.bundles。

排查: 配置重载后边栏或 Settings 页消失,多半是 compose 时跳过了 bundle。确认 package.json 为 UTF-8 无 BOM(带 BOM 会导致 JSON.parse 失败、整包被丢弃)。可用 throwaway profile 离线检查:

Copy-Item ~/.dsh/profiles/desktop ~/.dsh/profiles/desktop-check -Recurse
dsh --profile desktop-check --dump-config | Select-String "skipping profile bundle"
Remove-Item ~/.dsh/profiles/desktop-check -Recurse

健康的 dump 应包含 - id: usage-panel。

典型用法

验证 Host 路由(Harness Web 服务默认监听本机,示例端口以你环境为准):

curl.exe "http://127.0.0.1:60341/usage-panel/api/summary?days=30"

正常返回 {"ok":true,...} 形态的折叠 summary。加 ?refresh=1 可绕过约 20 秒的缓存。

本地开发预览(不依赖 GUI 反复刷新时可跑 dev/preview.mjs):

node dev/preview.mjs zh --shot assets/preview-zh.png
node dev/preview.mjs en

node dev/preview.mjs zh --sample --shot assets/preview-zh.png
node dev/preview.mjs en --sample

node dev/preview.mjs zh --sample --panel

--sample 使用仓库内合成数据集(README 截图即此路径);不带 --sample 时会请求正在运行的 Host。Host 不在默认地址时,可设置 DSH_ORIGIN。

适用场景与注意

适合: 在本机 DSH 上长期跑 Session、需要 KPI、热力图、按模型/Provider/Session 排行,并偶尔导出 CSV/JSON 做离线分析的开发者。

限制(README Limits):

  • 仅本机 $DSH_HOME/sessions;不调用 Provider,看不到其他机器上的用量。
  • 只统计 Token,不推导金额(单价因 Provider 与时间变化)。
  • 仅统计带 usage 的事件;Provider 开始上报 usage 之前写入的 Session 可能消息数有、Token 为 0。
  • 路由无独立鉴权,与其他非 /api 的 web-server 路由一样依赖 loopback 绑定;能访问该端口的进程可读本地 Token 汇总。

插件以当前 dsh 进程权限 读取 Session 目录并提供 HTTP 汇总。安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你的安全与合规要求。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的仓库与 bundle 配置为准。

结尾

dsh-usage-panel 把已在磁盘上的 Session usage 收成一页可视化与可导出 summary,双入口进同一页面,Host 扫描缓存、Browser 复用设置壳主题。需要详情时可查阅 SkillHub 目录页与 GitHub 仓库:

  • https://www.skillhub.cn/plugins/AlexLin0803/dsh-usage-panel
  • https://github.com/AlexLin0803/dsh-usage-panel
羽毛球分组比赛记分
小程序二维码

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

小夜