mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-27 08:32:27 +08:00
新增任務記憶功能,實現自動備份已完成任務至 memory 目錄,並在清除任務時提供歷史記錄參考。更新相關文檔以說明任務記憶的使用場景及智能提示指導,提升系統的智能化程度與工作效率。
This commit is contained in:
parent
f9409fd48e
commit
57e56137b0
20
README.md
20
README.md
@ -15,6 +15,7 @@
|
|||||||
- **任務完整性驗證**:確保任務成果符合預期要求
|
- **任務完整性驗證**:確保任務成果符合預期要求
|
||||||
- **任務複雜度評估**:自動評估任務複雜度並提供最佳處理建議
|
- **任務複雜度評估**:自動評估任務複雜度並提供最佳處理建議
|
||||||
- **任務摘要自動更新**:完成任務時自動產生摘要,優化記憶效能
|
- **任務摘要自動更新**:完成任務時自動產生摘要,優化記憶效能
|
||||||
|
- **任務記憶功能**:自動備份任務歷史記錄,提供長期記憶和參考能力
|
||||||
|
|
||||||
## 🔄 任務管理工作流程
|
## 🔄 任務管理工作流程
|
||||||
|
|
||||||
@ -30,6 +31,25 @@
|
|||||||
8. **任務完成** `complete_task`:標記任務完成並生成報告,自動更新摘要
|
8. **任務完成** `complete_task`:標記任務完成並生成報告,自動更新摘要
|
||||||
9. **任務管理** `delete_task`:管理未完成的任務(已完成任務將保留在系統中)
|
9. **任務管理** `delete_task`:管理未完成的任務(已完成任務將保留在系統中)
|
||||||
|
|
||||||
|
## 🧠 任務記憶功能
|
||||||
|
|
||||||
|
蝦米任務管理器具備長期記憶功能,可以自動保存任務執行的歷史記錄,並在規劃新任務時提供參考經驗。
|
||||||
|
|
||||||
|
### 功能特點
|
||||||
|
|
||||||
|
- 系統會自動將任務備份到 memory 目錄中
|
||||||
|
- 備份文件按照時間順序命名,格式為 tasks_backup_YYYY-MM-DDThh-mm-ss.json
|
||||||
|
- 任務規劃 Agent 會自動獲得關於如何利用記憶功能的指導
|
||||||
|
|
||||||
|
### 優勢與效益
|
||||||
|
|
||||||
|
- **避免重複工作**:參考過去任務,不必從零開始解決類似問題
|
||||||
|
- **借鑒成功經驗**:利用已驗證有效的解決方案,提高開發效率
|
||||||
|
- **學習與改進**:識別過去的錯誤或低效方案,持續優化工作流程
|
||||||
|
- **知識沉澱**:隨著系統使用時間增長,形成持續擴展的知識庫
|
||||||
|
|
||||||
|
通過有效利用任務記憶功能,系統能夠不斷積累經驗,智能化程度和工作效率將持續提升。
|
||||||
|
|
||||||
## 📚 文件資源
|
## 📚 文件資源
|
||||||
|
|
||||||
- [系統架構](docs/architecture.md):詳細的系統設計與數據流說明
|
- [系統架構](docs/architecture.md):詳細的系統設計與數據流說明
|
||||||
|
@ -194,7 +194,7 @@
|
|||||||
|
|
||||||
### 10. clear_all_tasks
|
### 10. clear_all_tasks
|
||||||
|
|
||||||
**描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行
|
**描述**:刪除系統中所有未完成的任務,該指令必須由用戶明確確認才能執行。同時將任務備份到 memory 子目錄,保存任務歷史記錄以供未來參考。
|
||||||
|
|
||||||
**參數**:
|
**參數**:
|
||||||
|
|
||||||
@ -202,7 +202,13 @@
|
|||||||
|
|
||||||
**返回值**:
|
**返回值**:
|
||||||
|
|
||||||
- 返回一個包含清除操作結果的響應,包括成功或失敗的訊息
|
- 返回一個包含清除操作結果的響應,包括成功或失敗的訊息、備份文件名和備份位置
|
||||||
|
|
||||||
|
**重要細節**:
|
||||||
|
|
||||||
|
- 在刪除任務前,會自動將當前任務列表備份到 data/memory 子目錄
|
||||||
|
- 備份文件使用時間戳命名,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json
|
||||||
|
- memory 子目錄作為長期記憶庫,用於存儲任務歷史記錄,供未來任務規劃參考
|
||||||
|
|
||||||
### 11. update_task
|
### 11. update_task
|
||||||
|
|
||||||
@ -270,3 +276,36 @@
|
|||||||
|
|
||||||
- `loadTaskRelatedFiles` - 生成任務相關文件的內容摘要
|
- `loadTaskRelatedFiles` - 生成任務相關文件的內容摘要
|
||||||
- `generateFileInfo` - 生成文件基本資訊摘要
|
- `generateFileInfo` - 生成文件基本資訊摘要
|
||||||
|
|
||||||
|
## 任務記憶功能
|
||||||
|
|
||||||
|
任務記憶功能是蝦米任務管理器的重要特性,它使系統具備長期記憶能力,能夠保存、查詢和利用過去的任務執行經驗。
|
||||||
|
|
||||||
|
### 核心實現
|
||||||
|
|
||||||
|
1. **自動備份機制**:
|
||||||
|
|
||||||
|
- 在 `clearAllTasks` 函數中實現雙重備份功能
|
||||||
|
- 將任務備份同時保存在 data 目錄和 data/memory 子目錄
|
||||||
|
- 使用時間戳命名備份文件,格式為 tasks_memory_YYYY-MM-DDThh-mm-ss.json
|
||||||
|
|
||||||
|
2. **智能提示指導**:
|
||||||
|
- 在 `planTask` 函數的提示詞中添加任務記憶檢索指南
|
||||||
|
- 指導 Agent 如何查找、分析和應用歷史任務記錄
|
||||||
|
- 提供智能參考建議,促進知識重用
|
||||||
|
|
||||||
|
### 使用場景
|
||||||
|
|
||||||
|
- **任務規劃時**:參考類似任務的實施方案和最佳實踐
|
||||||
|
- **問題解決時**:查閱過去遇到的類似問題及其解決方法
|
||||||
|
- **代碼重用時**:識別過去實現的可重用組件或模式
|
||||||
|
- **經驗學習時**:分析過去成功和失敗案例,持續優化工作方式
|
||||||
|
|
||||||
|
### 技術要點
|
||||||
|
|
||||||
|
- 使用相對路徑引用 memory 目錄,保持代碼的一致性和可維護性
|
||||||
|
- 確保 memory 目錄存在,如不存在則自動創建
|
||||||
|
- 保持原有的錯誤處理模式,確保系統穩定性
|
||||||
|
- 備份過程透明無感,不影響用戶正常操作流程
|
||||||
|
|
||||||
|
此功能無需額外工具或配置,系統會自動在任務清除時保存歷史記錄,並在任務規劃時提供智能指導,使 Agent 能夠充分利用過去的經驗和知識。
|
||||||
|
@ -694,31 +694,49 @@ export async function clearAllTasks(): Promise<{
|
|||||||
// 確保數據目錄存在
|
// 確保數據目錄存在
|
||||||
await ensureDataDir();
|
await ensureDataDir();
|
||||||
|
|
||||||
// 讀取現有任務,用於創建備份
|
// 讀取現有任務
|
||||||
const tasks = await readTasks();
|
const allTasks = await readTasks();
|
||||||
|
|
||||||
// 如果沒有任務,直接返回
|
// 如果沒有任務,直接返回
|
||||||
if (tasks.length === 0) {
|
if (allTasks.length === 0) {
|
||||||
return { success: true, message: "沒有任務需要清除" };
|
return { success: true, message: "沒有任務需要清除" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 篩選出已完成的任務
|
||||||
|
const completedTasks = allTasks.filter(
|
||||||
|
(task) => task.status === TaskStatus.COMPLETED
|
||||||
|
);
|
||||||
|
|
||||||
// 創建備份文件名
|
// 創建備份文件名
|
||||||
const timestamp = new Date()
|
const timestamp = new Date()
|
||||||
.toISOString()
|
.toISOString()
|
||||||
.replace(/:/g, "-")
|
.replace(/:/g, "-")
|
||||||
.replace(/\..+/, "");
|
.replace(/\..+/, "");
|
||||||
const backupFileName = `tasks_backup_${timestamp}.json`;
|
const backupFileName = `tasks_memory_${timestamp}.json`;
|
||||||
const backupFilePath = path.join(DATA_DIR, backupFileName);
|
|
||||||
|
|
||||||
// 創建備份
|
// 確保 memory 目錄存在
|
||||||
await fs.writeFile(backupFilePath, JSON.stringify({ tasks }, null, 2));
|
const MEMORY_DIR = path.join(DATA_DIR, "memory");
|
||||||
|
try {
|
||||||
|
await fs.access(MEMORY_DIR);
|
||||||
|
} catch (error) {
|
||||||
|
await fs.mkdir(MEMORY_DIR, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 創建 memory 目錄下的備份路徑
|
||||||
|
const memoryFilePath = path.join(MEMORY_DIR, backupFileName);
|
||||||
|
|
||||||
|
// 同時寫入到 memory 目錄 (只包含已完成的任務)
|
||||||
|
await fs.writeFile(
|
||||||
|
memoryFilePath,
|
||||||
|
JSON.stringify({ tasks: completedTasks }, null, 2)
|
||||||
|
);
|
||||||
|
|
||||||
// 清空任務文件
|
// 清空任務文件
|
||||||
await writeTasks([]);
|
await writeTasks([]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
message: `已成功清除所有任務,共 ${tasks.length} 個任務被刪除`,
|
message: `已成功清除所有任務,共 ${allTasks.length} 個任務被刪除,已備份 ${completedTasks.length} 個已完成的任務至 memory 目錄`,
|
||||||
backupFile: backupFileName,
|
backupFile: backupFileName,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import path from "path";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
import {
|
import {
|
||||||
getAllTasks,
|
getAllTasks,
|
||||||
getTaskById,
|
getTaskById,
|
||||||
@ -211,6 +213,12 @@ export async function planTask({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
const PROJECT_ROOT = path.resolve(__dirname, "../..");
|
||||||
|
const DATA_DIR = process.env.DATA_DIR || path.join(PROJECT_ROOT, "data");
|
||||||
|
const MEMORY_DIR = path.join(DATA_DIR, "memory");
|
||||||
|
|
||||||
prompt += `## 分析指引\n\n1. 首先確定任務的確切目標和預期成果
|
prompt += `## 分析指引\n\n1. 首先確定任務的確切目標和預期成果
|
||||||
2. 識別任務中可能的技術挑戰和關鍵決策點
|
2. 識別任務中可能的技術挑戰和關鍵決策點
|
||||||
3. 考慮潛在的解決方案和替代方案
|
3. 考慮潛在的解決方案和替代方案
|
||||||
@ -231,6 +239,33 @@ export async function planTask({
|
|||||||
- 你可以適當的時候網路搜尋工具,查詢相關的內容
|
- 你可以適當的時候網路搜尋工具,查詢相關的內容
|
||||||
- 當你遇到需要查詢的內容時,請使用網路搜尋工具,例如包括但不限於 ddg_search、web、web_search 等等...
|
- 當你遇到需要查詢的內容時,請使用網路搜尋工具,例如包括但不限於 ddg_search、web、web_search 等等...
|
||||||
|
|
||||||
|
## 任務記憶檢索指南
|
||||||
|
|
||||||
|
過去執行過的任務都會被備份到 **${MEMORY_DIR}** 目錄中。當規劃新任務或解決類似問題時,請務必先參考歷史記錄以提高效率:
|
||||||
|
|
||||||
|
1. **查找相關歷史任務**:
|
||||||
|
- 所有歷史任務備份都保存在 **${MEMORY_DIR}** 子目錄下
|
||||||
|
- 備份文件命名格式為 **tasks_memory_YYYY-MM-DDThh-mm-ss.json**
|
||||||
|
- 您可以按時間順序查看,或根據任務相關性選擇特定備份
|
||||||
|
|
||||||
|
2. **分析歷史任務內容**:
|
||||||
|
- 查閱歷史任務的描述、實施方法和執行結果
|
||||||
|
- 識別與當前任務相似的模式或解決方案
|
||||||
|
- 評估過去任務的成功經驗和需要改進的地方
|
||||||
|
|
||||||
|
3. **應用歷史經驗**:
|
||||||
|
- 借鑒成功的實施策略和方法
|
||||||
|
- 避免重複過去的錯誤或低效方案
|
||||||
|
- 識別可重用的代碼、模式或工具
|
||||||
|
- 考慮如何改進或擴展過去的解決方案
|
||||||
|
|
||||||
|
4. **智能參考建議**:
|
||||||
|
- 在規劃新任務時,主動查找和引用相關的歷史任務
|
||||||
|
- 在任務描述或實施指南中引用相關歷史記錄的位置
|
||||||
|
- 明確說明哪些部分可以重用或需要修改
|
||||||
|
|
||||||
|
通過有效利用任務記憶功能,您可以避免重複工作、借鑒成功經驗,並確保解決方案的一致性和可靠性。
|
||||||
|
|
||||||
## 下一步行動\n\n完成初步分析後,請使用「analyze_task」工具提交您的分析結果,必須包含以下兩個關鍵部分:\n\n1. **結構化的任務摘要**:
|
## 下一步行動\n\n完成初步分析後,請使用「analyze_task」工具提交您的分析結果,必須包含以下兩個關鍵部分:\n\n1. **結構化的任務摘要**:
|
||||||
- 明確的任務目標和期望成果
|
- 明確的任務目標和期望成果
|
||||||
- 明確的範圍界定(包括明確標注哪些不在範圍內)
|
- 明確的範圍界定(包括明確標注哪些不在範圍內)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user