Add three key documents to guide the project restructure: - REFACTORING_MASTER_PLAN.md: Complete refactoring roadmap with 6 stages - REFACTORING_CHECKLIST.md: Detailed task checklist for tracking progress - REFACTORING_REFERENCE.md: Technical reference and implementation guide This refactoring aims to modernize the codebase with React Query, react-hook-form, zod validation, and shadcn/ui components while maintaining the current Tailwind CSS 4.x stack. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
490 lines
11 KiB
Markdown
490 lines
11 KiB
Markdown
# CC Switch 重构实施清单
|
|
|
|
> 用于跟踪重构进度的详细检查清单
|
|
|
|
**开始日期**: ___________
|
|
**预计完成**: ___________
|
|
**当前阶段**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 0: 准备阶段 (预计 1 天)
|
|
|
|
### 环境准备
|
|
|
|
- [ ] 创建新分支 `refactor/modernization`
|
|
- [ ] 创建备份标签 `git tag backup-before-refactor`
|
|
- [ ] 备份用户配置文件 `~/.cc-switch/config.json`
|
|
- [ ] 通知团队成员重构开始
|
|
|
|
### 依赖安装
|
|
|
|
```bash
|
|
pnpm add @tanstack/react-query
|
|
pnpm add react-hook-form @hookform/resolvers
|
|
pnpm add zod
|
|
pnpm add sonner
|
|
pnpm add next-themes
|
|
pnpm add @radix-ui/react-dialog @radix-ui/react-dropdown-menu
|
|
pnpm add @radix-ui/react-label @radix-ui/react-select
|
|
pnpm add @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs
|
|
pnpm add class-variance-authority clsx tailwind-merge tailwindcss-animate
|
|
```
|
|
|
|
- [ ] 安装核心依赖 (上述命令)
|
|
- [ ] 验证依赖安装成功 `pnpm install`
|
|
- [ ] 验证编译通过 `pnpm typecheck`
|
|
|
|
### 配置文件
|
|
|
|
- [ ] 创建 `components.json`
|
|
- [ ] 更新 `tsconfig.json` 添加路径别名
|
|
- [ ] 更新 `vite.config.mts` 添加路径解析
|
|
- [ ] 验证开发服务器启动 `pnpm dev`
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 1: 基础设施 (预计 2-3 天)
|
|
|
|
### 1.1 工具函数和基础组件
|
|
|
|
- [ ] 创建 `src/lib/utils.ts` (cn 函数)
|
|
- [ ] 创建 `src/components/ui/button.tsx`
|
|
- [ ] 创建 `src/components/ui/dialog.tsx`
|
|
- [ ] 创建 `src/components/ui/input.tsx`
|
|
- [ ] 创建 `src/components/ui/label.tsx`
|
|
- [ ] 创建 `src/components/ui/textarea.tsx`
|
|
- [ ] 创建 `src/components/ui/select.tsx`
|
|
- [ ] 创建 `src/components/ui/switch.tsx`
|
|
- [ ] 创建 `src/components/ui/tabs.tsx`
|
|
- [ ] 创建 `src/components/ui/sonner.tsx`
|
|
- [ ] 创建 `src/components/ui/form.tsx`
|
|
|
|
**测试**:
|
|
- [ ] 验证所有 UI 组件可以正常导入
|
|
- [ ] 创建一个测试页面验证组件样式
|
|
|
|
### 1.2 Query Client 设置
|
|
|
|
- [ ] 创建 `src/lib/query/queryClient.ts`
|
|
- [ ] 配置默认选项 (retry, staleTime 等)
|
|
- [ ] 导出 queryClient 实例
|
|
|
|
### 1.3 API 层
|
|
|
|
- [ ] 创建 `src/lib/api/providers.ts`
|
|
- [ ] getAll
|
|
- [ ] getCurrent
|
|
- [ ] add
|
|
- [ ] update
|
|
- [ ] delete
|
|
- [ ] switch
|
|
- [ ] importDefault
|
|
- [ ] updateTrayMenu
|
|
|
|
- [ ] 创建 `src/lib/api/settings.ts`
|
|
- [ ] get
|
|
- [ ] save
|
|
|
|
- [ ] 创建 `src/lib/api/mcp.ts`
|
|
- [ ] getConfig
|
|
- [ ] upsertServer
|
|
- [ ] deleteServer
|
|
|
|
- [ ] 创建 `src/lib/api/index.ts` (聚合导出)
|
|
|
|
**测试**:
|
|
- [ ] 验证 API 调用不会出现运行时错误
|
|
- [ ] 确认类型定义正确
|
|
|
|
### 1.4 Query Hooks
|
|
|
|
- [ ] 创建 `src/lib/query/queries.ts`
|
|
- [ ] useProvidersQuery
|
|
- [ ] useSettingsQuery
|
|
- [ ] useMcpConfigQuery
|
|
|
|
- [ ] 创建 `src/lib/query/mutations.ts`
|
|
- [ ] useAddProviderMutation
|
|
- [ ] useSwitchProviderMutation
|
|
- [ ] useDeleteProviderMutation
|
|
- [ ] useUpdateProviderMutation
|
|
- [ ] useSaveSettingsMutation
|
|
|
|
- [ ] 创建 `src/lib/query/index.ts` (聚合导出)
|
|
|
|
**测试**:
|
|
- [ ] 在临时组件中测试每个 hook
|
|
- [ ] 验证 loading/error 状态正确
|
|
- [ ] 验证缓存和自动刷新工作
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 2: 核心功能重构 (预计 3-4 天)
|
|
|
|
### 2.1 主题系统
|
|
|
|
- [ ] 创建 `src/components/theme-provider.tsx`
|
|
- [ ] 创建 `src/components/mode-toggle.tsx`
|
|
- [ ] 更新 `src/index.css` 添加主题变量
|
|
- [ ] 删除 `src/hooks/useDarkMode.ts`
|
|
- [ ] 更新所有组件使用新的主题系统
|
|
|
|
**测试**:
|
|
- [ ] 验证主题切换正常工作
|
|
- [ ] 验证系统主题跟随功能
|
|
- [ ] 验证主题持久化
|
|
|
|
### 2.2 更新 main.tsx
|
|
|
|
- [ ] 引入 QueryClientProvider
|
|
- [ ] 引入 ThemeProvider
|
|
- [ ] 添加 Toaster 组件
|
|
- [ ] 移除旧的 API 导入
|
|
|
|
**测试**:
|
|
- [ ] 验证应用可以正常启动
|
|
- [ ] 验证 Context 正确传递
|
|
|
|
### 2.3 重构 App.tsx
|
|
|
|
- [ ] 使用 useProvidersQuery 替代手动状态管理
|
|
- [ ] 移除所有 loadProviders 相关代码
|
|
- [ ] 移除手动 notification 状态
|
|
- [ ] 简化事件监听逻辑
|
|
- [ ] 更新对话框为新的 Dialog 组件
|
|
|
|
**目标**: 将 412 行代码减少到 ~100 行
|
|
|
|
**测试**:
|
|
- [ ] 验证供应商列表正常加载
|
|
- [ ] 验证切换 Claude/Codex 正常工作
|
|
- [ ] 验证事件监听正常工作
|
|
|
|
### 2.4 重构 ProviderList
|
|
|
|
- [ ] 创建 `src/components/providers/ProviderList.tsx`
|
|
- [ ] 使用 mutation hooks 处理操作
|
|
- [ ] 移除 onNotify prop
|
|
- [ ] 移除手动状态管理
|
|
|
|
**测试**:
|
|
- [ ] 验证供应商列表渲染
|
|
- [ ] 验证切换操作
|
|
- [ ] 验证删除操作
|
|
|
|
### 2.5 重构表单系统
|
|
|
|
- [ ] 创建 `src/lib/schemas/provider.ts` (Zod schema)
|
|
- [ ] 创建 `src/components/providers/ProviderForm.tsx`
|
|
- [ ] 使用 react-hook-form
|
|
- [ ] 使用 zodResolver
|
|
- [ ] 字段级验证
|
|
|
|
- [ ] 创建 `src/components/providers/AddProviderDialog.tsx`
|
|
- [ ] 使用新的 Dialog 组件
|
|
- [ ] 集成 ProviderForm
|
|
- [ ] 使用 useAddProviderMutation
|
|
|
|
- [ ] 创建 `src/components/providers/EditProviderDialog.tsx`
|
|
- [ ] 使用新的 Dialog 组件
|
|
- [ ] 集成 ProviderForm
|
|
- [ ] 使用 useUpdateProviderMutation
|
|
|
|
**测试**:
|
|
- [ ] 验证表单验证正常工作
|
|
- [ ] 验证错误提示显示正确
|
|
- [ ] 验证提交操作成功
|
|
- [ ] 验证表单重置功能
|
|
|
|
### 2.6 清理旧组件
|
|
|
|
- [ ] 删除 `src/components/AddProviderModal.tsx`
|
|
- [ ] 删除 `src/components/EditProviderModal.tsx`
|
|
- [ ] 更新所有引用这些组件的地方
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 3: 设置和辅助功能 (预计 2-3 天)
|
|
|
|
### 3.1 重构 SettingsDialog
|
|
|
|
- [ ] 创建 `src/components/settings/SettingsDialog.tsx`
|
|
- [ ] 使用 Tabs 组件
|
|
- [ ] 集成各个设置子组件
|
|
|
|
- [ ] 创建 `src/components/settings/GeneralSettings.tsx`
|
|
- [ ] 语言设置
|
|
- [ ] 配置目录设置
|
|
- [ ] 其他通用设置
|
|
|
|
- [ ] 创建 `src/components/settings/AboutSection.tsx`
|
|
- [ ] 版本信息
|
|
- [ ] 更新检查
|
|
- [ ] 链接
|
|
|
|
- [ ] 创建 `src/components/settings/ImportExportSection.tsx`
|
|
- [ ] 导入功能
|
|
- [ ] 导出功能
|
|
|
|
**目标**: 将 643 行拆分为 4-5 个小组件,每个 100-150 行
|
|
|
|
**测试**:
|
|
- [ ] 验证设置保存功能
|
|
- [ ] 验证导入导出功能
|
|
- [ ] 验证更新检查功能
|
|
|
|
### 3.2 重构通知系统
|
|
|
|
- [ ] 在所有 mutations 中使用 `toast` 替代 `showNotification`
|
|
- [ ] 移除 App.tsx 中的 notification 状态
|
|
- [ ] 移除自定义通知组件
|
|
|
|
**测试**:
|
|
- [ ] 验证成功通知显示
|
|
- [ ] 验证错误通知显示
|
|
- [ ] 验证通知自动消失
|
|
|
|
### 3.3 重构确认对话框
|
|
|
|
- [ ] 更新 `src/components/ConfirmDialog.tsx` 使用新的 Dialog
|
|
- [ ] 或者直接使用 shadcn/ui 的 AlertDialog
|
|
|
|
**测试**:
|
|
- [ ] 验证删除确认对话框
|
|
- [ ] 验证其他确认场景
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 4: 清理和优化 (预计 1-2 天)
|
|
|
|
### 4.1 移除旧代码
|
|
|
|
- [ ] 删除 `src/lib/styles.ts`
|
|
- [ ] 从 `src/lib/tauri-api.ts` 移除 `window.api` 绑定
|
|
- [ ] 精简 `src/lib/tauri-api.ts`,只保留事件监听相关
|
|
- [ ] 删除或更新 `src/vite-env.d.ts` 中的过时类型
|
|
|
|
### 4.2 代码审查
|
|
|
|
- [ ] 检查所有 TODO 注释
|
|
- [ ] 检查是否还有 `window.api` 调用
|
|
- [ ] 检查是否还有手动状态管理
|
|
- [ ] 统一代码风格
|
|
|
|
### 4.3 类型检查
|
|
|
|
- [ ] 运行 `pnpm typecheck` 确保无错误
|
|
- [ ] 修复所有类型错误
|
|
- [ ] 更新类型定义
|
|
|
|
### 4.4 性能优化
|
|
|
|
- [ ] 检查是否有不必要的重渲染
|
|
- [ ] 添加必要的 React.memo
|
|
- [ ] 优化 Query 缓存配置
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 阶段 5: 测试和修复 (预计 2-3 天)
|
|
|
|
### 5.1 功能测试
|
|
|
|
#### 供应商管理
|
|
- [ ] 添加供应商 (Claude)
|
|
- [ ] 添加供应商 (Codex)
|
|
- [ ] 编辑供应商
|
|
- [ ] 删除供应商
|
|
- [ ] 切换供应商
|
|
- [ ] 导入默认配置
|
|
|
|
#### 应用切换
|
|
- [ ] Claude <-> Codex 切换
|
|
- [ ] 切换后数据正确加载
|
|
- [ ] 切换后托盘菜单更新
|
|
|
|
#### 设置
|
|
- [ ] 保存通用设置
|
|
- [ ] 切换语言
|
|
- [ ] 配置目录选择
|
|
- [ ] 导入配置
|
|
- [ ] 导出配置
|
|
|
|
#### UI 交互
|
|
- [ ] 主题切换 (亮色/暗色)
|
|
- [ ] 对话框打开/关闭
|
|
- [ ] 表单验证
|
|
- [ ] Toast 通知
|
|
|
|
#### MCP 管理
|
|
- [ ] 列表显示
|
|
- [ ] 添加 MCP
|
|
- [ ] 编辑 MCP
|
|
- [ ] 删除 MCP
|
|
- [ ] 启用/禁用 MCP
|
|
|
|
### 5.2 边界情况测试
|
|
|
|
- [ ] 空供应商列表
|
|
- [ ] 无效配置文件
|
|
- [ ] 网络错误
|
|
- [ ] 后端错误响应
|
|
- [ ] 并发操作
|
|
- [ ] 表单输入边界值
|
|
|
|
### 5.3 兼容性测试
|
|
|
|
- [ ] Windows 测试
|
|
- [ ] macOS 测试
|
|
- [ ] Linux 测试
|
|
|
|
### 5.4 性能测试
|
|
|
|
- [ ] 100+ 供应商加载速度
|
|
- [ ] 快速切换供应商
|
|
- [ ] 内存使用情况
|
|
- [ ] CPU 使用情况
|
|
|
|
### 5.5 Bug 修复
|
|
|
|
**Bug 列表** (发现后记录):
|
|
|
|
1. ___________
|
|
- [ ] 已修复
|
|
- [ ] 已验证
|
|
|
|
2. ___________
|
|
- [ ] 已修复
|
|
- [ ] 已验证
|
|
|
|
**完成时间**: ___________
|
|
**遇到的问题**: ___________
|
|
|
|
---
|
|
|
|
## 📋 最终检查
|
|
|
|
### 代码质量
|
|
|
|
- [ ] 所有 TypeScript 错误已修复
|
|
- [ ] 运行 `pnpm format` 格式化代码
|
|
- [ ] 运行 `pnpm typecheck` 通过
|
|
- [ ] 代码审查完成
|
|
|
|
### 文档更新
|
|
|
|
- [ ] 更新 `CLAUDE.md` 反映新架构
|
|
- [ ] 更新 `README.md` (如有必要)
|
|
- [ ] 添加 Migration Guide (可选)
|
|
|
|
### 性能基准
|
|
|
|
记录性能数据:
|
|
|
|
**旧版本**:
|
|
- 启动时间: _____ms
|
|
- 供应商加载: _____ms
|
|
- 内存占用: _____MB
|
|
|
|
**新版本**:
|
|
- 启动时间: _____ms
|
|
- 供应商加载: _____ms
|
|
- 内存占用: _____MB
|
|
|
|
### 代码统计
|
|
|
|
**代码行数对比**:
|
|
|
|
| 文件 | 旧版本 | 新版本 | 减少 |
|
|
|------|--------|--------|------|
|
|
| App.tsx | 412 | ~100 | -76% |
|
|
| tauri-api.ts | 712 | ~50 | -93% |
|
|
| ProviderForm.tsx | 271 | ~150 | -45% |
|
|
| SettingsModal.tsx | 643 | ~400 (拆分) | -38% |
|
|
| **总计** | 2038 | ~700 | **-66%** |
|
|
|
|
---
|
|
|
|
## 📦 发布准备
|
|
|
|
### Pre-release 测试
|
|
|
|
- [ ] 创建 beta 版本 `v4.0.0-beta.1`
|
|
- [ ] 在测试环境验证
|
|
- [ ] 收集用户反馈
|
|
|
|
### 正式发布
|
|
|
|
- [ ] 合并到 main 分支
|
|
- [ ] 创建 Release Tag `v4.0.0`
|
|
- [ ] 更新 Changelog
|
|
- [ ] 发布 GitHub Release
|
|
- [ ] 通知用户更新
|
|
|
|
---
|
|
|
|
## 🚨 回滚触发条件
|
|
|
|
如果出现以下情况,考虑回滚:
|
|
|
|
- [ ] 重大功能无法使用
|
|
- [ ] 用户数据丢失
|
|
- [ ] 严重性能问题
|
|
- [ ] 无法修复的兼容性问题
|
|
|
|
**回滚命令**:
|
|
```bash
|
|
git reset --hard backup-before-refactor
|
|
# 或
|
|
git revert <commit-range>
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 总结报告
|
|
|
|
### 成功指标
|
|
|
|
- [ ] 所有现有功能正常工作
|
|
- [ ] 代码量减少 40%+
|
|
- [ ] 无用户数据丢失
|
|
- [ ] 性能未下降
|
|
|
|
### 经验教训
|
|
|
|
**遇到的主要挑战**:
|
|
1. ___________
|
|
2. ___________
|
|
3. ___________
|
|
|
|
**解决方案**:
|
|
1. ___________
|
|
2. ___________
|
|
3. ___________
|
|
|
|
**未来改进**:
|
|
1. ___________
|
|
2. ___________
|
|
3. ___________
|
|
|
|
---
|
|
|
|
**重构完成日期**: ___________
|
|
**总耗时**: _____ 天
|
|
**参与人员**: ___________
|