mcp-shrimp-task-manager/docs/architecture.md

654 lines
22 KiB
Markdown
Raw Normal View History

# 蝦米任務管理器系統架構
本文檔描述蝦米任務管理器的系統架構設計,包括各組件的功能、交互方式和數據流。
## 1. 系統整體架構
蝦米任務管理器採用模塊化設計,基於 MCP (Model Context Protocol) 協議實現與 LLM 的互動。系統由以下核心組件構成:
```
+------------------+
| |
| MCP 客戶端 |
| (如 Cursor IDE) |
| |
+---------+--------+
|
| MCP 協議
|
+---------v--------+
| |
| 工具註冊層 | <-- 新增 delete_task 工具
| (index.ts) | 新增 clear_all_tasks 工具
| | 新增 update_task 工具
| | 新增 update_task_files 工具
+---------+--------+
|
|
+------------------+------------------+
| | |
+---------v--------+ +-------v---------+ +------v-----------+
| | | | | |
| 工具實現層 | | 模型邏輯層 | | 工具實現層 |
| (taskTools.ts) | | (taskModel.ts) | | (logTools.ts) |
| | | | | |
+------------------+ +-------+---------+ +------------------+
|
|
+---------v--------+
| |
| 數據存儲層 |
| (JSON 文件) |
| |
+------------------+
```
## 2. 主要組件說明
### 2.1 工具註冊層 (index.ts)
工具註冊層負責將各功能工具註冊到 MCP 系統中,使其能夠被 LLM 訪問和使用。
**主要功能**
- 註冊 `plan_task` 工具函數,用於任務規劃
- 註冊 `analyze_task` 工具函數,用於任務分析
- 註冊 `reflect_task` 工具函數,用於批判性審查分析結果
- 註冊 `split_tasks` 工具函數,用於將複雜任務分解為子任務
- 註冊 `list_tasks` 工具函數,用於生成任務清單
- 註冊 `execute_task` 工具函數,用於執行特定任務
- 註冊 `verify_task` 工具函數,用於驗證任務完成度
- 註冊 `complete_task` 工具函數,用於標記任務為完成狀態
- 註冊 `delete_task` 工具函數,用於刪除未完成的任務
- 註冊 `clear_all_tasks` 工具函數,用於清除所有未完成的任務
- 註冊 `update_task` 工具函數,用於更新任務內容
- 註冊 `update_task_files` 工具函數,用於更新任務相關文件列表
- 註冊 `list_conversation_log` 工具函數,用於查詢系統對話日誌
- 註冊 `clear_conversation_log` 工具函數,用於清除所有對話日誌記錄
### 2.2 工具實現層 (tools/\*.ts)
工具實現層包含具體工具函數的實現,處理參數解析、驗證和結果格式化。
**核心文件**
- `taskTools.ts`: 任務管理相關工具
- `logTools.ts`: 日誌管理相關工具
- `fileLoader.ts`: 任務相關文件的摘要生成工具
**主要功能**
- 實現 `planTask` 工具函數,初始化並詳細規劃任務流程
- 實現 `analyzeTask` 工具函數,深入分析任務需求
- 實現 `reflectTask` 工具函數,批判性審查分析結果
- 實現 `splitTasks` 工具函數,將複雜任務分解為獨立且可追蹤的子任務
- 實現 `listTasks` 工具函數,生成結構化任務清單
- 實現 `executeTask` 工具函數,按照預定義計劃執行特定任務
- 實現 `verifyTask` 工具函數,全面驗證任務完成度
- 實現 `completeTask` 工具函數,正式標記任務為完成狀態
- 實現 `deleteTask` 工具函數,刪除未完成的任務
- 實現 `clearAllTasks` 工具函數,刪除所有未完成的任務
- 實現 `updateTask` 工具函數,更新任務內容
- 實現 `updateTaskRelatedFiles` 工具函數,更新任務相關文件列表
- 實現 `listConversationLog` 工具函數,查詢系統對話日誌
- 實現 `clearConversationLog` 工具函數,清除所有對話日誌記錄
### 2.3 模型邏輯層 (models/\*.ts)
模型邏輯層包含核心業務邏輯和數據處理函數,負責實現各種功能的邏輯處理。
**核心文件**
- `taskModel.ts`: 任務數據模型和操作
- `conversationLogModel.ts`: 對話日誌數據模型和操作
**主要功能**
-`taskModel.ts` 中實現創建、讀取、更新和刪除任務的功能
-`taskModel.ts` 中實現 `deleteTask` 函數,刪除未完成的任務
-`taskModel.ts` 中實現 `clearAllTasks` 函數,刪除所有未完成的任務
-`taskModel.ts` 中實現 `updateTask` 函數,更新任務內容
-`taskModel.ts` 中實現 `updateTaskRelatedFiles` 函數,更新任務相關文件列表
-`taskModel.ts` 中實現 `assessTaskComplexity` 函數,評估任務複雜度
-`taskModel.ts` 中實現 `loadTaskById` 函數,載入特定任務
-`taskModel.ts` 中實現 `completeTask` 函數,標記任務為完成狀態
-`conversationLogModel.ts` 中實現對話日誌的記錄、查詢和清除功能
### 2.4 數據模型定義 (types/index.ts)
定義系統中使用的所有數據類型和接口。
**主要類型**
- `TaskStatus` 枚舉:定義任務狀態,包括待處理、進行中、已完成和被阻擋
- `TaskDependency` 接口:定義任務依賴關係
- `RelatedFileType` 枚舉:定義文件關聯類型,如待修改、參考資料、輸出結果、依賴文件和其他
- `RelatedFile` 接口:定義任務相關文件結構
- `Task` 接口:定義任務的完整數據結構
- `ConversationParticipant` 枚舉:定義對話參與者類型,如 MCP 和 LLM
- `ConversationEntry` 接口:定義對話日誌條目
- `TaskComplexityLevel` 枚舉:定義任務複雜度級別,如低複雜度、中等複雜度、高複雜度和極高複雜度
- `TaskComplexityThresholds` 常量:定義複雜度評估閾值
- `TaskComplexityAssessment` 接口:記錄複雜度評估結果
### 2.5 工具函數 (utils/\*.ts)
提供各種輔助功能的工具函數。
**核心文件**
- `summaryExtractor.ts`: 實現摘要提取和生成功能
- `fileLoader.ts`: 實現任務相關文件的摘要生成功能
**主要功能**
- 實現 `extractSummary` 函數,從文本中提取簡短摘要
- 實現 `generateTaskSummary` 函數,基於任務名稱和描述生成任務完成摘要
- 實現 `extractTitle` 函數,從內容中提取適合作為標題的文本
- 實現 `extractSummaryFromConversation` 函數,從對話記錄中提取摘要信息
- 實現 `loadTaskRelatedFiles` 函數,生成任務相關文件的內容摘要
- 實現 `generateFileInfo` 函數,生成文件基本資訊摘要
### 2.6 數據存儲層
使用 JSON 文件作為數據存儲,保存任務信息和對話日誌。
**核心文件**
- `data/tasks.json`: 存儲所有任務數據
- `data/conversation_log.json`: 存儲對話日誌數據
- `data/backups/`: 存儲任務數據備份
## 3. 數據流
### 3.1 任務刪除流程
```
LLM 調用 delete_task
|
v
識別任務是否存在
|
v
檢查任務狀態(拒絕刪除已完成任務)
|
v
檢查依賴關係(拒絕刪除有依賴的任務)
|
v
執行刪除操作
|
v
記錄操作到日誌
|
v
返回結果給 LLM
```
### 3.2 任務複雜度評估流程
```
LLM 調用 execute_task
|
v
載入任務信息
|
v
評估任務複雜度
|
+------------> 計算描述長度
| |
+------------> 計算依賴數量
| |
+------------> 計算注記長度
| |
+------------> 檢查是否有注記
| |
v v
確定複雜度級別 <----- 應用評估閾值
|
v
生成處理建議
|
v
更新任務提示,包含複雜度信息
|
v
返回增強後的任務執行提示給 LLM
```
### 3.3 任務完成流程
```
LLM 調用 complete_task
|
v
載入任務信息
|
v
檢查是否提供摘要
|
+---- 有 ----> 使用提供的摘要
|
+---- 無 ----> 自動生成摘要
|
+---> 基於任務名稱和描述
|
+---> 提取關鍵信息
|
+---> 格式化摘要文本
|
v
更新任務狀態為已完成
|
v
保存摘要到任務記錄
|
v
記錄操作到日誌
|
v
返回結果給 LLM
```
### 3.4 清除所有任務流程
```
LLM 調用 clear_all_tasks
|
v
檢查確認參數(必須為 true
|
v
創建數據備份
|
v
載入當前任務列表
|
v
篩選出未完成的任務
|
v
記錄操作開始到日誌
|
v
執行批量刪除
|
v
更新數據文件
|
v
記錄操作結果到日誌
|
v
返回清除結果給 LLM
```
### 3.5 更新任務內容流程
```
LLM 調用 update_task
|
v
載入任務信息
|
v
檢查任務是否存在
|
v
檢查任務狀態(阻止更新已完成任務)
|
v
驗證更新參數(至少提供一個更新字段)
|
v
執行更新操作
|
v
記錄操作到日誌
|
v
返回更新結果給 LLM
```
### 3.6 更新任務相關文件流程
```
LLM 調用 update_task_files
|
v
載入任務信息
|
v
檢查任務是否存在
|
v
檢查任務狀態(阻止更新已完成任務)
|
v
驗證文件列表格式
|
v
處理每個相關文件
| |
| +---> 驗證文件路徑
| |
| +---> 檢查行號範圍(如有提供)
| |
| +---> 驗證文件類型
|
v
更新任務的相關文件列表
|
v
記錄操作到日誌
|
v
返回更新結果給 LLM
```
### 3.7 文件處理流程
```
處理任務相關文件
|
v
根據文件類型進行優先級排序
| |
| +---> 待修改 > 參考資料 > 依賴文件 > 輸出結果 > 其他
|
v
生成文件摘要
| |
| +---> 對於指定行號範圍的文件,生成該範圍的摘要
| |
| +---> 對於一般文件,生成整體內容摘要
|
v
返回文件摘要結果
```
### 3.8 對話日誌查詢流程
```
LLM 調用 list_conversation_log
|
v
處理過濾參數
| |
| +---> 任務ID過濾如有提供
| |
| +---> 日期範圍過濾(如有提供)
| |
| +---> 應用分頁參數limit和offset
|
v
查詢符合條件的日誌條目
|
v
格式化日誌條目列表
|
v
返回查詢結果給 LLM
```
## 4. 系統交互圖
### 4.1 LLM 與任務管理器交互
```
+-------+ 1.調用工具 +----------------+
| |------------------>| |
| LLM | | 蝦米任務管理器 |
| |<------------------| |
+-------+ 4.返回結果 +-------+--------+
|
+-------v--------+
| |
| JSON 數據存儲 |
| |
+----------------+
```
### 4.2 工具層與模型層交互
```
+-------------+ 調用 +-------------+ 讀寫 +------------+
| |------------->| |------------>| |
| 工具實現層 | | 模型邏輯層 | | 數據存儲層 |
| |<-------------| |<------------| |
+-------------+ 返回結果 +-------------+ 返回數據 +------------+
```
## 5. 核心功能架構圖
### 5.1 任務規劃功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| planTaskSchema |---->| planTask |---->| 任務規劃響應生成 |
| | | (taskTools.ts) | | |
+----------------+ +-------+--------+ +------------------+
```
### 5.2 任務分析功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| analyzeTaskSchema|---->| analyzeTask |---->| 技術分析指引生成 |
| | | (taskTools.ts) | | |
+----------------+ +-------+--------+ +------------------+
```
### 5.3 任務反思功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| reflectTaskSchema|---->| reflectTask |---->| 反思提示與建議生成|
| | | (taskTools.ts) | | |
+----------------+ +-------+--------+ +------------------+
```
### 5.4 任務拆分功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| splitTasksSchema|---->| splitTasks |---->| createTasks |
| | | (taskTools.ts) | | (taskModel.ts) |
+----------------+ +-------+--------+ +------------------+
```
### 5.5 任務執行功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| executeTaskSchema|---->| executeTask |---->| assessTaskComplexity|
| | | (taskTools.ts) | | (taskModel.ts) |
+----------------+ +-------+--------+ +------------------+
|
v
+------+---------------------+------+
| 任務執行指南和上下文生成 |
+------+---------------------+------+
```
### 5.6 任務驗證功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| verifyTaskSchema|---->| verifyTask |---->| 任務驗證評估 |
| | | (taskTools.ts) | | |
+----------------+ +-------+--------+ +------------------+
```
### 5.7 完成任務功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| completeTaskSchema|---->| completeTask |---->| updateTaskSummary|
| | | (taskTools.ts) | | (taskModel.ts) |
+----------------+ +-------+--------+ +------------------+
|
v
+------+--------+
| summaryExtractor|
| (utils) |
+---------------+
```
### 5.8 任務刪除功能
```
+----------------+ +----------------+ +------------------+
| | | | | |
| deleteTaskSchema|---->| deleteTask |---->| modelDeleteTask |
| | | (taskTools.ts) | | (taskModel.ts) |
+----------------+ +-------+--------+ +------------------+
|
v
+------+---------------------+------+
| 檢查任務狀態和依賴關係 |
+------+---------------------+------+
```
### 5.9 清除所有任務功能
```
+------------------+ +----------------+ +------------------+
| | | | | |
| clearAllTasksSchema|---->| clearAllTasks |---->| modelClearAllTasks|
| | | (taskTools.ts) | | (taskModel.ts) |
+------------------+ +-------+--------+ +------------------+
|
v
+------+---------------------+------+
| 確認參數檢查和數據備份 |
+------+---------------------+------+
|
v
+------+---------------------+------+
| 篩選和批量刪除未完成任務 |
+------+---------------------+------+
```
### 5.10 更新任務功能
```
+------------------+ +----------------+ +------------------+
| | | | | |
| updateTaskSchema |---->| updateTask |---->| updateTask |
| | | (taskTools.ts) | | (taskModel.ts) |
+------------------+ +-------+--------+ +------------------+
|
v
+------+---------------------+------+
| 檢查任務狀態和更新參數有效性 |
+------+---------------------+------+
```
### 5.11 更新任務相關文件功能
```
+----------------------+ +---------------------+ +----------------------+
| | | | | |
| updateTaskFilesSchema |---->| updateTaskRelatedFiles |---->| updateTaskRelatedFiles |
| | | (taskTools.ts) | | (taskModel.ts) |
+----------------------+ +-----------+---------+ +-----------+----------+
| |
v v
+-------+-------------------------+------+
| 驗證文件格式和路徑有效性 |
+-------+-------------------------+------+
|
v
+-------+-------------------------+------+
| 更新任務相關文件列表 |
+-------+-------------------------+------+
```
### 5.12 日誌查詢功能
```
+------------------------+ +-------------------+ +---------------------+
| | | | | |
| listConversationLogSchema|---->| listConversationLog|---->| getConversationLogs |
| | | (logTools.ts) | | (logModel.ts) |
+------------------------+ +---------+---------+ +---------+-----------+
| |
v v
+-------+------------------------+-----+
| 過濾參數處理和分頁控制 |
+-------+------------------------+-----+
```
### 5.13 清除日誌功能
```
+-------------------------+ +--------------------+ +------------------------+
| | | | | |
| clearConversationLogSchema|---->| clearConversationLog|---->| clearConversationLogs |
| | | (logTools.ts) | | (logModel.ts) |
+-------------------------+ +---------+----------+ +----------+-------------+
| |
v v
+-------+-------------------------+-----+
| 確認參數檢查和刪除操作 |
+-------+-------------------------+-----+
```
## 6. 擴展性考慮
### 6.1 新功能擴展方式
蝦米任務管理器的模塊化設計使其易於擴展。要添加新功能,通常需要:
1.`types/index.ts` 中定義相關數據類型
2. 在相應的模型文件中實現核心邏輯
3. 在工具層創建對應的工具函數
4.`index.ts` 中註冊新工具
### 6.2 目前的擴展點
系統當前提供以下擴展點:
- **任務處理流程擴展**:可通過修改 `executeTask``verifyTask` 等函數擴展任務處理流程
- **複雜度評估擴展**:可在 `assessTaskComplexity` 中添加更多評估指標
- **摘要生成擴展**:可增強 `summaryExtractor.ts` 中的算法
- **文件處理擴展**:可在 `fileLoader.ts` 中支持更多文件類型的摘要格式化
- **過濾條件擴展**:可在日誌查詢中添加更多過濾條件選項
## 7. 系統限制與未來改進
### 7.1 當前限制
- 使用文件存儲,不適合多用戶並發場景
- 缺乏用戶認證和權限控制
- 摘要生成使用簡單規則,可進一步改進
- 文件處理不讀取實際文件內容,僅生成摘要信息
### 7.2 未來可能的改進
- 遷移到數據庫存儲,提高並發處理能力
- 添加用戶管理和訪問控制
- 使用更先進的算法優化摘要生成
- 添加任務優先級和時間規劃功能
- 實現任務執行進度追蹤
- 增強文件關聯系統,支持更複雜的關係類型
- 實現自動識別相關文件的能力
- 支持實際讀取文件內容,提供更詳細的上下文
## 8. 結論
蝦米任務管理器採用模塊化、分層設計,使系統具有良好的可維護性和擴展性。通過 14 個核心工具函數和完善的數據模型,系統能夠有效地管理複雜項目的任務流程,特別在需要長期上下文記憶的場景中表現出色。
系統的設計重點在於提供清晰的任務管理流程,同時增強 LLM 在執行任務時的上下文記憶能力,通過精確的文件關聯和智能上下文載入,有效解決了 LLM 在處理長期複雜任務時的記憶限制問題。
隨著系統的進一步發展,未來將著重改進數據存儲方式、優化摘要生成算法、增強文件處理能力和添加更多任務管理功能,使系統能夠應對更多複雜的任務管理場景。