diff --git a/PROJECT_EVALUATION.md b/PROJECT_EVALUATION.md index a7a8de6..a71376a 100644 --- a/PROJECT_EVALUATION.md +++ b/PROJECT_EVALUATION.md @@ -9,47 +9,315 @@ | 日期 | 版本 | 评分 | 主要变更 | |------|------|------|----------| | 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-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 上传为简化实现 | -| **代码质量** | 45/100 | 20% | 9.0 | 调试日志残留严重,组件过大,Mock 数据残留 | -| **测试覆盖** | 15/100 | 20% | 3.0 | 仅 34 测试用例,核心模块零覆盖 | -| **架构设计** | 72/100 | 15% | 10.8 | IPC 分层合理,Store 有耦合,组件拆分不足 | -| **安全合规** | 55/100 | 10% | 5.5 | 加密实现优秀,但密码明文传输风险、CSP 不严格 | -| **依赖管理** | 50/100 | 5% | 2.5 | Electron v28 过旧,better-sqlite3 严重过时 | -| **构建配置** | 75/100 | 5% | 3.75 | 配置合理,dev 脚本跨平台兼容性差 | - -**综合评分: 58/100** — 功能原型阶段,距生产可用尚有差距 - -### 评分对比 +| 维度 | 分数 | 评级 | 说明 | +|------|------|------|------| +| **视觉设计** | 65/100 | 🟡 中等 | 深色主题配色专业,但设计系统执行不严格 | +| **交互体验** | 40/100 | 🔴 差 | 大量半成品功能,反馈系统缺失 | +| **功能便捷性** | 45/100 | 🔴 差 | 快捷键薄弱,核心操作路径长 | +| **状态处理** | 35/100 | 🔴 差 | 多组件缺空状态/加载/错误三态 | +| **响应式设计** | 10/100 | 🔴 极差 | 完全缺失 | ``` -功能完成度 ████████████████████░░░░░ 82% 功能基本齐全 -代码质量 ██████████░░░░░░░░░░░░░░░ 45% 调试代码残留严重 -测试覆盖 ███░░░░░░░░░░░░░░░░░░░░░░ 15% 核心模块零测试 -架构设计 █████████████████░░░░░░░░ 72% IPC 分层好,Store 有耦合 -安全合规 █████████████░░░░░░░░░░░░ 55% 加密好,传输链路有风险 -依赖管理 ████████████░░░░░░░░░░░░░ 50% 多个依赖严重过时 -构建配置 ██████████████████░░░░░░░ 75% 基本合理 +视觉设计 ████████████████░░░░░░░░░ 65% 配色专业但执行不严格 +交互体验 ██████████░░░░░░░░░░░░░░░ 40% alert/prompt泛滥,无Toast +功能便捷性 ███████████░░░░░░░░░░░░░░ 45% 快捷键仅4个,无终端搜索 +状态处理 ████████░░░░░░░░░░░░░░░░░ 35% 多组件缺三态 +响应式设计 ██░░░░░░░░░░░░░░░░░░░░░░░ 10% 完全缺失 ``` +### 竞品对标 + +| 维度 | 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% | | `test/` | 4 | 475 | 4.2% | | **总计** | **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 | diff --git a/ROADMAP.md b/ROADMAP.md index caa760e..58bc6da 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,295 +1,166 @@ -# ROADMAP.md - 开发路线图 +# ROADMAP.md - OpsXShell 开发路线图 -本文档规划 OpsXShell 的版本迭代和开发方向。 +## 版本规划总览 ---- - -## 版本规划概览 - -| 版本 | 代号 | 目标 | 状态 | -|------|------|------|------| -| 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.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 ``` --- -## v1.2.0 组件拆分重构 📋 +## v1.1.0 基础可用 (2 周) — 当前阶段 -**目标**: 终端组件拆分为可维护的 Hook 体系 -**预计**: 1.5 周 -**评分目标**: 架构 72→85 +> **目标**: 解决所有 Critical UI/UX 问题,建立基础反馈系统,产品具备日常使用价值 -### 拆分计划 +### 🔴 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行) 纯渲染层 -src/hooks/useTerminal.ts (~200行) 终端初始化 + 数据流 -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 可独立导入、独立测试 -- 现有功能无回归 +### 里程碑推送 +- [ ] SFTP 功能可用 (上传+删除+右键菜单) +- [ ] Toast 系统上线 (零 alert) +- [ ] 终端搜索可用 +- [ ] 会话恢复可用 --- -## v1.3.0 测试覆盖达标 📋 +## v1.2.0 体验升级 (2 周) -**目标**: 核心模块测试覆盖率 ≥60%,总覆盖率 ≥50% -**预计**: 2 周 -**评分目标**: 测试 15→50 +> **目标**: 快捷键补全、视觉打磨、交互优化,接近 Termius 体验水平 -### 测试批次 +### 🟡 P1 — 重要 -| 批次 | 目标模块 | 用例目标 | 优先级 | -|------|----------|----------|--------| -| 1 | `crypto.ts` (加密/解密正确性) | 15+ | P0 | -| 2 | `ssh-service.ts` (mock ssh2) | 20+ | P0 | -| 3 | `database-service.ts` (CRUD) | 15+ | P1 | -| 4 | `error-handler.ts` (错误推断) | 10+ | P1 | -| 5 | `poolStore.ts` + `lifecycleStore.ts` | 20+ | P1 | -| 6 | `IPC handlers` (8个模块) | 25+ | P1 | -| 7 | `TerminalView` 组件测试 | 10+ | P2 | -| 8 | `useSFTP` hooks 测试 | 15+ | P2 | -| **总计** | | **130+** | | +| # | 任务 | 类型 | 预计 | 验收标准 | +|---|------|------|------|----------| +| 1 | Ctrl+Tab / Ctrl+1~9 标签切换 | 新增 | 1天 | Ctrl+Tab 前后切换,Ctrl+1~9 跳转指定标签 | +| 2 | 标签拖拽排序 | 新增 | 2天 | 拖拽标签头重排序,拖出标签栏可弹出新窗口(可选) | +| 3 | SFTP 拖拽上传 | 新增 | 2天 | 从系统文件管理器拖拽文件到远程面板触发上传 | +| 4 | SFTP 右键菜单完善 | 完善 | 1天 | 新增:权限编辑、属性查看、重命名、复制路径 | +| 5 | 侧边栏会话分组折叠 | 完善 | 1天 | 点击分组头折叠/展开,带动画 | +| 6 | Sidebar 宽度可拖拽调整 | 新增 | 1天 | 拖拽分隔条调整宽度,记忆到 settings | +| 7 | 响应式布局基础 | 新增 | 2天 | 窄窗口(<800px)自动折叠侧边栏,SFTP 垂直堆叠 | +| 8 | Loading/Skeleton 加载态 | 新增 | 1天 | FileListPanel 加载时显示骨架屏,SessionTree 同理 | +| 9 | 空状态设计 | 新增 | 1天 | 每个组件空状态有引导文案+操作按钮 | +| 10 | TerminalView 组件拆分 | 重构 | 3天 | 645行拆为 TerminalCore + TerminalOverlay + TerminalSearch | -### 验收标准 +### 视觉优化清单 -```bash -npm test -- --coverage -# Statements ≥ 50% -# Branches ≥ 40% -# Functions ≥ 50% -# Lines ≥ 50% -``` +| # | 文件 | 改进 | +|---|------|------| +| V-1 | StatusBar.tsx | `bg-accent-blue` → `bg-dark-800 border-t` | +| V-2 | SFTPView.tsx | emoji 图标 → Lucide 组件 | +| V-3 | TabBar.tsx | 添加活跃标签底部指示线 | +| V-4 | App.tsx | Sidebar 折叠/展开过渡动画 | +| V-5 | WelcomeView.tsx | 响应式 grid-cols-1 sm:grid-cols-2 | --- -## v1.4.0 依赖升级 + 安全加固 📋 +## v1.3.0 测试覆盖 (2 周) -**目标**: 依赖更新到最新稳定版,安全漏洞清零 -**预计**: 1 周 -**评分目标**: 安全 55→75, 依赖 50→80 +> **目标**: 核心模块测试覆盖率从 10% 提升到 50% -### 依赖升级 +详细计划见 [TDD_PLAN.md](./TDD_PLAN.md) -| 依赖 | 当前 | 目标 | 风险 | -|------|------|------|------| -| `electron` | v28 | v33+ | 高 - Breaking changes | -| `better-sqlite3` | v9 | v11 | 中 - API 变化 | -| `zustand` | v4 | v5 | 低 - 订阅 API 变化 | -| `lucide-react` | 0.294 | 0.4xx | 低 - 图标名可能有变化 | -| `eslint` | v8 | v9 | 中 - flat config 迁移 | +| # | 模块 | 当前覆盖 | 目标覆盖 | 预计 | +|---|------|----------|----------|------| +| 1 | stores (tab/connection/settings/session) | 0% | 70% | 3天 | +| 2 | hooks (useTerminal/useSFTP/useConnection) | 0% | 50% | 3天 | +| 3 | electron services (ssh/sftp/database/crypto) | 0% | 60% | 4天 | +| 4 | 组件渲染测试 (WelcomeView/TabBar/SFTPView) | 5% | 40% | 3天 | -### 安全加固 +--- -| 任务 | 说明 | +## 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 配置 | -| IPC 参数验证 | zod schema | -| 密码 IPC 传输审查 | 确保加密后传输 | -| 审查 socksv5 安全性 | 评估是否替换 | +| 云同步 | 会话/设置跨设备同步 | +| AI 助手 | 终端命令建议、错误诊断 | +| 团队协作 | 共享会话、权限管理 | +| 插件系统 | 第三方扩展支持 | +| 脚本录制 | 操作录制+回放 | --- -## 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 事件 | -| SFTP 断点续传 | P2 | 大文件传输可靠性 | -| 会话分组树形显示 | P2 | 侧边栏分组 + 文件夹 | -| 终端分屏 | P3 | 水平/垂直分屏 | -| 命令片段(Snippets) | P3 | 常用命令快速执行 | -| 同步功能 | P3 | 多设备会话同步 | - -### 性能优化 - -| 指标 | 当前 | 目标 | 方案 | -|------|------|------|------| -| 冷启动 | ~3s | <2s | 延迟加载非核心模块 | -| 包体积 | ~120MB | <100MB | asar + tree-shaking | -| 内存(10标签) | ~200MB | <150MB | 连接池优化 + 终端回收 | -| SSH 连接 | ~1s | <500ms | 连接预热 | - ---- - -## 远期规划 (v2.0.0) - -### 专业版特性 - -- 插件系统 — 支持第三方扩展 -- 主题编辑器 — 自定义配色方案 -- 脚本录制/回放 — 操作自动化 -- 协作共享 — 团队会话管理 -- 云同步 — 加密会话配置同步 -- API 网关 — 命令行/CI 集成 -- 容器管理 — Docker/Podman 集成 - ---- - -## 已完成版本 - -
-展开查看历史版本 - -### 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 - -
+``` +┌──────────────────────────────────────────────┐ +│ Electron Main │ +│ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │ +│ │ Window │ │ IPC │ │ Services │ │ +│ │ Manager │ │ Handlers │ │ SSH/SFTP/DB │ │ +│ └─────────┘ └──────────┘ └───────────────┘ │ +├──────────────────────────────────────────────┤ +│ React Renderer │ +│ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │ +│ │ Views │ │ Stores │ │ Hooks │ │ +│ │Term/SFTP│ │Zustand x5│ │useTerm/useSFTP│ │ +│ └─────────┘ └──────────┘ └───────────────┘ │ +│ ┌─────────────────────────────────────────┐ │ +│ │ Components (Button/Modal/...) │ │ +│ └─────────────────────────────────────────┘ │ +├──────────────────────────────────────────────┤ +│ Shared (types/constants) │ +└──────────────────────────────────────────────┘ +```