DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

ccoderJava /

ccoderJava/dsh-token-dog

Verified

DeepSeek Harness 的 Token 用量面板:按会话/模型统计,每日堆叠矩形图 + 全年日历热力图

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@b2378abd

dsh-token-dog · Token 小狗

DeepSeek Harness 的 Token 用量面板:按会话、按模型统计消耗,配每日堆叠矩形图与全年日历活跃图。

Token usage for the DeepSeek Harness Web GUI — per-session and per-model totals, a daily stacked bar chart, and a year-long calendar heatmap.

License: MIT DSH

插件直接读 Session 日志,所以装上之前的对话也一起统计,不需要从今天开始重新记账。

效果

概览 —— 四张统计卡 + 按会话堆叠的每日矩形图(近 90 天,雾蓝主题 / 浓)

概览:统计卡与每日消耗矩形图

模型详情 —— 点任意模型行进入,看它自己的每日曲线与消耗过它的全部会话

模型详情:deepseek-flash(近 7 天)

活跃日历 —— 近 52 周,悬停任意一天查看当天用量

活跃日历:近一年

四个区块:

区块 长什么样 能干什么
统计卡 四张卡,大数字是同色系强调色 一眼看总量、缓存命中率、输出占比、日均调用
每日消耗 每天一根柱,柱内按会话分段(最多 6 段 + 其他),天数越多柱越细 悬停任一天,看当天总量、调用次数、前 4 个会话的明细
模型用量 / 会话排行 两列卡片列表,每行带占比条 点模型行进入该模型的详情页
活跃日历 52 周 × 7 天的格子,5 档深浅 悬停任意一天:当天总量、调用、会话数,以及每个模型各自的占比

功能

  • 概览页:四张统计卡(总 Token / 缓存命中率 / 输出 Token / 调用次数)、每日消耗矩形图、模型与会话排行、全年日历热力图
  • 每日矩形图:每天一根柱子,按当天消耗的会话堆叠;悬停显示当天总量、调用次数与前 4 个会话的明细
  • 模型详情:点任意模型行进入,看该模型自己的每日矩形图与全部消耗过它的会话,可一键返回
  • 日历活跃图:近 52 周、周一开头;5 档强度按当天 Token 的分位数自动分级;悬停列出当天所有模型及各自占比
  • 区间切换:近 7 天 / 近 30 天 / 近 90 天 / 全部,作用于统计卡、矩形图、排行与模型详情
  • 外观:白卡片 + 灰标签 + 强调色数字的版式;8 个低饱和预设色 + 自定义取色器 + 淡/中/浓三档(只作用于柱子与热度),选择记在 localStorage
  • 中英双语:文案跟随宿主语言;缺字典时回退中文
  • 只用本机:数据不过网,路由只接受回环请求
  • 侧栏图标可关:页面右上角一个开关,关掉后左侧栏不再出现小狗图标(仍可从 设置 → Token 用量 进入),选择记在 localStorage

安装

本插件没有发布到 npm,也不经过构建,安装的是这个目录本身。已经装有 DeepSeek Harness(Desktop 版或 dsh web,0.2.x)就可以装。

第 0 步:拿到目录

git clone https://github.com/ccoderJava/dsh-token-dog.git

没有 git 也可以点仓库右上角 Code → Download ZIP 解压。

方式一:让 DSH 里的 Agent 装(推荐,不用命令行)

在 DSH 里随便开一个会话,发这样一句话(把路径换成你 clone 下来的实际路径):

把 /Users/you/plugins/dsh-token-dog 这个目录装成插件

Agent 会调用内置的 plugin_manager 完成安装:把 dsh-token-dog 写进当前 profile 的 package.json(以 link: 方式指到该目录),并加入 dsh.profile.bundles。安装是即时的, 返回里的 application 为 applied 就表示已生效。

方式二:命令行

装了 dsh CLI 的环境里(Desktop 版通常没有 CLI,用方式一即可):

dsh plugin --profile desktop add link:/absolute/path/to/dsh-token-dog

desktop 是你的 profile 名(默认 desktop;CLI 用户可能是 default)。

第 2 步:刷新并打开

安装完成后 刷新页面(Cmd/Ctrl + R)。入口有两个,任选:

  1. 左侧栏最底部的 🐶 图标 —— 点一下整页打开;
  2. 设置(齿轮)→ 左侧导航最后一项「Token 用量」。

第一次打开会扫一遍历史会话(几十个会话约 1 秒以内),之后结果缓存 60 秒。

第 3 步:确认装好了

  • 设置 → 插件 → 已安装里能看到 Token 小狗(包名 dsh-token-dog),带小狗图标;

  • 左侧栏出现了小狗图标;

  • 想从命令行确认数据链路:

    curl -s "http://127.0.0.1:<GUI 端口>/token-dog/usage?tz=Asia/Shanghai" | head -c 300
    

更新

方式一装的是软链,改完/拉完代码刷新页面就生效,不需要重装:

cd dsh-token-dog && git pull

卸载

对 DSH 里说「把 dsh-token-dog 插件卸了」(plugin_manager 的 remove_bundle), 或命令行 dsh plugin --profile desktop remove dsh-token-dog。

使用

首页

区块 内容
统计卡 总 Token、缓存命中率、输出 Token、调用次数;副行是会话数 / 缓存与输入拆分 / 输出占比 / 日均调用
每日消耗 每天一根柱、按会话堆叠(单日最多 6 段,其余合并为「其他」);悬停看当天构成
模型用量 每个模型的总量、调用次数、涉及会话数;可点击进入详情
会话排行 消耗最多的 8 个会话,含调用次数与最后使用日
活跃日历 近 52 周;悬停看当天总 Token / 调用次数 / 会话数,以及当天所有模型的用量与占比

