🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

性能监控侧栏 xmwengxing/dsh-client-ui-sidebar-perfmon

DeepSeek 客户端v0.3.2
xmwengxing35 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在右侧栏实时查看 CPU、内存与进程占用

30/100
综合分
0
GitHub 星标
444
npm 周下载
—/5
用户评分

数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/xmwengxing/dsh-client-ui-sidebar-perfmon.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.5.0,当前版本为 v0.3.2
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@xmwengxing/dsh-client-ui-sidebar-perfmon @ 0.3.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/8 09:41:18

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 8 条)
  • 执行外部命令来自配置/变量
    lib/index.js:282
    execFile(
  • 读取本地文件
    lib/index.js:317
    const text = await readFile(path, "utf8");
  • 读取本地文件
    lib/index.js:339
    const readText = options.readText ?? ((path) => readFile(path, "utf8"));
  • 读取本地文件
    lib/index.js:398
    cards = (await readdir(drmRoot, { withFileTypes: true })).filter((entry) => /^card\d+$/.test(entry.name)).map((entry) => join2(drmRoot, entry.name, "d
  • 读取本地文件
    lib/index.js:1045
    return readFileSync(join4(dir, name2), "utf8");
  • 读取本地文件
    lib/index.js:1500
    stat = await readFile2(`/proc/${pid}/stat`, "utf8");
  • 读取本地文件
    lib/index.js:1507
    const entries = await readdir2("/proc", { withFileTypes: true });
  • 发起网络请求
    client/client.js:1193
    const response = await fetch(path, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 实时查看CPU占用
  • 实时查看内存与交换分区
  • 进程列表可排序

DSH 右侧栏的实时主机性能监控:CPU、内存、swap 仪表盘,外加可排序的进程表。

README

由 DeepSeek 最新模型翻译生成
@xmwengxing/dsh-client-ui-sidebar-perfmon 为 DeepSeek Harness 右侧栏提供实时主机性能监控: CPU / 内存 / 交换内存仪表盘,以及可按 CPU、内存、进程名排序的进程列表。 ┌─ 资源占用 ────────────────────── G2 · x64 · 已运行 5d 3h ─┐ │ ◜◝ ◜◝ ◜◝ │ │ 12.5% 39.1% 4.9% │ │ CPU 内存 交换内存 │ │ 4 核 · 负载 1.52 4.5 GB / 11.4 GB 0.4 GB / 8.0 GB │ ├─ 进程列表 ───────────────────── 共 349 个进程 · 显示 60 行 ┤ │ CPU ↓ 内存 进程名 │ │ 筛选进程名或 PID ────────────────────────────────────── │ │ 99.9% 849 MB · 7% gnome-shell │ │ ▬▬▬▬ ▬▬ PID 147112 · 26 线程 · 运行 │ │ 35.0% 100 MB · 1% msedge │ │ ▬▬ ▬ PID 740756 · 14 线程 · 睡眠 │ └─────────────── 更新于 15:50:20 · 每 2 秒自动刷新 · 立即刷新 ┘ 功能
展开完整文档(README 剩余 1 节)
@xmwengxing/dsh-client-ui-sidebar-perfmon

为 DeepSeek Harness 右侧栏提供实时主机性能监控: CPU / 内存 / 交换内存仪表盘,以及可按 CPU、内存、进程名排序的进程列表。

┌─ 资源占用 ────────────────────── G2 · x64 · 已运行 5d 3h ─┐ │ ◜◝ ◜◝ ◜◝ │ │ 12.5% 39.1% 4.9% │ │ CPU 内存 交换内存 │ │ 4 核 · 负载 1.52 4.5 GB / 11.4 GB 0.4 GB / 8.0 GB │ ├─ 进程列表 ───────────────────── 共 349 个进程 · 显示 60 行 ┤ │ CPU ↓ 内存 进程名 │ │ 筛选进程名或 PID ────────────────────────────────────── │ │ 99.9% 849 MB · 7% gnome-shell │ │ ▬▬▬▬ ▬▬ PID 147112 · 26 线程 · 运行 │ │ 35.0% 100 MB · 1% msedge │ │ ▬▬ ▬ PID 740756 · 14 线程 · 睡眠 │ └─────────────── 更新于 15:50:20 · 每 2 秒自动刷新 · 立即刷新 ┘

功能

插件向右侧栏贡献一个页面类型,并向会话顶栏贡献一个按钮:

- 性能监控页面 —— 同一时钟驱动的两个窗口:
- 资源占用:CPU、内存、交换内存三个环形仪表,各自显示百分比、一行辅助信息(核心数与负载 / 已用与总量 / 本机未启用交换内存),标题栏显示主机名。
- 进程列表:每行一个进程,显示 CPU 占用、常驻内存及其占物理内存的比例,支持按进程名或 PID 筛选。三个标签就是列表的三列表头——CPU、内存、进程名从左到右,各自正对它所排序的那一列。CPU 与 内存 按该资源从高到低排列整机进程;进程名 切换为按名称排序。两个数值列宽度固定、永不压缩,名称列占用剩余宽度并截断,因此侧边栏变窄时先牺牲进程名而不是数值,列表也永远不会出现横向滚动条。
列与行之间都有细线分隔;CPU 与 内存 右侧的分隔线同时是拖拽把手——拖动即可调整该列宽度,双击复位,也可聚焦后用方向键(Shift 加速、Home 复位)。宽度按浏览器记忆。
- 性能监控信息按钮 —— 位于会话顶栏的工具栏末位,紧邻右侧栏自身的展开按钮,点击即打开(或聚焦)该页面。

两个窗口都按宿主上报的间隔刷新(默认 2 秒)。浏览器标签页隐藏时暂停轮询,重新可见时立即拉取一次新数据。

环境要求

- Linux / macOS / Windows。每个平台各有专用读取器;各平台能提供哪些指标见平台支持。
- DeepSeek Harness 0.2.0-rc.1 或兼容版本。插件注册到右侧栏的 tab 类型注册表与会话顶栏的工具栏席位,因此需要启动 @deepseek-ai/dsh-web-app 的 profile (web profile 即是)。

无运行时依赖:宿主半边只用 node:os 与各平台自带工具,浏览器半边只用 GUI 已提供的 React。

安装

从 npm 安装
dsh plugin --profile web add @xmwengxing/dsh-client-ui-sidebar-perfmon

从本地检出安装
dsh plugin --profile web add /path/to/dsh-client-ui-sidebar-perfmon

从 git 安装(需要先允许 pnpm 执行构建脚本)
dsh plugin --profile web add github:xmwengxing/dsh-client-ui-sidebar-perfmon

然后重启 GUI。用 pm2 管理时:

pm2 restart deepseek-harness-webui

重启前可以先确认插件层已合成:

dsh --profile web --dump-config | grep -A2 perfmon

卸载:dsh plugin --profile web remove @xmwengxing/dsh-client-ui-sidebar-perfmon。

入口在哪里

打开右侧栏,引导页会列出 性能监控 卡片,点击即以 tab 形式打开该页面。
此后会话顶栏的 性能监控信息 按钮可打开或聚焦同一 tab;该 tab 与其它页面一样支持分栏、拖动与浮出。

配置

默认值刻意保守:每两秒遍历一次 /proc,多个面板共享同一次读取结果。
需要调整时在 profile patch 中覆盖:

~/.dsh/profiles/web/cordis.patch.yml
- id: perfmon
name: '@xmwengxing/dsh-client-ui-sidebar-perfmon'
config:
refreshIntervalMs: 1000 # 500–60000,默认 Linux 2000 / macOS 3000 / Windows 4000 processLimit: 100 # 5–500,单次返回的进程行数 cacheMillis: 800 # 0–10000,该窗口内的轮询共享同一次读取 sampleMillis: 150 # 0–2000,首次读数的预热采样时长

平台支持

每个平台族一个读取器,各自读该平台自己的数据源。

| | Linux | macOS | Windows |
| CPU 占用 / 单核 | /proc/stat | os.cpus() | os.cpus() |
| 负载 | 有 | 有 | 无——Windows 没有这个概念,该段直接省略 |
| 内存 总量/已用/可用 | /proc/meminfo(MemAvailable) | vm_stat(free + 可回收页) | Win32_OperatingSystem + AvailableBytes |
| 缓存 / 缓冲 | Cached / Buffers | 文件页作为缓存;无缓冲项 | CacheBytes;无缓冲项 |
| 交换内存 | /proc/meminfo | sysctl vm.swapusage | 页面文件(SizeStoredInPagingFiles) |
| 进程列表 | /proc//stat,进程内读取 | ps -Ao pid=,state=,time=,rss=,comm= | 一次 PowerShell 调用 |
| 进程状态 | 有 | 有 | 无——显示为 — |
| 线程数 | 有 | 无——BSD ps 没有可移植的线程数字段 | 有 |

平台无法提供的字段一律上报 null 并在面板显示 —,同时在面板中列出原因。
任何字段都不会用 0 顶替——因为 0 看起来像一次真实测量。

开销:Linux 全部在进程内读 /proc,不启动任何子进程;macOS 与 Windows 每次采样启动一个辅助进程,因此默认刷新间隔更保守——分别是 3 秒与 4 秒(Linux 为 2 秒),可用 refreshIntervalMs 覆盖。

没有专用读取器的平台(FreeBSD、Solaris 等)回退到只用 node:os 的读取器:真实的 CPU 读数与内存总量,交换内存与进程列表标记为不可用,而不是猜测。

数字是怎么来的

所有百分比都是同一累计计数器的两次采样之差,因此插件从不假设时钟节拍:

| 指标 | 规则 |
| CPU 占用 | 两次采样之间,忙时间占流逝时间的比例。 |
| 单核占用 | 同一规则,逐核心计算。 |
| 内存占用 | 已用 / 总量,其中“已用”指“不可用”——页缓存可回收,因此计入可用而非已用。 |
| 交换内存占用 | 已用 / 总量。 |
| 进程 CPU | 同一区间内该进程 CPU 时间的增量,按 100% = 一个核心 归一化——与 top 同一约定,因此 4 核机器上的 8 线程进程可能超过 100%。 |
| 进程内存 | 常驻集大小占总内存的比例。 |

读取器唯一必须遵守的规则是单位自洽:进程 CPU 时间必须与该读取器自己的 CPU 总量同单位。Linux 两边都是 jiffies,macOS 与 Windows 两边都是毫秒——于是忙Δ / 总Δ 与 进程Δ / 总Δ × 核心数 把单位约掉,任何地方都不需要假设 USER_HZ。

每次会话的第一次读数会用一次短采样预热,因此面板首帧显示的就是真实百分比而非 0。

有两种状态会如实呈现,而不是显示为 0:

- 本窗口内新出现的进程没有可作差的上一帧,其 CPU 单元格在下一次轮询前显示 —。
- 未启用交换内存的主机显示“未启用”,而不是一个 0% 的空环。

接入方式

一个 bundle,两半:

- 宿主半边(lib/index.js)在 Connection 共享且已鉴权的 /api 通道上注册一条精确路由 —— POST /api/perfmon.snapshot —— 这正是官方 deliverables 与 session-log-export 包使用的同一接缝。注册在那里意味着该路由继承 GUI 的 Host/Origin 防护与浏览器会话鉴权,因此浏览器用同源 fetch() 即可访问,插件自身不处理任何凭据。宿主侧带一个短缓存,多个面板共享同一次 /proc 遍历。
- 浏览器半边(client/client.js)注册三个界面,全部是公开扩展席位:
1. ctx.sidebarRightTabs.register() —— perfmon 页面类型及其引导页入口。
2. ctx.slots.register(),席位 sidebar.right.pane.tab,以该类型自身的 id 为键—— 面板正文。
3. ctx.slots.register(),席位 conversation.session.header.utilities —— 顶栏按钮,排序值最大,因此落在右侧栏展开按钮旁。

服务解析刻意延后:浏览器半边不声明 inject 列表,而是通过 ctx.inject([...]) 逐个获取服务,因此缺少右侧栏或 Connection 的 profile 只会跳过对应贡献,而不会让整个插件一直 pending。

样式只使用共享的 --dsw-* 设计令牌(字面色仅作为 var() 回退出现),面板自带中英文案并按文档语言选择,因此不依赖 locale 服务。

隐私

插件读取本机内核计数器,只返回给发起请求的浏览器。它自身不发起任何网络请求,不外发数据,不写文件。路由受与 GUI 其余部分相同的鉴权保护。

已知限制

- 没有进程属主、命令行与进程树。每行包含进程名、PID、状态、线程数、CPU 与 RSS。
- macOS 与 Windows 部分仅有解析器测试。这两个平台的读取器由「抓取的工具输出样本 + 注入的失败路径」覆盖,但作者未在真实 macOS / Windows 硬件上运行过。Windows 的进程状态、 macOS 的线程数是平台本身不提供,而非实现遗漏。
- 没有历史数据。面板只显示当前读数,没有迷你趋势图或留存采样。
- 轮询而非推流。刷新是按间隔请求,而非服务端推送。
- 顶栏按钮只负责打开,不负责切换。关闭面板由右侧栏自身的控件完成。

开发

npm install
npm run build # 生成 lib/index.js 与 client/client.js
npm run watch # 改动即重建
npm test # 先构建两半,再跑全部用例

npm test 覆盖:以手工构造的采样验证差值算法;通过 react-test-renderer 验证面板
行为(仪表、标签、排序、筛选、刷新、错误);已发布 bundle 的注册内容;以及一组契约时效性用例——它们重新读取已安装的 dsh 包,确认本插件依赖的席位名、服务名与路由规则仍然成立。

另有一个通过 DevTools 协议驱动真实 Chromium 的浏览器验证脚本:

另起一个实例,避免影响正在运行的 GUI
dsh --profile web --port 3099 --no-open

在 Chromium 监听 9222 的前提下
node scripts/verify-ui.mjs "http://127.0.0.1:3099/?token=" /tmp/panel.png

许可证

MIT
预览分享卡片长什么样 ↓xmwengxing/dsh-client-ui-sidebar-perfmon
分享 · DeepSeek Harness Hub
xmwengxing/dsh-client-ui-sidebar-perfmon

在右侧栏实时查看 CPU、内存与进程占用

这是你的仓库?认领条目

回到顶部