新增實用工具函數以生成任務相關文件的摘要,更新 API 參考文檔以包含新功能說明,並調整架構文檔以反映文件摘要生成的邏輯與流程,提升任務管理的靈活性與文件處理能力。

This commit is contained in:
siage 2025-04-12 02:01:28 +08:00
parent b48325230e
commit 8cb3a3228d
5 changed files with 127 additions and 40 deletions

View File

@ -7,6 +7,7 @@
- [核心任務管理 API](#核心任務管理-api) - [核心任務管理 API](#核心任務管理-api)
- [任務管理 API](#任務管理-api) - [任務管理 API](#任務管理-api)
- [工作日誌功能](#工作日誌功能) - [工作日誌功能](#工作日誌功能)
- [實用工具函數](#實用工具函數)
## 核心任務管理 API ## 核心任務管理 API
@ -478,3 +479,67 @@ const clearResult = await mcp.mcp_shrimp_task_manager.clear_conversation_log({
``` ```
## 實用工具函數 ## 實用工具函數
### 1. 任務相關文件摘要生成
#### `loadTaskRelatedFiles`
生成任務相關文件的內容摘要,基於文件元數據創建格式化的摘要信息,而不實際讀取檔案內容。
**參數:**
| 參數名 | 類型 | 必填 | 描述 |
| -------------- | ------------- | ---- | ----------------------------------------------------------------------------------------- |
| relatedFiles | RelatedFile[] | 是 | 相關文件列表 - RelatedFile 物件數組,包含文件的路徑、類型、描述等資訊 |
| maxTotalLength | number | 否 | 摘要內容的最大總長度 - 控制生成摘要的總字符數,避免過大的返回內容,預設值為 15000選填 |
**RelatedFile 物件屬性:**
| 屬性名 | 類型 | 必填 | 描述 |
| ----------- | --------------- | ---- | --------------------------------------------------------------------------------------------------------------------------- |
| path | string | 是 | 文件路徑(相對於項目根目錄或絕對路徑) |
| type | RelatedFileType | 是 | 文件關聯類型可選值TO_MODIFY待修改、REFERENCE參考資料、DEPENDENCY依賴文件、OUTPUT輸出結果、OTHER其他 |
| description | string | 否 | 文件的補充描述(選填) |
| lineStart | number | 否 | 相關代碼區塊的起始行(選填) |
| lineEnd | number | 否 | 相關代碼區塊的結束行(選填) |
**返回:**
- 返回一個包含兩個屬性的物件:
- `content`: 詳細的文件資訊,包含每個檔案的基本資訊和提示訊息
- `summary`: 簡潔的檔案列表概覽,適合快速瀏覽
**使用範例:**
```typescript
import { loadTaskRelatedFiles } from "../utils/fileLoader.js";
import { RelatedFile, RelatedFileType } from "../types/index.js";
// 定義相關文件列表
const relatedFiles: RelatedFile[] = [
{
path: "src/components/Button.tsx",
type: RelatedFileType.TO_MODIFY,
description: "需要修改按鈕組件以支持新狀態",
lineStart: 24,
lineEnd: 45,
},
{
path: "docs/design-spec.md",
type: RelatedFileType.REFERENCE,
description: "包含按鈕設計規範",
},
];
// 生成文件摘要
const result = await loadTaskRelatedFiles(relatedFiles, 10000);
console.log(result.summary); // 顯示簡潔的摘要
console.log(result.content); // 顯示詳細的內容
```
**重要說明:**
- 此函數不會實際讀取檔案內容,僅基於提供的文件元數據生成摘要信息
- 返回的摘要按文件類型優先級排序,優先處理待修改的文件
- 當摘要總長度超過 maxTotalLength 參數時,會停止處理剩餘文件並添加說明
- 摘要內容包括文件路徑、類型、描述和行範圍等基本信息

View File

@ -64,7 +64,7 @@
- `taskTools.ts`: 任務管理相關工具 - `taskTools.ts`: 任務管理相關工具
- `logTools.ts`: 日誌管理相關工具 - `logTools.ts`: 日誌管理相關工具
- `fileLoader.ts`: 文件加載和處理工具(新增) - `fileLoader.ts`: 任務相關文件的摘要生成工具(新增)
**新增功能** **新增功能**
@ -113,14 +113,14 @@
**核心文件** **核心文件**
- `summaryExtractor.ts`: 實現摘要提取和生成功能 - `summaryExtractor.ts`: 實現摘要提取和生成功能
- `fileLoader.ts`: 實現智能文件加載和代碼區塊提取功能(新增) - `fileLoader.ts`: 實現任務相關文件的摘要生成功能(新增)
- `contextManager.ts`: 管理上下文記憶和優化(新增) - `contextManager.ts`: 管理上下文記憶和優化(新增)
**新增功能** **新增功能**
- 增強 `generateTaskSummary` 函數實現自動摘要生成 - 增強 `generateTaskSummary` 函數實現自動摘要生成
- 實現 `loadTaskRelatedFiles` 函數,智能加載相關文件內容 - 實現 `loadTaskRelatedFiles` 函數,生成任務相關文件的摘要
- 實現 `extractRelevantCodeBlocks` 函數,從大型文件中提取關鍵代碼 - 簡化 `extractRelevantCodeBlocks` 函數,生成代碼的位置和描述摘要
- 實現 `optimizeContext` 函數,優化上下文表示和壓縮 - 實現 `optimizeContext` 函數,優化上下文表示和壓縮
### 2.6 數據存儲層 ### 2.6 數據存儲層
@ -328,13 +328,13 @@ LLM 調用 update_task_files
按優先級排序文件 按優先級排序文件
| |
v v
智能加載文件內容 生成文件摘要
| | | |
| +---> 對於指定行號範圍的文件,優先加載該範圍 | +---> 對於指定行號範圍的文件,生成該範圍的摘要
| | | |
| +---> 對於大型文件,提取關鍵代碼區塊 | +---> 對於大型文件,生成關鍵內容的摘要描述
| | | |
| +---> 對於文檔文件,生成摘要 | +---> 對於文檔文件,生成整體內容摘要
| |
v v
加載依賴任務的摘要 加載依賴任務的摘要
@ -511,7 +511,7 @@ LLM 調用 update_task_files
| | | |
v v v v
+-------+------------------------+-----+ +-------+------------------------+-----+
| 文件優先級排序和智能載入 | | 文件優先級排序和摘要生成 |
+-------+------------------------+-----+ +-------+------------------------+-----+
| |
v v
@ -544,7 +544,7 @@ LLM 調用 update_task_files
- **複雜度評估擴展**:可在 `assessTaskComplexity` 中添加更多評估指標 - **複雜度評估擴展**:可在 `assessTaskComplexity` 中添加更多評估指標
- **摘要生成擴展**:可增強 `summaryExtractor.ts` 中的算法 - **摘要生成擴展**:可增強 `summaryExtractor.ts` 中的算法
- **上下文管理擴展**:可在 `contextManager.ts` 中添加更多上下文優化策略 - **上下文管理擴展**:可在 `contextManager.ts` 中添加更多上下文優化策略
- **文件加載擴展**:可在 `fileLoader.ts` 中支持更多文件類型的智能加載 - **摘要生成擴展**:可在 `fileLoader.ts` 中支持更多文件類型的摘要格式化
## 7. 系統限制與未來改進 ## 7. 系統限制與未來改進

View File

@ -289,10 +289,10 @@ const filesResult = await mcp.mcp_shrimp_task_manager.update_task_files({
通過關聯文件功能,系統可以: 通過關聯文件功能,系統可以:
1. **自動載入關鍵上下文**:執行任務時自動加載相關文件內容 1. **自動生成文件摘要**:執行任務時基於文件元數據生成摘要信息
2. **提供精確代碼定位**:直接定位到相關代碼,減少搜索時間 2. **提供精確定位信息**:保留文件路徑和行號範圍,方便後續查找
3. **建立知識網絡**:將分散的相關資源連接成有機整體 3. **建立知識網絡**:將分散的相關資源連接成有機整體
4. **提高執行效率**減少上下文切換,提高任務連貫性 4. **提高執行效率**提供結構化的文件相關信息,減少任務執行時間
### 7. 優化任務執行時的上下文記憶功能 ### 7. 優化任務執行時的上下文記憶功能
@ -313,7 +313,7 @@ const filesResult = await mcp.mcp_shrimp_task_manager.update_task_files({
#### 智能上下文加載功能說明 #### 智能上下文加載功能說明
系統在執行任務時會智能處理文件內容,主要特點包括: 系統在執行任務時會智能處理文件相關信息,主要特點包括:
1. **自動優先級排序**:根據文件類型和關聯程度排序 1. **自動優先級排序**:根據文件類型和關聯程度排序
@ -321,16 +321,16 @@ const filesResult = await mcp.mcp_shrimp_task_manager.update_task_files({
- 直接依賴的文件次之 - 直接依賴的文件次之
- 參考資料根據相關性排序 - 參考資料根據相關性排序
2. **智能代碼提取**:對於大型文件,系統會: 2. **文件摘要生成**:對於關聯文件,系統會:
- 優先加載指定的行號範圍 - 基於文件元數據創建格式化的摘要信息
- 識別關鍵代碼區塊(如函數定義、類定義) - 優先處理指定的行號範圍信息
- 提取重要的註釋和文檔字符串 - 根據文件類型提供適當的上下文提示
3. **上下文壓縮**:在上下文過大時,系統會: 3. **上下文壓縮**:在上下文過大時,系統會:
- 保留核心代碼,刪減非關鍵部分 - 控制摘要內容的總長度
- 對大型文檔生成摘要 - 對文件生成簡潔的描述
- 優化格式,減少上下文標記使用 - 優化格式,減少上下文標記使用
4. **執行歷史記憶**:自動包含: 4. **執行歷史記憶**:自動包含:
@ -343,7 +343,7 @@ const filesResult = await mcp.mcp_shrimp_task_manager.update_task_files({
執行任務時,系統會自動應用上下文記憶功能: 執行任務時,系統會自動應用上下文記憶功能:
```javascript ```javascript
// 執行任務(系統會自動加載相關文件和上下文 // 執行任務(系統會自動生成相關文件摘要
const executeResult = await mcp.mcp_shrimp_task_manager.execute_task({ const executeResult = await mcp.mcp_shrimp_task_manager.execute_task({
taskId: "task-uuid-here", taskId: "task-uuid-here",
}); });
@ -356,7 +356,7 @@ await mcp.mcp_shrimp_task_manager.update_task_files({
{ {
path: "src/utils/validation.ts", path: "src/utils/validation.ts",
type: "依賴文件", type: "依賴文件",
description: "包含需要使用的表單驗證函數", description: "包含表單驗證函數,用於實施表單驗證邏輯",
lineStart: 25, lineStart: 25,
lineEnd: 48, lineEnd: 48,
}, },
@ -364,7 +364,7 @@ await mcp.mcp_shrimp_task_manager.update_task_files({
}); });
// 繼續執行任務,利用更新後的上下文 // 繼續執行任務,利用更新後的上下文
// 系統會結合新文件和之前的執行上下文 // 系統會根據更新的相關文件信息生成新的摘要
``` ```
#### 上下文記憶限制與解決方案 #### 上下文記憶限制與解決方案
@ -373,8 +373,8 @@ await mcp.mcp_shrimp_task_manager.update_task_files({
1. **分層資訊呈現** 1. **分層資訊呈現**
- 核心代碼完整呈現 - 關鍵文件位置和描述信息優先呈現
- 次要內容以摘要形式提供 - 次要內容以簡要摘要形式提供
- 背景知識以參考鏈接形式提供 - 背景知識以參考鏈接形式提供
2. **動態上下文調整** 2. **動態上下文調整**

View File

@ -138,7 +138,7 @@ async function main() {
server.tool( server.tool(
"split_tasks", "split_tasks",
"將複雜任務分解為獨立且可追蹤的子任務,建立明確的依賴關係和優先順序", "將複雜任務分解為獨立且可追蹤的子任務,建立明確的依賴關係和優先順序dependencies 是一個字串陣列支援任務名稱或任務ID(UUID)",
{ {
isOverwrite: z isOverwrite: z
.boolean() .boolean()
@ -166,11 +166,31 @@ async function main() {
.optional() .optional()
.describe("補充說明、特殊處理要求或實施建議(選填)"), .describe("補充說明、特殊處理要求或實施建議(選填)"),
dependencies: z dependencies: z
.array(z.string()) .array(z.string(), {
message: "必須是字串陣列支援任務名稱或任務ID(UUID)",
})
.optional() .optional()
.describe( .describe(
"此任務依賴的前置任務ID或任務名稱列表支持兩種引用方式名稱引用更直觀" "此任務依賴的前置任務ID或任務名稱列表支持兩種引用方式名稱引用更直觀,是一個字串陣列"
), ),
relatedFiles: z
.array(
z.object({
path: z
.string()
.min(1, { message: "檔案路徑不能為空" })
.describe("檔案路徑,相對於專案根目錄"),
type: z
.nativeEnum(RelatedFileType)
.describe("檔案類型,用於區分不同類型的檔案"),
description: z
.string()
.min(1, { message: "檔案描述不能為空" })
.describe("檔案描述,用於說明檔案的用途和內容"),
})
)
.optional()
.describe("與任務相關的檔案列表,包含檔案路徑、類型和描述"),
}) })
) )
.describe("結構化的任務清單,每個任務應保持原子性且有明確的完成標準"), .describe("結構化的任務清單,每個任務應保持原子性且有明確的完成標準"),

View File

@ -253,7 +253,9 @@ export const splitTasksSchema = z
.optional() .optional()
.describe("補充說明、特殊處理要求或實施建議(選填)"), .describe("補充說明、特殊處理要求或實施建議(選填)"),
dependencies: z dependencies: z
.array(z.string()) .array(z.string(), {
message: "必須是字串陣列支援任務名稱或任務ID(UUID)",
})
.optional() .optional()
.describe( .describe(
"此任務依賴的前置任務ID或任務名稱列表支持兩種引用方式名稱引用更直觀" "此任務依賴的前置任務ID或任務名稱列表支持兩種引用方式名稱引用更直觀"
@ -672,38 +674,38 @@ export async function executeTask({
// 記錄加載文件操作 // 記錄加載文件操作
await addConversationEntry( await addConversationEntry(
ConversationParticipant.MCP, ConversationParticipant.MCP,
`正在加載任務相關文件,共 ${task.relatedFiles.length} 個文件`, `正在生成任務相關文件摘要,共 ${task.relatedFiles.length} 個文件`,
task.id, task.id,
"加載相關文件" "生成相關文件摘要"
); );
// 加載相關文件內容,使用增強的智能提取功能 // 生成任務相關文件的摘要資訊
const loadResult = await loadTaskRelatedFiles(task.relatedFiles); const loadResult = await loadTaskRelatedFiles(task.relatedFiles);
relatedFilesContent = loadResult.content; relatedFilesContent = loadResult.content;
relatedFilesSummary = loadResult.summary; relatedFilesSummary = loadResult.summary;
// 記錄加載完成 // 記錄摘要生成完成
await addConversationEntry( await addConversationEntry(
ConversationParticipant.MCP, ConversationParticipant.MCP,
`任務相關文件加載完成,成功加載 ${task.relatedFiles.length} 個文件,提取了最相關的代碼片段`, `任務相關文件摘要生成完成,已為 ${task.relatedFiles.length} 個文件生成摘要資訊`,
task.id, task.id,
"相關文件加載完成" "相關文件摘要生成完成"
); );
} catch (error) { } catch (error) {
console.error("加載任務相關文件時發生錯誤:", error); console.error("生成任務相關文件摘要時發生錯誤:", error);
// 記錄錯誤 // 記錄錯誤
await addConversationEntry( await addConversationEntry(
ConversationParticipant.MCP, ConversationParticipant.MCP,
`加載任務相關文件時發生錯誤: ${ `生成任務相關文件摘要時發生錯誤: ${
error instanceof Error ? error.message : String(error) error instanceof Error ? error.message : String(error)
}`, }`,
task.id, task.id,
"相關文件加載錯誤" "相關文件摘要生成錯誤"
); );
relatedFilesSummary = relatedFilesSummary =
"## 相關文件內容加載失敗\n\n加載文件時發生錯誤,請手動查看相關文件。"; "## 相關文件摘要生成失敗\n\n生成文件摘要時發生錯誤,請手動查看相關文件。";
} }
} else { } else {
// 沒有相關文件的情況 // 沒有相關文件的情況
@ -837,7 +839,7 @@ export async function executeTask({
}); });
}); });
prompt += `\n使用這些相關文件作為上下文幫助您理解任務需求和實現細節。文件內容已經過智能提取,保留最相關的部分\n`; prompt += `\n使用這些相關文件作為上下文幫助您理解任務需求和實現細節。系統已為文件生成摘要資訊,無需讀取實際檔案內容。\n`;
} }
// 添加上下文信息 // 添加上下文信息