From 12d4f843256ee962168e8ded58e40b76cd098644 Mon Sep 17 00:00:00 2001 From: siage Date: Sun, 13 Apr 2025 23:56:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AA=BF=E6=95=B4=E4=BB=BB=E5=8B=99=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E5=85=A7=E5=AE=B9=EF=BC=8C=E7=B0=A1=E5=8C=96=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E4=B8=A6=E6=9B=B4=E6=96=B0=E4=BB=BB=E5=8B=99=E5=88=86?= =?UTF-8?q?=E6=9E=90=E8=88=87=E5=9F=B7=E8=A1=8C=E6=8C=87=E5=BC=95=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E5=8F=AF=E8=AE=80=E6=80=A7=E8=88=87=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=80=85=E9=AB=94=E9=A9=97=E3=80=82=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BB=BB=E5=8B=99=E8=A8=98=E6=86=B6=E6=AA=A2=E7=B4=A2=E6=8C=87?= =?UTF-8?q?=E5=8D=97=EF=BC=8C=E5=BC=B7=E8=AA=BF=E6=9C=89=E6=95=88=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E6=AD=B7=E5=8F=B2=E4=BB=BB=E5=8B=99=E4=BB=A5=E6=8F=90?= =?UTF-8?q?=E9=AB=98=E6=95=88=E7=8E=87=E3=80=82=E6=9B=B4=E6=96=B0=E4=BB=BB?= =?UTF-8?q?=E5=8B=99=E9=A9=97=E8=AD=89=E6=A8=99=E6=BA=96=E8=88=87=E8=B3=AA?= =?UTF-8?q?=E9=87=8F=E8=A6=81=E6=B1=82=EF=BC=8C=E7=A2=BA=E4=BF=9D=E4=BB=BB?= =?UTF-8?q?=E5=8B=99=E5=9F=B7=E8=A1=8C=E7=9A=84=E5=AE=8C=E6=95=B4=E6=80=A7?= =?UTF-8?q?=E8=88=87=E4=B8=80=E8=87=B4=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/taskTools.ts | 591 ++++++++++------------------------------- 1 file changed, 144 insertions(+), 447 deletions(-) diff --git a/src/tools/taskTools.ts b/src/tools/taskTools.ts index e9605de..118fda5 100644 --- a/src/tools/taskTools.ts +++ b/src/tools/taskTools.ts @@ -81,10 +81,10 @@ export async function planTask({ requirements, existingTasksReference = false, }: z.infer) { - let prompt = `## 任務分析請求\n\n請仔細分析以下任務問題,理解其核心要求、範圍和約束條件:\n\n\`\`\`\n${description}\n\`\`\`\n\n`; + let prompt = `## 任務分析\n\n${description}\n\n`; if (requirements) { - prompt += `## 附加要求與限制條件\n\n請確保方案完全符合以下要求:\n\n\`\`\`\n${requirements}\n\`\`\`\n\n`; + prompt += `## 要求與限制\n\n${requirements}\n\n`; } // 當 existingTasksReference 為 true 時,從數據庫中載入所有任務作為參考 @@ -102,12 +102,11 @@ export async function planTask({ // 如果存在任務,則添加到提示詞中 if (allTasks.length > 0) { - prompt += `## 現有任務參考\n\n您正在對現有任務進行調整或延續規劃。以下任務資訊將作為您分析和規劃的基礎:\n\n`; + prompt += `## 現有任務參考\n\n`; // 添加已完成任務的參考 if (completedTasks.length > 0) { - prompt += `### 已完成的任務(僅供參考,不可修改)\n\n`; - prompt += `以下任務已標記為完成,作為系統穩定功能的基石和固定參考點:\n\n`; + prompt += `### 已完成任務\n\n`; // 最多顯示10個已完成任務,避免提示詞過長 const tasksToShow = @@ -133,14 +132,13 @@ export async function planTask({ }); if (completedTasks.length > 10) { - prompt += `\n*(僅顯示前10個已完成任務,實際共有 ${completedTasks.length} 個已完成任務)*\n`; + prompt += `\n*(僅顯示前10個,共 ${completedTasks.length} 個)*\n`; } } // 添加未完成任務的參考 if (pendingTasks.length > 0) { - prompt += `\n### 未完成的任務(可根據需要調整)\n\n`; - prompt += `以下任務尚未完成,您可以根據新需求對其進行調整或重新規劃:\n\n`; + prompt += `\n### 未完成任務\n\n`; pendingTasks.forEach((task, index) => { // 使用摘要提取工具處理較長的描述 @@ -165,48 +163,27 @@ export async function planTask({ }); } - prompt += `\n## 任務調整指南\n\n`; - prompt += `規劃新任務或調整現有任務時,請嚴格遵循以下五項原則:\n\n`; - prompt += `1. **已完成任務保護原則** - 已完成的任務是系統穩定功能的基石,絕對不可修改或刪除。\n`; - prompt += `2. **未完成任務可調整原則** - 未完成的任務可以根據新需求進行調整,包括修改描述、依賴關係等,或建議移除。\n`; - prompt += `3. **任務ID一致性原則** - 引用現有任務時必須使用其原始ID,以確保系統跟踪的準確性。\n`; - prompt += `4. **依賴關係完整性原則** - 調整任務計劃時必須維護依賴關係的完整性:\n`; - prompt += ` - 不創建循環依賴\n`; - prompt += ` - 不依賴已標記為移除的任務\n`; - prompt += ` - 確保新增依賴關係合理且必要\n`; - prompt += `5. **任務延續性原則** - 新任務應與現有任務構成連貫整體,維持整體計劃的邏輯性和可行性。\n\n`; - prompt += `**重要提醒:** 系統強制執行已完成任務保護機制,無法修改已完成的任務。請在規劃階段充分考慮這一限制。\n\n`; + prompt += `\n## 任務調整原則\n\n`; + prompt += `1. **已完成任務保護** - 已完成任務不可修改或刪除\n`; + prompt += `2. **未完成任務可調整** - 可根據新需求修改未完成任務\n`; + prompt += `3. **任務ID一致性** - 引用現有任務必須使用原始ID\n`; + prompt += `4. **依賴關係完整性** - 避免循環依賴,不依賴已標記移除的任務\n`; + prompt += `5. **任務延續性** - 新任務應與現有任務構成連貫整體\n\n`; // 添加選擇性任務更新模式指導 - prompt += `## 選擇性任務更新指南\n\n`; - prompt += `任務更新時,您可以選擇以下三種更新模式,每種模式適用於不同的場景:\n\n`; + prompt += `## 任務更新模式\n\n`; prompt += `### 1. **追加模式(append)**\n`; - prompt += `- **說明**:保留所有現有任務,僅添加新任務\n`; - prompt += `- **適用場景**:逐步擴展功能,添加獨立的新特性,現有任務計劃仍然有效\n`; - prompt += `- **使用方式**:split_tasks 工具中設置 \`updateMode="append"\`\n`; - prompt += `- **潛在問題**:長期使用可能導致積累過多已不再相關但未完成的任務\n\n`; + prompt += `- 保留所有現有任務,僅添加新任務\n`; + prompt += `- 適用:逐步擴展功能,現有計劃仍有效\n\n`; prompt += `### 2. **覆蓋模式(overwrite)**\n`; - prompt += `- **說明**:清除所有現有未完成任務,完全使用新任務列表替換\n`; - prompt += `- **適用場景**:徹底變更方向,現有未完成任務已完全不相關\n`; - prompt += `- **使用方式**:split_tasks 工具中設置 \`updateMode="overwrite"\`\n`; - prompt += `- **潛在問題**:可能會丟失有價值的未完成任務,需要確保所有重要任務都在新列表中\n\n`; + prompt += `- 清除所有現有未完成任務,完全使用新任務列表\n`; + prompt += `- 適用:徹底變更方向,現有未完成任務已不相關\n\n`; prompt += `### 3. **選擇性更新模式(selective)**\n`; - prompt += `- **說明**:根據任務名稱匹配選擇性地更新任務,保留不在列表中的現有任務\n`; - prompt += `- **適用場景**:部分調整任務計劃,保留部分未完成任務,更新或添加其他任務\n`; - prompt += `- **使用方式**:split_tasks 工具中設置 \`updateMode="selective"\`\n`; - prompt += `- **工作原理**:\n`; - prompt += ` 1. 對於名稱相同的任務,更新其內容(描述、注釋等),保留原ID和創建時間\n`; - prompt += ` 2. 新任務名稱的條目將被創建為新任務\n`; - prompt += ` 3. 不在提交列表中的現有任務將被保留不變\n`; - prompt += `- **最佳實踐**:在需要微調部分任務時優先選擇此模式,既避免重建所有任務,又能保持計劃的連續性\n\n`; - - prompt += `### 實際應用建議\n`; - prompt += `- 對於小範圍調整,優先使用 **selective** 模式,精確更新目標任務\n`; - prompt += `- 需要添加新功能時,可使用 **append** 模式保留現有工作\n`; - prompt += `- 僅在徹底重構計劃時使用 **overwrite** 模式,謹慎權衡是否真正需要刪除所有未完成任務\n`; - prompt += `- 無論使用哪種模式,始終需要**維護依賴關係的完整性和正確性**\n\n`; + prompt += `- 根據任務名稱匹配選擇性更新任務,保留其他現有任務\n`; + prompt += `- 適用:部分調整任務計劃,保留部分未完成任務\n`; + prompt += `- 工作原理:更新同名任務,創建新任務,保留其他任務\n\n`; } } catch (error) { console.error("載入現有任務時發生錯誤:", error); @@ -219,66 +196,26 @@ export async function planTask({ const DATA_DIR = process.env.DATA_DIR || path.join(PROJECT_ROOT, "data"); const MEMORY_DIR = path.join(DATA_DIR, "memory"); - prompt += `## 分析指引\n\n1. 首先確定任務的確切目標和預期成果 -2. 識別任務中可能的技術挑戰和關鍵決策點 -3. 考慮潛在的解決方案和替代方案 -4. 評估每種方案的優缺點 -5. 判斷是否需要分解為多個子任務 -6. 考慮與現有系統的集成需求 + prompt += `## 分析指引\n\n1. 確定任務的目標和預期成果 +2. 識別技術挑戰和關鍵決策點 +3. 考慮潛在解決方案和替代方案 +4. 評估各方案優缺點 +5. 判斷是否需要分解為子任務 +6. 考慮與現有系統的集成需求\n\n`; -如果對任務描述有任何不清楚或需要澄清的地方,請明確向用戶提問。提問時應具體指出哪些資訊缺失或模糊,並提供可能的選項。 + prompt += `## 任務記憶檢索指南\n\n過去任務備份在 **${MEMORY_DIR}** 目錄:\n\n`; + prompt += `1. **查找** - 按時間或相關性選擇特定備份\n`; + prompt += `2. **分析** - 了解相似任務的經驗和解決方案\n`; + prompt += `3. **應用** - 借鑒成功經驗,避免重複錯誤\n\n`; + prompt += `有效利用任務記憶可提高效率和解決方案的一致性。\n\n`; -## 任務分析最佳實踐\n\n- 保持客觀分析,避免過早做出技術選擇 -- 考慮長期影響,不僅僅關注短期解決方案 -- 識別假設和風險,明確標注需要進一步確認的部分 -- 在分析中引用相關文檔或代碼庫中的證據支持您的觀點 + prompt += `## 資訊收集指南\n\n`; + prompt += `1. **詢問用戶** - 當你對任務要求有疑問時,直接詢問用戶\n`; + prompt += `3. **網路搜索** - 當出現你不理解的名詞或概念時,使用網路搜尋工具找尋答案\n\n`; -## 收集資訊最佳實踐 -- 當遇到你不理解或不確定的內容,請勿產生幻覺 -- 當你遇到不理解專有名詞時,請勿產生幻覺 -- 你可以適當的時候網路搜尋工具,查詢相關的內容 -- 當你遇到需要查詢的內容時,請使用網路搜尋工具,例如包括但不限於 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. **結構化的任務摘要**: - - 明確的任務目標和期望成果 - - 明確的範圍界定(包括明確標注哪些不在範圍內) - - 主要技術挑戰清單 - - 相關係統依賴和限制條件 - -2. **初步解答構想**: - - 詳細的技術方案描述 - - 實施策略和主要步驟 - - 可能的替代方案及其優缺點比較 - - 測試和驗證策略建議 - -請確保您的分析全面且深入,這將作為後續所有開發工作的基礎。`; + prompt += `## 下一步行動\n\n完成初步分析後,使用「analyze_task」工具提交分析結果,包含:\n\n`; + prompt += `1. **任務摘要** - 目標、範圍、挑戰和限制條件\n`; + prompt += `2. **初步解答構想** - 可行的技術方案和實施計劃\n`; return { content: [ @@ -317,51 +254,42 @@ export async function analyzeTask({ initialConcept, previousAnalysis, }: z.infer) { - let prompt = `## 代碼庫分析任務\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n已收到您的初步解答構想:\n\n\`\`\`\n${initialConcept}\n\`\`\`\n\n`; + let prompt = `## 代碼庫分析\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n已收到初步解答構想:\n\n\`\`\`\n${initialConcept}\n\`\`\`\n\n`; - prompt += `## 技術審核指引\n\n請執行以下詳細的技術分析步驟:\n\n### 1. 代碼庫分析 -- 檢查現有程式碼庫中的相似實現或可重用組件 -- 分析系統架構,確定新功能的適當位置 -- 評估與現有模塊的整合方式和潛在影響 -- 識別可能受影響的其他系統部分 + prompt += `## 技術審核要點\n\n### 1. 代碼庫分析 +- 尋找可重用組件和類似實現 +- 確定新功能的適當位置 +- 評估與現有模塊的整合方式 ### 2. 技術策略評估 -- 評估是否可以抽象出通用模式或利用現有框架 -- 考慮模塊化和可擴展性設計原則 -- 分析提案的擴展性和未來兼容性 -- 評估測試策略和測試覆蓋率要求 +- 考慮模塊化和可擴展性設計 +- 評估提案的未來兼容性 +- 規劃測試策略和覆蓋範圍 ### 3. 風險和質量分析 -- 識別潛在的技術債務或效能瓶頸 -- 評估安全性和數據完整性考量 -- 分析錯誤處理和異常情況處理機制 +- 識別技術債務和效能瓶頸 +- 評估安全性和數據完整性 +- 檢查錯誤處理機制 ### 4. 實施建議 -- 確保方案符合項目的架構風格和最佳實踐 -- 建議特定的實施方法和技術選擇 -- 提出明確的開發步驟和里程碑 +- 遵循項目架構風格 +- 建議實施方法和技術選擇 +- 提出明確開發步驟 -請特別關注程式碼重用的機會,避免重複實作已有功能,降低技術債務風險。分析中應引用具體的代碼文件和行號作為證據支持您的評估。`; +注意尋找程式碼重用機會,避免重複實作已有功能,降低技術債務風險。`; if (previousAnalysis) { - prompt += `\n\n## 迭代分析\n\n請對照先前的分析結果進行比較和改進:\n\n\`\`\`\n${previousAnalysis}\n\`\`\`\n\n請明確識別:\n1. 哪些問題已經解決,以及解決方案的有效性 -2. 哪些問題仍然存在,及其優先級和嚴重性 -3. 您的新方案如何解決之前未解決的問題 -4. 迭代過程中獲得的新見解和經驗教訓`; + prompt += `\n\n## 迭代分析\n\n請對照先前分析結果:\n\n\`\`\`\n${previousAnalysis}\n\`\`\`\n\n請識別: +1. 已解決的問題及解決方案有效性 +2. 仍存在的問題及其優先級 +3. 新方案如何解決未解決問題 +4. 迭代過程中獲得的新見解`; } - prompt += `\n\n## 下一步行動\n\n完成深入分析後,請使用「reflect_task」工具提交您的最終分析,必須包含:\n\n1. **原始任務摘要**: - - 保持與第一階段一致,確保分析連續性 - - 必要時可以澄清或精確化原始摘要,但不應改變核心目標 + prompt += `\n\n## 下一步行動\n\n完成分析後,使用「reflect_task」工具提交最終分析,包含:\n\n1. **原始任務摘要** - 保持與第一階段一致 +2. **完整分析結果** - 技術細節、接口依賴、實施策略、驗收標準和工作量估計 -2. **完整的分析結果**: - - 詳盡的技術細節和規格定義 - - 與現有系統的所有接口和依賴關係 - - 明確的實施策略和步驟 - - 預期結果和驗收標準 - - 具體的工作量估計和資源需求 - -您的詳細分析將決定任務的解決方案質量。請確保全面考慮各種技術因素和業務約束,提供專業且實用的技術建議。`; +您的分析將決定解決方案質量,請全面考慮各種技術因素和業務約束。`; return { content: [ @@ -402,58 +330,44 @@ export async function reflectTask({ summary, analysis, }: z.infer) { - const prompt = `## 解決方案反思與評估\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n### 詳細分析結果\n\`\`\`\n${analysis}\n\`\`\`\n\n## 批判性評估指引\n\n請從以下多個維度對您的解決方案進行全面且批判性的審查:\n\n### 1. 技術完整性評估 -- 方案是否存在技術缺陷或邏輯漏洞?從各個角度檢驗解決方案的完整性。 -- 所有邊緣情況和異常處理是否周全?列舉可能的異常場景並驗證處理方式。 -- 所有數據流和控制流是否清晰定義?繪製流程圖以確認各環節無缺失。 -- 實現是否考慮了所有必要的技術限制和依賴條件?檢查系統間的相互作用。 -- 解決方案的技術選擇是否適合問題的性質和規模?評估技術選型合理性。 + const prompt = `## 方案評估\n\n### 任務摘要\n\`\`\`\n${summary}\n\`\`\`\n\n### 分析結果\n\`\`\`\n${analysis}\n\`\`\`\n\n## 評估要點\n\n### 1. 技術完整性 +- 檢查方案技術缺陷和邏輯漏洞 +- 驗證邊緣情況和異常處理 +- 確認數據流和控制流完整性 +- 評估技術選型合理性 -### 2. 效能與可擴展性評估 -- 解決方案在資源使用效率方面是否最佳化?分析計算、存儲和網絡資源消耗。 -- 系統在負載增加時是否仍能保持穩定性能?考慮擴展性瓶頸和解決方案。 -- 是否有可能進一步優化的部分?找出潛在的優化點並提出具體改進方案。 -- 是否考慮了未來功能擴展的可能性?評估方案的長期可持續性。 +### 2. 效能與可擴展性 +- 分析資源使用效率和優化空間 +- 評估系統負載擴展能力 +- 識別潛在優化點 +- 考慮未來功能擴展可能性 -### 3. 需求符合度評估 -- 解決方案是否完全實現了所有功能需求?逐條核對需求列表。 -- 是否符合所有非功能性需求(如安全性、可維護性)?全面檢查各方面的需求符合情況。 -- 是否有遺漏或誤解的需求?重新審視原始任務描述,確保全部涵蓋。 -- 使用者體驗和可用性是否達到預期標準?從最終用戶角度評估方案。 -- 是否考慮了業務流程與解決方案的整合?確認解決方案能夠融入現有業務流程。 +### 3. 需求符合度 +- 核對功能需求實現情況 +- 檢查非功能性需求符合度 +- 確認需求理解準確性 +- 評估用戶體驗和業務流程整合 -## 決策點與行動建議\n\n基於您的反思,請選擇下一步行動:\n\n- **如果發現需要顯著改進的關鍵問題**: - - 請使用「analyze_task」工具,重新提交改進後的方案 - - 明確指出問題所在並提供具體的改進方向 - - 保留原摘要,但徹底修訂方案中的問題部分 +## 決策點\n\n根據評估結果選擇後續行動:\n\n- **發現關鍵問題**:使用「analyze_task」重新提交改進方案 +- **輕微調整**:在下一步執行中應用這些小的改進 +- **方案完善**:使用「split_tasks」將解決方案分解為可執行子任務,如果任務太多或內容過長,請使用多次使用「split_tasks」工具,每次只提交一小部分任務 -- **如果只需輕微調整或優化**: - - 直接在下一步中應用這些小的改進 - - 記錄需要調整的具體點供後續實施參考 +## split_tasks 更新模式選擇 +- **append** - 保留所有現有任務並添加新任務 +- **overwrite** - 清除未完成任務,保留已完成任務 +- **selective** - 選擇性更新特定任務,保留其他任務 +- **clearAllTasks** - 清除所有任務並創建備份 -- **如果確認方案已足夠完善**: - - 請使用「split_tasks」工具,將解決方案分解為具體、可執行的子任務 - - 如果任務太多或內容過長,請分批使用「split_tasks」工具,每次只提交一小部分任務 - - 建立明確的依賴關係和執行順序 - - 為每個子任務設定明確的完成標準和驗收條件 +## 知識傳遞機制 +1. **全局分析結果** - 關聯完整分析文檔 +2. **任務專屬實現指南** - 每個任務保存具體實現方法 +3. **任務專屬驗證標準** - 設置明確驗證要求 -## split_tasks 的 updateMode 選擇建議(必填參數) - - 若希望**保留所有現有任務並添加新任務**,使用 updateMode="append" - - 若希望**清除所有未完成任務**,但保留已完成任務,使用 updateMode="overwrite" - - 若希望**選擇性更新特定任務**,同時保留其他未完成任務,使用 updateMode="selective" - - 若希望**清除所有任務**並自動創建備份,使用 updateMode="clearAllTasks" +## split_tasks 任務太多或內容過長導致「split_tasks」工具無法正常運作時 +- 請使用多次使用「split_tasks」工具,每次只提交一小部分任務 +- 如果每次只新增一個任務還是無法正常運作,請考慮再次拆分任務,或者簡化任務但必須保留核心內容 -## 知識傳遞機制說明 - -拆分任務時,已將規劃與分析階段產生的關鍵知識保留並融入到任務中: - -1. **全局分析結果** - 所有任務都已關聯完整的分析文檔,在執行時可查看 -2. **任務專屬實現指南** - 每個任務都已保存具體的實現方法和建議,如果可以請提供 pseudocode -3. **任務專屬驗證標準** - 每個任務都設置了明確的驗證要求和檢查點 - -此機制確保了任務執行者可以獲得完整的背景知識和技術細節,無需重新思考或推導解決方案。 - -您的批判性評估將決定最終方案的質量,請務必嚴格審查,不放過任何潛在問題。`; +請嚴格審查方案,確保解決方案質量。`; return { content: [ @@ -621,50 +535,26 @@ export async function splitTasks({ // 獲取所有任務,用於顯示完整的依賴關係 const allTasks = await getAllTasks(); - let prompt = `## 任務拆分結果 - ${updateMode} 模式\n\n### 系統確認\n任務已成功${ + let prompt = `## 任務拆分 - ${updateMode} 模式\n\n`; + + prompt += `任務已${ updateMode === "overwrite" - ? "覆蓋未完成的任務清單(已完成任務已保留)" + ? "覆蓋未完成任務(已完成任務已保留)" : updateMode === "selective" - ? "選擇性更新任務清單" + ? "選擇性更新" : "新增至現有任務清單" }。\n\n`; - prompt += `## 任務拆分指南\n\n### 有效的任務拆分策略\n\n1. **按功能分解** - 將大功能拆分為獨立可測試的子功能 - - 每個子功能應有清晰的輸入、輸出和功能邊界 - - 確保子功能間邏輯關係明確且最小化耦合 - - 避免功能過度細分導致管理複雜度增加 + prompt += `## 拆分策略\n\n1. **按功能分解** - 獨立可測試的子功能,明確輸入輸出 +2. **按技術層次分解** - 沿架構層次分離任務,確保接口明確 +3. **按開發階段分解** - 核心功能先行,優化功能後續 +4. **按風險分解** - 隔離高風險部分,降低整體風險\n\n`; -2. **按技術層次分解** - 沿系統架構層次分離任務 - - 前端界面層、業務邏輯層、數據訪問層分別拆分 - - 確保層間接口明確,便於並行開發 - - 優先完成底層核心功能,逐層向上構建 + prompt += `## 任務質量審核\n\n1. **任務原子性** - 每個任務足夠小且具體,可獨立完成 +2. **依賴關係** - 任務依賴形成有向無環圖,避免循環依賴 +3. **描述完整性** - 每個任務描述清晰準確,包含必要上下文\n\n`; -3. **按開發階段分解** - 從原型到完善的演進路徑 - - 初始開發階段專注核心功能實現 - - 測試與完善階段改進錯誤處理與邊緣案例 - - 優化階段專注性能與用戶體驗提升 - -4. **按風險程度分解** - 隔離高風險部分 - - 將技術風險高的部分單獨拆分為探索性任務 - - 將業務邏輯複雜的部分細化為可管理的子任務 - - 通過獨立任務降低風險對整體進度的影響 - -## 任務質量審核指引\n\n請根據以下標準對任務拆分進行嚴格的質量審核:\n\n### 1. 任務原子性\n- 每個任務是否足夠小且具體,可獨立完成? -- 任務是否具有清晰的完成標準? -- 是否避免了範圍過大的任務? -- 任務大小是否平衡,避免出現極大或極小的任務? - -### 2. 依賴關係完整性\n- 任務依賴關係是否形成有向無環圖? -- 是否存在隱藏依賴未被明確標記? -- 依賴鏈是否最短化,避免不必要的阻塞? -- 是否優先考慮了任務的並行執行可能性? - -### 3. 描述完整性\n- 每個任務描述是否清晰準確? -- 是否包含足夠的上下文信息? -- 注意事項是否涵蓋關鍵實施細節? -- 是否明確了任務的驗收標準? - -## 詳細任務清單\n\n${createdTasks + prompt += `## 任務清單\n\n${createdTasks .map((task, index) => { let taskInfo = `### 任務 ${index + 1}:${task.name}\n**ID:** \`${ task.id @@ -711,27 +601,17 @@ export async function splitTasks({ return taskInfo; }) - .join( - "\n" - )}\n\n## 任務依賴管理技巧\n\n### 依賴關係設置\n在建立新任務時,可以通過以下方式指定依賴關係:\n\n1. **使用任務名稱**(推薦):直接使用其他任務的名稱,如 \`"建立用戶界面"\`\n2. **使用任務ID**:使用任務的唯一標識符,如 \`"${ - createdTasks.length > 0 - ? createdTasks[0].id - : "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" - }"\`\n -### 依賴關係最佳實踐 -- **最小化依賴數量** - 僅設置直接前置任務為依賴 -- **避免循環依賴** - 確保任務圖是有向無環的 -- **平衡關鍵路徑** - 減少關鍵路徑上的任務數量 -- **提高並行度** - 結構設計應允許多個任務並行執行 + .join("\n")}\n\n`; -## 執行計劃指南 + prompt += `## 依賴關係管理\n\n`; + prompt += `- 設置依賴可使用任務名稱或任務ID\n`; + prompt += `- 最小化依賴數量,只設置直接前置任務\n`; + prompt += `- 避免循環依賴,確保任務圖有向無環\n`; + prompt += `- 平衡關鍵路徑,優化並行執行可能性\n\n`; -### 關鍵路徑識別 -- 確定項目關鍵路徑上的任務序列 -- 優先分配資源到關鍵路徑任務 -- 監控關鍵路徑任務進度,防止延誤 - -## 決策點\n\n請選擇下一步行動:\n\n- 如發現任務拆分不合理:請重新呼叫「split_tasks」工具,調整任務定義或依賴關係\n\n- 如確認任務拆分完善:請生成執行計劃摘要,包括建議的執行順序、關鍵路徑和風險點`; + prompt += `## 決策點\n\n`; + prompt += `- 發現任務拆分不合理:重新呼叫「split_tasks」調整\n`; + prompt += `- 確認任務拆分完善:生成執行計劃,確定優先順序\n`; return { content: [ @@ -873,10 +753,10 @@ export async function executeTask({ await updateTaskStatus(taskId, TaskStatus.IN_PROGRESS); // 構建任務執行提示 - let prompt = `## 任務執行指示\n\n### 任務詳情\n\n- **名稱:** ${ - task.name - }\n- **ID:** \`${task.id}\`\n- **描述:** ${task.description}\n${ - task.notes ? `- **注意事項:** ${task.notes}\n` : "" + let prompt = `## 任務執行\n\n**名稱:** ${task.name}\n**ID:** \`${ + task.id + }\`\n**描述:** ${task.description}\n${ + task.notes ? `**注意事項:** ${task.notes}\n` : "" }\n`; // ===== 增強:顯示實現指南(如果有) ===== @@ -1035,74 +915,18 @@ export async function executeTask({ prompt += contextInfo; } - prompt += `\n## 執行指引\n\n### 理解與規劃階段 -1. **仔細分析任務需求** - 全面理解任務描述、注意事項和約束條件 - - 識別核心需求和次要需求,建立優先級 - - 確認與現有系統的整合要點和依賴關係 - - 評估潛在的技術難點和解決方案 + prompt += `\n## 執行步驟\n\n`; + prompt += `1. **分析需求** - 理解任務需求和約束條件\n`; + prompt += `2. **設計方案** - 制定實施計劃和測試策略\n`; + prompt += `3. **實施方案** - 按計劃執行,處理邊緣情況\n`; + prompt += `4. **測試驗證** - 確保功能正確性和穩健性\n\n`; -2. **設計執行方案** - 制定結構化的實施計劃 - - 定義明確的實施步驟和執行順序 - - 選擇適合的技術方案,考慮系統架構一致性 - - 設計測試策略,確保功能正確性和質量 + prompt += `## 質量要求\n\n`; + prompt += `- **範圍管理** - 僅修改相關代碼,避免功能蔓延\n`; + prompt += `- **代碼質量** - 符合編碼標準,處理異常情況\n`; + prompt += `- **效能考量** - 注意算法效率和資源使用\n\n`; -### 實施與測試階段 -3. **系統性實施方案** - 按照計劃逐步執行 - - 遵循項目的編碼規範和最佳實踐 - - 實現核心功能,確保與現有系統正確整合 - - 處理邊緣情況和錯誤處理機制 - - 持續參考現有代碼風格和架構模式 - -4. **全面測試與驗證** - 確保實現的正確性和穩健性 - - 測試核心功能和邊緣情況 - - 驗證與其他系統組件的交互 - - 評估性能影響和資源使用情況 - - 確保符合原始需求規格 - -### 文檔與完成階段 -5. **完整記錄實施過程** - 詳細記錄關鍵決策和實施細節 - - 記錄技術選擇理由和考量因素 - - 描述遇到的問題及其解決方法 - - 提供實現的核心邏輯說明 - - 注明可能需要後續改進的地方 - -6. **更新相關文件** - 保持文檔與代碼同步 - - 使用 update_task_files 工具關聯和更新文件 - - 記錄代碼行號以便精確定位關鍵實現 - - 確保文檔反映最終實現的實際狀態 - -## 專注限制與質量保證\n\n### 範圍管理 -- **嚴格遵守任務範圍** - 僅修改與任務直接相關的代碼區域 - - 所有變更必須可直接追溯到任務描述中的明確需求 - - 避免功能蔓延或過度設計 - - 發現範圍外問題時,記錄但不立即修改,保持系統整體一致性 - -- **需求優先級管理** - 專注於完成核心需求 - - 當需求與實際情況存在歧義時,選擇影響範圍最小的實現方案 - - 不自行擴展需求範圍,即使發現潛在優化機會 - - 對於重大設計決策,尋求用戶確認而非做出假設性修改 - -### 質量標準 -- **代碼質量保證** - 確保交付高質量的實現 - - 符合專案編碼標準和架構設計原則 - - 實現適當的錯誤處理和邊緣情況檢查 - - 注重代碼可讀性和可維護性 - - 避免重複代碼,優先利用現有組件和函數 - -- **效能考量** - 優化性能和資源使用 - - 考慮算法效率和數據結構選擇 - - 避免不必要的計算或資源消耗 - - 在關鍵路徑上進行必要的性能優化 - - 平衡開發速度與執行效率 - -## 下一步行動\n\n完成實施後,必須使用「verify_task」工具進行全面驗證,確保所有功能和要求均已正確實現。驗證過程應包括: - -- 功能完整性檢查 - 所有需求點是否已實現 -- 代碼質量審核 - 是否符合項目標準和最佳實踐 -- 兼容性測試 - 是否與現有系統無縫整合 -- 性能評估 - 實現是否滿足效能要求 - -驗證通過後,使用「complete_task」工具標記任務完成並提供詳細的完成報告。`; + prompt += `完成後使用「verify_task」工具進行驗證。`; return { content: [ @@ -1150,18 +974,18 @@ export async function verifyTask({ taskId }: z.infer) { } // 構建基本的任務詳情 - let prompt = `## 任務驗證評估\n\n### 任務資料\n\n- **名稱:** ${ - task.name - }\n- **ID:** \`${task.id}\`\n- **描述:** ${task.description}\n${ - task.notes ? `- **注意事項:** ${task.notes}\n` : "" + let prompt = `## 任務驗證\n\n**名稱:** ${task.name}\n**ID:** \`${ + task.id + }\`\n**描述:** ${task.description}\n${ + task.notes ? `**注意事項:** ${task.notes}\n` : "" }\n`; - // 新增:顯示任務特定的驗證標準(如果有) + // 顯示任務特定的驗證標準(如果有) if (task.verificationCriteria) { - prompt += `\n## 任務特定驗證標準\n\n${task.verificationCriteria}\n\n`; + prompt += `\n## 驗證標準\n\n${task.verificationCriteria}\n\n`; } - // 新增:顯示實現指南的主要內容(如果有) + // 顯示實現指南摘要(如果有) if (task.implementationGuide) { prompt += `\n## 實現指南摘要\n\n${ task.implementationGuide.length > 200 @@ -1170,142 +994,19 @@ export async function verifyTask({ taskId }: z.infer) { }\n\n`; } - // 新增:顯示分析結果摘要(如果有) + // 顯示分析結果摘要(如果有) if (task.analysisResult) { - prompt += `\n## 分析要點摘要\n\n在驗證時應考慮原始分析中強調的以下關鍵點:\n\n${extractSummary( + prompt += `\n## 分析要點\n\n${extractSummary( task.analysisResult, 300 )}\n\n`; } - prompt += `## 完整性驗證標準\n\n請根據以下關鍵標準進行嚴格的質量檢查,為每個評估項目提供詳細的證據和具體範例: - -### 1. 需求符合性 (30%) -#### 核心評估項目: -- **功能完整性** - 實現是否完全符合任務描述中的所有功能需求? - - 逐條檢查任務描述中的每一項功能點,確認全部實現 - - 驗證主要功能流程的完整性和正確性 - - 評估用戶交互體驗是否符合要求 - -- **約束條件遵循** - 是否遵循了所有注意事項和約束條件? - - 檢查是否嚴格遵守了任務指定的技術限制或規範 - - 驗證實現是否符合任務描述中的特定要求 - - 確認所有指定的業務規則都得到正確實現 - -- **邊緣情況處理** - 是否處理了所有業務邏輯的邊緣情況? - - 列舉並驗證各種可能的異常輸入和情況 - - 檢查錯誤處理機制是否完善 - - 評估實現對無效操作的容錯能力 - -#### 評分指南: -- **優秀(90-100%)**: 所有需求點完美實現,邊緣情況處理完備,代碼穩健可靠 -- **良好(75-89%)**: 核心需求全部實現,少量邊緣情況可能需要優化 -- **合格(60-74%)**: 主要功能已實現,但處理不夠完善或有遺漏 -- **需改進(<60%)**: 關鍵功能缺失或實現不正確,需要重大修改 - -### 2. 技術實現質量 (30%) -#### 核心評估項目: -- **架構一致性** - 代碼是否遵循了項目的架構模式和設計原則? - - 評估實現是否符合現有代碼庫的架構風格 - - 檢查模塊化程度和責任分離是否適當 - - 驗證是否遵循了項目的編碼規範和命名慣例 - -- **程式健壯性** - 是否有適當的錯誤處理和防禦性編程? - - 檢查是否實施了適當的錯誤捕獲和處理機制 - - 評估異常情況下的系統行為是否符合預期 - - 驗證是否有防禦性檢查和輸入驗證 - -- **實現優雅性** - 實現是否簡潔高效,避免了不必要的複雜性? - - 評估代碼的可讀性和可維護性 - - 檢查是否存在不必要的重複或冗餘邏輯 - - 評估算法和數據結構選擇的適當性 - -#### 評分指南: -- **優秀(90-100%)**: 代碼優雅、健壯,完全符合項目架構標準,高度可維護 -- **良好(75-89%)**: 代碼結構合理,錯誤處理完善,但可能有小的改進空間 -- **合格(60-74%)**: 基本符合編碼標準,但存在架構或錯誤處理上的不足 -- **需改進(<60%)**: 代碼質量較差,存在明顯的架構問題或錯誤處理不足 - -### 3. 集成與兼容性 (20%) -#### 核心評估項目: -- **系統整合** - 實現是否與現有系統無縫集成? - - 檢查與其他系統組件的接口是否正確實現 - - 評估對現有功能的影響是否最小化 - - 驗證是否正確使用了共享服務和組件 - -- **互操作性** - 是否考慮了與其他組件的相互作用? - - 評估與依賴服務或模塊的交互是否正確 - - 檢查資源共享和競爭條件的處理 - - 驗證數據交換格式和協議的兼容性 - -- **兼容性維護** - 是否保持了向前和向後兼容性(如適用)? - - 評估對現有API或界面的變更是否維持兼容性 - - 檢查對舊數據格式或配置的支持 - - 驗證升級路徑和降級策略 - -#### 評分指南: -- **優秀(90-100%)**: 完美集成,零衝突,維持所有必要的兼容性 -- **良好(75-89%)**: 基本無縫集成,極少數邊緣情況下可能有小問題 -- **合格(60-74%)**: 主要功能正確集成,但存在一些兼容性考慮不足 -- **需改進(<60%)**: 集成存在明顯問題,對現有系統造成破壞性影響 - -### 4. 性能與可擴展性 (20%) -#### 核心評估項目: -- **效能優化** - 實現是否考慮了性能優化? - - 評估代碼執行效率和資源使用情況 - - 檢查是否有不必要的計算或操作 - - 驗證關鍵路徑的效能表現 - -- **負載適應性** - 系統是否能夠處理預期的負載和擴展需求? - - 評估在高負載下的系統行為和穩定性 - - 檢查資源使用的可擴展性 - - 驗證並發處理和資源競爭的管理 - -- **資源管理** - 是否避免了可能的資源洩漏或瓶頸? - - 檢查資源分配和釋放的正確性 - - 評估內存使用效率和垃圾回收影響 - - 驗證數據庫查詢或IO操作的效率 - -#### 評分指南: -- **優秀(90-100%)**: 高效實現,經過充分優化,具備優秀的擴展能力 -- **良好(75-89%)**: 效能良好,無明顯瓶頸,滿足當前和可預見的需求 -- **合格(60-74%)**: 基本性能可接受,但在高負載下可能存在問題 -- **需改進(<60%)**: 存在明顯的性能問題或資源使用不當 - -## 驗證結果報告\n\n請提供詳細的驗證結果報告,應包含以下內容: - -1. **整體評分與結論**: - - 根據上述評估標準給出總體評分和評級 - - 簡明扼要的總結性評價 - -2. **各項標準詳細評估**: - - 為每個標準給出分項評分和具體證據 - - 引用具體代碼示例或實現細節 - - 指出特別出色或需要改進的部分 - -3. **發現的問題與建議**: - - 按嚴重程度列出所有發現的問題 - - 為每個問題提供具體、可行的修復建議 - - 區分必須修復的關鍵問題和可選的優化建議 - -4. **最終結論和建議**: - - 明確指出是否符合驗收標準 - - 提供關於後續步驟的清晰建議 - -## 決策點\n\n根據您的全面驗證評估,請選擇適當的後續行動: - -- **如果發現嚴重問題需要修復**: - - 詳細列出所有問題及其優先級 - - 提供具體的修復指導 - - 建議繼續改進並解決關鍵問題 - - 「plan_task」工具,計劃修復問題的步驟 - -- **如果任務已完全符合要求**: - - 總結實現的主要優點和特色 - - 使用「complete_task」工具,標記任務為已完成 - - 提出任務完成總結報告的要點建議 - -您的驗證評估將直接影響產品質量,請以專業和批判性的眼光進行全面檢查。`; + prompt += `## 驗證標準\n\n1. **需求符合性(30%)** - 功能完整性、約束條件遵循、邊緣情況處理\n2. **技術質量(30%)** - 架構一致性、程式健壯性、實現優雅性\n3. **集成兼容性(20%)** - 系統整合、互操作性、兼容性維護\n4. **性能可擴展性(20%)** - 效能優化、負載適應性、資源管理\n\n## 報告要求\n\n提供整體評分和評級,各項標準評估,問題與建議,及最終結論。\n\n`; + prompt += `## 決策點\n\n根據驗證結果選擇:\n`; + prompt += `- **嚴重錯誤**:使用「plan_task」工具重新規劃任務\n`; + prompt += `- **輕微錯誤**:直接修復問題\n`; + prompt += `- **無錯誤**:使用「complete_task」工具標記完成\n`; return { content: [ @@ -1417,7 +1118,7 @@ export async function deleteTask({ taskId }: z.infer) { content: [ { type: "text" as const, - text: `## 操作被拒絕\n\n任務 "${task.name}" (ID: \`${task.id}\`) 已完成,不允許刪除已完成的任務。\n\n如需清理任務,請聯絡系統管理員。`, + text: `## 操作被拒絕\n\n任務 "${task.name}" (ID: \`${task.id}\`) 已完成,不允許刪除已完成的任務。`, }, ], isError: true, @@ -1432,10 +1133,6 @@ export async function deleteTask({ taskId }: z.infer) { type: "text" as const, text: `## ${result.success ? "操作成功" : "操作失敗"}\n\n${ result.message - }\n\n${ - result.success - ? `任務 "${task.name}" (ID: \`${task.id}\`) 已成功從系統中刪除。` - : "" }`, }, ], @@ -1463,7 +1160,7 @@ export async function clearAllTasks({ content: [ { type: "text" as const, - text: `## 操作取消\n\n未確認清除操作。如要清除所有任務,請將 confirm 參數設為 true。\n\n⚠️ 警告:此操作將刪除所有未完成的任務,且無法恢復。請謹慎操作。`, + text: `## 操作取消\n\n未確認清除操作。如要清除所有任務,請將 confirm 參數設為 true。\n\n⚠️ 此操作將刪除所有未完成的任務且無法恢復。`, }, ], }; @@ -1493,7 +1190,7 @@ export async function clearAllTasks({ result.message }${ result.backupFile - ? `\n\n系統已自動創建備份文件: \`${result.backupFile}\`` + ? `\n\n已自動創建備份: \`${result.backupFile}\`` : "" }`, },