模型详情

点模型行进入,顶部变为 ← 返回 + 模型名,内容替换为该模型的统计卡、每日矩形图,以及不截断的会话列表。顶部区间切换对详情同样生效。

侧栏图标开关

页面右上角「侧栏图标」开关决定左侧栏是否显示 🐶 入口。关掉后图标立即消失,插件的数据与设置页仍然可用——重新打开开关即可恢复。

关掉后唯一的入口变成 设置 → Token 用量;如果你连这个也不想看到,可以在 设置 → 插件 里整行禁用。

主题

右上角一排色点:雾蓝 / 青 / 苔绿 / 麦 / 陶土 / 藕紫 / 豆沙 / 中性,最后一个圆点是自定义取色器;旁边的「淡 / 中 / 浓」控制同一套色的浓度。两者都会持久化。

数据口径

数据只来自 Session 日志(ctx.sessionQuery),插件不另建账本。

事件 用途
request/header / request/context 这次调用使用的 provider / model
assistant/message / assistant/attempt 该次 attempt 的 usage(message 优先,退回流里的 usage chunk)
llm/retry-started 重试算作新的一次调用
session/end-seed(inherited) fork 继承的父会话事件不重复计数
  • 单次调用按 turn:step:attempt 去重:同一 attempt 后来的采样会覆盖先前的
  • 总 Token = input + cacheRead + cacheWrite + output(四个桶互不重叠)
  • 缓存命中率 = cacheRead / (cacheRead + input)
  • 不计入:不在任何 Session 日志里的调用(标题生成、压缩等)。这是「日志即唯一事实来源」的取舍

接口

Host 侧注册一条只读路由,仅本机回环可访问:

GET /token-dog/usage?tz=Asia/Shanghai[&refresh=1]

返回:

{
  "ok": true,
  "generatedAt": 1793860698515,   // 本次扫描完成时间
  "scanMs": 672,
  "timeZone": "Asia/Shanghai",
  "rows": [                        // 已按 day / session / provider / model 聚合
    { "day": "2026-11-04", "session": "session-…", "provider": "deepseek-account",
      "model": "deepseek-flash", "input": 344317, "cacheRead": 8053120,
      "cacheWrite": 0, "output": 141471, "calls": 138 }
  ],
  "sessions": { "session-…": { "title": "…", "createdAt": 1793, "cwd": "…", "origin": "", "parent": "" } },
  "scanned": 26, "skipped": 0, "failures": 0, "failureSample": []
}
  • 全量扫描结果缓存 60 秒;refresh=1 立即重扫
  • 扫描期间复用同一次扫描,不会叠并发
  • 请求带转发头(X-Forwarded-For / CF-Connecting-IP)、跨站来源或非回环地址时返回 403

目录结构

dsh-token-dog/
├── index.js            # Host 半:折叠日志、聚合、注册 /token-dog/usage
├── client.js           # 浏览器半:两个视图、图表、日历、主题
├── cordis.patch.yml    # bundle 补丁:插入 token-dog 这一行
├── package.json        # 清单:dsh.bundle / dsh.client / exports
├── locale/{zh,en}.json # 插件管理器里的标题与描述
├── icon.svg            # 插件图标(自绘)
└── README.md

开发

  • 纯 JavaScript,无构建步骤:改完 index.js 宿主侧热重载;改完 client.js 页面侧由 DSH 的客户端 HMR 重载,必要时刷新页面

  • 自查路由:

    curl -s "http://127.0.0.1:<port>/token-dog/usage?tz=Asia/Shanghai" | head -c 400
    
  • 调参在 index.js 顶部:SCAN_TTL_MS(缓存)、MAX_AGE_DAYS(扫描窗口)、MAX_SESSIONS

  • 图表与色板在 client.js:MAX_BARS、SEGMENT_LIMIT、THEMES、CSS 变量 --dtd-ink* / --dtd-g*

常见问题

为什么旧对话也算进去了? 插件不是「从今天开始记」,而是每次打开时回放 Session 日志里的 assistant/message 事件,所以历史用量本来就在。

为什么模型只有一个? 说明这些会话都跑在同一个 provider/model 上(例如 deepseek-account / deepseek-flash)。切换模型后,新会话会各自成行。

数据会上传吗? 不会。浏览器只请求本机 127.0.0.1 上的一条回环路由,路由拒绝非本机、跨站和带转发头的请求。

为什么和账单对不上? 这里统计的是 Session 日志里的 token 数,不含标题生成、压缩等不写日志的后台调用,也不做价格换算。

装了没反应? 先刷新页面;再看 设置 → 插件 里这一行是否 enabled;最后确认宿主版本是 0.2.x(席位契约可能随大版本变化)。

已知限制

  • 只统计写进 Session 日志的调用;标题、压缩这类后台调用不计入
  • 扫描窗口:最近 400 天内创建、或当前在线的会话,最多 600 个;超出时页面会提示
  • 每日矩形图超过 120 天只画最近 120 天;柱子只画「当天有用量」的日期,无用量的一天不占位
  • 日历热度按当天 token 的分位数分级,跨主题、跨区间都会重新计算
  • 依赖宿主的 settings.section / main / sidebar.panellist 席位与 sessionQuery 服务;DSH 大版本升级后需重新验收席位行为
  • 仅在 DSH 0.2.1-rc.5(Desktop, macOS)上验证过

路线图

  • 估算成本(结合模型计价)
  • 会话详情页(单个会话的日曲线与模型构成)
  • 导出 CSV / JSON
  • 按 workspace 分组统计

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit b2378abdb2e5

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout