bulai-z / dsh-metrics-panel

Listed

`dsh-metrics-panel` 是面向 DeepSeek Harness 的**正式 Cordis 插件包**。它在 DSH 的 Web 界面中提供一个浮动监控面板,实时统计每一次大模型 API 调用的用量、缓存命中、费用与延迟,并提供概览曲线、请求明细、错误清单、模型/供应商/工具聚合,以及可配置的计费单价

mainOther View source

Installation

npm install -g @deepseek-ai/dsh

This command is generated from the GitHub repository address. Inspect the upstream README and source before running it; pin a release or commit when reproducibility matters.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 8fb2298Synced Aug 18, 2026

dsh-metrics-panel

DeepSeek Harness 用量监控面板 · AI Usage Monitor for DeepSeek Harness

License: MIT npm version DeepSeek Harness PRs Welcome

实时统计 token 用量 · 缓存命中 · 费用 · 延迟吞吐 · 请求明细DeepSeek Harness(DSH)插件。


简介

dsh-metrics-panel 是面向 DeepSeek Harness 的正式 Cordis 插件包。它在 DSH 的 Web 界面中提供一个浮动监控面板,实时统计每一次大模型 API 调用的用量、缓存命中、费用与延迟,并提供概览曲线、请求明细、错误清单、模型/供应商/工具聚合,以及可配置的计费单价。

💡 设计参考了 oh-my-pi/stats 页面,并按 DSH 的权威会话事件流重新实现。

功能特性

核心指标

  • Token 用量:消耗总量、输入总量、输出量、推理量
  • 缓存命中:命中 Token(cacheReadTokens)、未命中 Token(未缓存输入 + 缓存写入)
  • 用量统计:对话轮数(turn/start)、工具调用量(tool/call)、模型请求次数(step)
  • 每轮聚合:按 会话 | 轮次 聚合每轮的输入 / 输出 / 缓存命中
  • 请求明细:按 会话 | 轮次 | 步骤 三元组去重合并的每次模型请求

十个界面分区

分区说明
📊 概览 Overview统计卡片 + 费用/Token/请求量/按小时分布图表
🔍 请求 Requests每次模型调用的分页明细列表(含会话归属与请求详情)
⚠️ 错误 Errors错误请求清单与错误率
🤖 模型 Models按模型聚合的用量与费用
☁️ 供应商 Providers按供应商聚合的用量与费用
🔧 工具 Tools工具调用次数分布
💰 费用 Costs可配置的每百万 token 单价(缓存命中 / 未命中输入 / 输出三档)
📈 行为 Behavior工具调用与供应商统计图
🗂️ 项目 Projects占位(需项目维度数据源,暂未实现)
增益 Gain以缓存节省近似呈现

请求详情(Requests)

「请求」分区的每一行展示该请求所属的会话(标题 + 会话 id)。点击任意一行弹出完整详情:

  • 服务接口:provider / model / 上下文窗口 / 采样参数(temperature / maxTokens / stop)
  • 请求参数:系统提示词、工具清单、输入消息
  • 返回参数:助手内容块、token 用量、推理内容
  • 工具调用:工具名 + 参数
  • HTTP 请求示例:完整请求行 + 请求 JSON + 响应 JSON(一键「复制 JSON」)

主题与配色

  • 主题切换:浅色 / 深色 / 跟随系统,复用 DSH 官方 theme 服务,全局即时生效
  • 面板配色:5 套图表主色(深寻蓝 / 翡翠绿 / 紫罗兰 / 暖阳橙 / 石墨灰),持久化到 localStorage

截图

面板位于 DSH 界面右下角(侧边栏底部也有「监控面板」入口),包含左侧分区导航、顶部时间范围 / 主题 / 配色控制与中央图表/表格区域。

overview request

安装

前置条件

本插件是标准 DSH 插件包(npm 包 + Cordis 插件 + dsh.bundle 补丁层),通过 DSH 官方 dsh plugin 命令一键安装到 profile。

方式 1 · 从 GitHub 安装

# 把 <owner> 替换为你的 GitHub 用户名
dsh plugin --profile web add github:bulai-z/dsh-metrics-panel

方式 2 · 从本地安装(开发调试)

# 在插件源码目录内
dsh plugin --profile web add .
# 或绝对路径
dsh plugin --profile web add file:$PWD

dsh plugin 会把 add 之后的参数原样转发给 profile 目录里的 pnpm,装完后自动「对账」:凡声明了 dsh.bundle.patch 的依赖会自动加入该 profile 的 dsh.profile.bundles 层组,无需手动改任何清单文件。

