dsh-system-hud
DeepSeek Harness(DSH)Web UI 插件:把本机硬件状态放进界面里三个原生位置。
- ① 对话顶栏入口:两个小环 + 温度,和「会话日志 / 更多 / 账号」同一行;点一下打开右侧「系统」详情
- ② 输入框底部:和
轮次 · tok/s、token · 缓存命中、上下文环同一行,追加一个原生风格 pill - ③ 侧边栏底部:240px 卡片(CPU / 内存 / 磁盘 三个环 + 网络、IO、温度),在「每月限额」和「更多」之间
- ④ 右侧「系统」详情:原生 tab,每核占用、内存/磁盘明细、60s 网络、温度、Top 进程
- 设置 → 系统 HUD:三处位置逐个开关、指标开关与排序、拿不到的数据怎么显示、采样周期、阈值
只用真实数据:CPU 走进程内 os.cpus() 差分,内存/磁盘/网络/IO 走系统命令;macOS 上拿不到温度时按设置策略处理(默认隐藏,绝不填 0)。



真实 DSH 实例里的侧栏卡片(首页无会话时只有 ③,① ② 需要打开一个会话):

安装
要求 DSH >=0.2.0-rc.2 <0.3.0。
# CLI
dsh plugin --profile web add @ponydev/dsh-system-hud
# 或在 Web「插件」页搜索安装
安装后重启宿主(launchctl kickstart -k gui/$(id -u)/local.deepseek-harness.web)并刷新页面。
本地开发:
dsh plugin --profile web add link:/path/to/dsh-system-hud
设置页(对齐其他插件)
设置 → 系统 HUD 顶部与其他插件一致:
- 标题图标 + 版本号(
v0.1.0) - GitHub(仓库)、问题反馈(Issues)、检查更新(查 npm 最新版,本地
link:安装时显示「尚未发布到 npm」) - 恢复默认(位置/指标/采样/阈值全部回到默认)
- 控件全部用 DSH primitives(Button / Switch / SegmentedTabs / Modal),颜色只用
--dsw-*token
功能特性
| 指标 | macOS | Linux | 数据来源 |
|---|---|---|---|
| CPU 使用率 / 每核 / 负载 | ✅ | ✅ | 进程内差分,os.loadavg() |
| 内存 已用/总量/交换 | ✅ | ✅ | vm_stat + sysctl / /proc/meminfo |
| 磁盘 已用/总量 | ✅ | ✅ | df -k(APFS 用 used+free 反算) |
| 磁盘 I/O 读写 | ✅ | ✅ | ioreg 累计差分 / /proc/diskstats |
| 网络 ↑↓ | ✅ | ✅ | netstat -ibn 累计差分 / /proc/net/dev |
| 温度 | ❌ 需可选 helper | ✅ | /sys/class/thermal |
| Top 进程 | ✅(ps) |
✅(ps) |
取不到时自动隐藏 |
采样开销:快层(CPU + 网络)实测约 6ms/轮 ≈ 0.6% 单核;内存/磁盘/IO/温度 5s 一次;Top 进程 30s 一次。页面不可见或无位置启用时停止采样。
已知限制
- macOS 26 没有免特权温度源:
temperature.available=false,按设置策略渲染(默认隐藏,绝不填 0);Linux 读/sys/class/thermal。 sidebar.footer.action是 nowrap 横向单行、宽 256px,被「模型额度」卡片占满,所以展开态用shell.overlay浮层卡锚定在 footer 行上方;折叠态才用 footer 图标。- 右栏「系统」tab 只在有可见会话时可打开;无会话时点击退化为浮层大卡。
- Top 进程依赖
ps,宿主侧可用但未在真实宿主内验证;取不到时该块自动隐藏。
检查更新
设置 → 系统 HUD 右上角「检查更新」查询 npm 最新版;本地 link: 安装(尚未发布)会显示「尚未发布到 npm」。
Host 端 update-check 有 10 分钟缓存、8 秒超时,失败只写 error 字段,不影响页面其他部分。
安全
- 只执行写死白名单的系统命令(
vm_stat/netstat -ibn/df -k/ioreg/sysctl/pmset -g therm/ps),execFile数组参数、2s 超时、1 MiB 输出上限、SIGKILL 兜底;绝不拼接 shell,绝不接受前端传入的命令/参数。 /system-hud/*全部走connection.admit认证围栏,未认证 401。- 配置落盘
$DSH_HOME/system-hud/config.json(目录 0700 / 文件 0600,tmp+rename 原子写),不存任何凭据。 - 快照不含用户名、绝对路径、环境变量;远端访问时 UI 显示「本机」。
配置
cordis.patch.yml 里的默认配置:
- insert:
- id: system-hud
name: "@ponydev/dsh-system-hud"
config:
fastMs: 1000
slowMs: 5000
topProcMs: 30000
regions: { header: true, dock: true, sidebar: true, rightPane: true, bottomBar: false }
运行时偏好持久化在 $DSH_HOME/system-hud/config.json(0600),由设置页写回;Host 是唯一真相源。
结构
lib/index.js Host:/system-hud 路由、认证围栏、配置持久化、update-check
lib/sample.js 分层采样(快/慢/top、单飞、差分、暂停、失败保留旧值)
lib/metrics.js darwin/linux 解析与执行(命令白名单)
lib/client.js ModuleLoader bundle:三个位置、右侧「系统」tab、设置页、i18n
cordis.patch.yml bundle patch(插入 system-hud 行 + 默认配置)
scripts/ smoke / check-i18n / release-notes / render-test
docs/ DESIGN.md、CONTRACT.md、mockups、screenshots
开发
npm run check # 语法 + i18n 键一致性 + 插件标识一致性
npm run verify # 单独校验插件 id / 名称(包名、cordis patch、ModuleLoader id、NS、路由)
npm run smoke # 离线解析/差分/配置冒烟(不触网)
npm run test-ui # 离线 UI 预览(有本机 Chrome 时截图到 docs/screenshots/)
接口契约见 docs/CONTRACT.md,设计与取舍见 docs/DESIGN.md,项目规范见 AGENTS.md。
License
MIT
No comments yet. Be the first to write one.