Back to home@iambbp

dsh-monitor

No description

Stars
2
Language
JavaScript
Created
Aug 21, 2026
Updated
Aug 21, 2026
GitHub repo

Introduction

DEEPSEEK 监控插件(峰谷时段版)· DSH 版

🌐 English version: README.en.md

DSH 原生插件,实时监控 DSH 会话的真实 Token 消耗与费用,按 DeepSeek 官方峰谷定价 计算, 并在 DSH 页面右上角显示毛玻璃悬浮窗(与浏览器扩展版 UI 完全一致)。

插件形态


一、功能总览

功能说明
🧾 今日 Token实时累计当日全部会话的真实 Token 消耗(输入 + 缓存命中 + 输出)
💰 今日费用按官方价格表 + 峰谷时段计算(谷时段自动半价)
💬 交互次数今日你发了多少条消息(turn/start 事件计数,每次交互一个 turn,不含工具调用 step)
📈 平均消耗今日平均每次交互的 Token 数
🔴🟢 峰谷状态圈48px 呼吸状态圈:绿色 = 谷时段(半价),红色 = 高峰(全价)
🕐 实时时钟北京时间(自动处理夏令时无关的 +8 时区),显示时分秒与星期
📊 配额进度条今日费用 vs 配额上限(默认 ¥10,可通过插件配置 quotaLimit 修改),超 70% 变黄、90% 变红
🟢🔴 峰谷图例谷 0.5× / 峰 1.0× 及官方时段说明
📋 复制报告一键复制今日用量文字报告到剪贴板
🔄 刷新立即重新拉取数据(默认每 2 秒自动轮询)
🖱️ 拖拽按住标题栏可拖动悬浮窗到任意位置
➖ 折叠折叠成小药丸(显示当前费用 + 时段)
✕ 隐藏隐藏悬浮窗(记住状态,F5 后不自动弹出)

二、峰谷时段与定价(官方规则)

数据来源:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/

峰谷时段(每天,含周末)

时段规则系数
北京 09:00–12:00、14:00–18:00全价 1.0×
其余时段(00:00–09:00、12:00–14:00、18:00–24:00)半价 0.5×

官方价格表(元 / 百万 tokens)

模型计费项峰 1.0×谷 0.5×
deepseek-v4-flash缓存命中 cache-hit0.100.05
未命中 cache-miss(输入)3.001.50
输出 output9.004.50
deepseek-v4-pro缓存命中 cache-hit0.300.15
未命中 cache-miss(输入)9.004.50
输出 output27.0013.50

说明:DeepSeek 计费按实际调用时刻的时段计价(同一请求不拆分)。插件按事件发生时刻判定峰谷。


三、数据来源(真实,非模拟)

插件在 DSH 服务端监听会话事件流:

DSH 会话事件(session/event)
  └─ assistant/message 事件(携带 TokenUsage:inputTokens / outputTokens / cacheReadTokens / cacheWriteTokens)
       └─ dsh-monitor 累计到今日统计
            ├─ 内存状态(实时 API 响应)
            └─ ~/.dsh/dsh-monitor.json(持久化,每日 00:00 滚存)
  • 数据来自 DSH 内部事件系统,不需要浏览器扩展,不经过页面网络层
  • 每次模型调用完成(assistant/message 事件)累计一次 Token/费用,不重复计数
  • 交互次数按 turn/start 事件计数(agent-loop 每次用户交互开启一个 turn), 一次对话即使包含多步工具调用也只算 1 次;重启后从持久化文件恢复,自然日累计,与 Token 口径一致
  • 重启 DSH 后从持久化文件恢复今日累计,继续实时累计

四、安装(已安装则跳过)

4.1 插件源码位置

dsh-monitor\
├── package.json          # 插件清单(name/main/exports)
├── lib\
│   ├── index.js          # 服务端:事件监听 + 计费 + 数据 API + UI 注入
│   ├── ui.js             # 前端:悬浮窗 UI(轮询 /api/dsh-monitor)
│   └── types\index.d.ts  # 类型声明
└── README.md             # 本文档