若安装后提示 declares no dsh.bundle,说明 package.jsondsh.bundle.patch 声明缺失,安装虽成功但插件不会激活。

解决 command not found: dsh

# 1) 全局安装(推荐)
npm install -g @deepseek-ai/dsh

# 2) 用 npx 临时调用
npx @deepseek-ai/dsh web

使用

dsh web

打开页面后,侧边栏底部出现「监控面板」入口,点击即可开合面板。

面板操作

操作说明
开合面板点击侧边栏底部「监控面板」入口;面板右上角 ✕ 关闭
时间范围顶部 1h / 24h / 7d / 30d / 90d,或「自定义」任意起止时间
全量刷新历史枚举所有已持久化会话并回填事件日志,补齐未打开过的历史对话
主题 / 配色顶部切换「浅色 / 深色 / 跟随系统」与 5 套面板配色
查看请求详情「请求」分区点击任意行,查看服务接口 / 请求参数 / 返回参数 / 工具调用 / HTTP 示例
配置费用「费用」分区设置三档单价与货币单位,点「保存单价」实时重算

计费配置

双时段计价(按厂商隔离)

三档单价(缓存命中 / 未命中输入 / 输出)各自拥有低峰(offpeak)与高峰(peak)两套价格。高峰时段按厂商隔离配置:每个厂商可有独立的高峰时段窗口(本地小时,含起点、不含终点,支持多段与跨零点,如 9–1214–18),未单独配置的厂商继承全局默认高峰时段。

  • 未启用双时段:所有请求按低峰价计费
  • 启用后:落在厂商任一高峰时段的请求用高峰价,其余用低峰价
  • 「费用统计」与「概览」的「总费用」会拆分展示高峰 / 低峰两部分

同模型、不同厂商独立定价

定价按三层回退:厂商模型价模型通用价默认价

默认单价(DeepSeek 官网价)

模型时段缓存命中未命中输入输出
deepseek-v4-flash(默认)空闲0.051.54.5

高峰0.103.09.0
deepseek-v4-pro空闲0.154.513.5

高峰0.309.027.0

