dsh-usage-replay: Cross-Session per-Model Replay of Token Usage

前言

在 DeepSeek Harness(DSH)里做多模型、多工作区开发时,官方界面往往只能看到当前会话或粗粒度的活动信息。若你想按 provider/model、按天、按工作区(cwd)汇总历史用量,又希望数字与计费语义一致、且不依赖额外上报通道,就需要从 Harness 自己落盘的 session 日志里重算一遍。dsh-usage-replay 走的就是这条路:只统计 Token,不做费用估算,也不发起网络请求。

这是什么

dsh-usage-replay 由社区维护者 Eclipse-NotFound 发布,分类属于模型推理相关插件。它回放 $DSH_HOME/sessions(默认 ~/.dsh/sessions)下已持久化的 session 日志,把 provider 上报的 usage 按模型、按日、按工作区聚合,并在 UI 与本地只读 HTTP 接口中展示。数字全部来自 Harness 既有日志,不在旁路记账;卸载插件不会丢历史,安装前已有的会话同样计入。

核心功能

用量面板 Tab

在右侧边栏注册「用量 / Usage」Tab,依赖可选同伴插件 dsh-better-sidebar ≥ 0.28。未安装 better-sidebar 时,该 Tab 不会注册,但 Composer 坞区的分模型入口仍可用。

面板包含三块:

  1. Models — 按 provider/model 列出 sessions、requests、uncached input、output、cache read、cache write、total。
  2. By day — 最近 30 天;可在堆叠柱状图与分模型平滑曲线间切换,悬停显示日期、当日合计与各模型明细。曲线视图按单日最大单模型用量缩放纵轴;可对长尾数据开启 Log-scale。柱状图按真实 Token 占比堆叠。
  3. Workspaces — 按 session 的 cwd 排序用量,并展示各工作区内的模型构成。

Composer 坞区分模型芯片

在原生 activity/usage 芯片旁增加中性标签「分模型 / Per-model」。点击可打开当前会话的 per-model 表格(model、requests、input、output、cache read、cache write、total)。坞区一行不重复展示合计。

本地只读 HTTP 路由

通过 Host 的 Connection 服务(与 0.2.1 起其他插件路由相同的 loopback/trusted-host 准入)暴露:

  • GET /usage-replay/api/summary
  • GET /usage-replay/api/session?sessionId=…

返回内容仅为分模型 Token 数字,无额外敏感字段。插件不向模型注入 prompt、tool 或 schema。

可选:会话范围内的变更文件

原生 changed-files 卡片基于 git 工作树快照,多会话共享工作区时可能列出本会话未改动的文件。在插件配置中开启 sessionScopedEdits: true 后,卡片仅保留本会话 file tools 实际触达的文件(跟踪 fs/write-intent / fs/edit-intent,与录制器同源事件)。Subagent 的文件工具编辑计入父会话对应 turn。仅通过 shell 改动的文件在此模式下不会被归因。默认关闭,因会改变其他插件可观察行为。

- id: usage-replay
  config:
    sessionScopedEdits: true

统计方式与隐私

回放逻辑概要如下:

  • 扫描 session[.vN].jsonl[.zstd],逐帧解码 multi-frame Zstandard 容器(容忍尾部损坏)。
  • 将 assistant/message 的 usage 事件归并到最近一次 request/header 信封对应的 provider/model。
  • 针对完整 session 日志(非可见/压缩窗口),被 prune 或 compact 的 turn 仍计入。
  • 按文件 size + mtime 缓存解析结果,未变更文件不重复读取。
  • Retry/attempt 在 provider 上报 usage 处计数,语义与官方 token meter 的计费形态一致。

隐私方面:仅读本地 session 日志;无网络请求、无遥测、无上传。

安装与启用

需要 DeepSeek Harness 0.2.1+(使用 0.2.1 Connection 服务)。package.json 中 engines.dsh 为 >=0.2.1-rc.1 <0.3.0;当前包版本 0.2.0,许可证 MIT。

社区市场或 npm 安装:

dsh plugin --profile <profile> add dsh-usage-replay

或指定本仓库:

dsh plugin --profile <profile> add https://github.com/Eclipse-NotFound/dsh-usage-replay

桌面应用由应用内 Plugins 页管理 profile:用包路径/spec 安装,而非上述 CLI。新增 host 侧能力需重启应用;仅 client 更新可在硬刷新后生效。

典型用法

  1. 安装插件;若需要右侧「用量」Tab,再安装 dsh-better-sidebar ≥ 0.28。
  2. 日常使用 Harness 后,打开侧边栏「用量 / Usage」查看跨会话模型、按日曲线或工作区排名。
  3. 在当前会话 Composer 坞区点击「分模型 / Per-model」查看本会话分模型明细。
  4. 若需在脚本或本地工具中读取聚合结果,向 Host 请求上述两个 GET 路由(须满足 Host 的 trusted 连接策略)。

开发自检(无构建步骤,Node 22.19+ / 24):

node test/offline-check.mjs

适用场景与注意

适合需要跨会话、分模型、分工作区核对 Token、且只要 Token 不要价目表的场景。与「实时侧路上报」类方案不同:这里的一切数字都可追溯到本地 jsonl/zstd 日志,卸载插件后日志仍在,重装可继续回放。

安装前请自行审阅 GitHub 源码 与 MIT 许可证。插件以当前 DSH 进程权限运行,能读取 ~/.dsh/sessions 下日志;多用户或共享机器上应确认目录权限是否符合预期。DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-usage-replay 把 Harness 已落盘的 session 日志重放为可浏览、可查询的 per-model 用量视图,并明确限定为 Tokens only。目录与文档:

  • 社区目录:https://www.skillhub.cn/plugins/Eclipse-NotFound/dsh-usage-replay
  • GitHub:https://github.com/Eclipse-NotFound/dsh-usage-replay
羽毛球分组比赛记分
小程序二维码

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

Xiaoye