docs: UI/UX深度审计 — 视觉设计+功能交互全面评估

- PROJECT_EVALUATION.md: 新增UI/UX审计评分(48/100)
  - 视觉设计65分(配色专业但系统执行不严格)
  - 交互体验40分(alert/prompt泛滥,无Toast)
  - 功能便捷性45分(快捷键仅4个,无终端搜索)
  - 状态处理35分(多组件缺三态)
  - 响应式10分(完全缺失)
  - 12项Critical问题 + 8项Warning问题
  - 功能完成度矩阵 + 竞品对标
  - 3阶段优化路线(48→88分)

- ROADMAP.md: 基于UI/UX审计重写路线图
  - v1.1.0 基础可用(2周): Toast+终端搜索+会话恢复+SFTP修复
  - v1.2.0 体验升级(2周): 快捷键+拖拽+响应式+视觉打磨
  - v1.3.0 测试覆盖(2周): 核心模块50%覆盖率
  - v1.4.0 专业功能(2周): 分屏+i18n+自定义快捷键
  - v1.5.0 安全升级(1周): Electron升级+IPC加密
This commit is contained in:
OpsXShell Dev committed 2026-04-18 13:23:04 +08:00
1 parent 60c3d868c5
commit c5243df040
2 files changed
+428 -560

No files matched your search

