dsh-token-breakdown-stats:会话级 Token 统计与子 Agent 汇总

前言

在 DeepSeek Harness(DSH)里跑带子 Agent 的会话时,composer 底栏自带的统计胶囊只反映主 Agent 的 token 用量。主 Agent 把任务分给子 Agent 后,子 Agent 消耗的 token 不会出现在底栏合计里,你很难判断这一轮会话真实花了多少、缓存命中如何、子 Agent 占了多少份额。

社区插件 dsh-token-breakdown-stats(维护者 Minggle)用更低优先级的 dock 插槽替换官方统计胶囊,把底栏数字改成整棵会话树的合计(主 Agent + 其调用的全部子 Agent),点击后可按计费桶、主/子 Agent、模型等维度展开明细。下面介绍它的定位、能力与安装方式。

这是什么

dsh-token-breakdown-stats 是一个 DSH 客户端插件(dsh-plugin 主题下的纯目录 bundle,无需构建即可安装已提交的 client.js)。它不改变 Host 侧逻辑,只在 Web GUI 的 composer dock 里替换统计相关控件。

与官方 shipped pill 的对比如下(资料来自项目 README):

官方胶囊 本插件
胶囊文案 主 Agent 合计 + 缓存命中 会话合计(主 + 子 Agent)+ 缓存命中 + 子 Agent 数量
弹层 四个计费桶 桶、主/子拆分、子 Agent 汇总、按模型分行
时间/活动胶囊 轮次、步数、速度、耗时 保持不变(复刻官方行为)

子 Agent 在界面里以汇总块呈现:胶囊显示数量,弹层里折叠为一块(发现数量、仍在运行数量、占会话比例、合并后的各桶),不提供逐个子 Agent 行——会话可能 spawn 很多子 Agent,逐条明细仍在会话头部的子 Agent 目录里查看。

核心功能

底栏两个胶囊

DSH 0.2.1-rc.2 起,composer dock 拆成 activity(order 0)与 usage(order 1)两行。本插件对两行都注册 priority: -1(严格低于官方默认 0),通过 id + priority 规则替换官方控件,且从同一个 slots.inject 生成器注册,共享销毁作用域,避免只挂载一半。

  • activity:整会话的轮次/步数与速度(与官方一致)。
  • usage:覆盖所有子 Agent 的会话 token 合计。

在 0.2.0-rc.2 上 dock 仍是单个 stats 单元,本插件不再针对该形态;要求 DSH >= 0.2.1-rc.2。

点击弹层中的分区

弹层展示(中英文文案见 locale/{en,zh}.json):

  1. 总用量 — 整棵会话树上四个互斥计费桶(未缓存输入、缓存读、缓存写、输出)及缓存命中。
  2. 主 Agent — 已加载轮次里观察到的 provider/model 路由,以及该会话自身的各桶。
  3. 子 Agent(N) — 汇总块:发现数量、仍在运行数量、占会话总量比例、合并后的各桶。
  4. 按模型 — 从已加载轮次折叠出的各 provider/model 合计。
  5. 若会话尚未调用子 Agent,会显示友好提示。

compact / detailed 偏好与官方 ui-chat 配置一致:compact 模式下仅保留速度与缓存命中,不打开弹层(与官方 compact 行为一致)。

数据从哪来

数字依赖 DSH 的持久化投影,翻页与压缩不应篡改合计:

  • tokenUsage — 每会话四个计费桶。
  • subagentCatalog — 会话的直接子节点,按父事件顺序,含 mode 与可选 label。
  • SessionSummary.projectionValues — 同上投影,并按会话 id 取子 Agent 身份与耗时。
  • ChatSnapshot.nodes.values() — 物化 Chat Node 的键值存储;turn-tail 行不写入 legacy.nodes,按模型归因只能从这里读每轮 routes。

安装与启用

插件以本地目录 bundle 形式安装。README 给出的步骤如下(安装命令须按原文使用 plugin_manager,不要凭仓库名拼接其他 CLI)。

先克隆仓库(路径自定):

git clone https://github.com/Minggle/dsh-token-breakdown-stats.git

在 DSH 会话中安装 bundle:

plugin_manager  action: install_bundle
               target: <克隆目录的绝对路径>

安装后插入的行 id 为 token-breakdown-stats。重启应用或等待 live patch 重载后,composer dock 中的统计胶囊即被替换。

环境要求:DeepSeek Harness >= 0.2.1-rc.2;桌面或 Web profile(由 Web GUI 渲染胶囊)。许可证为 MIT(package.json 版本 1.0.1)。

权限与安全:插件随当前 DSH 进程与 profile 加载,与官方 UI 扩展同级。安装前请自行查看仓库源码与 cordis.patch.yml,确认符合你的信任与合规要求。社区目录 SkillHub 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系,属社区生态分发。

典型用法与验证

日常使用无需额外配置:启用插件后,在 composer 底栏查看 usage 胶囊的会话合计,点击打开 breakdown;需要紧凑底栏时在 DSH 里切到 compact 偏好即可。

若你修改了 src/ 源码,需重新打包浏览器产物:

node build.mjs

README 提供的冒烟测试(校验汇总数学、胶囊文案、弹层分区、Escape 关闭、compact 与语言一致性):

node src/smoke.test.cjs

适用场景与已知限制

适合:经常用 Task / 子 Agent 拆任务的开发者,需要在同一会话底栏看到真实总 token,并快速区分主 Agent、子 Agent 汇总与各模型消耗。

限制(README Known limitations):

  • 客户端 tokenUsage 投影只有四桶、无 route,无法按子 Agent 归因到具体模型;按模型的行覆盖主会话已加载轮次。
  • subagentCatalog 仅直接子节点;孙级子 Agent 需各自 catalog 加载后才计入,与官方子 Agent 目录规则相同。
  • 按模型统计依赖已加载的 closed turn;长会话分页时,模型行可能滞后于持久化合计。
  • Compact 模式下行为与官方一致,仅速度与缓存命中。

安装事故备忘(2026-10-15):早期构建曾导致桌面端 Web 启动失败(ui-chat 未激活)。根因包括:同 id 同 priority 的插槽注册会被拒绝,替换必须使用严格更低的 priority(本插件使用 -1)。资料建议若出问题可从应用自写的 cordis.patch.yml.bak-* 恢复 profile。新安装请使用当前仓库版本。

结尾

dsh-token-breakdown-stats 把 composer 底栏从「主 Agent 用量」改成「主 Agent + 子 Agent 的会话合计」,并在弹层里按桶、主/子与模型拆开,同时保留官方 activity 胶囊行为。适合在 DSH 0.2.1-rc.2 及以上、且频繁委派子 Agent 的开发场景。

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

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

Xiaoye