dsh-usage-android:Android 上可用的 DSH 会话 Token 用量统计(host 侧)

前言

在桌面或 Web 上使用 DeepSeek Harness(DSH)时,社区里已有不少「token 用量统计」类插件,多数带 Web 面板或侧栏入口。Android 版 DSH 引擎(@dsh-android/bundle-android)没有 Web Client 层:引擎里不包含 dsh-client-ui-slots、侧栏 slot 等 UI 组合,App 是原生界面加 JSON-RPC。那些在 package.json 里声明了 dsh.client 的用量插件,装到手机上通常也渲染不出来。

下面介绍维护者 Verchiel666 发布的 dsh-usage-android:把「会话 token 用量统计」做成纯 host 侧只读工具,在 Android 上可以直接用工具结果或命令行看报告,不依赖 Web UI。

这是什么

dsh-usage-android 是会话 token 用量统计插件,分类属于 DSH 生态中的客户端侧能力(零 UI 依赖)。它对应官方「创造模式」Demo #7「会话统计」要解决的一类问题,但落地形态是 host 工具,而不是 Web Client 面板。

数据来自 DSH 写入的会话日志,插件只读本地文件、不联网、不修改任何会话数据。

和常见用量插件的差别

截至 README 中 2026-11-06 的核对,npm 上查到的 5 个同类插件均声明了 dsh.client(Web 面板、按钮条或侧栏等)。Android 引擎自述会裁掉 desktop/web 相关能力,因此在手机上更适合选用像 dsh-usage-android 这种仅注册 host 工具、capabilities 为 tools:register 与 fs:read 的插件。

若你在桌面或 Web 端,带面板的用量插件可能更直观;在 Android 上,本插件的定位是「能跑起来且信息够用」的文本报告。

核心功能

插件注册 host 工具 usage_report,可回答例如:

  • 指定时间范围内总共消耗多少 token,输入、输出、缓存读写各占多少;
  • 哪一天的用量最高,最近 N 天的趋势(按天 sparkline);
  • 哪些会话最费 token(可限制 Top 条数,并带轮次与调用次数);
  • 缓存命中率(cacheRead 相对 total 等);
  • 若你自己配置了单价,可显示成本估算(不内置价格、不充当账单);
  • 可选附带一行 CPU 核数、load、内存占用(includeSystem,默认开启)。

扫描结果默认带 30 秒 mtime 缓存;需要时可传 refresh: true 强制重扫。

数据来源

DSH 将会话写在:

<DSH_HOME>/sessions/<cwd-slug>/<sessionId>/session.v4.jsonl.zstd

每行一个事件。模型调用的用量在 assistant/message 事件的 data.usage 字段,形如:

{ inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, totalTokens }

插件用 Node.js node:zlib 的 zstdDecompressSync 解压后逐条累加。

工具参数

usage_report 支持:

参数 说明
range 1d / 7d / 30d / all(默认 7d)
groupBy day(默认)或 session
top Top 会话条数,1–20(默认 5)
session 按标题或 ID 关键词过滤单个会话
refresh 跳过缓存强制重扫
includeSystem 是否附 CPU/内存行(默认 true)

安装与启用

插件是纯 host 侧,不需要 Web Client,也不需要额外构建工具。安装前应自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限读 DSH_HOME 下的会话文件。

方式一:profile patch(本机开发,指向源码目录)

在 $DSH_HOME/profiles/android/cordis.patch.yml 追加:

- insert:
    - id: usage
      name: /absolute/path/to/dsh-usage/index.mjs

name 必须是字面绝对路径。不要写成 name: !!js "...":!!js 表达式只在 entry 的 config 里求值,写在 name 位置会被当成模块名导入,可能导致引擎无法启动。

完成后完全退出 App 再打开,重启引擎。

方式二:从 npm 安装(便于分享)

npm install dsh-usage-android@0.1.0

在 App 的插件管理里搜索并安装 dsh-usage-android@0.1.0(README 要求安装时带版本号),然后重启引擎。npm 包当前 package.json 版本为 0.1.2,若以包管理器实际解析为准,请以你安装时选择的版本与 App 内显示为准。

包声明引擎要求:dsh >= 0.2.0。

典型用法

在 DSH 对话中让智能体调用 usage_report,按需传入 range、top、session 等参数即可得到文本报告。

README 中还提供了面向开发者的命令行示例(路径需按本机仓库位置调整):

node $HOME/work/dsh-usage/dev/cli.mjs 7d
node $HOME/work/dsh-usage/dev/cli.mjs all 论文

第二条示例中的「论文」用于按关键词过滤会话。

适用场景与注意

适合在 Android 版 DSH 上需要查看会话 token 用量、趋势和 Top 会话的开发者或日常用户;不适合期望在手机里看到 Web 热力图、侧栏图表的场景——本插件只输出文本报告,不提供 UI 面板。

已知边界(来自 README):

  • 仅支持 session.v4 格式日志;格式变更需同步改插件。
  • 会话删除后,对应历史统计随之消失。
  • 不内置任何模型单价;成本行完全依赖你自己配置。
  • Android 上报告形态为文本(工具返回值或 CLI),没有面板。

社区插件目录见 SkillHub,与 DeepSeek / 幻方无官方从属关系;仓库与问题反馈:GitHub — Verchiel666/dsh-usage-android,目录页:SkillHub — dsh-usage-android。

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

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

小夜