4.2 注册到 DSH Web 配置

  1. ~/.dsh/profiles/web/package.json — 添加依赖:
{
  "name": "dsh-profile-web",
  "private": true,
  "dependencies": {
    "dsh-monitor": "file:./dsh-monitor"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app"
      ]
    }
  }
}

⚠️ bundles 数组只放 bundle 组装包(@deepseek-ai/dsh-base@deepseek-ai/dsh-web-app),不要把单个插件加进 bundles,否则 DSH 启动会卡住。

  1. ~/.dsh/profiles/web/cordis.patch.yml — 通过 insert 加载插件:
# 你的 profile 补丁层(追加到末尾)
- insert:
    - id: dsh-monitor
      name: 'dsh-monitor'
      config:
        quotaLimit: 50   # 可选:今日配额上限(元),默认 10
  1. 安装依赖(在 profile 目录执行):
cd ~/.dsh/profiles/web
corepack pnpm install
  1. 重启 DSHdsh web(或你常用的 DSH 启动方式)

4.3 验证安装


五、使用说明

  1. 打开:启动 DSH 后按 F5 刷新页面,悬浮窗出现在右上角
  2. 拖动:按住面板标题栏(「DEEPSEEK · 监控」一行)拖动到任意位置
  3. 折叠:点标题栏右侧 ,收成小药丸(显示当前费用 + 峰谷)
  4. 隐藏:点 ,完全隐藏(状态记忆在 localStorage,F5 后不自动弹出)
  5. 复制报告:点「📋 复制报告」,剪贴板获得今日报告,例如:
【DEEPSEEK 用量报告】2026-08-21 · 谷时段·半价
今日 Token: 270,647(输入 2,849 / 缓存命中 266,112 / 输出 1,686)
今日费用: ¥0.0252(高峰 ¥0 / 谷时 ¥0.0252)
交互次数: 3 次
平均消耗: 90,216 Token/次
配额使用: 0%(¥0.0252 / ¥10)
峰谷规则: 峰 北京 09:00-12:00/14:00-18:00 ×1.0 | 谷 其余时段 ×0.5(每天)
模型: deepseek-v4-flash · 单价(当前时段): 缓存命中 ¥0.05/1M · 未命中 ¥1.5/1M · 输出 ¥4.5/1M
  1. 刷新:点「🔄 刷新」立即更新(平时每 2 秒自动更新)

六、数据与持久化

