Files
opsxshell/zhipu.md
T
Logan.Li b0d0e3a5f3 feat(i18n): add multi-language support (ja/ko/vi/ru/zh-TW) with system auto-detection
- Extend AppLanguage to 7 locales: zh-CN, zh-TW, en, ja, ko, vi, ru
- Auto-detect system language via navigator.languages; fallback to English
- Add BCP47 locale mapping for date formatting and sorting
- Create 50 translation JSON files (5 languages × 10 namespaces, 1137 keys each)
- Update language selector with native language names
- Extend locale key parity test to cover all 7 languages (70 assertions)
- Add VNC/RDP desktop, serial terminal, AI agent, port forwarding, and SFTP features
- Add credential encryption, host metrics, session backup crypto, and zmodem bridge
- Update Rust backend: desktop services, host metrics, SSH/SFTP enhancements
2026-08-12 00:07:48 +08:00

232 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpsXShell 专业工具化开发优化推荐
> 面向 OpsXShell 2.1.1(Tauri 2 + Rust + React/TS)打磨为专业 SSH / SFTP / VNC / RDP 运维终端的优化清单。
> 核心目标:**操作简单、人性化、跨平台一致**(Windows / Ubuntu / macOS)。
> 编写日期:2026-08-11。
---
## 0. 现状速览
| 模块 | 完成度 | 备注 |
|------|--------|------|
| SSH 连接 / 认证 / 会话 | ✅ 完整 | 密码、私钥、Agent、ProxyJump(≤8 跳) |
| 终端(xterm + 多窗格 + 广播 + Zmodem) | ✅ 完整 | 含断线重连、快照恢复 |
| SFTP 文件管理 | 🟡 基本完整 | 目录递归批量、传输冲突策略缺失 |
| 端口转发(Local/Remote/Dynamic) | ✅ 完整 | 实时可视化待补 |
| VNC | 🟡 基本可用 | **Tight JPEG 解码缺失**,剪贴板 Latin-1 |
| RDP(NLA / 剪贴板 / 文件共享) | ✅ 完整 | 多屏 / 双向文件待补 |
| 跨平台(Win / Mac / Linux) | ✅ 完整 | 签名公证 / 自动更新待补 |
| 主题 / i18n / 命令面板 | ✅ 完整 | — |
---
## 1. P0 — 立即修复(阻断性 / 数据正确性)
### 1.1 ⚠️ 修复凭据目录路径 typo(最高优先)
- **位置**:`src-tauri/src/services/credential_store.rs:3`
- **现状**:`const KEY_DIRECTORY: &str = ".opsxshsell";`(多了一个 `s`)
- **影响**:
- 主密钥实际写入 `~/.opsxshsell/master.key`,与产品名 `OpsXShell`、文档约定 `~/.opsxshell/` 不一致。
- 若后续修正常量但不加迁移,**所有已加密的会话密码 / 私钥口令 / 代理密码将无法解密**,用户数据丢失。
- **修复方案**:
1. 改常量为 `.opsxshell`。
2. 启动时检测旧目录 `~/.opsxshsell/` 是否存在;存在则原子迁移(移动 master.key 与所有加密文件到新目录,校验权限 0700/0600)。
3. 迁移成功后保留旧目录备份 `.opsxshsell.bak`,记录迁移日志,避免误删。
4. 加单元测试覆盖「旧目录存在 → 迁移 → 可解密」链路。
### 1.2 🔴 补齐 VNC Tight JPEG 解码
- **位置**:`src-tauri/src/services/desktop/vnc_engine.rs:312`
- **现状**:`VncEvent::JpegImage(rect, _data)` 直接丢弃,依赖下次 FullRefresh 用 Raw/Zrle 重绘脏区。
- **影响**:TigerVNC / TightVNC / RealVNC 默认偏好 Tight+JPEG 编码;当前会表现为**画面延迟、带宽飙升、拖影**,达不到专业工具水准。
- **方案**:
1. 引入 `turbojpeg`(或 `mozjpeg-sys`)crate。
2. 将 JPEG bytes 解码为 RGBA,复用现有 `extract_rect` / `putImageData` 路径写入 framebuffer。
3. 解码失败时回退到当前的 raw refresh 兜底,保证可用性。
4. 验收:连接 TightVNC 桌面播放视频,FPS 与带宽对比应明显改善。
### 1.3 🔴 SFTP 目录递归上传 / 下载
- **现状**:UI 层(`src/components/sftp/`)以单文件操作为主,拖拽整个目录缺少递归封装。
- **影响**:专业运维高频场景(部署目录、日志归档)当前体验不达标。
- **方案**:
1. Rust 侧新增 `sftp_upload_dir(local_dir, remote_dir)` / `sftp_download_dir(remote_dir, local_dir)`,递归遍历 + `mkdir -p` + 保留 mtime/权限。
2. 单条传输队列项可折叠显示子任务进度(已完成 N / 总 M 文件)。
3. 失败任务支持「重试剩余」而非整体回滚。
### 1.4 错误信息人性化
- **现状**:前端常直接透传 Rust 错误字符串(如 `Io: Connection refused`)。
- **方案**:建立错误码 → 人话映射表:
- `HostKeyChanged` → 「⚠️ 主机密钥已变更。若你刚刚重装系统这是正常的;若不是,可能存在中间人攻击。点击『更新并连接』或『拒绝』。」
- `AuthFailed` → 「认证失败。请检查用户名 / 密码,或私钥口令是否正确。」
- `ConnTimeout` → 「连接超时。请确认主机可达、防火墙已放行 22 端口。」
- 每条提供「为什么 + 怎么办」两部分。
---
## 2. P1 — 专业工具基线(近期)
### 2.1 传输队列增强
- **冲突策略对话框**:目标已存在时弹出 — 覆盖 / 跳过 / 重命名 / 断点续传(已有 `.opsx-part` 机制,需暴露到 UI)。
- **全局速率限制**:可配上限(如 10 MiB/s),避免占满办公带宽。
- **并发控制**:同时活跃 3~5 个传输,其余排队。
- **失败自动重试**:N 次指数退避 + 手动「重试」按钮。
- **单位规范**:统一使用 `MiB/s`、`KiB/s`(运维语境,非 SI 单位)。
### 2.2 端口转发实时可视化
- 每条运行中规则显示:
- ✓ 活跃连接数
- ↑↓ 累计字节 / 实时速率
- 远端 ping 延迟条
- 失败时红点 + 错误原因 tooltip
- 规则修改前强制停止 Listener(`AGENTS.md` 已规定,UI 需显式引导)。
### 2.3 RDP 文件共享双向化
- **现状**:`rdpdr_fs.rs` 单文件 50MB 上限,仅挂载本地 `Downloads`。
- **方案**:
1. 上限可配(默认提升到 200MB)。
2. 本地→远端上传进度条(已有 `upload_file` 命令,补 UI 进度)。
3. 可选挂载任意本地目录(而非固定 Downloads)。
4. 远端「此电脑」显示中文友好名。
### 2.4 三平台签名 / 公证 / 自动更新
| 平台 | 必做项 |
|------|--------|
| macOS | Apple Developer ID 签名 + 公证 + Hardened Runtime + Notarization staple |
| Windows | EV / OV 代码签名证书 + SmartScreen 信誉积累 |
| Linux | AppImage / deb / rpm,glibc 版本对齐 Ubuntu 22.04 LTS |
- 接入 Tauri Updater,签名 manifest,CI 自动发布到 GitHub Releases。
- **`AGENTS.md` 已规定**:无签名凭据不得宣称完成签名 / 公证。规划时需先取得凭据。
### 2.5 VNC 剪贴板 UTF-8 化
- **现状**:`vnc_engine.rs` CutText 走 Latin-1 降级,**中文 / 日文必乱码**。
- **方案**:升级到 UTF-8 编解码;远端不支持 UTF-8 时回退 Latin-1 并提示用户。
---
## 3. P2 — 体验跃升(中期)
### 3.1 终端效率链路
- **Cmd/Ctrl + 点击文件路径** → 直接唤起 RemoteTextEditor 远程编辑(已存在组件,打通调用链)。
- **选中即复制 + 右键粘贴**:作为可选开关(对齐 iTerm2 / Windows Terminal)。
- **WebLinks 点击二次确认**:防止 ANSI 注入钓鱼链接。
- **SSH Agent 转发开关**:`auth.rs` 已支持 Agent 认证,补 ForwardAgent 请求开关。
- **tmux / screen 集成**:检测远端已 attach 会话时提示恢复。
### 3.2 RDP 多屏 / 全屏
- 全屏模式 + 远程显示器选择(`DesktopSessionView` 当前单 canvas)。
- 动态 DesktopResize PDU:窗口缩放时同步调整远端分辨率。
### 3.3 命令面板扩展
- `CommandPalette` 已存在,扩展 fuzzy 索引:
- 会话 / 文件 / 隧道规则 / 最近主机 / 快捷动作。
- 快捷键:`Cmd+K`(macOS)/ `Ctrl+K`(Win/Linux)全局唤起。
### 3.4 首次启动引导
- `WelcomeView` 3 步引导:添加主机 → SSH 连接 → 文件传输。
- 降低运维新手门槛,体现"操作简单"产品定位。
### 3.5 SFTP 体验细节
- 文件覆盖前差异预览:双方 size / mtime / SHA256。
- 多选批量 chmod(`ChmodDialog` 已支持单文件)。
- 符号链接:`list` 是否返回 symlink target 需确认,UI 区分展示。
---
## 4. P3 — 差异化竞争力(加分项)
| 项 | 说明 |
|----|------|
| VNC VeNCrypt / TLS | 支持加密 VNC,公网可用 |
| RDP 远程音频重定向 | `rdpsnd` 依赖已引入,补 UI 开关 |
| RDP 打印机重定向 | 按需评估 |
| 本地终端 + 串口 | 已实现,打磨 Tab 体验即可 |
| AI 运维助手 | 已实现多 provider,可对接当前 SSH 会话上下文 |
| 会话分组 / 标签 / 着色 | 大量主机时的组织能力 |
| 配置导入 | 支持 Termius / Royal TS / .ssh/config 导入,降低迁移成本 |
---
## 5. 跨平台验收清单
> 平台安装包必须在目标系统**实机验收**(`AGENTS.md` 规定)。
### Windows
- [ ] ConPTY(Win10 1903+)下中文 / IME / 彩色正常
- [ ] Ctrl 组合键、Alt 键映射正确
- [ ] 右键粘贴、选中即复制开关生效
- [ ] SFTP 本地面板路径分隔符 `\` vs `/` 一致
- [ ] Deep Link `ssh://` / `opsxshell://` 注册表写入与卸载清理
- [ ] 代码签名 + SmartScreen 验证
### Ubuntu / Linux
- [ ] Ubuntu 22.04 / 24.04 glibc 兼容
- [ ] Wayland 下 IME、HiDPI 缩放
- [ ] deb / rpm / AppImage 三种包格式
- [ ] AppImage 可执行权限提示友好
- [ ] 系统托盘(可选)
### macOS
- [ ] Apple Developer ID 签名 + 公证
- [ ] Gatekeeper 直接打开(无需右键绕过)
- [ ] retina HiDPI 终端清晰
- [ ] 触控板手势(双指缩放映射到 VNC/RDP 远端)
- [ ] DMG 安装体验
---
## 6. 推荐实施顺序
```
第 1 周:P0
├─ 凭据目录 typo 修复 + 迁移逻辑(含测试)
├─ VNC Tight JPEG 解码
├─ SFTP 目录递归
└─ 错误信息人性化映射表
第 2-3 周:P1
├─ 传输队列冲突策略 + 限速 + 并发
├─ 端口转发实时可视化
├─ VNC 剪贴板 UTF-8
└─ RDP 文件共享双向化
第 4 周+:P1 收尾
├─ 取得签名凭据 → 三平台签名公证
└─ 自动更新通道搭建
后续:P2 / P3 按用户反馈迭代
```
---
## 7. 关键约束(来自 AGENTS.md,开发时必须遵守)
- 未由 Rust 后端实现的能力不能在界面中显示为可用。
- 会话密码 / 私钥口令 / 代理密码必须由 Rust 加密后落盘。
- 不保存终端命令历史;批量命令结果仅保留在当前窗口。
- 主机密钥使用 `~/.ssh/known_hosts` 校验,显式拒绝 TOFU。
- 主密钥位于 `~/.opsxshell/master.key`,Unix 目录权限 0700、文件权限 0600。
- 端口转发规则可持久化,运行中状态不得持久化;停止操作必须关闭真实原生 Listener。
- SFTP read/write 不得作为 upload/download 别名;本地 / 远程路径不得含糊调用。
- 大模型新配置必须先用临时凭据完成真实测试,不得提前写 settings 或 secrets。
- `ssh://` 禁止携带密码或静默直连,必须经原生有界队列确认。
- 平台安装包必须在目标系统实机验收;无签名凭据不得宣称完成签名 / 公证 / 自动更新。
---
*本文档基于 2026-08-11 代码库现状编写,后续迭代请同步更新。*