+295 -298
View File
@@ -9,47 +9,315 @@
| 日期 | 版本 | 评分 | 主要变更 | | 日期 | 版本 | 评分 | 主要变更 |
|------|------|------|----------| |------|------|------|----------|
| 2026-04-04 | v0.1.0 | 56/100 | 初始骨架 | | 2026-04-04 | v0.1.0 | 56/100 | 初始骨架 |
| 2026-04-05 | v0.5.0 | 72/100 | SFTP 传输队列优化 |
| 2026-04-06 | v0.10.0 | 78/100 | 核心功能实现发布 | | 2026-04-06 | v0.10.0 | 78/100 | 核心功能实现发布 |
| 2026-04-18 | v1.0.0-audit | **58/100** | 独立代码审计(本次) | | 2026-04-18 | 代码审计 | **58/100** | 独立代码质量审计 |
| 2026-04-18 | UI/UX审计 | **48/100** | UI 视觉 + 功能交互深度审计 |
> **评分说明**: 此前评分(95-99)为开发过程自评,缺少客观基准。本次基于 7 维度独立审计重新评估,结果显著低于历史记录。这是正常的——自评往往偏高,独立审计才能暴露真实问题。 > **评分说明**: 代码审计聚焦代码质量/测试/架构/安全;UI/UX 审计聚焦视觉设计、交互体验、功能便捷性。
--- ---
## v1.0.0 独立审计评估 (2026-04-18) ## UI/UX 审计评估 (2026-04-18)
### 整体评分 ### 整体评分: **48/100**
| 维度 | 分数 | 权重 | 加权分 | 说明 | | 维度 | 分数 | 评级 | 说明 |
|------|------|------|--------|------| |------|------|------|------|
| **功能完成度** | 82/100 | 25% | 20.5 | SSH/SFTP/端口转发主体完成,SFTP 上传为简化实现 | | **视觉设计** | 65/100 | 🟡 中等 | 深色主题配色专业,但设计系统执行不严格 |
| **代码质量** | 45/100 | 20% | 9.0 | 调试日志残留严重,组件过大,Mock 数据残留 | | **交互体验** | 40/100 | 🔴 差 | 大量半成品功能,反馈系统缺失 |
| **测试覆盖** | 15/100 | 20% | 3.0 | 仅 34 测试用例,核心模块零覆盖 | | **功能便捷性** | 45/100 | 🔴 差 | 快捷键薄弱,核心操作路径长 |
| **架构设计** | 72/100 | 15% | 10.8 | IPC 分层合理,Store 有耦合,组件拆分不足 | | **状态处理** | 35/100 | 🔴 差 | 多组件缺空状态/加载/错误三态 |
| **安全合规** | 55/100 | 10% | 5.5 | 加密实现优秀,但密码明文传输风险、CSP 不严格 | | **响应式设计** | 10/100 | 🔴 极差 | 完全缺失 |
| **依赖管理** | 50/100 | 5% | 2.5 | Electron v28 过旧,better-sqlite3 严重过时 |
| **构建配置** | 75/100 | 5% | 3.75 | 配置合理,dev 脚本跨平台兼容性差 |
**综合评分: 58/100** — 功能原型阶段,距生产可用尚有差距
### 评分对比
``` ```
功能完成度 ████████████████████░░░░░ 82% 功能基本齐全 视觉设计 ████████████████░░░░░░░░░ 65% 配色专业但执行不严格
代码质量 ██████████░░░░░░░░░░░░░░░ 45% 调试代码残留严重 交互体验 ██████████░░░░░░░░░░░░░░░ 40% alert/prompt泛滥,无Toast
测试覆盖 ███░░░░░░░░░░░░░░░░░░░░░░ 15% 核心模块零测试 功能便捷性 ███████████░░░░░░░░░░░░░░ 45% 快捷键仅4个,无终端搜索
架构设计 █████████████████░░░░░░░░ 72% IPC 分层好,Store 有耦合 状态处理 ████████░░░░░░░░░░░░░░░░░ 35% 多组件缺三态
安全合规 █████████████░░░░░░░░░░░░ 55% 加密好,传输链路有风险 响应式设计 ██░░░░░░░░░░░░░░░░░░░░░░░ 10% 完全缺失
依赖管理 ████████████░░░░░░░░░░░░░ 50% 多个依赖严重过时
构建配置 ██████████████████░░░░░░░ 75% 基本合理
``` ```
### 竞品对标
| 维度 | OpsXShell | Termius | Tabby |
|------|-----------|---------|-------|
| 整体配色 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 布局结构 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 图标一致性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 动画/过渡 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 响应式 | ⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 状态处理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 设计系统 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
**OpsXShell 视觉设计达到 Termius 的 70-75% 水平,但交互体验仅 40-50%。**
--- ---
## 代码统计 ## 视觉设计详细评估
### 总量 ### ✅ 做得好的
| 组件 | 亮点 |
|------|------|
| **WelcomeView** | 全项目最佳 — 2×2快捷操作网格,独立配色,图标容器渐变悬停,`rounded-xl` 统一圆角 |
| **Modal** | `backdrop-blur-sm` 毛玻璃 + `shadow-2xl` 立体感 + ESC关闭 |
| **Button** | 4变体 × 3尺寸 = 12组合,disabled 态完整,loading spinner |
| **TabBar** | 连接状态圆点(黄/绿/红),`min-w/max-w` 宽度限制,悬停显示关闭按钮 |
| **TransferPanel** | 折叠动画 + 进度条 `transition-all duration-300` + 状态标签胶囊 |
| **配色系统** | `dark-900→800→700→600` 四级灰度 + `accent-blue/green/purple` 三色搭配 |
### 🔴 高优先级视觉问题
| # | 文件 | 问题 | 修复方案 |
|---|------|------|----------|
| V-1 | `StatusBar.tsx:33` | `bg-accent-blue` 状态栏过于刺眼 | → `bg-dark-800 border-t border-dark-700` |
| V-2 | `SFTPView.tsx:96-131` | 右键菜单用 emoji `📂📤📥🗑️` | → Lucide 图标组件 |
| V-3 | `FileRow.tsx:27` | 选中色 `cyan-500` 不在设计系统 | → `accent-blue/20` |
| V-4 | `TerminalView.tsx:601` | 恢复按钮 `bg-cyan-600` 不在设计系统 | → `accent-blue` |
| V-5 | `FileRow.tsx:32` | 目录图标 `sky-400` 不在设计系统 | → `accent-blue` |
### 🟡 中优先级视觉问题
| # | 文件 | 问题 |
|---|------|------|
| V-6 | `Breadcrumb.tsx:33` | `text-slate-600` 应统一为 `text-dark-600` |
| V-7 | `TransferItem.tsx:28` | `bg-slate-700` 应统一为 `bg-dark-700` |
| V-8 | `WelcomeView.tsx:26` | `grid-cols-2` 硬编码,应加 `grid-cols-1 sm:grid-cols-2` |
| V-9 | `StatusBar.tsx:36` | `Wifi` 图标语义不当,应用 `CheckCircle` |
| V-10 | `tailwind.config.js` | 缺少 `accent-orange` 定义,`orange-400` 散落 |
---
## 交互体验详细评估
### 🔴 Critical — 严重影响可用性
| # | 文件 | 问题 | 影响 |
|---|------|------|------|
| I-1 | `App.tsx:46,49,128,159,168` | 导入导出全用 `alert()` | 体验极差,与暗色主题不协调 |
| I-2 | `SFTPView.tsx:173` | 新建文件夹用 `prompt()` | 原生弹窗破坏沉浸感 |
| I-3 | `PortForwardView.tsx:150` | 删除用 `confirm()` | 同上 |
| I-4 | `SFTPView.tsx:103` | 本地上传右键菜单 action **空函数** | 功能完全不可用 |
| I-5 | `SFTPView.tsx:129-131` | 远程删除右键菜单 action **空函数** | 功能完全不可用 |
| I-6 | `useSFTP.ts:399` | 上传实现是模拟代码 | SFTP 上传不可用 |
| I-7 | `WelcomeView.tsx:12-16` | 最近连接列表是硬编码假数据 | 显示虚假信息误导用户 |
| I-8 | `SessionDialog.tsx:265-270` | 私钥"浏览"按钮 **无事件** | 点击无反应 |
| I-9 | 全局 | **无 Toast 通知系统** | 用户操作无任何非阻塞反馈 |
| I-10 | 全局 | **无终端搜索** (Ctrl+Shift+F) | 基础功能缺失 |
| I-11 | `tabStore.ts` | 标签页无持久化,重启全部丢失 | 会话恢复名存实亡 |
| I-12 | `StatusBar.tsx:33-56` | 状态栏永远显示"就绪" | 未接入实际连接状态 |
### 🟡 Warning — 显著影响效率
| # | 文件 | 问题 |
|---|------|------|
| I-13 | 快捷键仅 4 个 | 缺 Ctrl+Tab 切标签、Ctrl+1~9、F11 全屏、Ctrl+Shift+F 搜索 |
| I-14 | `WelcomeView.tsx:120` | 提示 Ctrl+T 但 **未注册** |
| I-15 | `TabBar.tsx` | 无标签拖拽排序 |
| I-16 | `QuickConnectDialog.tsx:12-17` | 不支持密钥认证,仅密码 |
| I-17 | `SettingsView.tsx:79` | light 主题选项无效(仅 dark) |
| I-18 | `SettingsView.tsx:96-101` | 语言切换无效(无 i18n) |
| I-19 | `SFTPView.tsx:208` | 左右面板共享 contextMenu 状态可能冲突 |
| I-20 | `Sidebar.tsx` | 会话分组不可折叠/展开 |
---
## 功能便捷性评分
### SSH 连接
| 场景 | 步骤 | 评分 | 竞品对比 |
|------|------|------|----------|
| 已保存会话 | 1步(双击) | 8/10 | ✅ 与 Termius 持平 |
| 快速连接 Ctrl+K | 2-4步 | 7/10 | ⚠️ 不支持 `user@host:port` 单行输入 |
| 密钥认证 | — | 3/10 | ❌ 浏览按钮无效,需手动输入路径 |
### SFTP 文件操作
| 操作 | 步骤 | 评分 | 问题 |
|------|------|------|------|
| 导航目录 | 1步 | 8/10 | ✅ |
| 上传文件 | 3步 | 3/10 | ❌ 不可用(模拟实现) |
| 下载文件 | 2步 | 7/10 | ✅ |
| 新建文件夹 | 2步 | 5/10 | ⚠️ 用 `prompt()` |
| 拖拽上传 | — | 0/10 | ❌ 缺失 |
| 文件预览 | — | 0/10 | ❌ 缺失 |
### 标签页管理
| 操作 | 方式 | 评分 | 竞品差距 |
|------|------|------|----------|
| 创建 | +按钮/Ctrl+N | 8/10 | — |
| 切换 | 点击标签 | 6/10 | ❌ 无 Ctrl+Tab |
| 关闭 | ×/Ctrl+W | 7/10 | — |
| 拖拽排序 | — | 0/10 | ❌ 缺失 |
| 会话恢复 | — | 0/10 | ❌ 重启丢失 |
### 快捷键覆盖
| 类别 | 已有 | 缺失 | 覆盖率 |
|------|------|------|--------|
| 应用级 | 4个 (N/K/Q/R) | F11全屏, Ctrl+Shift+N新标签 | 30% |
| 标签级 | 1个 (Ctrl+W) | Ctrl+Tab, Ctrl+1~9, Ctrl+Shift+T恢复 | 10% |
| 终端级 | 0 | Ctrl+Shift+F搜索, Ctrl+Shift+C/V, Ctrl+/-缩放 | 0% |
| 自定义 | ❌ | 全部 | 0% |
---
## 功能完成度矩阵
| 功能 | 状态 | 完成度 | 备注 |
|------|------|--------|------|
| SSH 密码连接 | ✅ | 90% | |
| SSH 密钥连接 | 🟡 | 60% | 浏览按钮无效 |
| SSH Agent 认证 | ✅ | 80% | |
| XTerm.js 终端 | ✅ | 85% | 无搜索 |
| 终端多主题 | ✅ | 90% | |
| IP 高亮 | ✅ | 95% | |
| SFTP 双栏浏览 | ✅ | 80% | |
| SFTP 上传 | 🔴 | 10% | 模拟实现 |
| SFTP 下载 | ✅ | 75% | |
| SFTP 右键菜单 | 🟡 | 40% | 多个空函数 |
| SFTP 拖拽上传 | ❌ | 0% | |
| SFTP 文件预览 | ❌ | 0% | |
| 端口转发 | ✅ | 85% | |
| 标签页管理 | 🟡 | 60% | 无拖拽/恢复 |
| 会话管理 | ✅ | 75% | |
| 会话恢复 | ❌ | 5% | 设置存在但未实现 |
| 快捷键系统 | 🔴 | 15% | 仅4个,不可自定义 |
| Toast 通知 | ❌ | 0% | |
| 终端搜索 | ❌ | 0% | |
| 设置系统 | 🟡 | 50% | light/i18n 无效 |
| 状态栏 | 🔴 | 10% | 永远"就绪" |
| 欢迎页 | 🟡 | 60% | 假数据 |
---
## SWOT 分析
### Strengths (优势)
- 深色主题四级灰度配色系统专业(基于 Tailwind Slate)
- WelcomeView 快捷操作卡片设计出色
- 基础组件质量高(Button/Modal/Loading/ErrorBoundary)
- 连接池管理 + 终端快照恢复(独有亮点)
- AES-256-GCM 加密实现专业
### Weaknesses (劣势)
- **大量半成品功能**: SFTP 上传/删除/右键菜单为空函数
- **反馈系统缺失**: 无 Toast,大量 alert/prompt/confirm
- **快捷键极弱**: 仅 4 个,无终端搜索、无标签切换
- **调试代码未清理**: `DEBUG=true` + 50+ console.log
- **设计系统执行不严格**: cyan/sky/slate 颜色散落
### Opportunities (机会)
- Toast 通知系统建立后,全局交互体验可跃升
- xterm SearchAddon 可快速集成终端搜索
- 快捷键自定义框架一次建设,长期受益
- 响应式设计补全后可在小屏/平板使用
### Threats (威胁)
- 竞品 Termius/Tabby 功能成熟度远超
- 半成品功能影响用户第一印象
- 无会话恢复 = 重启丢工作,企业用户不可接受
---
## 优化方向与目标
### Phase 1: 基础可用 (v1.1.0) — 2 周
**目标**: 解决所有 Critical 问题,产品具备基础可用性
**评分目标**: UI/UX 48→65
| # | 任务 | 类型 | 预计 | 影响 |
|---|------|------|------|------|
| 1 | **Toast 通知系统** (组件 + 全局 hook) | 新增 | 2天 | 全局交互提升 |
| 2 | **替换所有 alert/prompt/confirm** 为自定义 UI | 修复 | 2天 | 消除原生弹窗 |
| 3 | **SFTP 上传/删除真实实现** | 修复 | 3天 | 核心功能可用 |
| 4 | **终端搜索** (xterm SearchAddon) | 新增 | 1天 | 基础功能补全 |
| 5 | **会话恢复** (标签持久化到 SQLite) | 新增 | 3天 | 重启不丢工作 |
| 6 | **修复私钥浏览按钮** | 修复 | 0.5天 | 密钥认证可用 |
| 7 | **清理生产调试日志** | 修复 | 1天 | 代码质量 |
| 8 | **设计系统统一** (cyan→accent-blue 等) | 修复 | 1天 | 视觉一致性 |
| 9 | **StatusBar 接入实际状态** | 修复 | 0.5天 | 信息准确 |
| 10 | **WelcomeView 真实最近连接** | 修复 | 1天 | 去除假数据 |
### Phase 2: 体验升级 (v1.2.0) — 2 周
**目标**: 快捷键、视觉打磨、交互优化
**评分目标**: UI/UX 65→78
| # | 任务 | 类型 | 预计 |
|---|------|------|------|
| 1 | Ctrl+Tab / Ctrl+1~9 标签切换 | 新增 | 1天 |
| 2 | 标签拖拽排序 | 新增 | 2天 |
| 3 | SFTP 拖拽上传 | 新增 | 2天 |
| 4 | SFTP 右键菜单完善(权限编辑/属性) | 完善 | 1天 |
| 5 | 侧边栏会话分组折叠/展开 | 完善 | 1天 |
| 6 | Sidebar 宽度可拖拽调整 | 新增 | 1天 |
| 7 | 响应式布局基础(窄窗口折叠侧边栏) | 新增 | 2天 |
| 8 | Loading/Skeleton 加载态补全 | 新增 | 1天 |
| 9 | 空状态插画/提示补全 | 新增 | 1天 |
| 10 | 终端组件拆分重构 | 重构 | 3天 |
### Phase 3: 专业功能 (v1.3.0) — 3 周
**目标**: 快捷键自定义、终端分屏、i18n
**评分目标**: UI/UX 78→88
| # | 任务 | 类型 | 预计 |
|---|------|------|------|
| 1 | 快捷键自定义系统 | 新增 | 3天 |
| 2 | 终端分屏(水平/垂直) | 新增 | 5天 |
| 3 | i18n 国际化 | 新增 | 5天 |
| 4 | Light 主题实现 | 新增 | 3天 |
| 5 | Snippets 命令片段库 | 新增 | 3天 |
| 6 | 代理设置 | 新增 | 2天 |
| 7 | 多窗口支持 | 新增 | 5天 |
---
## 里程碑总览
```
v1.1.0 基础可用 (2 周) → UI/UX 48→65 解决所有Critical问题
v1.2.0 体验升级 (2 周) → UI/UX 65→78 快捷键+视觉打磨
v1.3.0 专业功能 (3 周) → UI/UX 78→88 分屏+i18n+自定义快捷键
总计: ~7 周 → UI/UX 综合评分 48→88
```
### 成功指标
| 指标 | v1.0 当前 | v1.3 目标 |
|------|-----------|-----------|
| UI/UX 综合评分 | 48/100 | 88/100 |
| 有效快捷键数 | 4 | 30+ |
| alert/prompt/confirm | 8 处 | 0 处 |
| 半成品功能 | 8 个 | 0 个 |
| Toast 通知覆盖 | 0% | 100% |
| 终端搜索 | ❌ | ✅ |
| 会话恢复 | ❌ | ✅ |
| 响应式 | ❌ | ✅ |
| 快捷键可自定义 | ❌ | ✅ |
---
## 代码质量评估(代码审计结论,保留参考)
### 综合评分: 58/100
| 维度 | 分数 | 说明 |
|------|------|------|
| 功能完成度 | 82/100 | SSH/SFTP/端口转发主体完成 |
| 代码质量 | 45/100 | 50+ console.log, DEBUG=true 残留 |
| 测试覆盖 | 15/100 | 核心模块零测试 |
| 架构设计 | 72/100 | IPC 分层好,Store 有耦合 |
| 安全合规 | 55/100 | 加密优秀,传输链路有风险 |
| 依赖管理 | 50/100 | Electron v28 过旧 |
| 构建配置 | 75/100 | 基本合理 |
### 代码统计
| 目录 | 文件数 | 代码行数 | 占比 | | 目录 | 文件数 | 代码行数 | 占比 |
|------|--------|----------|------| |------|--------|----------|------|
@@ -58,274 +326,3 @@
| `shared/` | 5 | 441 | 3.9% | | `shared/` | 5 | 441 | 3.9% |
| `test/` | 4 | 475 | 4.2% | | `test/` | 4 | 475 | 4.2% |
| **总计** | **81** | **11,258** | **100%** | | **总计** | **81** | **11,258** | **100%** |
### 需重点关注的文件
| 文件 | 行数 | 问题 |
|------|------|------|
| `src/components/TerminalView.tsx` | 645 | 🔴 单组件过大,含 30+ console.log |
| `electron/services/ssh-service.ts` | 685 | 🔴 核心服务,20+ console.log |
| `src/hooks/useSFTP.ts` | 510 | 🟡 Mock 数据残留,上传未实现 |
| `src/stores/connection/poolStore.ts` | 402 | 🟡 合理但与 lifecycleStore 耦合 |
---
## SWOT 分析
### Strengths (优势)
- **加密实现专业**: AES-256-GCM + PBKDF2(100K迭代) + 随机 Salt/IV,业界最佳实践
- **IPC 架构清晰**: 8 个模块化 IPC Handler,通道常量统一管理
- **连接管理设计**: 状态机 + 连接池 + LRU 淘汰 + 保活,架构先进
- **错误处理体系**: 统一错误码 + 错误推断 + ErrorBoundary + 高阶包装函数
- **共享类型**: `shared/types/` 主进程/渲染进程共用类型
### Weaknesses (劣势)
- **调试代码残留**: `TerminalView.tsx` 有 `const DEBUG = true`,50+ 处彩色调试函数
- **测试严重不足**: 11,258 行代码仅 34 个测试用例,估算覆盖率 10-15%
- **组件过大**: TerminalView 645 行承担终端初始化、连接、Shell 数据、快照恢复全部逻辑
- **依赖过时**: Electron v28(当前v33+)、better-sqlite3 v9(当前v11)、ESLint v8(已停止维护)
- **SFTP 上传未完成**: `useSFTP.ts:399` 标注 "Actual upload implementation would go here"
### Opportunities (机会)
- **Electron 升级**: v33+ 性能提升 30%+,内存占用更低
- **Zustand v5**: 细粒度订阅,减少不必要的重渲染
- **XTerm.js 插件生态**: Image addon、Web Links addon 可增强终端功能
- **打包优化**: electron-builder + asar 可显著减小安装包体积
### Threats (威胁)
- **安全风险**: 密码可能通过 IPC 明文传输;`sandbox: false` 降低安全性
- **竞品压力**: Electerm、Tabby、Termius 等成熟竞品功能更完善
- **跨平台兼容**: `dev` 脚本用 `&` 后台运行,Windows 不可用
- **依赖锁定**: ssh2、socksv5 版本锁定,存在已知漏洞风险
---
## 关键问题清单
### 🔴 Critical — 必须修复
| ID | 问题 | 位置 | 影响 |
|----|------|------|------|
| C-1 | 生产代码中 `DEBUG = true` + 50+ 调试函数 | `TerminalView.tsx:16` | 控制台信息泄露、性能损耗 |
| C-2 | 核心模块零测试(SSH/加密/IPC) | `electron/services/*` | 重构/修改无安全网 |
| C-3 | SFTP 上传功能为占位实现 | `useSFTP.ts:399` | 核心功能不可用 |
| C-4 | 密码可能明文通过 IPC 传输 | `preload.ts`, `session.types.ts` | 安全漏洞 |
| C-5 | Mock 数据残留生产代码 | `useSFTP.ts:154-161` | 生产环境显示假文件 |
### 🟡 Warning — 建议修复
| ID | 问题 | 位置 | 影响 |
|----|------|------|------|
| W-1 | TerminalView 645 行,职责过多 | `TerminalView.tsx` | 可维护性差 |
| W-2 | Store 间直接耦合 | `lifecycleStore.ts:39` | 改一处动全局 |
| W-3 | Electron v28 严重过时 | `package.json` | 性能和安全更新缺失 |
| W-4 | better-sqlite3 v9 过时 | `package.json` | 功能和性能缺失 |
| W-5 | react-router-dom 未使用 | `package.json` | 无用依赖增大包体积 |
| W-6 | IPC 通道名硬编码 | `preload.ts` | 未引用 IPC_CHANNELS 常量 |
| W-7 | `Math.random()` 生成 ID | `TerminalView.tsx:383` | 非唯一,应用 uuid |
| W-8 | disconnect() 几乎空实现 | `useSFTP.ts:359-373` | 资源不释放 |
| W-9 | CSP 允许 unsafe-inline | `index.html:7` | 削弱 XSS 防护 |
| W-10 | 主进程 tsconfig 无未使用检查 | `electron/tsconfig.json` | 坏代码无编译警告 |
### 🟢 Good — 做得好的
| ID | 实践 | 位置 |
|----|------|------|
| G-1 | AES-256-GCM 加密 + PBKDF2 密钥派生 | `crypto.ts` |
| G-2 | IPC Handler 按领域分 8 个模块 | `electron/ipc/*` |
| G-3 | 共享类型定义 main/renderer 共用 | `shared/types/*` |
| G-4 | contextIsolation: true, nodeIntegration: false | `main.ts` |
| G-5 | 统一错误码系统 + 错误推断 | `error-handler.ts` |
| G-6 | 连接状态机 6 状态 + LRU 淘汰 | `connectionPool.ts` |
---
## 依赖评估
| 依赖 | 当前 | 最新 | 状态 | 风险 |
|------|------|------|------|------|
| `electron` | ^28.3.3 | v33+ | 🔴 严重过时 | 性能、安全、API 兼容 |
| `better-sqlite3` | ^9.4.0 | v11.x | 🟡 过时 | 性能改进 |
| `zustand` | ^4.4.7 | v5.x | 🟡 非最新 | 细粒度订阅改进 |
| `lucide-react` | ^0.294.0 | 0.4xx | 🟡 过时 | 图标缺失 |
| `socksv5` | ^0.0.6 | — | 🟡 不稳定 | 0.0.x 版本 |
| `react-router-dom` | ^6.21.0 | 6.x | 🟢 未使用 | 死依赖 |
| `eslint` | ^8.55.0 | v9.x | 🟡 已停维 | flat config 迁移 |
| `react` / `react-dom` | ^18.2.0 | 18.3.x | 🟢 稳定 | — |
| `@xterm/xterm` | ^5.5.0 | 5.5.x | 🟢 最新 | — |
| `ssh2` | ^1.15.0 | 1.15.x | 🟢 稳定 | — |
---
## 测试评估
### 现状
| 测试文件 | 用例数 | 覆盖模块 |
|----------|--------|----------|
| `test/stores/tabStore.test.ts` | 15 | tabStore(完整) |
| `test/stores/connectionPool.test.ts` | 7 | poolStore(仅接口验证) |
| `test/components/sftp/utils.test.ts` | 12 | sftp/utils.ts(完整) |
| **总计** | **34** | — |
### 未覆盖的关键模块
| 模块 | 代码行数 | 优先级 | 说明 |
|------|----------|--------|------|
| `ssh-service.ts` | 685 | P0 | SSH 连接/Shell/端口转发核心 |
| `crypto.ts` | ~100 | P0 | 加密/解密必须验证正确性 |
| `database-service.ts` | 310 | P1 | 数据持久化 |
| `TerminalView.tsx` | 645 | P1 | 核心终端组件 |
| `useSFTP.ts` | 510 | P1 | SFTP 全部操作 |
| `ipc/*.ts` (8个) | ~600 | P1 | IPC 通道处理 |
| `error-handler.ts` | 330 | P2 | 错误处理工具 |
| `poolStore.ts` | 402 | P2 | 连接池逻辑 |
| `lifecycleStore.ts` | 235 | P2 | 生命周期管理 |
**估算覆盖率: ~10-15%**(vitest.config.ts 设定 50% 阈值,实际远未达到)
---
## 安全评估
### 加密实现 ✅ 优秀
| 评估项 | 状态 | 说明 |
|--------|------|------|
| AES-256-GCM | ✅ | 认证加密,防篡改 |
| PBKDF2 密钥派生 | ✅ | 100,000 迭代 |
| 随机 Salt + IV | ✅ | 每次加密独立 |
| Master Key 文件权限 | ✅ | 0o600 |
| Auth Tag 验证 | ✅ | 解密时校验完整性 |
### 安全隐患 ⚠️
| 问题 | 严重性 | 说明 |
|------|--------|------|
| 密码可能明文通过 IPC | 🔴 | Session 类型含 password 字段,需确认传输时是否加密 |
| SSH 私钥通过 IPC 明文 | 🟡 | `sshConnect(config: any)` 私钥内容明文传递 |
| `sandbox: false` | 🟡 | preload 未启用沙箱 |
| CSP `unsafe-inline` | 🟡 | 削弱 XSS 防护 |
| IPC 无输入验证 | 🟡 | 所有 IPC 调用参数无 schema 验证 |
---
## 性能指标
| 指标 | 当前值 | 目标值 | 达标 |
|------|--------|--------|------|
| 冷启动时间 | ~3s | <2s | ❌ |
| SSH 连接速度 | ~1s | <500ms | ❌ |
| 终端输入延迟 | <16ms | <10ms | ✅ |
| 内存占用(10标签) | ~200MB | <150MB | ❌ |
| 标签切换延迟 | <50ms | <100ms | ✅ |
| 包体积 | ~120MB | <100MB | ❌ |
---
## 优化方向与目标
### v1.1.0 — 代码质量清理 (预计 1 周)
**目标**: 清除生产代码中的调试残留,提升代码质量评分至 70+
| 任务 | 优先级 | 影响文件 | 预计工时 |
|------|--------|----------|----------|
| 移除所有 console.log / 调试函数 | P0 | `TerminalView.tsx`, `useSFTP.ts`, `ssh-service.ts` | 4h |
| 移除 `DEBUG = true` 硬编码 | P0 | `TerminalView.tsx:16` | 0.5h |
| 移除 Mock 数据 | P0 | `useSFTP.ts:154-161` | 1h |
| 补全 SFTP 上传功能 | P0 | `useSFTP.ts` | 4h |
| 补全 disconnect() 资源释放 | P1 | `useSFTP.ts:359-373` | 2h |
| Math.random → uuid | P1 | `TerminalView.tsx` | 1h |
| IPC 通道名引用常量 | P2 | `preload.ts` | 2h |
| 移除未使用依赖 react-router-dom | P2 | `package.json` | 0.5h |
**验收标准**:
- `grep -r "console.log" src/ electron/` 返回 0 结果
- `grep -r "DEBUG = true" src/` 返回 0 结果
- SFTP 上传功能端到端可用
### v1.2.0 — 组件拆分重构 (预计 1.5 周)
**目标**: TerminalView 拆分为可维护的模块,架构评分提升至 80+
| 任务 | 优先级 | 说明 |
|------|--------|------|
| TerminalView → useTerminal Hook | P0 | 提取连接管理、Shell 数据处理 |
| TerminalView → useTerminalSnapshot Hook | P0 | 提取快照保存/恢复逻辑 |
| TerminalView → useZmodem Hook | P1 | 提取 rz/sz 文件传输逻辑 |
| useSFTP → useSFTPNavigation + useSFTPTransfer | P1 | 分离导航和传输职责 |
| App.tsx → 导入/导出逻辑抽到 service | P2 | 分离业务逻辑 |
| Store 解耦 | P2 | lifecycleStore 不直接操作 poolStore |
**验收标准**:
- 单文件不超过 300 行
- Hook 职责单一,可独立测试
### v1.3.0 — 测试覆盖达标 (预计 2 周)
**目标**: 核心模块测试覆盖率 60%+,测试评分提升至 50+
| 阶段 | 目标模块 | 用例目标 |
|------|----------|----------|
| 第一批(P0) | `crypto.ts`, `ssh-service.ts`(mock ssh2) | 30+ |
| 第二批(P1) | `database-service.ts`, `error-handler.ts`, `poolStore.ts` | 40+ |
| 第三批(P1) | `IPC handlers`(8个), `TerminalView`(组件测试) | 50+ |
| 第四批(P2) | `useSFTP`, `lifecycleStore`, `tabStore`补充 | 30+ |
**验收标准**:
- `npm test -- --coverage` 总覆盖率 ≥ 50%
- 核心模块(crypto, ssh-service) 覆盖率 ≥ 80%
### v1.4.0 — 依赖升级 + 安全加固 (预计 1 周)
**目标**: 依赖更新到稳定版本,安全评分提升至 75+
| 任务 | 优先级 | 风险 |
|------|--------|------|
| Electron v28 → v33+ | P0 | Breaking changes 需逐一适配 |
| better-sqlite3 v9 → v11 | P0 | API 有变化 |
| ESLint v8 → v9 flat config | P1 | 配置迁移 |
| Zustand v4 → v5 | P2 | 订阅 API 变化 |
| 启用 sandbox 模式 | P1 | preload 需适配 |
| CSP 移除 unsafe-inline | P1 | Tailwind 需配置 |
| IPC 参数 schema 验证 | P2 | 引入 zod 或类似库 |
### v1.5.0 — 功能补全 + 性能优化 (预计 2 周)
**目标**: 补全缺失功能,性能指标全面达标
| 任务 | 优先级 | 说明 |
|------|--------|------|
| SFTP 拖拽上传/下载 | P1 | 界面就绪,补全事件处理 |
| SFTP 断点续传 | P2 | 大文件传输可靠性 |
| 会话分组树形显示 | P2 | 侧边栏优化 |
| 终端分屏 | P3 | 水平/垂直分屏 |
| 安装包体积优化 | P1 | asar + tree-shaking + 依赖瘦身 |
| 冷启动优化 | P1 | 延迟加载非核心模块 |
---
## 里程碑总览
```
v1.1.0 代码质量清理 (1 周) → 代码质量 45→70
v1.2.0 组件拆分重构 (1.5 周) → 架构 72→85
v1.3.0 测试覆盖达标 (2 周) → 测试 15→50
v1.4.0 依赖升级+安全 (1 周) → 安全 55→75
v1.5.0 功能补全+性能 (2 周) → 功能 82→95
总计: ~7.5 周 → 综合评分 58→80+
```
### 成功指标
| 指标 | v1.0 当前 | v1.5 目标 |
|------|-----------|-----------|
| 综合评分 | 58/100 | 80+/100 |
| 测试覆盖率 | ~10% | ≥50% |
| 代码质量(零console.log) | 50+ 处 | 0 处 |
| 单文件最大行数 | 685 | ≤300 |
| Electron 版本 | v28 | v33+ |
| 安全评分 | 55 | 75+ |
| 包体积 | ~120MB | <100MB |
+133 -262
View File
@@ -1,295 +1,166 @@
# ROADMAP.md - 开发路线图 # ROADMAP.md - OpsXShell 开发路线图
本文档规划 OpsXShell 的版本迭代和开发方向。 ## 版本规划总览
--- ```
v1.1.0 基础可用 ─── 2 周 ──→ UI/UX 48→65, 代码 58→68
## 版本规划概览 v1.2.0 体验升级 ─── 2 周 ──→ UI/UX 65→78, 代码 68→75
v1.3.0 测试覆盖 ─── 2 周 ──→ 测试 15→50%, 代码 75→80
| 版本 | 代号 | 目标 | 状态 | v1.4.0 专业功能 ─── 2 周 ──→ UI/UX 78→88, 功能完成度 90+
|------|------|------|------| v1.5.0 安全升级 ─── 1 周 ──→ 安全 55→85, 代码 80→85
| v0.1.0 | **Alpha** | 功能骨架 + 核心 SSH | ✅ 已完成 |
| v0.2.0 | **Beta** | 功能补全 + 稳定性 | ✅ 已完成 |
| v0.3.0 | **RC** | 性能优化 + 加密 | ✅ 已完成 |
| v0.4.0 | **Pre-Stable** | UI 完善 | ✅ 已完成 |
| v0.5.0 | **Pre-Stable** | SFTP 传输优化 | ✅ 已完成 |
| v0.6.0 | **Pre-Stable** | 终端 rz/sz 支持 | ✅ 已完成 |
| v0.7.0 | **Professional** | 专业连接管理 | ✅ 已完成 |
| v0.8.0 | **Modular** | 架构模块化重构 | ✅ 已完成 |
| v0.9.0 | **Optimization** | P0/P1 全面优化 | ✅ 已完成 |
| v0.10.0 | **v0.3.0-release** | 核心功能实现 | ✅ 已完成 |
| v1.0.0 | **Stable** | 生产可用 | ✅ 已完成 |
| **v1.1.0** | **Cleanup** | **代码质量清理** | 🔄 进行中 |
| **v1.2.0** | **Refactor** | **组件拆分重构** | 📋 规划中 |
| **v1.3.0** | **Testing** | **测试覆盖达标** | 📋 规划中 |
| **v1.4.0** | **Upgrade** | **依赖升级+安全加固** | 📋 规划中 |
| **v1.5.0** | **Polish** | **功能补全+性能优化** | 📋 规划中 |
| v2.0.0 | **Professional** | 专业版发布 | 📋 远期规划 |
---
## v1.1.0 代码质量清理 🔄
**目标**: 清除生产代码中的调试残留,补全 SFTP 核心功能
**预计**: 1 周
**评分目标**: 代码质量 45→70
### 任务清单
| # | 任务 | 优先级 | 文件 | 状态 |
|---|------|--------|------|------|
| 1 | 移除所有 console.log 和彩色调试函数 | P0 | `TerminalView.tsx`, `useSFTP.ts`, `ssh-service.ts` | ⬜ |
| 2 | 移除 `DEBUG = true` 硬编码 | P0 | `TerminalView.tsx:16` | ⬜ |
| 3 | 移除 Mock 数据残留 | P0 | `useSFTP.ts:154-161` | ⬜ |
| 4 | 补全 SFTP 上传 IPC 实现 | P0 | `useSFTP.ts:399`, `sftp.ipc.ts` | ⬜ |
| 5 | 补全 disconnect() 资源释放 | P1 | `useSFTP.ts:359-373` | ⬜ |
| 6 | Math.random → uuid 生成 ID | P1 | `TerminalView.tsx:383,463` | ⬜ |
| 7 | IPC 通道名引用 IPC_CHANNELS 常量 | P2 | `preload.ts` | ⬜ |
| 8 | 移除未使用依赖 react-router-dom | P2 | `package.json` | ⬜ |
| 9 | 替换重复的彩色日志函数为统一 logger | P2 | `TerminalView.tsx`, `useSFTP.ts` | ⬜ |
| 10 | 修复 `if (false)` 等无用代码 | P2 | `TerminalView.tsx:50` | ⬜ |
### 验收标准
```bash
# 零调试残留
grep -r "console.log" src/ electron/ | wc -l # → 0
grep -r "DEBUG = true" src/ | wc -l # → 0
grep -r "logHeader\|logInfo\|logSuccess\|logError\|logWarning" src/ electron/ | wc -l # → 0
# SFTP 上传功能可用
# 手动测试:连接 → SFTP → 上传文件 → 验证远端文件存在
``` ```
--- ---
## v1.2.0 组件拆分重构 📋 ## v1.1.0 基础可用 (2 周) — 当前阶段
**目标**: 终端组件拆分为可维护的 Hook 体系 > **目标**: 解决所有 Critical UI/UX 问题,建立基础反馈系统,产品具备日常使用价值
**预计**: 1.5 周
**评分目标**: 架构 72→85
### 拆分计划 ### 🔴 P0 — 必须完成
#### TerminalView.tsx (645行) → 拆分 | # | 任务 | 类型 | 预计 | 验收标准 |
|---|------|------|------|----------|
| 1 | Toast 通知系统 | 新增 | 2天 | `useToast()` hook + `ToastContainer`,支持 success/error/warning/info 四种类型,自动消失+手动关闭 |
| 2 | 替换所有 alert/prompt/confirm | 修复 | 2天 | `App.tsx` 5处 alert → Toast,`SFTPView.tsx` prompt → 内联输入,`PortForwardView.tsx` confirm → ConfirmDialog |
| 3 | SFTP 上传/删除真实实现 | 修复 | 3天 | 上传通过 ssh2 sftp fastPut 实现,删除通过 rimraf/unlink 实现,右键菜单 action 绑定真实函数 |
| 4 | 终端搜索 (SearchAddon) | 新增 | 1天 | Ctrl+Shift+F 打开搜索栏,支持正则/大小写/全词匹配,高亮所有匹配 |
| 5 | 会话恢复 | 新增 | 3天 | 关闭前持久化标签状态到 SQLite,启动时恢复标签+自动重连 |
| 6 | 修复私钥浏览按钮 | 修复 | 0.5天 | dialog.showOpenDialog() 绑定到 onClick,过滤 `.pem/.key/id_*` |
| 7 | 清理生产调试日志 | 修复 | 1天 | 移除 `DEBUG=true`,所有 console.log 用 logger 替代或删除 |
| 8 | 设计系统统一颜色 | 修复 | 1天 | cyan→accent-blue, sky→accent-blue, slate→dark-*,新增 accent-orange |
| 9 | StatusBar 接入实际状态 | 修复 | 0.5天 | 显示当前连接 host、延迟 ms、标签数 |
| 10 | WelcomeView 真实最近连接 | 修复 | 1天 | 从 sessionStore 获取最近 5 条连接记录,空状态显示引导 |
``` ### 里程碑推送
src/components/terminal/TerminalView.tsx (~150行) 纯渲染层 - [ ] SFTP 功能可用 (上传+删除+右键菜单)
src/hooks/useTerminal.ts (~200行) 终端初始化 + 数据流 - [ ] Toast 系统上线 (零 alert)
src/hooks/useTerminalConnection.ts (~150行) SSH 连接管理 - [ ] 终端搜索可用
src/hooks/useTerminalSnapshot.ts (~100行) 快照保存/恢复 - [ ] 会话恢复可用
src/hooks/useZmodem.ts (~100行) rz/sz 文件传输
```
#### useSFTP.ts (510行) → 拆分
```
src/hooks/useSFTPNavigation.ts (~200行) 本地/远程目录导航
src/hooks/useSFTPTransfer.ts (~200行) 上传/下载/传输队列
src/hooks/useSFTPConnection.ts (~100行) SFTP 连接管理
```
#### App.tsx (258行) → 业务逻辑外提
```
src/components/App.tsx (~150行) 纯 UI 编排
src/services/sessionImport.ts (~80行) 导入/导出逻辑
```
### Store 解耦
```
当前: lifecycleStore → 直接调用 poolStore.getState()
目标: 引入 ConnectionFacade 统一接口,Store 通过事件通信
```
### 验收标准
- 单文件不超过 300 行
- Hook 可独立导入、独立测试
- 现有功能无回归
--- ---
## v1.3.0 测试覆盖达标 📋 ## v1.2.0 体验升级 (2 周)
**目标**: 核心模块测试覆盖率 ≥60%,总覆盖率 ≥50% > **目标**: 快捷键补全、视觉打磨、交互优化,接近 Termius 体验水平
**预计**: 2 周
**评分目标**: 测试 15→50
### 测试批次 ### 🟡 P1 — 重要
| 批次 | 目标模块 | 用例目标 | 优先级 | | # | 任务 | 类型 | 预计 | 验收标准 |
|------|----------|----------|--------| |---|------|------|------|----------|
| 1 | `crypto.ts` (加密/解密正确性) | 15+ | P0 | | 1 | Ctrl+Tab / Ctrl+1~9 标签切换 | 新增 | 1天 | Ctrl+Tab 前后切换,Ctrl+1~9 跳转指定标签 |
| 2 | `ssh-service.ts` (mock ssh2) | 20+ | P0 | | 2 | 标签拖拽排序 | 新增 | 2天 | 拖拽标签头重排序,拖出标签栏可弹出新窗口(可选) |
| 3 | `database-service.ts` (CRUD) | 15+ | P1 | | 3 | SFTP 拖拽上传 | 新增 | 2天 | 从系统文件管理器拖拽文件到远程面板触发上传 |
| 4 | `error-handler.ts` (错误推断) | 10+ | P1 | | 4 | SFTP 右键菜单完善 | 完善 | 1天 | 新增:权限编辑、属性查看、重命名、复制路径 |
| 5 | `poolStore.ts` + `lifecycleStore.ts` | 20+ | P1 | | 5 | 侧边栏会话分组折叠 | 完善 | 1天 | 点击分组头折叠/展开,带动画 |
| 6 | `IPC handlers` (8个模块) | 25+ | P1 | | 6 | Sidebar 宽度可拖拽调整 | 新增 | 1天 | 拖拽分隔条调整宽度,记忆到 settings |
| 7 | `TerminalView` 组件测试 | 10+ | P2 | | 7 | 响应式布局基础 | 新增 | 2天 | 窄窗口(<800px)自动折叠侧边栏,SFTP 垂直堆叠 |
| 8 | `useSFTP` hooks 测试 | 15+ | P2 | | 8 | Loading/Skeleton 加载态 | 新增 | 1天 | FileListPanel 加载时显示骨架屏,SessionTree 同理 |
| **总计** | | **130+** | | | 9 | 空状态设计 | 新增 | 1天 | 每个组件空状态有引导文案+操作按钮 |
| 10 | TerminalView 组件拆分 | 重构 | 3天 | 645行拆为 TerminalCore + TerminalOverlay + TerminalSearch |
### 验收标准 ### 视觉优化清单
```bash | # | 文件 | 改进 |
npm test -- --coverage |---|------|------|
# Statements ≥ 50% | V-1 | StatusBar.tsx | `bg-accent-blue` → `bg-dark-800 border-t` |
# Branches ≥ 40% | V-2 | SFTPView.tsx | emoji 图标 → Lucide 组件 |
# Functions ≥ 50% | V-3 | TabBar.tsx | 添加活跃标签底部指示线 |
# Lines ≥ 50% | V-4 | App.tsx | Sidebar 折叠/展开过渡动画 |
``` | V-5 | WelcomeView.tsx | 响应式 grid-cols-1 sm:grid-cols-2 |
--- ---
## v1.4.0 依赖升级 + 安全加固 📋 ## v1.3.0 测试覆盖 (2 周)
**目标**: 依赖更新到最新稳定版,安全漏洞清零 > **目标**: 核心模块测试覆盖率从 10% 提升到 50%
**预计**: 1 周
**评分目标**: 安全 55→75, 依赖 50→80
### 依赖升级 详细计划见 [TDD_PLAN.md](./TDD_PLAN.md)
| 依赖 | 当前 | 目标 | 风险 | | # | 模块 | 当前覆盖 | 目标覆盖 | 预计 |
|------|------|------|------| |---|------|----------|----------|------|
| `electron` | v28 | v33+ | 高 - Breaking changes | | 1 | stores (tab/connection/settings/session) | 0% | 70% | 3天 |
| `better-sqlite3` | v9 | v11 | 中 - API 变化 | | 2 | hooks (useTerminal/useSFTP/useConnection) | 0% | 50% | 3天 |
| `zustand` | v4 | v5 | 低 - 订阅 API 变化 | | 3 | electron services (ssh/sftp/database/crypto) | 0% | 60% | 4天 |
| `lucide-react` | 0.294 | 0.4xx | 低 - 图标名可能有变化 | | 4 | 组件渲染测试 (WelcomeView/TabBar/SFTPView) | 5% | 40% | 3天 |
| `eslint` | v8 | v9 | 中 - flat config 迁移 |
### 安全加固 ---
| 任务 | 说明 | ## v1.4.0 专业功能 (2 周)
> **目标**: 快捷键自定义、终端分屏、i18n,达到专业级水平
| # | 任务 | 类型 | 预计 | 验收标准 |
|---|------|------|------|----------|
| 1 | 快捷键自定义系统 | 新增 | 3天 | 设置页快捷键 Tab,可重映射所有快捷键,冲突检测 |
| 2 | 终端分屏 | 新增 | 5天 | 水平/垂直分割标签页,可拖拽调整分割比例 |
| 3 | i18n 国际化 | 新增 | 5天 | zh-CN + en-US,所有 UI 文字抽离到 locale 文件 |
| 4 | Light 主题 | 新增 | 3天 | 完整 light 色板,自动跟随系统 |
| 5 | Snippets 命令片段库 | 新增 | 3天 | 创建/管理/搜索命令片段,快捷键插入到终端 |
| 6 | 代理设置 | 新增 | 2天 | HTTP/SOCKS5 代理配置,按会话独立设置 |
| 7 | 多窗口支持 | 新增 | 5天 | 右键标签"在新窗口打开",窗口位置记忆 |
---
## v1.5.0 安全升级 (1 周)
> **目标**: 安全评分从 55 提升到 85
| # | 任务 | 类型 | 预计 |
|---|------|------|------|
| 1 | IPC 传输加密 (密码不明文) | 修复 | 2天 |
| 2 | Electron 升级 v28→v33+ | 升级 | 2天 |
| 3 | CSP 策略强化 | 新增 | 1天 |
| 4 | 依赖安全审计 + 更新 | 修复 | 1天 |
---
## 长期愿景 (v2.0+)
| 功能 | 描述 |
|------|------| |------|------|
| 启用 sandbox 模式 | preload 适配 | | 云同步 | 会话/设置跨设备同步 |
| CSP 移除 unsafe-inline | Tailwind nonce 配置 | | AI 助手 | 终端命令建议、错误诊断 |
| IPC 参数验证 | zod schema | | 团队协作 | 共享会话、权限管理 |
| 密码 IPC 传输审查 | 确保加密后传输 | | 插件系统 | 第三方扩展支持 |
| 审查 socksv5 安全性 | 评估是否替换 | | 脚本录制 | 操作录制+回放 |
--- ---
## v1.5.0 功能补全 + 性能优化 📋 ## 技术栈
**目标**: 补全缺失功能,性能指标全面达标 | 类别 | 技术 | 版本 |
**预计**: 2 周 |------|------|------|
**评分目标**: 功能 82→95, 综合 80+ | 框架 | Electron | 28+ (升级至 33+) |
| UI | React | 18 |
| 语言 | TypeScript | 5 |
| 构建 | Vite | 5 |
| 状态管理 | Zustand | 4 |
| 终端 | XTerm.js | 5 |
| SSH | ssh2 | 1.15 |
| 样式 | Tailwind CSS | 3 |
| 图标 | Lucide React | — |
| 数据库 | better-sqlite3 | 11 |
| 加密 | AES-256-GCM (Node crypto) | — |
### 功能补全 ## 架构设计
| 功能 | 优先级 | 说明 | ```
|------|--------|------| ┌──────────────────────────────────────────────┐
| SFTP 拖拽上传/下载 | P1 | 界面已就绪,补全 drag/drop 事件 | │ Electron Main │
| SFTP 断点续传 | P2 | 大文件传输可靠性 | │ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │
| 会话分组树形显示 | P2 | 侧边栏分组 + 文件夹 | │ │ Window │ │ IPC │ │ Services │ │
| 终端分屏 | P3 | 水平/垂直分屏 | │ │ Manager │ │ Handlers │ │ SSH/SFTP/DB │ │
| 命令片段(Snippets) | P3 | 常用命令快速执行 | │ └─────────┘ └──────────┘ └───────────────┘ │
| 同步功能 | P3 | 多设备会话同步 | ├──────────────────────────────────────────────┤
│ React Renderer │
### 性能优化 │ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Views │ │ Stores │ │ Hooks │ │
| 指标 | 当前 | 目标 | 方案 | │ │Term/SFTP│ │Zustand x5│ │useTerm/useSFTP│ │
|------|------|------|------| │ └─────────┘ └──────────┘ └───────────────┘ │
| 冷启动 | ~3s | <2s | 延迟加载非核心模块 | │ ┌─────────────────────────────────────────┐ │
| 包体积 | ~120MB | <100MB | asar + tree-shaking | │ │ Components (Button/Modal/...) │ │
| 内存(10标签) | ~200MB | <150MB | 连接池优化 + 终端回收 | │ └─────────────────────────────────────────┘ │
| SSH 连接 | ~1s | <500ms | 连接预热 | ├──────────────────────────────────────────────┤
│ Shared (types/constants) │
--- └──────────────────────────────────────────────┘
```
## 远期规划 (v2.0.0)
### 专业版特性
- 插件系统 — 支持第三方扩展
- 主题编辑器 — 自定义配色方案
- 脚本录制/回放 — 操作自动化
- 协作共享 — 团队会话管理
- 云同步 — 加密会话配置同步
- API 网关 — 命令行/CI 集成
- 容器管理 — Docker/Podman 集成
---
## 已完成版本
<details>
<summary>展开查看历史版本</summary>
### v1.0.0 Stable - 生产可用 ✅
**状态**: 已完成
#### 功能完成清单
##### SSH 终端
- ✅ 密码/密钥认证
- ✅ XTerm.js 高性能终端
- ✅ 多主题配色方案
- ✅ IP 地址高亮显示
##### SFTP 管理
- ✅ 双栏文件管理器
- ✅ 上传/下载文件
- ✅ 传输队列管理
- 🟡 拖拽上传下载 (界面就绪,待完善)
- 📋 断点续传 (规划中)
##### 端口转发
- ✅ 本地端口转发
- ✅ 远程端口转发
- ✅ 动态 SOCKS5 代理
- ✅ 转发规则管理
##### 架构特性
- ✅ IPC Handler 模块化
- ✅ 共享类型定义
- ✅ 连接池 Store 拆分
- ✅ 统一日志系统
### v0.10.0 v0.3.0-release ✅
**完成日期**: 2026-04-06
- ✅ SSH 终端核心功能(密码/密钥认证、XTerm.js、多主题、IP高亮、端口转发)
- ✅ SFTP 文件管理(双栏、上传下载、传输队列、服务器选择)
- ✅ 架构改进(模块化 IPC、连接池管理、统一日志、错误处理)
### v0.9.0 Optimization ✅
**完成日期**: 2026-04-05
- ✅ 测试框架建立(Vitest + 38 测试用例)
- ✅ SFTP 右键菜单(新建文件夹/复制路径/属性)
- ✅ WebGL 终端渲染优化
- ✅ 会话导入完整实现
### v0.8.0 Modular ✅
**完成日期**: 2026-04-05
- ✅ IPC Handler 分层(8 个独立模块)
- ✅ 共享类型统一
- ✅ 连接池 Store 拆分
- ✅ SFTP 组件拆分
### v0.7.0 Professional ✅
**完成日期**: 2026-04-05
- ✅ 连接状态机(6 个状态)
- ✅ 连接池管理(LRU淘汰、保活、超时)
- ✅ 终端快照机制
- ✅ 多标签连接隔离
### v0.6.0 ~ v0.1.0 ✅
- ✅ rz/sz 文件传输
- ✅ SFTP 传输队列优化
- ✅ AES-256-GCM 加密存储
- ✅ 端口转发
- ✅ 功能骨架 + 核心 SSH
</details>