dsh-token-radar:DeepSeek Harness 前台 Token 计量

前言

在 DeepSeek Harness(DSH)里跑 Composer 和多步子代理时,模型会频繁调用,消耗分散在会话日志里。管理端若有 cost-meter,往往要切到别处才能对账;输入框附近也缺少「当前这一轮会话花了多少」的即时反馈。若只靠心里估算或事后翻日志,很难区分新输入、缓存命中和输出各自占多少,子代理和工具带来的上下文膨胀也不容易归因。

下面介绍社区插件 dsh-token-radar(维护者 Robortshen,GitHub:Robortshen/dsh-token-radar)。它在 Composer 输入框下方常驻一条彩色胶囊计量条,点开可展开完整消耗面板,数据直接读本机 ~/.dsh/sessions 下的会话日志,零第三方依赖、不向外部发请求。

这是什么

Token 雷达是 DSH 的前台 token 计量插件:收起态为输入框下方约 240px 宽的胶囊条,展开态为输入框上方的详情面板。数字来自日志里模型返回的 usage 字段(inputTokens、cacheReadTokens、cacheWriteTokens、outputTokens、reasoningTokens),不是拍脑袋估算。插件在 Host 侧聚合日志并暴露 GET /dsh-token-meter/stats,Web 客户端同源拉取并每 8 秒自动刷新(页面隐藏时暂停)。

收起态与展开态分别看什么

收起态(默认)

注册在 conversation.composer.dock,紧挨状态栏。典型一行类似:

● Token 雷达 · 本次会话 530k  新输入 28.8k  命中率 94.5%  估算费用 ¥0.107   ▁▂▃▅▆  详情

末尾小柱状图是最近 18 次调用的消耗序列。窄窗口会隐藏次要字段,避免挤乱状态栏文字;完整数字可在悬停提示中查看。

展开态

注册在 conversation.input.dock,在文档流内向上展开,不盖住底部状态栏。主要区块包括:

区块 内容
三张卡 本次会话(蓝)/ 今日(橙)/ 累计(紫):总量、步数、费用、新输入、缓存命中、输出、命中率
本次会话 · 每一步消耗 左右两图:总消耗(含缓存重发)与可计费部分(新输入+输出);每根柱对应一次调用,悬停看明细
最近 14 天 每日堆叠柱
子代理消耗 按父子树列出步数、token、费用(无子代理时隐藏)
工具开销归因 各工具调用次数与「后续上下文增量」分摊值
按模型 各模型 token、费用、占比

配色固定:新输入蓝 #2563eb、缓存命中浅蓝 #8ec5fb、输出橙 #f59e0b、累计/费用紫 #7c3aed,不依赖主题色。也可手动点「刷新」。

统计口径与去重

新输入指未命中缓存的输入;缓存命中指命中前缀缓存的输入(README 说明其计费约为新输入的 1/30);输出含推理 token。工具调用本身不调用模型、不计费;「工具开销归因」是把「下一步上下文增量 − 上一步输出」按各工具结果长度分摊的估算值。子代理为独立会话并带 parentSession,插件按父子树汇总。

费用按 off-peak 价估算(flash / pro 各档 USD per 1M),再 ×7.2 折算人民币,与 README 中列出的单价一致。

日志里存在两类重复,插件会处理,否则数字会翻倍:

  1. 同一 session id 的 v0/v3/v4 迁移副本 → 取步数最多、版本最高的一份;
  2. 子代理或继续会话把父会话历史整段复制(时间戳完全相同)→ 按 (时间, 轮, 步, 输入, 缓存命中, 缓存写入, 输出) 全局去重。

README 注明:与管理端 cost-meter 账本逐日比对,10 天里 5 天完全一致,其余差 1 次内部小调用(约 0.01%)。

实现结构(便于审源码)

文件 作用
index.js Host:读 ~/.dsh/sessions/**/*.zstd(自实现多帧 zstd 解码)、解析、去重、聚合,注册 GET /dsh-token-meter/stats
client.js Client:胶囊与面板、模块级 store、纯 CSS 图表,无第三方依赖
cordis.patch.yml 插入插件行 token-radar
locale/*.json 市场/设置中的名称与说明(中英)
icon.svg 插件图标

package.json 要求 Node >=20、DSH >=0.1.0-rc.5,许可证 MIT,当前版本 1.0.0。

安装与生效

官方 README 给出的安装方式如下。请将 <你的 profile> 换成你实际使用的 profile 名。

dsh plugin --profile <你的 profile> add dsh-token-radar

本地目录安装:

dsh plugin --profile <你的 profile> add /path/to/dsh-token-radar

安装完成后需要重启 Harness:desktop profile 的 bundle 列表在进程启动时组合,运行中的进程不会热加载新 bundle。菜单栏选择 DeepSeek Harness → 重启应用与 Host 即可,不必手动完全退出。修改 client.js 后同样需要「重启应用与 Host」,因客户端模块在页面启动时按 revision 装配。

典型用法

  1. 按上一节命令把插件装进目标 profile,并重启应用与 Host。
  2. 打开 Composer 对话,在输入框下方查看胶囊条:关注「本次会话」总量、新输入、命中率与估算费用。
  3. 需要看逐步消耗、子代理树或工具归因时,点「详情」展开面板;数据约每 8 秒刷新,也可点「刷新」。
  4. 若与管理端 cost-meter 对账,以 README 所述口径理解差异来源(去重、内部小调用等)。

插件不单独提供配置文件字段;行为由日志内容与 DSH 注入点决定。

适用场景与注意

适合长期在 DSH Composer 里开发、希望在输入框旁掌握 token 与缓存命中情况、并需要子代理与工具开销粗粒度归因的开发者。Host 会读取本机全部匹配会话日志;首次扫描 README 示例为 142 个文件(约 71 MB 压缩)约 2.2 秒,之后按文件 size+mtime 增量,文档缓存 TTL 2.5 秒。

DSH 生态理念是「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限运行,安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证。SkillHub 分类含「工作流」;仓库 dshhub.categories 还标注费用、Web UI、观测等标签,可按需从目录检索。

结尾

经过上面的步骤,你可以在 Composer 前台直接看到逐次调用的 token 与费用估算,并在展开面板里下钻到逐步、按天、子代理与模型维度——数据留在本机会话日志里,零依赖、零外网请求。更多说明与截图见仓库 README;安装与问题反馈分别以 SkillHub 目录页与 GitHub Issues 为准。

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

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

Xiaoye