🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

用量统计 iuuuuuuuu/dsh-usage-stats

DeepSeek Harness
iuuuuuuuu49 天前有提交已提供中文文档扫描:含敏感能力

按天查看 token 消耗与首字延迟,可下钻到工作区和会话

28/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/5 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add iuuuuuuuu/dsh-usage-stats
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/07·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 49 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/7) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 读取本地文件
    lib/index.js:105
    if (!existsSync(this.cachePath)) return false;
  • 读取本地文件
    lib/index.js:107
    const parsed = JSON.parse(readFileSync(this.cachePath, "utf8"));
  • 写入本地文件
    lib/index.js:121
    mkdirSync(this.dataDir, { recursive: true });
  • 写入本地文件
    lib/index.js:125
    writeFileSync(this.cachePath, JSON.stringify(this.cache));
  • 删除本地文件
    lib/index.js:336
    rmSync(this.cachePath, { force: true });
  • 发起网络请求
    lib/client.js:377
    const res = await fetch(url, { signal, headers: { accept: "application/json" } });
  • 发起网络请求
    lib/client.js:726
    onClick: () => { void fetch(`${API}/rescan`).then(() => { retry(); }); }
  • 读取本地文件
    lib/usage-core.js:205
    entries = readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    lib/usage-core.js:230
    const buf = readFileSync(path);
  • 读取本地文件
    lib/usage-core.js:277
    takeNew = statSync(path).mtimeMs > statSync(prev).mtimeMs;
  • 读取本地文件
    lib/usage-core.js:299
    text = decodeFrames(readFileSync(path));
  • 读取本地文件
    lib/usage-core.js:503
    st = statSync(path);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按天统计token用量
  • 统计首token耗时
  • 按工作区和会话拆分

DSH 插件:按天统计 token 用量和首 token 耗时,按工作区和会话拆分,只读本地会话日志。

README

由 DeepSeek 最新模型翻译生成
dsh-usage-stats DSH 插件:统计每天的 token 消耗与平均首字延迟,可按工作区与会话拆分。 数据全部来自本机会话日志($DSH_HOME/sessions),只读,不写入任何既有文件。 功能 - 按天统计:未缓存输入 / 缓存读取 / 输出分列,另给总 token 与占比。 - 三层下钻:总览 → 按工作区 → 点进工作区看按会话明细。 - 平均首字(TTFT):精确值,与 DSH 自带统计口径一致(见下)。 - 时间筛选:今天(默认)/ 近 7 天 / 近 30 天 / 自定义区间。 - 表头排序:任意指标列可点,升降序切换。 - 保留一个月:默认 30 天窗口,更早的会话不参与统计(日志本身不动)。 - 两个入口:设置里的「用量统计」一栏;可开关的侧边栏图标(打开独立全宽面板)。 安装 dsh plugin --profile <profile> add "file:<本目录绝对路径>" 也可以从 GitHub 安装: dsh plugin --profile <profile> add "git+https://github.com/iuuuuuuuu/dsh-usage-stats.git" 装完刷新页面即可在「设置 → 用量统计」看到,侧边栏也会多一个柱状图图标。
展开完整文档(README 剩余 1 节)
dsh-usage-stats

DSH 插件:统计每天的 token 消耗与平均首字延迟,可按工作区与会话拆分。

数据全部来自本机会话日志($DSH_HOME/sessions),只读,不写入任何既有文件。

功能

- 按天统计:未缓存输入 / 缓存读取 / 输出分列,另给总 token 与占比。
- 三层下钻:总览 → 按工作区 → 点进工作区看按会话明细。
- 平均首字(TTFT):精确值,与 DSH 自带统计口径一致(见下)。
- 时间筛选:今天(默认)/ 近 7 天 / 近 30 天 / 自定义区间。
- 表头排序:任意指标列可点,升降序切换。
- 保留一个月:默认 30 天窗口,更早的会话不参与统计(日志本身不动)。
- 两个入口:设置里的「用量统计」一栏;可开关的侧边栏图标(打开独立全宽面板)。

