# GPU 插件验证记录 验证日期:2026-10-03。宿主:Windows x86_64;目标远端:Linux/NVIDIA。 本记录验证代码、包和真实原生进程;没有连接用户的 SSH 会话,也没有真实 NVIDIA 主机结果。 ## 交付 - 源码:`plugins/examples/gpu-monitor/`,插件 ID `nyaterm.gpu`,版本 `1.0.1`。 - 包:`temp/plugins/gpu-monitor.nyap`,Windows x86_64,484,743 字节,8 个 ZIP 条目。 - SHA-256:`e92a8888b3658e5fb72a0a576b09657db37f5dfac66cd4b133f637ff7d522bd3`。 - 用法与构建:[GPU 插件 README](../plugins/examples/gpu-monitor/README.md)。 - API:[插件开发说明](plugin-development.md)。 ```sh pnpm plugin:example:gpu pnpm plugin:pack plugins/examples/gpu-monitor temp/plugins/gpu-monitor.nyap node plugins/examples/gpu-monitor/verify-ui.mjs ``` 构建输出包含相对路径 CSS、SDK、单个经典 IIFE 脚本和 release 后台。 打包器调用实际安装器校验路径、引用、配额及校验和后发布 `.nyap`;另行核对全部 checksums。 当前包只声明 Windows x86_64;构建脚本支持在 Linux/macOS、x86_64/aarch64 宿主重建相应产物。 不能据此宣称跨平台桌面验证完成。 ## 首版自动验证 | 检查 | 结果与范围 | | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Runtime `cargo test --features sdk-fixture` | 28 项通过;另有 1 项最终包测试需显式启用(本次已执行通过) | | 最终包 Sidecar 测试 | 1 项通过;实际安装、授权、启动 release 可执行文件,两次 reverse Probe RPC 往返及 GPU 解析 | | 共享 GPU crate | 5 项解析测试通过;涵盖多设备、缺失可选值、进程索引和带逗号名称 | | Rust SDK | 2 项测试通过;JSONL/framed 的进程互操作另由 Runtime 覆盖 | | Runtime/SDK/GPU Clippy | `--all-targets -- -D warnings` 通过;Runtime 启用 `sdk-fixture` | | Tauri | `cargo check --all-targets`、`cargo clippy --all-targets` 通过;宿主 Clippy 有项目级警告,未宣称零警告 | | 前端 TypeScript | 宿主 `tsc --noEmit` 与插件独立 TypeScript 检查通过 | | 宿主/插件构建 | `pnpm build` 和 `pnpm plugin:example:gpu` 通过;宿主仍有既有大 chunk/Browserslist 提示 | | 前端 lint | `pnpm lint` 通过;`CommandSuggestions.tsx` 有既有依赖数组警告 | | 相关 Vitest | 初始 7 文件 16 项通过;补充 Bridge 和续期失败检查后,相关 5 文件 16 项通过 | | 全量 Vitest 首轮 | 155 文件中 154 通过,971 项通过;AI 设置有 1 项 5 秒超时。该文件独立重跑 9 项全部通过 | | 全量 Vitest 最终重跑 | `vitest run --maxWorkers=4`:155 文件、974 项全部通过 | | 宿主 Rust 插件测试 | 编译成功;测试可执行文件启动失败,Windows 返回 `0xc0000139 / STATUS_ENTRYPOINT_NOT_FOUND`,未执行断言 | | 构建产物 UI 冒烟 | jsdom 执行实际 SDK 和 IIFE:设备/驱动/CUDA/温度/功率/风扇/显存/进程、排序/搜索、刷新、四语言、主题、保留数据的错误和暂停状态通过 | Runtime 新增测试覆盖旧包兼容与新贡献校验、固定脚本全文审核、非法路径/超时/输出配额、更新和回滚移除授权、 GPU Monitor 冲突、共享需求、无重叠/补发、最后需求释放、取消和迟到结果、停止/手动恢复、不可用停止及三次失败清空。 前端测试覆盖初始快照竞态、revision 去重、订阅/iframe 归属、配额、取消、作用域续期、会话/激活切换、锁屏释放需求、 插件错误不切源、停用恢复内置、当前会话资产回填及 NPU 入口保持原行为。 最终包测试执行真实原生程序,使用安装包内脚本和 `execute_declared`。 执行器模拟远端输出,未建立网络 SSH 连接。私有 exec 通道代码经过 Tauri check/Clippy; `SessionCommand::Write` 不在 Probe 执行路径中。尚未实际验证 russh 网络取消或终端无输入干扰。 jsdom 只验证构建产物逻辑和 DOM,不等同于 WebView2 的样式、opaque-origin 自定义协议或原生桌面验收。 ## 1.0.1 换行修复验证 用户桌面运行 `1.0.0` 报告 `GPU probe did not exit successfully`。 检查原始 `.nyap` 发现 `gpu.sh` 的 34 个换行全部为 CRLF。 在 WSL Ubuntu 的真实 `/bin/sh -s` 中,原字节第二行报 `export: LC_ALL\r: bad variable name`,退出码 2; 同样脚本仅转换为 LF 后成功,缺少 NVIDIA 工具时输出 `GPU_AVAILABLE\t0` 并退出 0。 首版 Sidecar 测试模拟远端输出,未执行脚本,因而没有发现这一打包缺陷。 `1.0.1` 将脚本源码和构建输出固定为 LF,构建脚本显式规范换行; 后台错误区分非零退出码与没有退出状态,不记录原始 stdout/stderr。 提高版本号使已安装的不可变 `1.0.0` 能通过正常更新流程安装修复。 本次通过的检查: - `pnpm plugin:example:gpu`:独立 TypeScript、经典脚本 UI、release 后台构建。 - `pnpm plugin:pack ...`:实际安装器的包校验;新版包所有 checksums 和 LF 字节另行核对。 - `python plugins/examples/gpu-monitor/verify-probe.py --wsl Ubuntu`:执行最终包内的真实脚本, 验证 CRLF 失败、LF 无工具分支和隔离 `nvidia-smi` 样本的设备/CUDA/进程输出。 - GPU Sidecar 测试 3 项通过:成功采集复用、退出码/缺失状态诊断、源码换行回归。 - 最终 `1.0.1` 安装包 Sidecar 测试 1 项通过:实际安装/授权并启动 release 程序,两次固定 Probe 往返。 - Runtime `clippy --all-targets --features sdk-fixture -- -D warnings` 通过。 - 构建产物 GPU UI 冒烟通过。 此修复只需更新插件包并重新授权,不需要修改或重新编译宿主。 Linux Shell 验证使用本机 WSL 和固定 NVIDIA 样本,仍未连接真实 NVIDIA SSH 服务器。 ## 用户 SSH 会话上的桌面验收(未执行) 使用包含本次接口实现的宿主,由用户自行建立 Linux/NVIDIA SSH 会话: 1. 安装并审核固定脚本,授权 `native`/`remote.probe` 后启用;确认普通终端输入不被采集打断。 2. 同时打开原 GPU 工作区和独立插件面板,设置 3 秒间隔,确认持续更新且共享采集。 3. 顶部状态选择 GPU,关闭两处面板,确认顶部状态仍更新;关闭全部 GPU 需求后确认停止。 4. 测试手动刷新、搜索/排序、四种语言和明暗主题;核对实时指标与服务器 `nvidia-smi`。 5. 在任务空闲时点击“停止后台”,确认定时器不重启后台;刷新后恢复。 6. 切换会话、断开、锁屏、关闭窗口和撤销授权,确认停止请求、旧数据不回填新会话。 7. 超过 25 分钟确认主窗口续期不重载工作区数据;iframe 重建后取得当前快照。 8. 模拟采集错误,确认保留旧数据并标记错误,三次后清空;不静默回退。 9. 停用后确认恢复内置采集;更新/回滚要求重新审核;第二个 GPU Monitor 冲突被拒绝。 真实 NVIDIA 数据、持续网络采集、网络取消、原生安装 UI 和上述桌面行为均未验收。 本次没有修改用户凭据、建立用户会话或安装到用户的真实插件目录。