# dsh-plugin-mini-dashboard

DSH web 的会话 / token 迷你仪表盘。面板渲染在侧边栏「设置」行上方，用一个小小的可拖动悬浮窗汇总当前会话的动态，以及今天的 token 开销。

[English](README.md) | 中文

![layout](https://img.shields.io/badge/platform-web-blue)
![dsh](https://img.shields.io/badge/dsh-%3E%3D0.1.1--rc-green)
[![Listed on dsh-plugin.org](https://dsh-plugin.org/badges/listed.svg)](https://dsh-plugin.org/plugins/focksor/dsh-plugin-mini-dashboard)

![alt text](image.png)

## 它显示什么

| 指标 | 含义 |
| --- | --- |
| 活跃会话 | 正在运行的会话数——包括经由运行中的子代理而忙碌的会话。口径与侧边栏状态灯完全一致，数字永远对得上侧边栏。 |
| 今日会话 | 今天有活动的会话数；空白会话不计。 |
| 输入速度 · 输出速度 | 当前 token 吞吐（tok/s），空闲时自然归零。统计范围可配置：所有会话，或仅当前正在使用的会话。回复仍在流式输出、provider 用量尚未上报时，输出速度按流式文本实时估算（≈ 4 字符 1 token），两路取较大值展示。 |
| 输入 · 输出 | 今天发送与生成的 token。 |
| 缓存读 · 缓存写 | 今天的缓存 token 用量，两个可独立开关的指标。 |
| 分支 | 当前会话工作目录所在的 git 分支（detached HEAD 显示 `HEAD`；上游跟踪 / 领先落后信息剥离不显示）。 |
| 变更 | 相对 HEAD 的工作区变更：`git status` 变更文件数（含未跟踪文件，重命名计 1）加 `+新增 -删除` 行数和（`git diff HEAD --numstat`，暂存与未暂存合并统计；未跟踪文件不计行数，二进制文件计 0）。工作区干净时显示 `0`。 |
| git 状态 | 分支与变更合并在同一格，例如 `main(3 · +42 -7)`；干净时只显示分支名，git 不可用时显示 —。 |

**git 指标** — 三行 git 数字跟随**当前会话**的工作目录，经插件在宿主侧挂载的 `/mini-dashboard/events` SSE 端点推送（与内置 client-hmr 通道同一 `webServer.register` 机制）。端点只接受会话 id、绝不接受路径，未知 id 一律 404；不发送 CORS 头，依赖 DSH web 默认的本机回环、无鉴权 web 面。git 或端点不可用时相应格显示 —，轮询节拍跟随面板刷新间隔（端点侧夹取在 1–30s），仅当三项 git 指标全部隐藏（或面板停用）时才关闭连接——任一单项隐藏都保持连接，三项共用同一条。空仓库仍显示分支名，行数计 0（尚无 HEAD 可 diff）。三项默认显示，可在显示项中单独开关；趋势线仍为速度指标专属。

**速度趋势线** — 两个速度指标可在数值旁显示迷你走势图：卡片布局是卡片右缘的渐变面积曲线，列表布局是行下方的细描边曲线，单行布局不显示。按指标选择 关闭/1分/3分/5分（两者默认均为 5 分钟）。历史只存内存约 6 分钟，页面刷新后从零积累；细节程度跟随刷新间隔。

## 悬浮窗

- 按住标题栏拖动；下缘、右缘、角部可拉伸。高度默认随内容，手动定高后指标均分整窗高度，过矮时回退滚动。
- 首次出现于右下角；位置与尺寸跨重启记忆。
- 释放时靠近屏幕边缘会吸附（阈值可调）。
- 前景/背景透明度滑杆让它融入主题；深浅色自动跟随。
- 悬浮窗始终位于宿主对话框与下拉之上，侧边栏收起为窄条时自动隐藏。
- 全部指标关闭时，只剩标题与 ⚙。
- 同时开着多个 dsh web 窗口？它们共享同一份记忆位置，且每个窗口都会把面板收进自己的视口——大窗口拖出界的位置在小窗口同样可见。以最后操作的窗口为准。

## 安装

```bash
dsh plugin --profile web add dsh-plugin-mini-dashboard
```

重启 `dsh web` 生效。

## 配置

两处入口编辑同一份配置，所有修改即时生效：

1. DSH 内置设置对话框中的 **mini dashboard** 区块；
2. 面板右上角的 **⚙ 弹层**——选项相同，随手可调。

配置持久化到 `~/.dsh/settings.yaml`（命名空间 `mini-dashboard`），重启不丢。

| 设置 | 默认 | 说明 |
| --- | --- | --- |
| 启用面板 | 开 | 总开关 |
| 布局 | 卡片 | 单行 / 卡片网格 / 列表行 |
| 刷新间隔 | 2s | 更新节拍（1/2/5/10/30s），同时决定趋势线细节上限 |
| 速度统计 | 当前会话 | 统计所有会话或仅当前会话 |
| 输出速度包含思考过程 | 开 | 开：10s 窗口，思考文本计入实时估算；关：更平滑的 30s 窗口且忽略思考文本 |
| 今日用量计入子代理 | 开 | 子代理会话是否计入今日 token 数字 |
| 每行显示数 | 2 | 卡片布局密度（1–4） |
| 吸附屏幕边缘 | 开 | 拖近边缘时吸附；旁侧出现阈值滑杆（8–80px） |
| 前景 / 背景透明度 | 0% / 15% | 淡化指标文字 / 背景 |
| 显示项 | 全部显示 | 各指标独立显隐；可拖动排序 |
| 趋势线 | 5分（两个速度指标） | 关闭/1分/3分/5分，按速度指标分别设置 |
| git 指标 | 显示 | 分支 / 变更 / 组合的 git 状态，各自可在显示项中单独开关 |

## 数字口径

- 会话计数（活跃、今日会话）与侧边栏同口径：空白、归档、子代理来源的行一律不计。会话自身在运行、或其背后的子代理在运行，即计为活跃。
- 今日 token 是真正的当日总量：provider 用量按 30 分钟槽位折算，再按你本地的自然日求和。归档会话照计——花掉的 token 不因归档消失。
- 本次宿主运行中未加载的「冷会话」由 DSH 的持久化投影缓存供数，而缓存只保存插件注册后写下的行。为补上这段空窗，插件加载时会把保留窗内有活动的持久化会话沿宿主 cold-read 阶梯折算到日志末端并写回缓存，面板随后以有限次全量列表重拉把补齐的行收进快照——今日总量因此覆盖当天所有会话，而非仅插件上线后打开过的那些。
- 若所用 DSH 组合缺少会话投影服务，面板回退为「今天活跃过的会话的全部累计用量」，跨天长会话会被多算。
- 速度来自对 provider 实报累计 token 的滚动窗口差分，空闲自然归零。

## 语言

面板文案跟随 DSH 语言设置（设置 → 语言），提供中英双语，切换即时生效，无需刷新。

## 关键词

仪表盘 · 迷你仪表盘 · 面板 · 插件 · 会话监控 · 会话数 · token 统计 · token 用量 · 用量统计 · 吞吐速度 · 悬浮窗 · 可拖动 · 侧边栏 · 趋势线 · dsh · deepseek harness · dsh plugin · web plugin · mini dashboard · dashboard · session monitor · token usage · token counter · tokens per second · usage stats · sidebar widget · float window · sparkline
