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
This commit is contained in:
Logan.Li committed 2026-08-12 00:07:48 +08:00
1 parent fea6d8db04
commit b0d0e3a5f3
301 files changed
+28002 -2705

No files matched your search

+10 -5
View File
@@ -1,21 +1,24 @@
# OpsXShell 开发指南
OpsXShell 是基于 Tauri 2、Rust、React 和 TypeScript 的轻量 SSH/SFTP 运维终端。产品强调便捷、人性化、操作简单实用,不加入审计、审批或堡垒机功能。
OpsXShell 是基于 Tauri 2、Rust、React 和 TypeScript 的轻量运维终端。产品强调便捷、人性化、操作简单实用,不加入审计、审批或堡垒机功能。
## 架构
- `src/`:React 界面、Zustand 状态和 XTerm.js 终端。
- `src/i18n/`:界面文案(zh-CN / en);新增可见字符串必须双语同步,并用 `test/i18n/localeKeys.test.ts` 校验 key 对齐。
- `src/platform/`:唯一的 Tauri 命令与事件适配入口。
- `src/platform/sftp.ts`:固定 `localPath`/`remotePath` 方向,区分远程文本读写与文件传输。
- `src/platform/rdp.ts` / `src/platform/vnc.ts`:远程桌面会话适配;运行态只在原生侧内存中。
- `src/utils/terminalPipeline.ts`:终端输入、UTF-8 输出、背压和错误边界。
- `src-tauri/src/commands/`:精简命令边界和统一响应。
- `src-tauri/src/services/`:SSH、SFTP、隧道、PTY、串口、存储和凭据服务。转发 Listener 必须由 `TunnelManager` 统一持有和取消。
- `src-tauri/src/services/`:SSH、SFTP、隧道、PTY、串口、桌面、存储和凭据服务。转发 Listener 必须由 `TunnelManager` 统一持有和取消。
- `src-tauri/src/services/ssh/`:认证、known_hosts、代理/跳板、路径和 SFTP,禁止重新堆回 `ssh.rs`。
- `src-tauri/src/services/tunnel/`:运行模型、SOCKS5 协议和 Relay;运行态只能由 `TunnelManager` 持有。
- `src-tauri/src/services/desktop/`:RDP(IronRDP)与 VNC(vnc-rs);帧、输入、剪贴板经 Tauri 事件交给 Canvas,断开即取消 worker。
- `shared/types/`:渲染层共享 TypeScript 契约。
- `test/`:Vitest 基础测试与验收。
React 不直接访问 SSH、文件系统或加密实现。新增原生能力时先定义 Rust command,再更新 `src/desktop.d.ts`、`src/platform/desktop.ts` 和 `test/setup.ts`。
React 不直接访问 SSH、文件系统或加密实现。新增原生能力时先定义 Rust command,再更新 `src/desktop.d.ts`、对应 `src/platform/*.ts` 和 `test/setup.ts`。
## 规则
@@ -23,13 +26,15 @@ React 不直接访问 SSH、文件系统或加密实现。新增原生能力时
- 会话密码、私钥口令和代理密码必须由 Rust 加密后落盘。
- 不保存终端命令历史;批量命令结果仅保留在当前窗口。
- 主机密钥使用 `~/.ssh/known_hosts` 校验。
- 主密钥位于 `~/.opsxshsell/master.key`,Unix 目录权限 `0700`、文件权限 `0600`。
- 主密钥位于 `~/.opsxshell/master.key`,Unix 目录权限 `0700`、文件权限 `0600`。
- 保持常用流程简短,高级配置默认收起。
- 端口转发规则可持久化,运行中状态不得持久化;界面的停止操作必须关闭真实原生 Listener。
- 复制转发规则不得复制运行态;运行中的规则修改前必须先停止 Listener。
- 动态转发(SOCKS5)默认仅本机 `127.0.0.1:1080`;流量经当前 SSH 服务器出口 IP 访问外网。每台 SSH 主机仅保留一条动态规则。状态栏「转发」打开抽屉管理,右键复制 `socks5://127.0.0.1:1080`。
- SFTP read/write 不得作为 upload/download 的别名,本地路径与远程路径不得使用位置含糊的调用。
- RDP / VNC 仅在 Tauri 原生应用中可用;会话运行态不落盘,断开即清理。批量命令排除桌面会话。
- 大模型新配置必须先用临时凭据完成真实测试,测试期间不得写 settings 或 secrets;连接字段变化后保存必须重新锁定。
- AI 远程执行只能复用当前活跃 SSH connection;按 strict/balanced/permissive 模式决定确认阈值,critical 始终硬拒绝;不建立独立 podexec/Kubernetes 凭据边界,也不保存命令或工具输出。
- AI 远程执行只能复用当前活跃 SSH connection;按 strict/relaxed(严格/宽松)模式决定确认阈值,critical 始终硬拒绝;不建立独立 podexec/Kubernetes 凭据边界,也不保存命令或工具输出。
- `ssh://` 禁止携带密码或静默直连;冷启动与运行中唤起都必须通过原生有界队列交付给快速连接确认。
## 命令