侧边栏系统监控:实时查看宿主机概览(CPU/内存/网络/磁盘)、进程列表与 Docker 容器状态,全程只读。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:pc439527/dsh-side-monitor
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DSH(DeepSeek Harness)Web 的只读系统监控插件:在左侧 Sidebar 底部提供「系统监控」入口,点击打开右侧监控面板,实时展示宿主机(DSH 所在主机)的系统概览、进程列表与 Docker 容器状态。
全程只读:不提供 docker restart/stop、process kill、exec、shell 等任何控制操作,适合随手查资源、排障和观察容器状态。
v0.6.2 — macOS(Darwin)支持
macOS 没有 /proc,此前所有 Linux 读取器在 Mac 上全部落空(CPU 一直"采样中"、无磁盘、0 个进程、无网卡)。本版新增原生 Darwin provider(lib/darwin.js),用 Apple 自带工具返回与 Linux 相同的数据结构:
| 指标 | 来源 |
|---|---|
| CPU % / 每核 | node:os 每核 tick 时间(与 /proc/stat 相同的差分算法) |
| CPU 型号 / 核心 / 主频 | sysctl machdep.cpu.brand_string、hw.physicalcpu、hw.logicalcpu |
| 内存 | vm_stat 页计数 + sysctl hw.memsize(可用 = free + inactive + speculative + purgeable) |
| 交换分区 | sysctl vm.swapusage |
| 负载 / 运行时长 | getloadavg(3) / node:os |
| 磁盘 | df -k,感知 APFS:/System/Volumes/Data 合并为唯一 / 行(系统卷与 /System/Volumes/* 噪声被剔除) |
| 网络 | netstat -ibn 字节计数 + os.networkInterfaces() 地址;主接口取默认路由网卡,绝不选 VPN 的 utun |
| 进程 | ps -A -o pid,ppid,user,%cpu,%mem,rss,etime,state,command |
| 线程 / 可运行 | sysctl kern.num_threads + ps 的 R 状态计数 |
| Docker | Docker Desktop socket(~/.docker/run/docker.sock、/var/run/docker.sock、DOCKER_HOST) |
macOS 上无需 root 拿不到、因此如实标记为未知的:每盘读/写计数(iostat 无读写拆分)与温度传感器(powermetrics 需提权)。关于对话框中的能力项会如实反映。
显式传入 procRoot 时仍强制走 Linux 读取器,因此 /proc fixture 测试可在任意主机运行。
v0.6.1 — DSH 0.2.2-rc.1 兼容性适配
针对已安装的 DeepSeek Harness 0.2.2-rc.1(@deepseek-ai/cordis 4.1.0)的纯兼容性版本。对照内置包重新核验了完整运行时接口,无需改动任何运行时代码,只把清单里的版本声明对齐到最新版本线:
- 新增
engines.dsh: ^0.2.2-rc.1。app-boot的evaluatePluginCompatibility在存在engines.dsh时改为只检查它(用semver.satisfies(..., { includePrerelease: true })),以此把插件钉在已验证的 0.2.2 版本线。 @deepseek-ai/cordis:~4.0.4→~4.1.0—— 当前运行时内置 cordis 4.1.0(dsh-client-connection@0.2.2-rc.1自身也 peer 依赖~4.1.0)。@deepseek-ai/dsh-client-connection/-ui-renderer:^0.2.0-rc.2→^0.2.2-rc.1—— 声明的 DSH client 版本线与已安装的 0.2.2-rc.1 对齐。- 重新核验:
connection.rpc.call(channel, endpoint, payload)仍输出相同的client-request/server-response信封(dsh-client-connection@0.2.2-rc.1);keyedmain+sidebar.panellist席位仍由ui-renderer/ui-sidebar/ui-layout正确解析;Host 端webServer.register({ kind: 'prefix' })+connection.requestRejection路由栅栏仍匹配dsh-host-webserver。 - 修复
tools/sync-generated.mjs:原用new URL(...).pathname,会把空格保留为%20,导致路径含空格的工作区(如本目录)执行失败;现改用fileURLToPath。 - 修复
lib/collectors.js中一处既有的网络速率计时抖动:两次轮询落在同一墙钟毫秒时dt === 0,会把rxBytesPerSec置空为null;速率基线现改用单调递增的毫秒时间戳,快速磁盘上测试稳定通过。 lib/client.js的CLIENT_VERSION同步为0.6.1;test/manifest.test.js期望更新并新增engines.dsh断言。
v0.6.0 — 左侧分区导航、丰富的主机指标与历史趋势
- 主面板左侧分区导航(概览 / 性能 / 进程 / Docker / 硬件与系统)。窄屏(<768px)时导航变为顶部横向条。
- 性能页:服务端保存 10 分钟历史(每 2 秒一个样本,仅内存,不落盘),可切换 1 / 5 / 10 分钟;展示 CPU、内存、交换分区、负载、网络与磁盘 IO 趋势,以及每核 CPU 柱状图。
- 概览新增交换分区、线程 / 可运行任务数、磁盘 IO 速率、内存分布(空闲 / 缓冲 / 缓存 / 可用)。
- 硬件与系统新增 CPU 主频与温度传感器(无法读取时显示“无温度传感器”)。
- Docker 新增守护进程摘要卡片(只读,来自
/info与/version)。 - RPC 协议升级为 v4(加性变更):新增端点
history、dockerInfo;meta.capabilities新增swap、perCpu、diskIo、temperature、history、dockerInfo。仍然只读。
v0.5.0 — 系统监控改为主面板页
- 入口移入导航组:位于 插件 / 自动化任务 之后,与上下文洞察使用同一个
sidebar.panellist席位。原底部脚注入口已移除。 - 监控改为主面板页(
main槽位,key 为dsh-side-monitor),不再是右侧抽屉。页头、视图切换(概览 / 进程 / Docker)、可滚动内容区与响应式卡片对齐上下文洞察布局;宽度拖拽与抽屉动画已删除。 - 导航行文字使用 thunk(
t("monitorTitle")),语言切换时无需重新注册。 - 修复空白页:页面组件曾被写成字符串标签,React 把它当作未知元素渲染。
v0.4.0 — DSH 0.2.0-rc.2 兼容性适配
- 已在 DeepSeek Harness 0.2.0-rc.2 下对齐运行时契约:
sidebar.footer.action插槽(ctx.slots.inject+ctx.slots.register)、浏览器端ctx.connection.rpc.call与 Host 端路由挂载注册均与 0.2 运行时一致(/side-monitor 端点已在真实启动进程上端到端驱动:token 交换、会话 cookie、meta / overview 响应)。 - 抽屉改为
shell.overlay插槽条目,不再向document.body追加第二个 React 应用:0.2 的 UI 规范禁止插件自建应用根,而 shell 的整帧浮层天然带来宿主主题、明暗切换与层叠顺序;该浮层默认点击穿透,只有抽屉自身区域(显式恢复 pointer events)接收点击,面板打开时应用其余部分仍可正常操作。 - Host 通道注册采用官方路由挂载模式:随 DSH 发布的
dsh-host-open-in-app是 0.2 插件挂载浏览器路由的活样例。沿 0.1.x 的走法通过connection.rpc.handle()触达路由载体行不通:该外壳经由owner.webServer挂载路由,而 cordis 4 会拒绝在它最终绑定的 shadow 上下文上读取该服务(即使插件已声明),导致通道静默未挂载、面板报'transport failure ... HTTP 405'。v0.4.0 改为声明inject = ['connection', 'webServer'],自注册POST /side-monitor/<endpoint>前缀路由,先用connection.requestRejection建立信任围栏再放行任何请求,并按 0.2 客户端线路(client-request/server-response信封)通信。 - 清单修正:
dsh.client.inject与peerDependencies移除@deepseek-ai/dsh-client-runtime(该包止步于 0.1.1-rc.2)。inject现列出面板所用席位与服务所属的模块——@deepseek-ai/dsh-client-connection、@deepseek-ai/dsh-client-ui-layout(声明shell.overlay)、@deepseek-ai/dsh-client-ui-renderer(提供slots服务)与@deepseek-ai/dsh-client-ui-sidebar(声明sidebar.footer.action);peerDependencies将@deepseek-ai/dsh-client-connection与@deepseek-ai/dsh-client-ui-renderer固定到^0.2.0-rc.2版本线,@deepseek-ai/cordis固定为~4.0.4。 - 主题 token 更新:已删除的
--dsw-specific-surface-fill替换为--dsw-specific-menu(下拉菜单 / 端口菜单 / 模态框),Toast 改用--dsw-alias-toast-bg/--dsw-alias-toast-label;抽屉阴影改用--dsw-elevation-panel。 - 回归测试新增:清单字段、挂载路由上的线路契约(信任围栏、媒体类型、信封校验、rpcId 回显)、
shell.overlay注册,以及「不存在 document.body React 根」的守护断言。
面板目前仍自带 zh-CN / en-US 词典与语言切换(
dsh-side-monitor:language),尚未接入 0.2 的 Client locale 服务;后续版本计划迁移到ctx.locale,以跟随「设置 → 通用」并出现在语言目录中。
v0.3.1 — DSH 0.1.1-rc.2 兼容性适配
- 已在 DeepSeek Harness 0.1.1-rc.2 下验证通过:
sidebar.footer.action插槽(ctx.slots.inject+ctx.slots.register)、浏览器端ctx.connection.rpc.call与 Host 端connection.rpc.handle通道注册均与 0.1.1-rc.2 运行时一致(已实测:/side-monitor的 overview / processes / containers / meta 均返回实时数据)。 - 移除过时的
@deepseek-ai/dsh-client-ui-slots引用:该包在 DSH 0.1.1-rc.2 中已不再发布(其插槽运行时已并入@deepseek-ai/dsh-client-runtime)。已从dsh.client.inject与peerDependencies中删除,避免全新dsh plugin安装时解析到 rc.6 时代的遗留包。
v0.3.0 — 停止/异常语义拆分、性能、能力与漂移检查
- Docker 停止/异常语义拆分:正常停止(退出码 0)的容器现在只算「已停止」,不再计入「异常」;异常只统计真正的问题——不健康、健康检查中、重启中(崩溃循环)、dead、或非零退出。概览与 Docker 页都展示独立的 总数 / 运行 / 已停止 / 异常 徽标与筛选,崩溃容器显示退出码(已崩溃 (137))。
- 宿主网络探测性能优化:
--net=host探测从 5s 一次降到最多 15s 一次,且不再阻塞概览轮询——缓存未过期直接复用,过期时后台刷新;并加了基线保护,避免容器 netns 回退与宿主 netns 计数器互相差分产生错误速率。 - Client 版本自动同步:
lib/client.js的CLIENT_VERSION由tools/sync-generated.mjs(取代tools/convert-i18n.mjs)从package.json重新生成,同时重新生成内联 i18n 字典并做「禁止字符串拼接」lint;npm run check:gen可校验无漂移。 - i18n 禁止字符串拼接:所有可见句子都是带占位符的完整消息,客户端不再有
t("a") + t("b")拼接,生成器内置 lint 强制约束。 - 文案与 Header 打磨:接口表
接收/发送->RX/TX;DSH Container->DSH running in container(DSH on host->DSH running on host);Header 下方的状态行不再重复数据来源(此前与徽标的Host view重复),视角文案修正为正确空格的Host view(不再是Hostview)。 - meta 状态细分 + capabilities:
meta端点新增细粒度状态(运行模式、各数据来源、网络探测、一致性)与宿主能力(Host Mount、Docker Socket、宿主 netns 探测、进程聚合、容器实时统计),在「关于」弹窗新增 状态/能力 区块展示。 - 进程聚合详情:聚合卡片展开后展示命令、去重用户与总 RSS。
- 内存图透明度:内存 Sparkline 填充透明度调高(0.2,CPU 为 0.12)更清晰;Docker 卡片进一步压缩。
v0.2.3 — 完整中英文 & 宿主机网络
- 完整中英文双语 UI(zh-CN / en-US):默认简体中文(不跟随浏览器),右上角菜单「⋯ → 语言」即时切换,语言持久化在
dsh-side-monitor:language。Header / Tab / 卡片 / 进程 / Docker / Toast / 错误 / Tooltip / 诊断信息全部翻译(字典在lib/i18n.js,由tools/sync-generated.mjs生成进客户端包)。 - Header 改为展示数据来源徽标(
宿主数据/Host Data),副标题带运行环境说明(PC9527-fnOS · DSH 运行于容器);关于 展示 Browser / Host / RPC / 运行环境 / 系统 / 进程 / Docker 数据来源。 - 宿主模式真实网络:
/proc/net是 netns 作用域,挂载/host/proc仍看到容器接口 —— v0.2.3 通过短暂--net=host只读探测容器读取真实宿主 netns(带缓存、失败自动回退),并裁剪 veth/br/docker 噪音;磁盘去重改用st_dev并展示宿主数据卷(fnOS 的/vol1)。 - Docker 端口徽标视觉规则:Web = 蓝色
🌐 宿主 → 容器,普通 TCP = 中性灰📋,Loopback = 黄色🔒 + 仅宿主机,未发布 = 灰黄🔒 + 容器内;IPv4+IPv6 双栈合并为单个徽标并带IPv4 + IPv6标记。
截图
功能特性
概览(Overview)
- CPU / 内存两张强卡片:大百分比 + 副信息 + 面积填充 Sparkline(固定 0–100 纵轴)。
- 网络主接口吞吐 / 根分区磁盘两张轻量 KPI。
- 下方 section 呈现:系统负载、系统信息、磁盘分区(多挂载点)、网络接口(默认路由 + 虚拟接口标记、RX/TX 速率)、Docker 汇总(总数 / 运行 / 已停止 / 异常)。
进程(Processes)
- 来源标识(宿主机 / 当前容器)。
- 搜索 / 排序 / 分页全部下沉到 Host RPC(扫描全部进程后再过滤),数据量大也不卡浏览器。
- CPU / 内存 / PID / 名称排序 Chip;卡片显示 PID · PPID · 用户,点击展开 RSS / 运行时长 / 命令。
- 「列表 / 聚合」双视图:按 name+command 分组,展开查看 PID 列表、命令、去重用户与总 RSS。
Docker(Containers)
- 容器名 / 镜像 / 状态 / health(healthy/unhealthy/starting)/ CPU% / 内存 / 端口。正常停止(退出码 0)显示为「已停止」且不计入异常;崩溃容器显示「已崩溃 (137)」徽标。
- 端口可操作:已发布(有 hostPort)的 Web 端口点击在新标签页打开;非 Web 端口点击复制
host:port;右键弹出 HTTP/HTTPS 打开 / 复制地址菜单。 - 正确处理
127.0.0.1/0.0.0.0/ 指定hostIp(IPv6 自动加方括号);未发布端口显示 🔒 且禁止打开;stats 失败容器显示 ⚠ tooltip。
体验与可靠性
- Sidebar 入口:注册到
sidebar.panellist导航组(位于 插件 / 自动化任务 之后),展开时显示文字、折叠时仅图标,打开后高亮。 - 响应式:监控为主面板页(v0.5.0+),带左侧分区导航(概览 / 性能 / 进程 / Docker / 硬件与系统);<768px 时导航变为顶部横向条,布局采用 Container Query 按面板自身宽度自适应,移动端
100dvh+ 安全区适配。 - 采集来源标识:自动识别运行环境(Host / Container),顶部徽标 + 状态行(概览 / 进程 / Docker 分别标注来源)+「查看采集来源」弹窗(逐项展示真实来源路径 + 一致性自检)。
- 状态独立:三个模块各自 error / 更新时间,请求失败保留最后成功数据并显示 stale 横幅。
- 版本握手:RPC 响应携带
protocolVersion(v4)+pluginVersion;不匹配时显示「版本不一致」横幅与「关于」面板(Browser / Host / RPC 版本),避免旧 Host 导致的 undefined 字段。 - 手动刷新(旋转动画)、「复制诊断信息」一键生成诊断文本。
- 面板关闭或浏览器标签页隐藏时停止/暂停轮询;同一轮询 await 上一请求,禁止重入。
安装
# 本地目录安装
dsh plugin --profile web add /path/to/dsh-side-monitor
安装后刷新页面,左侧 Sidebar 导航组(插件 / 自动化任务 之后)出现「系统监控」入口。
宿主机采集(Host Mount Mode)
DSH 运行在容器内时,默认读取的是容器自身的 /proc(容器视角)。要监控真正的宿主机,请为 DSH 容器增加只读挂载,把宿主机的 proc / sys / 根文件系统暴露到固定路径:
services:
deepseek-harness:
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/host/root:ro
- /var/run/docker.sock:/var/run/docker.sock
Collector 会自动检测这些路径(存在则优先使用宿主视角,否则回退容器视角),也可通过插件 config 显式指定:
procRoot: /host/proc
sysRoot: /host/sys
fsRoot: /host/root
挂载后,概览 / 进程读取宿主机资源,顶部来源标识自动变为「宿主机视角」。注意:/proc、/sys、/ 必须只读挂载。
刷新频率
| 数据 | 频率 |
|---|---|
| CPU / 内存 / 网络 / 负载 / Uptime | 2s |
| 磁盘 | 10s(Host 端缓存) |
| 进程列表 | 3s(Host 端 Snapshot Cache) |
| Docker 列表 + stats | 5s(stats 3s 缓存) |
架构
Client UI (Sidebar 导航行 + 监控主面板页 + 5 个分区)
│ RPC: connection.rpc.call('/side-monitor', ...)
▼
Host Service (lib/collectors.js + lib/rpc.js)
├─ Environment (mode / systemSource / processSource / dockerSource / hostname)
├─ Overview Collector (procRoot/stat|meminfo|loadavg|uptime|cpuinfo|sys/kernel/osrelease + fsRoot/etc/os-release + net/dev|net/route + mounts/statfs)
├─ Process Collector (procRoot/<pid>/stat|status|cmdline,Host 端搜索/排序/分页,含 PPID)
├─ Network Collector (procRoot/net/dev 采样差分 + procRoot/net/route 默认路由 + fib_trie/if_inet6 接口 IP)
├─ Disk Collector (procRoot/mounts + statfs 多挂载点,mountinfo major:minor 同设备去重,10s 缓存)
└─ Docker Collector (/var/run/docker.sock 只读 Engine API,health + 结构化端口)
安全说明
- 浏览器端不直接访问宿主机文件系统或 Docker Socket,所有采集经 Host 端白名单 RPC。
- Host 端在
/side-monitor下仅挂载一条前缀路由、暴露三个只读端点:overview/processes/containers。每个请求都先经connection.requestRejection围栏——DSH Connection 的 Host/Origin 信任围栏(loopback 与配置的--trusted-host授权来源)及其浏览器会话鉴权——之后任何内容才可达。 - 不提供任意命令执行、任意 Docker API 代理或任何控制操作。
- Host Mount Mode 的
/host/proc、/host/sys、/host/root必须只读挂载。
开发
npm run check # 语法检查
npm test # node:test 单元测试(test/fixtures/proc 为真实 /proc 快照)
已知限制
- macOS 无 root 时:每盘读/写计数(
iostat无读写拆分)与温度传感器(powermetrics需提权)如实标记为未知。 - DSH 容器开启
pid: host可获得完整宿主 PID 视图,但开启后一致性自检会提示 PID 命名空间未隔离。 - 设置页与 DSH 原生 Side Card 集成留待后续版本。(历史趋势已于 v0.6.0 发布;面板目前仍自带 zh-CN / en-US 词典,未接入 Client locale 服务。)
更新日志
- v0.6.2 macOS 支持:原生 Darwin provider(sysctl / vm_stat / df / ps / netstat),APFS 磁盘、每核 CPU、交换分区、进程、Docker Desktop socket。
- v0.6.1 DSH 0.2.2-rc.1 兼容性适配:新增
engines.dsh、cordis 4.1.0 / DSH client 0.2.2-rc.1 版本线对齐、生成器路径修复;运行时接口重新核验(无需改动代码)。 - v0.6.0 左侧分区导航、10 分钟历史、更丰富的主机指标、RPC 协议 v4。
- v0.5.0 监控面板改为 keyed
main主面板 +sidebar.panellist导航入口。 - v0.4.0 DSH 0.2.0-rc.2 兼容性适配:抽屉迁入
shell.overlay插槽(不再挂载 document.body 应用根)、Hosthandle(channel, handler)参数对齐、清单 peer 依赖与dsh.client.inject指向 0.2 版本线、主题 token 更新。 - v0.3.x 停止/异常语义拆分、宿主机 netns 探测缓存、Client 版本自动同步、i18n 拼接检查、0.1.1-rc.2 兼容。
- v0.2.2 可靠性收口:网络以
/proc/net/dev为事实源(IP 解析失败仍保留接口与流量);CPU 区分物理核心 / 逻辑 CPU;Docker 端口细化(loopback 锁定、hostIp 去重、uptime 中文化);RPC 版本握手;进程聚合视图;移动端100dvh+ 安全区;fixture 单元测试与 CI。 - v0.2.1 宿主机指标准确性:负载 / 运行时长 / CPU 核心与型号 / 内核 / OS 改读宿主机真实来源;进程运行时长统一宿主机 uptime;网络 IP 改自
/proc/net/fib_trie与if_inet6;磁盘去重改用 mountinfomajor:minor;来源自检。 - v0.2.0 采集来源标识、CPU / 内存卡片重做、Docker 端口可操作、Host Mount 模式。
- v0.1.0 首个版本:响应式监控面板。
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 10406
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 10406
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 7675
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7201
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 5142
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1816
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。