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:
1 parent
60c3d868c5
commit
c5243df040
2 files changed
+428
-560
No files matched your search
+295
-298
@@ -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
@@ -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>
|
|
||||||
Reference in new issue
Block a user