Files
opsxshell/docs/ux-foundation-audit.md
T
Logan.LiandCursor 9ce71795b8 feat: add terminal broadcast, context menu, and shell close
Complete multi-pane broadcast, standard terminal right-click actions, batch host selection with progress, and native ssh_close_shell so closing a pane tears down the remote shell.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 19:53:39 +08:00

16 KiB
Raw Blame History

产品体验与基础能力全面评估

更新:2026-07-31
目标:OpsXShell 做成“麻雀虽小、五脏俱全”的轻量 SSH/SFTP 工具。常用操作直接、结果明确、失败可恢复,不用花哨概念增加学习成本。

评估结论

当前开发分支已具备 SSH、SFTP、串口、分屏、批量命令、SOCKS5、跳板和 AI Agent 的完整产品骨架,已经不是功能演示,但距离可长期替代 Tabby、Netcatty、Xshell 或 WindTerm 仍有一段可靠性和跨平台发布差距。

综合评分为 7.1/10。评分针对当前代码和自动化基线,不等于正式安装包质量;Windows 实机、macOS 安装版、断网/休眠和真实大文件传输未统一验收前,不能按成熟商业终端评价。

维度 分数 判断
产品聚焦 8.5 SSH/SFTP/代理/串口边界清楚,没有堡垒机、审计和 CMDB 噪音
首次连接与会话管理 7.8 快速连接和保存会话路径短,支持密码、私钥、代理和跳板
终端基础体验 7.2 复制粘贴、右键、分屏、广播和 Shell 生命周期已补齐;搜索和高压稳定性仍不足
SFTP 6.8 双栏、双向拖拽、上传下载、权限和远程编辑已具备;冲突、重试和任务恢复不足
隧道与 SOCKS5 7.5 规则与运行实例分离、真实启停和状态统计方向正确;重连和复用还需压测
批量运维 7.0 多主机选择、并发、逐机结果清楚;取消和独立超时未完成
AI Agent 6.8 单入口、当前 SSH 执行、风险模式和 ReAct 基线可用;执行内核仍在 React,真正取消不足
性能与可靠性 6.2 Tauri/Rust 基础占优,但断网、休眠、大输出和频繁切换仍缺持续压测
跨平台发布 5.8 macOS/Windows 构建脚本已具备;Windows 实机、签名、公证、更新和崩溃诊断未闭环
文档与自动化 7.8 有契约、组件、Rust 和真实探针分层;仍需把实机矩阵纳入每次候选发布

产品主旨

OpsXShell 的默认界面只围绕七件事:连接主机、管理会话、操作终端、传输文件、开隧道、批量执行、必要时让 AI 在当前主机协助处理。

必须坚持:

  1. 高频动作一步可达,高级选项默认收起。
  2. 当前操作目标始终可见,尤其是广播、批量命令、SFTP 和 AI 执行。
  3. 成功、进行中、失败、断开是四种不同状态,不能只靠颜色或开发日志表达。
  4. 空闲操作不滥用确认框;删除、覆盖、关闭运行任务和高风险 AI 命令才确认。
  5. 不保存终端命令、广播输入、批量命令、AI 对话或工具输出。
  6. 不加入审计、录像、审批、CMDB、独立 podexec 或 Kubernetes 凭据。

大众操作习惯基线

鼠标与窗口

  • 单击负责选择和聚焦,双击负责打开会话/目录或切换窗口最大化,不能让一次双击触发两次相反操作。
  • 右键必须显示与当前位置相关的菜单;普通区域不得出现 WebView 的 Reload/Inspect Element。
  • macOS 使用原生红黄绿窗口控制,Windows 使用系统最小化/最大化/关闭;标题栏空白区可拖动。
  • 拖拽必须显示源、目标和允许/禁止状态;文件落到目录行时传入该目录,落到空白区时传入当前目录。

键盘

动作 macOS Windows/Linux
复制/粘贴终端 Cmd+C/V Ctrl+Shift+C/V
普通输入框复制/粘贴 Cmd+C/V Ctrl+C/V
新建会话 Cmd+N Ctrl+N
快速连接 Cmd+K Ctrl+K
关闭标签 Cmd+W Ctrl+W
分屏 Cmd+D Ctrl+D,但必须避免与远端 EOF 语义冲突并允许改键
终端搜索 Cmd+F Ctrl+F
开发工具(开发构建) Cmd+Option+I F12
  • 快捷键不能抢占输入框的复制、粘贴、全选、撤销和输入法组合状态。
  • 菜单和提示必须显示当前平台实际快捷键,不能同时展示两套组合键让用户猜。
  • Escape 关闭当前最上层弹框/菜单;Enter 触发主动作,文本域需要明确换行组合键。

