DeepSeek Harness 插件

dsh-tokstat

dsh usage & performance statistics: settings-panel plugin + TUI (tokens / TTFT / TPS / cost)(英文原文)

跳到安装方式

来源信息

GitHub 仓库
kongjianguan/dsh-tokstat
最近更新
2026年8月18日
分类
插件开发工具
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/kongjianguan/dsh-tokstat
插件名:dsh-tokstat
作者:kongjianguan

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-tokstat

<p align="center">读取 DeepSeek Harness (dsh) 会话日志的实时使用量与性能 TUI 统计面板 —— Tokens / TTFT / TPS / 成本一屏看全</p>

<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License"></a> <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/dsh-plugin-ecosystem-purple.svg" alt="dsh plugin"></a> </p>

![总览](docs/preview/overview.png)

![趋势](docs/preview/trends.png)

![请求日志](docs/preview/requests.png)

Overview

dsh-tokstat 直接读取 dsh 的会话日志(~/.dsh/sessions//session.jsonl.zstd, zstd 帧级增量解析),把散落在多个会话文件里的每一次 LLM 请求还原成可分析的 指标:输入/输出/缓存 Tokens、TTFT(首 token 时延)、TPS、耗时、重试与失败、 估算成本**。

项目提供两种形态:

  • dsh 设置面板插件:在 dsh Web 设置页增加「统计」section,实时展示概览 /

模型 / 会话 / 请求,2s 轮询;

  • Python TUI:独立终端仪表盘(7 个视图,o t m p s r e 切换)。

适合谁:

  • 想了解自己每天在 dsh 上花了多少 token / 钱的用户;
  • 想评估模型与供应商性能(TTFT、TPS 分布)的用户;
  • 想排查重试、失败步骤的 agent 重度用户。

7 个视图(o t m p s r e 切换):

Tab内容
总览请求数 / 总 Tokens / 平均 TTFT(TPS)(含 p50·p95)/ 成功率 / 缓存命中率 / 成本 / 耗时 Hero 卡 + Tokens 构成条 + 4 条实时火花线 + Top 模型/会话
趋势按小时/天(h/d)的柱状图:请求数、Tokens(输入+缓存 vs 输出)、平均 TTFT(绿≤5s/黄≤120s/红>120s)、平均 TPS
模型 / 供应商各模型/供应商的用量、缓存命中率、TTFT 中位+p95、TPS、重试、成本,点击表头排序
会话每个会话的用量/性能/成本/用户消息/最后活动;点击行可查看单会话详情
请求逐条请求日志(1200 条上限),f 过滤,点击表头排序
错误重试原因分布(TRANSPORT/SERVER/TIMEOUT…)、逐条重试事件、失败步骤

指标设计参考了 cc-switch 的用量统计、new-api 与 sub-api 的数据看板,指标口径与 dsh 官方 sessionStats 投影一致(见 [指标定义](#指标定义))。

Compatibility

  • 数据格式基于 dsh 0.1.0-rc.6 的会话日志结构验证(2026-08-15),并已与

服务器端 session_projcache.json 投影交叉验证(llmMs/decodeTokens 精确相等, TTFT 误差 <10%;历史验证 <2%,个别新日志批量 chunk 近似可达 ~9%)。

  • 插件形态:Node half 需要 Node ≥ 23.6(dsh 运行时 Node 26 已验证);client

面板运行在 dsh Web 设置页;peerDependencies 声明了 @deepseek-ai/* 版本范围。

  • TUI 形态:Python 3.11+;依赖 textual ≥8.0、zstandard ≥0.23、PyYAML。
  • 会话日志格式由 dsh 演进决定;若升级 dsh 后发现读取异常,请到仓库反馈。

Install / Uninstall

方式一:dsh 设置面板插件(推荐)

从 Git 仓库安装到指定 profile(例如 web-dev):

dsh plugin --profile web-dev add https://github.com/kongjianguan/dsh-tokstat.git

# 启动 dsh Web
dsh --profile web-dev --port 3199

安装后打开 http://127.0.0.1:3199/,进入 设置 → 统计 即可看到面板。 插件数据通过 /tokstat/stats 由 dsh 进程内的 Node half 提供,无需额外服务。

本地开发安装:

dsh plugin --profile web-dev add /path/to/dsh-tokstat
# 或使用仓库内辅助脚本(自动写 package.json + 建 node_modules 链接)
node scripts/link-profile.mjs --profile web-dev

卸载:

dsh plugin --profile web-dev remove @kongjianguan/dsh-tokstat

方式二:Python TUI

git clone https://github.com/kongjianguan/dsh-tokstat.git
cd dsh-tokstat
./run.sh          # 自动创建虚拟环境并安装依赖(等价于下方手动步骤)

或手动:

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.py

TUI 升级:

git pull
.venv/bin/pip install -r requirements.txt   # 依赖有变更时

TUI 卸载:

rm -rf dsh-tokstat        # 工具无后台进程、无系统级安装、无写出的数据文件

Quick start

dsh 设置面板插件

dsh plugin --profile web-dev add https://github.com/kongjianguan/dsh-tokstat.git
dsh --profile web-dev --port 3199
# 浏览器打开 http://127.0.0.1:3199/ → 设置 → 统计

Python TUI

./run.sh                        # 默认范围:全部
./run.sh --range today          # 只看今日
./run.sh --refresh 5            # 降低刷新频率

示例输出(总览页核心指标):

请求数 2,431   总 Tokens 384.33M   平均 TTFT 17.3s   平均 TPS 1889.9
成功率 99.6%   缓存命中率 98.8%    估算成本 ¥84.45     平均耗时 24.1s

快捷键:

作用
o t m p s r e切换 总览/趋势/模型/供应商/会话/请求/错误
1 2 3 4时间范围:全部 / 今日 / 近7天 / 近30天
h d趋势粒度:小时 / 天
f聚焦请求日志过滤框(Esc 退出)
space暂停 / 继续自动刷新
Ctrl+R立即刷新
q退出

Configuration

全部通过命令行参数与一个 YAML 文件配置,无环境变量依赖:

| 参数 / 文件 | 说明 | |---|---| | --home PATH | dsh 数据目录(默认 $DSH_HOME~/.dsh) | | --refresh SECONDS | 轮询刷新间隔(默认 2) | | --range all\|today\|7d\|30d | 初始时间范围(默认 all) | | --prices PATH | 价格表 YAML 路径(默认项目内 prices.yaml) |

prices.yaml每百万 token 定价(¥),内置 DeepSeek v4 官方价格,可增删:

deepseek-v4-flash:
  input: 1.00      # 每百万输入 token
  output: 2.00     # 每百万输出 token
  cacheRead: 0.20  # 每百万缓存命中 token

模型 ID 自动归一化(去 owner/ 前缀、去 :后缀@-、去日期后缀), deepseek-v4-flash-0731 先精确匹配、再逐级缩短匹配。未定价模型成本显示 -

Permissions & data

  • 只读:TUI 仅读取 ~/.dsh/sessions/ 下的会话日志(session.jsonl.zstd)与

~/.dsh/settings.yaml(用于定位数据目录);插件由 dsh 进程内的 Node half 通过 sessionPersistence 读取同一份会话日志;不修改任何 dsh 数据

  • 不联网:TUI 全程离线运行;插件 client 面板只访问本机 dsh Web 的

/tokstat/stats,无遥测、无上报。

  • 价格表与自定义参数仅存于本地文件;不会读取或上传你的 API 密钥。
  • 插件 client 面板运行在浏览器,不直接接触文件系统;所有数据由 Node half 聚合后

通过本机 HTTP 提供。

  • 会话日志包含对话内容;请勿将包含敏感对话的 ~/.dsh 目录提交到任何仓库。

Troubleshooting

现象处理
启动后"暂无数据"确认 --home 指向正确(默认 ~/.dsh),检查 sessions/ 下是否有 session.jsonl.zstd
升级 dsh 后解析报错/数字异常会话日志格式可能变化;提交 issue 并附 dsh 版本
TTFT 偏大口径为 step/start → 首 token,含排队/思考时间,请以 p50/p95 为准
刷新卡顿降低 --refresh(如 5s);数据量大时总览/请求页重建较慢
成本数字与账单不符成本为估算;中转渠道请在 prices.yaml 配置实际价格
设置页没有「统计」section确认 profile 已 dsh plugin --profile <name> add 本插件,并重启 dsh Web
/tokstat/stats 404插件未加载或该 profile 未启用 webServer;检查 boot 日志

Development

> 本项目的插件开发规范、设置面板扩展机制(settings.section slot)与收录条件 > 对照,见 [docs/plugin-development/](docs/plugin-development/README.md)。

结构

dsh-tokstat/
├── index.mjs              # Node half:Cordis 插件入口(/tokstat/stats)
├── src/client/index.js    # client half 源码(设置面板 React)
├── lib/client.js          # client bundle 产物
├── src/host/              # Node half 聚合(fold/aggregate/pricing TS)
├── tui/                   # Python TUI(独立可用)
│   ├── main.py
│   └── dshstats/
├── scripts/               # build-client / gate / panel-harness / cdp-shot
└── docs/

TUI 内部结构:

tui/dshstats/
  store.py      zstd 帧扫描 + 增量 tail + 事件折叠(与 dsh 官方投影同口径)
  metrics.py    聚合:summary / 时间桶 / 分组 / 百分位
  pricing.py    价格表 + 模型名归一化
  ui/           textual 界面(7 个 tab + SortableTable/Bars/StatCard 组件)

插件构建与门禁

pnpm install                     # 首次安装依赖(已提交 lockfile)
pnpm run build:host              # Node half → dist/index.mjs(esbuild 打包 TS)
pnpm run build:client            # 同步 lib/client.js
pnpm gate                        # 结构门禁 + 三方对账 + 行为测试
pnpm gate --ci                   # CI/无真实 dsh 数据时:跳过三方对账,仍跑结构门禁 + 行为测试

不安装依赖也可直接跑(脚本只用 Node 内置能力/已提交 dist):

node scripts/build-host.mjs     # Node half → dist/index.mjs(需要 esbuild,已装则可用)
node scripts/build-client.mjs   # 同步 lib/client.js
node scripts/gate.mjs           # 结构门禁 + 三方对账 + 行为测试

改 client 后建议跑无头 Chrome 回归:

node scripts/panel-harness.mjs --port 3320
# 另开 Chrome --headless=new --remote-debugging-port=9222
node scripts/cdp-shot.mjs "http://127.0.0.1:3320/" 8000 --click "请求"

测试与验证

  • 插件数据正确性:node scripts/gate.mjs 会跑 TS/Python/官方 projcache 三方对账。
  • TUI 无头功能测试:App.run_test() + Pilot 模拟按键/切 tab;app.save_screenshot()

导出 SVG 核对布局。

  • 数据正确性:解析结果与 ~/.dsh/storages/session_projcache.json 中官方

sessionStats 投影交叉对比(llmMs/decodeTokens 应精确相等,TTFT <10%)。

  • 贡献:fork + PR 即可;改动涉及事件折叠时请在 PR 中附交叉验证结果。

License & security

  • 本项目以 MIT 许可发布(见 [LICENSE](LICENSE))。
  • 安全问题请通过 GitHub issue 私下说明(避免在公开 issue 中粘贴密钥或会话内容),

或直接邮件仓库维护者。

指标定义

与 dsh 官方 sessionStats 投影一致:

指标定义
请求数assistant/message 事件数(一次组装完成的 LLM 调用)
输入/输出/缓存 TokensusageinputTokens / outputTokens / cacheReadTokens
TTFTstep/start → 第一个非空 token delta;持久化日志缺失逐条 delta 时由批量 *-chunksdt 近似(误差 <10%)
TPS输出 Tokens / 解码秒数
成功率请求数 / (请求数 + 失败步骤数)
缓存命中率缓存读取 / (输入 + 缓存读取)
成本prices.yaml 估算

已知限制

  • TTFT 定义与 dsh 官方一致,含排队/思考时间,长尾明显——请以 p50/p95 为准。
  • 部分会话的持久化日志只有批量 chunk(*-chunks),TTFT 为近似值(历史误差 <2%,个别新日志可达 ~9%)。
  • 成本为估算,中转渠道价格请自行配置。
  • TUI 形态是独立 Python 程序;仓库根同时提供 dsh 设置面板插件(Node half +

client bundle),两者共享同一套指标口径。