Skip to content
dsh.fish
Bundle

dsh-shanhai-stats

山海系列 DeepSeek Harness 用量统计插件:总量徽章、每日走势柱状图、GitHub 风格热力图、按模型/提供商分组明细

Source
cn-zhangpeng
stars
1 stars
License
MIT
Updated
Updated 14 days ago

Readme

# dsh-shanhai-stats

DeepSeek Harness 用量统计插件(山海紫穹系列)。

在 DSH 的设置 → 用量统计 中提供四个板块:

![使用统计示例](assets/20260825-1.png)

- **总量汇总徽章** — 总花费 Token、缓存命中率、总使用次数、总请求次数、模型用量、连续使用天数;默认进入页面即为「当天」视图
- **每日走势折线图** — 按天展示输入 / 缓存命中 / 缓存写入 / 输出四段 Token 走势(可切 当天 / 1 / 7 / 30 天)
- **GitHub 风格热力图** — 近一年每日活动热度,悬停查看明细
- **用量明细表** — 支持「按供应商 / 按模型」两个标签页切换,查看各供应商或各模型的 Token 用量、消息数、缓存命中

![使用统计完整界面](assets/20260825-2.png)

## 特性

- 数据来自 DSH 会话日志的 `assistant/message` 事件(`usage` + `message.source.provider/model`),**插件自身不计算 token**,只做聚合与展示
- 口径与 DSH 一致:`inputTokens` = 未命中缓存的输入,`cacheReadTokens` = 缓存命中输入,`cacheWriteTokens` = 缓存写入;`outputTokens` 已含 `reasoningTokens`(展示时不再重复累加)
- 时间维度:全量 `totals` / `perWorkspace` / `perModel` 永不清零;按天明细保留 **53 周滑动窗口**,窗口外只进总数
- 历史回填:插件激活时扫描全部工作区会话;此后通过实时事件增量折叠(`seq` 断点续扫 + gap 检测补读)
- 支持子代理会话(随事件自然计入)
- 深浅色主题自适应(使用 DSW 设计变量)

## 安装

### 方式一:插件命令(推荐)

```bash
dsh plugin --profile web add github:cn-zhangpeng/dsh-shanhai-stats
```

> 锁定版本安装(更安全,推荐生产环境):
> ```bash
> dsh plugin --profile web add github:cn-zhangpeng/dsh-shanhai-stats#v1.1.1
> ```

更新 / 卸载:

```bash
dsh plugin --profile web update dsh-shanhai-stats
dsh plugin --profile web remove dsh-shanhai-stats
```

### 方式二:手动部署 / 本地调试

1. 将本目录软链接(junction)到你的 DSH 插件目录;
2. 用 `cordis.patch.yml` 以覆盖层方式启动 Web UI:

   ```bash
   pnpm dsh web --patch ./cordis.patch.yml
   ```

3. 打开 DSH web 界面,在 设置 → 用量统计 查看;页面默认展示「当天」数据,也可切换 1 / 7 / 30 天或自定义范围。

> 参考官方文档:[第一个插件](https://deepseek-harness.github.io/deepseek-harness/develop/basic/)
> 首次启用会扫描本地历史会话(进度见页面提示),扫描完成后数字不再频繁变化。

## 架构

```
Host 半(Cordis 插件,lib/index.js)
  sessionQuery / workspaceRegistry 注入
  → baseline 扫描历史会话(按 cwd 归属工作区)
  → 实时 session/event 增量折叠
  → 内存聚合:totals / perWorkspace / perModel / byDay(53周)
  → /api/shanhai-stats HTTP 接口

Client 半(浏览器 bundle,lib/client.js)
  React.createElement 渲染(timer 注入,2s/15s 轮询)
  → 徽章 / 折线图 / 热力图 / 用量明细表
```

按 provider × model 新增 `perModel` 聚合维度,聚焦纯用量统计。

## 数据口径说明

| 维度 | 说明 |
|---|---|
| 总花费 Token | `input + output + cacheRead + cacheWrite + reasoning`(展示口径,缓存命中与计费价不同) |
| 缓存命中率 | `cacheRead / (input + cacheRead) × 100%` |
| 回合数 | `turn/end` 事件计数(含子代理会话) |
| 请求次数 | 带 `usage` 的 `assistant/message` 事件计数(与模型的一次往返 = 1 次),按 `kind: model` 才计入 |
| 热力图分档 | 按当天请求数:`0` / `1–50` / `50–200` / `200–500` / `500+` |
| 按天窗口 | 最近 53 周;更早历史只进全量 totals/按工作区/按模型,不进热力图与按天折线图 |

## 目录

```
dsh-shanhai-stats/
  package.json        # 插件元信息与打包配置
  cordis.patch.yml    # 插件注册补丁
  lib/index.js        # Host 半:聚合 + HTTP 接口
  lib/client.js       # Client 半:CC Switch 风格 UI
  test/               # host 端到端 + client smoke 测试
```

## 开发

```bash
node --check lib/index.js
node --check lib/client.js
node test/host-test.mjs     # 模拟 DSH 环境端到端验证聚合
node test/client-smoke.mjs  # 验证浏览器模块工厂可加载
```

## License

MIT

Install

dsh plugin --profile web add github:cn-zhangpeng/dsh-shanhai-stats

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source