表单

  • SSH 目标允许直接粘贴 user@host:port,端口默认 22。
  • 保存会话只展示“密码/密钥”两个常用认证入口;代理、跳板、标签和启动命令放在高级区。
  • 端口、路径和 Endpoint 在失焦或提交时给出就地错误,不能无提示恢复默认值。
  • 取消或重新打开快速连接、批量命令、AI 面板时,敏感输入必须清空。
  • 按钮文案说明结果,如“连接”“创建并保存”“执行到 3 台”,避免只显示含义不明的图标。

状态与错误

  • 错误必须包含“什么失败、作用于谁、如何恢复”,例如“Host A 命令超时,可重试”,而不是 unknown。
  • 剪贴板失败、广播目标变为 0、Shell 已退出、隧道端口占用和 SFTP 冲突必须在界面提示。
  • 重试不能重复创建连接、Shell、SFTP 通道或 Listener;状态必须以 Rust 真实资源为准。
  • 加载超过 300ms 显示进行中,超过设置超时显示具体阶段;不能无限转圈。

核心用户旅程

旅程 目标操作长度 当前状态 验收标准
临时连接 快捷键 → 粘贴 → 回车 已实现 user@host:port 可粘贴;取消重开后密码为空
保存会话 新建 → 目标/凭据 → 保存 已实现 默认 22;常用项不超过一屏;错误就地显示
重复连接 双击侧栏会话 已实现 单击只选择,双击只打开一个终端标签
终端操作 右键或快捷键 已实现 复制、粘贴、全选、清屏、分屏、最大化、关闭均明确
多终端广播 开广播 → 输入 已实现,待增强 覆盖所有打开 SSH Shell,显示目标数,本地 Shell 永不参与
批量命令 选主机 → 命令 → 执行 已实现,待增强 最多并发 5,逐机结果和耗时;关闭后命令销毁
SFTP 会话右键 → SFTP 文件 已实现,待实机 本地↔远程拖拽、按钮和右键都走明确 upload/download 方向
SOCKS5 会话 → 转发 → 启动 已实现,待压测 默认 127.0.0.1:1080;停止后真实端口不可连接
串口 快速启动 → 串口 → 参数 → 连接 已实现,待实机 可枚举设备,默认常用参数,断开和重连状态明确
AI 处理任务 当前 SSH → AI → 描述 → 执行 实验可用 目标固定、安全模式明确、critical 硬拒、关闭后上下文销毁

当前已完成的基础修正

  • 全局广播覆盖所有打开且已连接的 SSH 标签与分屏,排除本地 Shell;目标不足两个时自动关闭。
  • 终端右键菜单包含复制、粘贴、全选、清屏、向右/向下分屏、最大化/恢复和关闭。
  • 关闭分屏会调用 Rust ssh_close_shell,远端关闭失败会记录明确错误,不只移除前端格子。
  • 远端 Shell 的 EOF、TMOUT 和 Ctrl+D 不再等同整个 SSH 连接断开,可只重开当前 Shell。
  • 批量命令支持搜索、全选当前结果、调整目标、最大并发 5、逐机状态/输出/耗时和总进度。
  • 快速连接和批量命令重新打开会清空敏感输入,结果不落盘。
  • Agent 支持严格、均衡、宽松三级安全模式;默认均衡只确认 high,critical 永久硬拒绝。
  • 普通 WebView 区域禁止 Reload/Inspect Element,文本输入保留系统编辑菜单。
  • 应用版本由 package.json 构建时注入,不再在状态栏硬编码旧版本。

P0:下一候选版本必须完成

ID 优化项 当前缺口 完成标准
P0-01 连接生命周期压测 断网、睡眠唤醒、快速切标签和连接复用证据不足 自动覆盖连接/重连/挂起/恢复;100 次切换无重复连接和监听器泄漏
P0-02 终端搜索接通 SearchAddon 已加载,但分屏工作区没有可用搜索 UI Cmd/Ctrl+F 搜索当前焦点分屏,支持上一项/下一项/关闭
P0-03 终端高输出稳定性 仍出现过 CPU 高占用和操作卡顿 持续输出 10 分钟 UI 可操作;后台标签限流;CPU/内存有基准阈值
P0-04 用户可见 I/O 错误 部分剪贴板、关闭 Shell 和事件错误只写日志 toast/覆盖层说明失败对象和恢复动作;不得产生未处理 Promise
P0-05 SFTP 基础传输实机门禁 自动测试有方向契约和探针,但真实安装版仍需重复验证 上传、下载、覆盖、目录落点、拖拽、取消后临时文件处理全部通过
P0-06 SFTP 冲突规则 同名文件处理不够显式 每次任务可选择覆盖/跳过/重命名;目录递归不静默覆盖
P0-07 批量任务超时与取消 当前只能等待 worker 完成 区分连接/命令超时;停止后不再启动新主机,当前命令标为等待完成
P0-08 隧道重连与清理 Listener 真实启停已做,网络恢复策略不足 主连接断开立即清理;重连后按用户选择恢复;端口冲突显示占用地址
P0-09 最小窗口适配 960×720 基础可用,AI 打开后终端区域偏窄 960×640 无遮挡;打开 AI 时可自动收起侧栏或提供一键扩展
P0-10 双平台安装验收 macOS 结果不能代表 Windows macOS arm64 与 Windows x86_64 分别完成安装、升级、卸载和核心冒烟