6.1 数据结构(~/.dsh/dsh-monitor.json

{
  "date": "2026-08-21",          // 当前统计日(北京时区)
  "tokens": 270647,               // 今日总 Token
  "cost": 0.0252,                 // 今日总费用(元)
  "sessions": 3,                  // 今日交互次数(按 turn/start 计数)
  "inputTokens": 2849,            // 未缓存输入
  "outputTokens": 1686,           // 输出(含推理 token)
  "cacheReadTokens": 266112,      // 缓存命中
  "peakCost": 0,                  // 高峰时段费用
  "valleyCost": 0.0252,           // 谷时段费用
  "history": {                    // 历史记录(保留 90 天)
    "2026-08-20": { "...": "..." }
  }
}

6.2 每日滚存

  • 北京时区 00:00 自动把昨日数据存入 history,重置今日计数
  • 历史保留 90 天,超出自动裁剪
  • 修改系统时间不会影响(以事件时间戳计算)

6.3 费用计算

费用 = 缓存命中/1e6 × 缓存单价 + 输入/1e6 × 未命中单价 + 输出/1e6 × 输出单价
(单价按事件时刻的峰谷判定:峰 1.0× / 谷 0.5×)

七、数据 API

前端悬浮窗通过以下接口获取数据,也可供其他用途调用:

GET /api/dsh-monitor

响应示例:

{
  "ok": true,
  "isValley": true,
  "tier": "valley",
  "stats": {
    "date": "2026-08-21",
    "tokens": 270647,
    "cost": 0.0252,
    "sessions": 3,
    "avgPerSession": 90216,
    "inputTokens": 2849,
    "outputTokens": 1686,
    "cacheReadTokens": 266112,
    "peakCost": 0,
    "valleyCost": 0.0252
  },
  "quota": { "used": 0.0252, "limit": 10, "pct": 0 },
  "prices": {
    "model": "deepseek-v4-flash",
    "peak":    { "cached": 0.10, "uncached": 3.0, "output": 9.0 },
    "offpeak": { "cached": 0.05, "uncached": 1.5, "output": 4.5 }
  },
  "demoMode": false,
  "updatedAt": 1787286745749,
  "peakHours": "北京 9:00-12:00、14:00-18:00(每天)",
  "valleyHours": "北京其余时段(半价 0.5×)"
}

八、配置项

插件当前内置默认值,如需调整请修改 lib/index.js

配置位置默认值说明
价格表PRICING 常量flash/pro 官方价官方调价时更新
配额上限buildPayload()quota.limit10(元)配额进度条分母
统计模型buildPayload()modeldeepseek-v4-flash报告中的模型名与单价
轮询间隔lib/ui.jspollTimer2000ms悬浮窗刷新频率
历史保留maybeRollover()9090 天滚动窗口

九、常见问题(FAQ)

Q1:悬浮窗没出现? A:F5 刷新页面;确认 index.html 已注入(查看源码搜 dsh-monitor/ui.js);确认 DSH 是重启后的新实例(Get-NetTCPConnection -LocalPort 3080 看进程启动时间)。

Q2:数字一直是 0? A:确认发生了真实对话(发一条消息);访问 /api/dsh-monitor_diag 字段:

  • eventsSeen 为 0 → 事件监听未生效(插件未加载,检查 cordis.patch.yml)
  • eventsSeen > 0assistantMessages 为 0 → 没有完成过模型回复
  • withUsage 为 0 → 模型适配器未上报 usage
  • accumulated > 0 → 正常累计

Q3:重启 DSH 后今日数据还在吗? A:在。启动时从 ~/.dsh/dsh-monitor.json 恢复。若文件缺失(如手动删除),从 0 开始。

Q4:费用是模拟数据吗? A:不是。全部来自 DSH 会话事件的真实 TokenUsage(input/output/cacheRead),按官方价格表与峰谷规则计算。

Q5:和浏览器扩展版有什么区别? A:浏览器扩展版依赖注入页面网络层,在 DSH 上无法捕获(DSH 模型请求走 Node 后端)。DSH 插件版直接在服务端读事件流,数据更准确,且无需浏览器扩展。DSH 环境下请使用本插件;浏览器扩展版仍适用于 chat.deepseek.com 网页端。


十、卸载

  1. cordis.patch.yml 删除 - insert: [...] dsh-monitor 条目(或整体还原为 []
  2. package.jsondependencies 删除 "dsh-monitor": "file:..."
  3. corepack pnpm install(清理 node_modules 链接)
  4. 重启 DSH

十一、开发与调试

# 语法检查
node --check lib/index.js
node --check lib/ui.js

# 单独启动测试实例(不影响正式 3080 实例)
dsh web --port 3090 --no-open
# 然后访问 http://127.0.0.1:3090/api/dsh-monitor

# 修改插件源码后同步到 profile(file: 链接):
cd ~/.dsh/profiles/web
corepack pnpm install
# 再重启 DSH

⚠️ 修改 lib/index.js 后,必须 corepack pnpm install 同步链接 + 重启 DSH 才生效(lib/ui.js 是运行时读取的,但 index.js 的注入逻辑也需要重启)。


版本记录

版本日期说明
1.2.12026-08-21修复交互次数重启清零;交互口径改为 turn/start(每次交互一个 turn,web 直连消息也能可靠计数)
1.2.02026-08-21配额上限改为可配置(config.quotaLimit,默认 10),无需改代码
1.1.02026-08-21交互次数改为按用户消息计数(user/message + source.kind=user 过滤),修复多步工具调用虚高问题
1.0.02026-08-21首个 DSH 插件版:真实事件累计、官方峰谷定价、悬浮窗 UI、每日滚存