mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-27 08:32:27 +08:00
新增實用工具函數以生成任務相關文件的摘要,更新 API 參考文檔以包含新功能說明,並調整架構文檔以反映文件摘要生成的邏輯與流程,提升任務管理的靈活性與文件處理能力。
This commit is contained in:
parent
b48325230e
commit
8cb3a3228d
@ -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 參數時,會停止處理剩餘文件並添加說明
|
||||||
|
- 摘要內容包括文件路徑、類型、描述和行範圍等基本信息
|
||||||
|
@ -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. 系統限制與未來改進
|
||||||
|
|
||||||
|
@ -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. **動態上下文調整**:
|
||||||
|
26
src/index.ts
26
src/index.ts
@ -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("結構化的任務清單,每個任務應保持原子性且有明確的完成標準"),
|
||||||
|
@ -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`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加上下文信息
|
// 添加上下文信息
|
||||||
|
Loading…
x
Reference in New Issue
Block a user