P1:提升日常效率

ID 优化项 建议
P1-01 广播目标预览 点击目标数查看主机/分屏,允许本次临时排除;默认仍是全部打开 SSH
P1-02 批量失败重试 一键仅重试失败主机,可从分组/标签建立目标集合
P1-03 终端标题与路径 安全解析 OSC 标题/当前目录,允许锁定会话名,防止远端伪装安全提示
P1-04 关闭保护 仅当前台有运行任务时提示关闭会结束远端 Shell;空闲时一步关闭
P1-05 SFTP 任务中心 统一暂停/继续/取消/重试,显示速度、剩余时间和失败原因;重启后可恢复未完成任务
P1-06 SFTP 易用性 多选拖拽、复制路径、在终端打开目录、远程编辑冲突提示、校验和验证
P1-07 SSH Config 导入 展示将导入字段、冲突处理和不可支持项;支持 ProxyJump 链预览
P1-08 隧道便捷入口 状态栏一键查看/复制 SOCKS5 地址;复制规则永不复制运行态
P1-09 Agent Runtime 从 React 抽离状态机,增加单步超时、真正取消、结构化 tool calling 和 eval
P1-10 无障碍 所有图标按钮有名称;焦点圈清楚;弹框焦点锁定/返回;状态不只靠颜色

P2:专业兼容与发布闭环

  • Agent Forwarding、OpenSSH 证书、FIDO2 和更完整的算法策略。
  • 保存常用分屏布局,但不保存 Shell ID、命令或终端输出。
  • 隧道使用明确的共享连接/Multiplexer 策略,避免每个请求重新握手。
  • macOS Developer ID 签名与公证、Windows Authenticode、自动更新清单和回滚。
  • 用户主动导出的脱敏诊断包:版本、平台、错误码、资源统计,不包含命令、密码和终端输出。
  • 可选主题和键位导入;不为了生态而引入重量级插件框架。

明确不做

  • 不恢复命令历史,不持久化广播、批量命令或 Agent 输入输出。
  • 不增加堡垒机审计、审批流、录像、CMDB、告警大盘或独立 podexec。
  • 不使用“有选区右键复制、无选区右键直接粘贴”这类隐藏行为。
  • 不让本地 Shell 加入远程广播,不允许 ssh:// 携带密码或静默连接。
  • 不为“专业感”堆无用途状态卡、动画、统计图和多级配置。

统一回归场景

  1. 快速连接粘贴 root@opsbase.cn:55555,取消后重开,目标和密码为空;通过 ssh:// 唤起时只预填安全目标。
  2. 新建会话默认端口 22,密码/密钥切换不会把另一种凭据落盘;编辑高级配置不影响基础字段。
  3. 打开两个 SSH 标签,其中一个分两屏;广播输入 date,三个远端各收到一次,本地 Shell 不收到。
  4. 关闭一个分屏,Rust Shell 释放,广播目标立即减少,兄弟分屏、SFTP 和隧道保持可用。
  5. 终端右键复制、粘贴、全选、清屏、向右/向下分屏、最大化/恢复和关闭均可用,无 Reload/Inspect Element。
  6. Cmd/Ctrl+F 只搜索当前焦点分屏;切换分屏后结果随焦点切换。
  7. 批量选择两台执行 date,逐机显示耗时和结果;停止后不启动剩余主机;关闭重开命令为空。
  8. SFTP 按钮上传、右键上传、本地拖到远程、远程拖到本地结果一致;文件逐字节校验成功。
  9. 同名文件明确选择覆盖/跳过/重命名;失败不留下被误认为完整文件的目标。
  10. 启动 127.0.0.1:1080 SOCKS5,代理请求成功且统计变化;停止后端口不可连接,重启应用显示未运行。
  11. 远端 TMOUT 只关闭当前 Shell,一键重开可用,SSH connection 和其他资源不被误断。
  12. Agent 均衡模式自动执行 df -h,systemctl restart nginx 先确认;严格模式修改文件先确认;宽松仍拒绝 rm -rf /。
  13. 断网后状态由“已连接”进入“重连中/失败”,恢复后不重复创建标签、连接、Shell 或 Listener。
  14. macOS 窗口可拖动,双击标题栏只切换一次最大化;Windows 系统按钮、快捷键和安装卸载符合平台习惯。
  15. 960×640、125%/150% Windows 缩放以及长主机名、中文分组下,无按钮遮挡、水平溢出或不可达操作。

发版判定

自动化全绿只代表代码门禁通过。候选发布还必须分别在 macOS arm64 和 Windows x86_64 完成上述核心旅程,并记录版本、安装包哈希、测试平台、失败项和回归结果。任何“只能偶现”“重试一般能好”的连接、终端输入、SFTP 或隧道问题都按未通过处理。