편집자 노트

htq20080119/dsh-token-stats

Token usage statistics plugin for DeepSeek Harness — per-window consumption metrics with an enable/disable switch, right in Settings.----------DeepSeek Harness

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

📊 dsh-token-stats

DeepSeek Harness(DSH)web profile 的 Token 用量统计插件

English · 简体中文

license version platform language PRs welcome

设置 → "Token 用量" 页面展示全部会话的 token 消耗统计,按时间窗分桶——并支持随时启停:开关状态持久化到 settings.yaml,秒级热生效,无需重启。

🛡️ 社区插件 — 本插件是 DeepSeek Harness 的独立社区维护插件,并非 DeepSeek 官方项目,与 DeepSeek / DeepSeek Harness 团队无隶属或背书关系。


✨ 功能特性

🪟 8 个时间窗当日 · 近 3 日 · 近 7 日 · 近 15 日 · 近 30 日 · 近半年(180d)· 近一年(365d)· 全部时间
📈 每窗 9 项指标总消耗、输入、输出、缓存命中(cache read)、缓存写入(cache write)、请求数、缓存命中请求数、缓存命中率
🗂️ 概览卡片全部时间汇总:输入 / 输出 / 缓存命中 / 缓存写入 / 命中率 / 请求数
🎚️ 启停开关页面内"停用/启用"按钮——持久化到 settings.yaml,秒级热生效
🔄 自动刷新30 秒轮询 + 手动刷新按钮
📚 官方同口径与内置 tokenUsage 会话投影一致的 (turn, step) 去重逻辑

📸 预览

截图占位——可替换为 设置 → "Token 用量" 页面的实际截图。

⚠️ 下表为示例数据,仅作展示,非真实用量。

页面包含概览卡片(全部时间汇总)与时间窗明细表格:

时间窗总消耗输入输出缓存命中缓存写入请求数命中请求命中率
当日1.24M1.18M56.2K1.12M0878596%
近 3 日3.87M3.71M161K3.55M025424896%
近 7 日8.93M8.62M312K8.31M058957797%
近 15 日19.4M18.8M641K18.3M01,2431,22197%
近 30 日38.7M37.5M1.22M36.7M02,4672,43197%
近半年214M208M5.9M205M013,98813,81298%
近一年412M401M10.8M396M026,53126,21498%

📦 安装

插件是经 web profile 加载的外部 DSH 包。

1. 让包可解析

通过 pnpm 加入 profile 的依赖:

# 本地开发(符号链接源码目录,改代码即时生效)
pnpm --dir "C:\Users\<你>\.dsh\profiles\web" add "link:<本仓库路径>"

# 或直接从 GitHub 安装(打包副本)
pnpm --dir "C:\Users\<你>\.dsh\profiles\web" add "github:<你的账号>/dsh-token-stats"

web profile 默认位于 %USERPROFILE%\.dsh\profiles\web

2. 挂载条目

在 profile 的补丁层(cordis.patch.yml)追加:

- insert:
    - id: token-stats
      name: dsh-token-stats
      config: {}

补丁层热监控——秒级挂载,无需重启。

🚀 使用

  1. 打开 设置 → "Token 用量"(先刷新一次页面以加载 client bundle)
  2. 查看概览卡片与时间窗表格(每 30 秒自动刷新)
  3. 用页面右上角的 停用 / 启用 按钮控制聚合:
操作效果持久化位置
停用停止聚合,页面显示"已停用"状态settings.yamltoken-stats: { enabled: false }
启用恢复聚合与统计表格settings.yamltoken-stats: { enabled: true }

开关即时生效,无需重启。

🛠️ 开发

# 冒烟测试:host fold 逻辑 + client bundle 注册
node smoke-test.mjs
文件职责
lib/index.jsHost 半部——零第三方依赖(见架构说明)
lib/client.jsClient bundle——经典 window.__ModuleLoader__.load({ id, factory }) 脚本;id 必须等于 loader 条目 name

改动生效方式:host 代码受 Node ESM 缓存(按解析 URL 键控)限制——需重启 web app;client bundle 改动只需刷新页面。

🧱 架构说明

  • 数据源assistant/message 事件的 data.usage{inputTokens, outputTokens, cacheReadTokens?}(opencode-go 网关不报 cacheWriteTokens);uncachedInput = inputTokens - cacheReadTokens
  • Host 端点GET /token-stats{enabled, generatedAt, windows[]}POST /token-stats/config {"enabled": bool}ctx.settings 服务持久化到热监控的 settings.yaml
  • Host 零依赖 — profile 插件解析裸导入无 fallback,故 lib/index.js 不 import 任何第三方包(settings 命名空间 schema 为手写、兼容 schemastery 的对象)。
  • package.json 必须导出 ./package.jsondsh-client-modules 通过 require.resolve("<pkg>/package.json") 解析 client bundle;缺该导出会被负面缓存,client bundle 404 直到重启 web app。

🤖 模型体验

无——插件从不组装或发送模型请求,只读取持久化的会话日志并提供设置页,不增加任何 prompt、消息、schema、工具或模型调用。

KV 缓存影响

无——不发起任何 provider 请求;缓存命中/写入数字仅是会话日志中网关上报的只读指标。

⚠️ 已知限制

  • web/deepseek-search-llm-request 事件不带 usage——搜索调用的 token 不计入(与官方投影一致)。
  • 网关不报 cacheWrite 时该列恒为 0。

📄 许可

MIT © 2026 本源不爱onani

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.