安装

dsh plugin --profile <profile> add "file:<本目录绝对路径>"

也可以从 GitHub 安装:

dsh plugin --profile <profile> add "git+https://github.com/iuuuuuuuu/dsh-usage-stats.git"

装完刷新页面即可在「设置 → 用量统计」看到,侧边栏也会多一个柱状图图标。

口径

这些数字怎么算出来的,以及为什么这么算:

token 用量

取自每条 assistant/message 自带的 usage,四个 bucket 互不重叠:

| 列 | 字段 | 说明 |
| 未缓存输入 | inputTokens | 真正按输入价计费的部分 |
| 缓存读取 | cacheReadTokens | 命中缓存的部分,单价低得多 |
| 输出 | outputTokens | 生成的部分 |
| 缓存写入 | cacheWriteTokens | 已统计但默认不单列 |

「总 token」= 未缓存输入 + 缓存读取 + 输出。缓存读取单独成列而不是并入总量:实测本机它占总量 96%,混在一起会把真正影响花销的未缓存输入淡化掉。

按天归属

用每条事件自身的 time(毫秒)归属到本地日,因此跨天会话会被正确切开,而不是把整个会话算到某一天。

平均首字(TTFT)

精确值。DSH 把流式增量以「打包片段」写入会话日志(text-chunks / reasoning-chunks / tool-call-chunks,每条带 time0 与相邻间隔 dt[]),据此可精确重建每个增量片段的时刻,从而还原首字边界。

复原算法与宿主 assistantStreamFirstTokenTime 等价:

1. 从 time0 起累加 dt,得到每个片段的时刻;
2. 首个「非空片段」即首字(带 name 的工具调用 run 以其首成员为准);
3. assistant/attempt 也要处理:重试时首个 attempt 给出的首字早于最终 message,漏掉它会让结果系统性偏大。

实测 185 个已完成会话与 DSH 自身记录的 ttftMs / ttftSteps 逐值完全一致。

会话去重

DSH 升级迁移会话格式时会把旧文件留下(session.jsonl.zstd 与 session.v3.jsonl.zstd 同 id 并存)。若两份都算,token 会重复计数——而虚高后的数字看起来完全正常,极难察觉。因此按会话 id 去重,保留格式版本更高的那份。

性能

冷启动要读全部历史日志(本机约 400 MB / 190 个会话,实测约 38 秒),因此:

- 插件启动后在后台预热,界面在此期间显示进度条,不会卡住;
- 扫描分片进行并让出事件循环,避免长时间独占宿主;
- 结果落盘缓存($DSH_HOME/usage-stats/cache.json),之后按 (mtime, size) 增量——实测无变化时启动即可查询(约 0.05 秒);
- 会话日志是仅追加的,已结束的会话可安全复用缓存。

数据与隐私

- 只读会话日志,不修改、不删除任何既有文件。
- 自己的缓存写在独立目录 $DSH_HOME/usage-stats/。
- 侧边栏开关是纯客户端偏好,存浏览器 localStorage,不写 settings.yaml。
- 不联网,不上报任何数据。

开发

node --test test/core.test.mjs # 数据核心(合成日志)
node --test test/host.test.mjs # 宿主半(状态机 / 路由 / 缓存)
node test/ttft.test.mjs # 首字复原 vs 宿主权威值(需本机有 DSH 数据)

test/real.test.mjs 与 test/plugin-live.test.mjs 依赖本机真实数据,用于把插件输出与独立复算、以及真实实例逐值比对。

限制

- 仅支持 zstd 格式的会话日志(DSH 默认)。compression: 'none' 的部署读不到。
- 缓存格式版本变化时需重扫一次(会自动丢弃旧缓存)。
- 统计窗口固定 30 天,暂不可配置。
预览分享卡片长什么样 ↓iuuuuuuuu/dsh-usage-stats
分享 · DeepSeek Harness Hub
iuuuuuuuu/dsh-usage-stats

按天查看 token 消耗与首字延迟,可下钻到工作区和会话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部