(单位:元 / 每百万 token,取自 DeepSeek 官网

工作原理

数据来源

数据从 DSH 的权威会话事件流 session/event 增量采集,并在插件激活时回填当前已存在会话。主要事件类型:

事件用途
turn/start / turn/end对话轮数、每轮起止时间
session/title会话标题(请求面板展示所属会话)
request/header / request/contextprovider / model 认知 + 请求参数(采样 / 系统提示 / 工具 / 上下文窗口)
assistant/chunk / assistant/messagetoken 用量(输入/输出/缓存命中/缓存写入/推理)+ 返回参数(助手内容块)
tool/call / tool/result工具调用量、轨迹、请求内的工具调用明细
user/message用户输入 / 上下文注入(轨迹 + 请求参数)

统计口径

  • 输入总量 = 未缓存输入(inputTokens)+ 缓存命中(cacheReadTokens)+ 缓存写入(cacheWriteTokens
  • 未命中缓存 = 未缓存输入 + 缓存写入(即「计费意义上非命中的输入」)
  • 消耗总量 = 输入总量 + 输出总量
  • 费用按三档单价分别计算,单价为「每百万 token」的价格
  • 缓存节省(cacheSavings) = 各请求 cacheReadTokens × (未命中输入价 − 缓存命中价) 之和

采集与刷新

统计是增量采集 + 按需回填的,只会纳入插件「已经见过的会话」:

  1. 插件激活时:通过 sessions.list() 回填当前已加载进内存的会话
  2. 运行中:监听 session/eventsession/created(会话懒加载 / 从持久化重新进入时一次性回填全部历史事件)
  3. 「全量刷新历史」:枚举所有已持久化会话并用 readFrom(id, 0) 回填完整事件日志

回填按会话 id 的游标去重,幂等安全,重复点击不会重复计数。

⚠️ 数据为运行期内存态,插件停止或进程重启后清空。

关于「HTTP 请求示例」

会话事件流不含底层适配器的原始字节与真实 Authorization。请求详情里的「HTTP 请求示例」按已采集的 request/header(模型 / 采样 / 系统提示 / 工具)与派生的有序消息历史重建,端点按 provider 推断(如 deepseekhttps://api.deepseek.com/chat/completions),Authorization 一律脱敏为 <redacted>,仅作调试参考。

架构

┌─────────────────────────────────────────────────┐
│  浏览器(Client 半 · lib/client.js)              │
│  React 界面 + 图表 + 主题/配色 + i18n            │
└───────────────┬─────────────────────────────────┘
                │ 同源 fetch /metrics/*
┌───────────────▼─────────────────────────────────┐
│  Node 进程(Host 半 · lib/index.js)             │
│  事件采集 + 统计聚合 + 费用配置 + 历史回填        │
│  经 ctx.webServer 注册 /metrics HTTP 路由        │
└───────────────┬─────────────────────────────────┘
                │ session/event 会话事件流
┌───────────────▼─────────────────────────────────┐
│  DeepSeek Harness 会话服务(sessions / 持久化)  │
└─────────────────────────────────────────────────┘
  • Host 半lib/index.js):ESM 模块导出 apply(ctx),注入 webServer 服务并注册 /metrics 路由,负责事件采集、统计聚合、请求详情、费用配置读写与历史回填
  • Client 半lib/client.js):以 window.__ModuleLoader__.load 工厂形式打包的浏览器 bundle,经同源 fetch 调用 Host 的 /metrics 接口

作为独立安装包,本插件采用 ctx.webServer HTTP 路由(运行时可达的正式通道)——这是第三方包在不改动 dsh-api-remotes 白名单的前提下可行的 Host↔Client 通信方式。

HTTP 接口

接口方法说明
/metrics/dashboardGET全套聚合数据(按 ?range= 过滤)
/metrics/requestGET单次请求完整详情(?sessionId=&turn=&step=
/metrics/traceGET指定会话/轮次/步骤的轨迹事件
/metrics/pricingGET/POST读取 / 保存费用单价配置
/metrics/refreshPOST全量刷新历史
/metrics/panelGET独立监控页(新标签页打开)

目录结构

.
├── package.json         # 插件包清单:dsh.bundle.patch + dsh.client + peerDependencies + exports
├── cordis.patch.yml     # bundle 补丁层:声明插件入口(dsh plugin add 据此激活插件)
├── lib/
│   ├── index.js         # Host 端:事件采集 + 统计 + /metrics HTTP 接口(Node 进程)
│   └── client.js        # Client 端:界面 + 图表 + 费用 + 主题/配色(浏览器 bundle)
├── legacy/              # 早期「动态 Cordis 插件」形态的保留文件(仅作参考)
│   ├── host.js
│   └── client.js
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
└── README.md

legacy/ 目录是早期「动态插件」形态的保留文件;正式插件包已迁移到 lib/index.js(ESM host)与 lib/client.js(浏览器 bundle),通信由动态插件的 harness.handle/host.call 改为 ctx.webServer 注册的 /metrics HTTP 接口。该目录不参与发布

开发

# 安装依赖(peerDependencies)
pnpm install

# 本地安装到 DSH 的 web profile
dsh plugin --profile web add .

# 启动 DSH
dsh web

修改 Client 端(lib/client.js)后,需要 pnpm run dev:web 重建浏览器 bundle;修改 Host 端(lib/index.js)后需重启 dsh web 使插件重新加载。

容量上限

明细数组有容量上限(请求 / 轮次 / 工具各 5000 条,轨迹 8000 条),超出后丢弃最早记录。

FAQ

Q:为什么打开过哪些对话,它们的历史才会被统计? A:插件采用增量采集 + 按需回填。可以点「全量刷新历史」一次性补齐所有已持久化会话,无需逐个打开。

Q:HTTP 请求示例是真实的请求吗? A:不是字节级真实请求。会话事件流不含底层适配器的原始字节与 Authorization,该示例为按 request/header 与派生消息历史重建的参考,端点按 provider 推断、鉴权头已脱敏。

Q:数据会持久化吗? A:不会。数据是运行期内存态,插件停止或进程重启后清空。

Q:支持哪些模型 / 厂商? A:不绑定特定厂商,按会话事件流中的 provider / model 自动聚合。默认内置了 DeepSeek 官网价格,可在「费用」页为任意厂商 / 模型配置单价。

贡献

欢迎提交 Issue 与 Pull Request!请先阅读 CONTRIBUTING.md

许可证

MIT © 2026 dsh-metrics-panel contributors

致谢

  • 功能设计参考 oh-my-pi/stats 页面
  • 数据口径基于 DeepSeek Harness 的会话事件流

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

Contributing guideDetected
DocumentationDetected

Repository information

Language
JavaScript
License
MIT
Last updated
Aug 16, 2026, 3:50 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.