462 lines
9.4 KiB
Markdown
462 lines
9.4 KiB
Markdown
# REFACTOR TASKS
|
|
|
|
重構任務拆分,支援 git worktree 並行開發。
|
|
|
|
---
|
|
|
|
## Task Overview
|
|
|
|
### 並行策略
|
|
|
|
```
|
|
時間軸 ──────────────────────────────────────────────────────────────►
|
|
|
|
Task 0: Init (必須先完成)
|
|
│
|
|
├── Task 1: Domain Layer ─────────────────────────┐
|
|
│ │
|
|
│ ┌── Task 2: Infrastructure Layer ────────────┤── 並行
|
|
│ │ │
|
|
│ └── Task 3: Repository Layer ────────────────┘
|
|
│ (依賴 Task 1)
|
|
│
|
|
├── Task 4: Provider Layer ──────────────────────┐
|
|
│ (依賴 Task 1) │
|
|
│ │── 可並行
|
|
├── Task 5: Usecase Layer ───────────────────────┤
|
|
│ (依賴 Task 3) │
|
|
│ │
|
|
├── Task 6: Adapter Layer ───────────────────────┘
|
|
│ (依賴 Task 1)
|
|
│
|
|
├── Task 7: Internal Layer ──────────────────────┐
|
|
│ (整合所有,必須最後) │
|
|
│ │── 序列
|
|
├── Task 8: CLI Tools │
|
|
│ │
|
|
└── Task 9: Cleanup & Tests ────────────────────┘
|
|
```
|
|
|
|
### Worktree 分支規劃
|
|
|
|
| 分支名稱 | 基於 | 任務 | 可並行 |
|
|
|---------|------|------|--------|
|
|
| `refactor/init` | `master` | Task 0 | ❌ |
|
|
| `refactor/domain` | `refactor/init` | Task 1 | ✅ |
|
|
| `refactor/infrastructure` | `refactor/init` | Task 2 | ✅ |
|
|
| `refactor/repository` | `refactor/domain` | Task 3 | ✅ |
|
|
| `refactor/provider` | `refactor/domain` | Task 4 | ✅ |
|
|
| `refactor/usecase` | `refactor/repository` | Task 5 | ✅ |
|
|
| `refactor/adapter` | `refactor/domain` | Task 6 | ✅ |
|
|
| `refactor/internal` | 合併所有 | Task 7 | ❌ |
|
|
| `refactor/cli` | `refactor/init` | Task 8 | ✅ |
|
|
| `refactor/cleanup` | 合併所有 | Task 9 | ❌ |
|
|
|
|
---
|
|
|
|
## Task 0: 初始化
|
|
|
|
### 分支
|
|
`refactor/init`
|
|
|
|
### 依賴
|
|
無(必須先完成)
|
|
|
|
### 小任務
|
|
|
|
- [ ] **0.1** 更新 go.mod (5min)
|
|
- `go get github.com/zeromicro/go-zero@latest`
|
|
- `go mod tidy`
|
|
|
|
- [ ] **0.2** 建立目錄 (1min)
|
|
- `mkdir -p api etc`
|
|
|
|
- [ ] **0.3** 建立 `api/chat.api` (15min)
|
|
- 定義 API types
|
|
- 定義 routes
|
|
|
|
- [ ] **0.4** 建立 `etc/chat.yaml` (5min)
|
|
- 配置參數
|
|
|
|
- [ ] **0.5** 更新 Makefile (10min)
|
|
- 新增 goctl 命令
|
|
|
|
- [ ] **0.6** 提交 (2min)
|
|
|
|
**預估時間**: ~30min
|
|
|
|
---
|
|
|
|
## Task 1: Domain Layer
|
|
|
|
### 分支
|
|
`refactor/domain`
|
|
|
|
### 依賴
|
|
Task 0 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **1.1** 建立目錄結構 (1min)
|
|
- `pkg/domain/entity`
|
|
- `pkg/domain/repository`
|
|
- `pkg/domain/usecase`
|
|
- `pkg/domain/const`
|
|
|
|
- [ ] **1.2** `entity/message.go` (10min)
|
|
- Message, Tool, ToolFunction, ToolCall
|
|
|
|
- [ ] **1.3** `entity/chunk.go` (5min)
|
|
- StreamChunk, ChunkType
|
|
|
|
- [ ] **1.4** `entity/account.go` (5min)
|
|
- Account, AccountStat
|
|
|
|
- [ ] **1.5** `repository/account.go` (10min)
|
|
- AccountPool interface
|
|
|
|
- [ ] **1.6** `repository/provider.go` (5min)
|
|
- Provider interface
|
|
|
|
- [ ] **1.7** `usecase/chat.go` (15min)
|
|
- ChatUsecase interface
|
|
|
|
- [ ] **1.8** `usecase/agent.go` (5min)
|
|
- AgentRunner interface
|
|
|
|
- [ ] **1.9** `const/models.go` (10min)
|
|
- Model 常數
|
|
|
|
- [ ] **1.10** `const/errors.go` (5min)
|
|
- 錯誤定義
|
|
|
|
- [ ] **1.11** 提交 (2min)
|
|
|
|
**預估時間**: ~2h
|
|
|
|
---
|
|
|
|
## Task 2: Infrastructure Layer
|
|
|
|
### 分支
|
|
`refactor/infrastructure`
|
|
|
|
### 依賴
|
|
Task 0 完成(可與 Task 1 並行)
|
|
|
|
### 小任務
|
|
|
|
- [ ] **2.1** 建立目錄 (2min)
|
|
- `pkg/infrastructure/{process,parser,httputil,logger,env,workspace,winlimit}`
|
|
|
|
- [ ] **2.2** 遷移 process (10min)
|
|
- runner.go, kill_unix.go, kill_windows.go, process_test.go
|
|
|
|
- [ ] **2.3** 遷移 parser (5min)
|
|
- stream.go, stream_test.go
|
|
|
|
- [ ] **2.4** 遷移 httputil (5min)
|
|
- httputil.go, httputil_test.go
|
|
|
|
- [ ] **2.5** 遷移 logger (5min)
|
|
- logger.go
|
|
|
|
- [ ] **2.6** 遷移 env (5min)
|
|
- env.go, env_test.go
|
|
|
|
- [ ] **2.7** 遷移 workspace (5min)
|
|
- workspace.go
|
|
|
|
- [ ] **2.8** 遷移 winlimit (5min)
|
|
- winlimit.go, winlimit_test.go
|
|
|
|
- [ ] **2.9** 驗證編譯 (5min)
|
|
|
|
- [ ] **2.10** 提交 (2min)
|
|
|
|
**預估時間**: ~1h
|
|
|
|
---
|
|
|
|
## Task 3: Repository Layer
|
|
|
|
### 分支
|
|
`refactor/repository`
|
|
|
|
### 依賴
|
|
Task 1 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **3.1** 建立目錄 (1min)
|
|
|
|
- [ ] **3.2** 遷移 account.go (20min)
|
|
- AccountPool 實作
|
|
- 移除全局變數
|
|
|
|
- [ ] **3.3** 遷移 provider.go (10min)
|
|
- Provider 工廠
|
|
|
|
- [ ] **3.4** 遷移測試 (5min)
|
|
|
|
- [ ] **3.5** 驗證編譯 (5min)
|
|
|
|
- [ ] **3.6** 提交 (2min)
|
|
|
|
**預估時間**: ~1h
|
|
|
|
---
|
|
|
|
## Task 4: Provider Layer
|
|
|
|
### 分支
|
|
`refactor/provider`
|
|
|
|
### 依賴
|
|
Task 1 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **4.1** 建立目錄 (1min)
|
|
- `pkg/provider/cursor`
|
|
- `pkg/provider/geminiweb`
|
|
|
|
- [ ] **4.2** 遷移 cursor provider (5min)
|
|
|
|
- [ ] **4.3** 遷移 geminiweb provider (10min)
|
|
|
|
- [ ] **4.4** 更新 import (5min)
|
|
|
|
- [ ] **4.5** 驗證編譯 (5min)
|
|
|
|
- [ ] **4.6** 提交 (2min)
|
|
|
|
**預估時間**: ~30min
|
|
|
|
---
|
|
|
|
## Task 5: Usecase Layer
|
|
|
|
### 分支
|
|
`refactor/usecase`
|
|
|
|
### 依賴
|
|
Task 3 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **5.1** 建立目錄 (1min)
|
|
|
|
- [ ] **5.2** 建立 chat.go (30min)
|
|
- 核心聊天邏輯
|
|
|
|
- [ ] **5.3** 遷移 agent.go (20min)
|
|
- runner, token, cmdargs, maxmode
|
|
|
|
- [ ] **5.4** 遷移 sanitizer (10min)
|
|
|
|
- [ ] **5.5** 遷移 toolcall (10min)
|
|
|
|
- [ ] **5.6** 驗證編譯 (5min)
|
|
|
|
- [ ] **5.7** 提交 (2min)
|
|
|
|
**預估時間**: ~2h
|
|
|
|
---
|
|
|
|
## Task 6: Adapter Layer
|
|
|
|
### 分支
|
|
`refactor/adapter`
|
|
|
|
### 依賴
|
|
Task 1 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **6.1** 建立目錄 (1min)
|
|
|
|
- [ ] **6.2** 遷移 openai adapter (10min)
|
|
|
|
- [ ] **6.3** 遷移 anthropic adapter (10min)
|
|
|
|
- [ ] **6.4** 更新 import (5min)
|
|
|
|
- [ ] **6.5** 驗證編譯 (5min)
|
|
|
|
- [ ] **6.6** 提交 (2min)
|
|
|
|
**預估時間**: ~30min
|
|
|
|
---
|
|
|
|
## Task 7: Internal Layer
|
|
|
|
### 分支
|
|
`refactor/internal`
|
|
|
|
### 依賴
|
|
Task 1-6 全部完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **7.1** 合併所有分支 (5min)
|
|
|
|
- [ ] **7.2** 更新 config/config.go (15min)
|
|
- 使用 rest.RestConf
|
|
|
|
- [ ] **7.3** 建立 svc/servicecontext.go (30min)
|
|
- DI 容器
|
|
|
|
- [ ] **7.4** 建立 logic/ (1h)
|
|
- chatcompletionlogic.go
|
|
- geminichatlogic.go
|
|
- anthropiclogic.go
|
|
- healthlogic.go
|
|
- modelslogic.go
|
|
|
|
- [ ] **7.5** 建立 handler/ (1h)
|
|
- 自訂 SSE handler
|
|
|
|
- [ ] **7.6** 建立 middleware/ (20min)
|
|
- auth.go
|
|
- recovery.go
|
|
|
|
- [ ] **7.7** 建立 types/ (5min)
|
|
- goctl 生成
|
|
|
|
- [ ] **7.8** 更新 import (30min)
|
|
- 批量更新
|
|
|
|
- [ ] **7.9** 驗證編譯 (10min)
|
|
|
|
- [ ] **7.10** 提交 (2min)
|
|
|
|
**預估時間**: ~4h
|
|
|
|
---
|
|
|
|
## Task 8: CLI Tools
|
|
|
|
### 分支
|
|
`refactor/cli`
|
|
|
|
### 依賴
|
|
Task 0 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **8.1** 建立目錄 (1min)
|
|
|
|
- [ ] **8.2** 遷移 CLI 工具 (10min)
|
|
|
|
- [ ] **8.3** 遷移 gemini-login (5min)
|
|
|
|
- [ ] **8.4** 更新 import (5min)
|
|
|
|
- [ ] **8.5** 提交 (2min)
|
|
|
|
**預估時間**: ~30min
|
|
|
|
---
|
|
|
|
## Task 9: Cleanup & Tests
|
|
|
|
### 分支
|
|
`refactor/cleanup`
|
|
|
|
### 依賴
|
|
Task 7 完成
|
|
|
|
### 小任務
|
|
|
|
- [ ] **9.1** 移除舊目錄 (5min)
|
|
|
|
- [ ] **9.2** 更新 import (30min)
|
|
- 批量 sed
|
|
|
|
- [ ] **9.3** 建立 cmd/chat/chat.go (10min)
|
|
|
|
- [ ] **9.4** SSE 整合測試 (2h)
|
|
|
|
- [ ] **9.5** 回歸測試 (1h)
|
|
|
|
- [ ] **9.6** 更新 README (15min)
|
|
|
|
- [ ] **9.7** 提交 (2min)
|
|
|
|
**預估時間**: ~4h
|
|
|
|
---
|
|
|
|
## 並行執行計劃
|
|
|
|
### Wave 1 (可完全並行)
|
|
```
|
|
Terminal 1: Task 0 (init) → 30min
|
|
Terminal 2: (等待 Task 0)
|
|
```
|
|
|
|
### Wave 2 (可完全並行)
|
|
```
|
|
Terminal 1: Task 1 (domain) → 2h
|
|
Terminal 2: Task 2 (infrastructure) → 1h
|
|
Terminal 3: Task 8 (cli) → 30min
|
|
```
|
|
|
|
### Wave 3 (可部分並行)
|
|
```
|
|
Terminal 1: Task 3 (repository) → 1h (依賴 Task 1)
|
|
Terminal 2: Task 4 (provider) → 30min (依賴 Task 1)
|
|
Terminal 3: Task 6 (adapter) → 30min (依賴 Task 1)
|
|
Terminal 4: (等待 Task 3)
|
|
```
|
|
|
|
### Wave 4 (可部分並行)
|
|
```
|
|
Terminal 1: Task 5 (usecase) → 2h (依賴 Task 3)
|
|
Terminal 2: (等待 Task 5)
|
|
```
|
|
|
|
### Wave 5 (序列)
|
|
```
|
|
Task 7 (internal) → 4h
|
|
Task 9 (cleanup) → 4h
|
|
```
|
|
|
|
**總時間估計**:
|
|
- 完全序列: ~15h
|
|
- 並行執行: ~9h
|
|
- 節省: ~40%
|
|
|
|
---
|
|
|
|
## Git Worktree 指令
|
|
|
|
```bash
|
|
# 創建 worktrees
|
|
git worktree add ../worktrees/init -b refactor/init
|
|
git worktree add ../worktrees/domain -b refactor/domain
|
|
git worktree add ../worktrees/infrastructure -b refactor/infrastructure
|
|
git worktree add ../worktrees/repository -b refactor/repository
|
|
git worktree add ../worktrees/provider -b refactor/provider
|
|
git worktree add ../worktrees/usecase -b refactor/usecase
|
|
git worktree add ../worktrees/adapter -b refactor/adapter
|
|
git worktree add ../worktrees/cli -b refactor/cli
|
|
|
|
# 並行工作
|
|
cd ../worktrees/domain && # Terminal 1
|
|
cd ../worktrees/infrastructure && # Terminal 2
|
|
cd ../worktrees/cli && # Terminal 3
|
|
|
|
# 清理 worktrees
|
|
git worktree remove ../worktrees/init
|
|
git worktree remove ../worktrees/domain
|
|
# ... 等等
|
|
```
|
|
|
|
---
|
|
|
|
**文件版本**: v1.0
|
|
**建立日期**: 2026-04-03 |