mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-27 08:32:27 +08:00
重構executeTask函數以簡化相關文件摘要的生成,將loadTaskRelatedFiles函數的返回值調整為直接返回格式化的摘要文本,並移除不再使用的內容變數,提升代碼可讀性與維護性。
This commit is contained in:
parent
8cb3a3228d
commit
35740be220
@ -594,7 +594,6 @@ export async function executeTask({
|
|||||||
}\n`;
|
}\n`;
|
||||||
|
|
||||||
// ===== 增強:處理相關文件內容 =====
|
// ===== 增強:處理相關文件內容 =====
|
||||||
let relatedFilesContent = "";
|
|
||||||
let relatedFilesSummary = "";
|
let relatedFilesSummary = "";
|
||||||
let contextInfo = "";
|
let contextInfo = "";
|
||||||
|
|
||||||
@ -680,9 +679,9 @@ export async function executeTask({
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 生成任務相關文件的摘要資訊
|
// 生成任務相關文件的摘要資訊
|
||||||
const loadResult = await loadTaskRelatedFiles(task.relatedFiles);
|
// 使用loadTaskRelatedFiles生成文件摘要,現在函數直接返回格式化的文本
|
||||||
relatedFilesContent = loadResult.content;
|
// 而不是包含content和summary的物件
|
||||||
relatedFilesSummary = loadResult.summary;
|
const relatedFilesSummary = await loadTaskRelatedFiles(task.relatedFiles);
|
||||||
|
|
||||||
// 記錄摘要生成完成
|
// 記錄摘要生成完成
|
||||||
await addConversationEntry(
|
await addConversationEntry(
|
||||||
@ -801,45 +800,9 @@ export async function executeTask({
|
|||||||
prompt += `\n`;
|
prompt += `\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== 增強:添加相關文件部分,更詳細的信息 =====
|
// 直接添加相關文件摘要到prompt中
|
||||||
if (task.relatedFiles && task.relatedFiles.length > 0) {
|
if (relatedFilesSummary) {
|
||||||
prompt += `\n## 任務相關文件\n\n共關聯 ${task.relatedFiles.length} 個文件,類型分布:\n`;
|
prompt += relatedFilesSummary;
|
||||||
|
|
||||||
// 按類型分組統計
|
|
||||||
const fileTypeCount: Record<string, number> = {};
|
|
||||||
task.relatedFiles.forEach((file) => {
|
|
||||||
fileTypeCount[file.type] = (fileTypeCount[file.type] || 0) + 1;
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.entries(fileTypeCount).forEach(([type, count]) => {
|
|
||||||
prompt += `- ${type}: ${count} 個\n`;
|
|
||||||
});
|
|
||||||
|
|
||||||
// 新增:展示文件詳細列表
|
|
||||||
prompt += `\n### 文件詳細列表\n`;
|
|
||||||
|
|
||||||
// 按類型分組
|
|
||||||
const filesByType = task.relatedFiles.reduce((acc, file) => {
|
|
||||||
acc[file.type] = acc[file.type] || [];
|
|
||||||
acc[file.type].push(file);
|
|
||||||
return acc;
|
|
||||||
}, {} as Record<string, RelatedFile[]>);
|
|
||||||
|
|
||||||
// 展示每種類型的文件
|
|
||||||
Object.entries(filesByType).forEach(([type, files]) => {
|
|
||||||
prompt += `\n#### ${type} (${files.length} 個)\n`;
|
|
||||||
files.forEach((file, index) => {
|
|
||||||
prompt += `${index + 1}. \`${file.path}\`${
|
|
||||||
file.description ? ` - ${file.description}` : ""
|
|
||||||
}${
|
|
||||||
file.lineStart && file.lineEnd
|
|
||||||
? ` (行 ${file.lineStart}-${file.lineEnd})`
|
|
||||||
: ""
|
|
||||||
}\n`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
prompt += `\n使用這些相關文件作為上下文,幫助您理解任務需求和實現細節。系統已為文件生成摘要資訊,無需讀取實際檔案內容。\n`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加上下文信息
|
// 添加上下文信息
|
||||||
@ -871,10 +834,6 @@ export async function executeTask({
|
|||||||
type: "text" as const,
|
type: "text" as const,
|
||||||
text: prompt,
|
text: prompt,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: "text" as const,
|
|
||||||
text: relatedFilesContent,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -8,23 +8,19 @@ import { RelatedFileType } from "../types/index.js";
|
|||||||
*
|
*
|
||||||
* @param relatedFiles 相關文件列表 - RelatedFile 物件數組,包含文件的路徑、類型、描述等資訊
|
* @param relatedFiles 相關文件列表 - RelatedFile 物件數組,包含文件的路徑、類型、描述等資訊
|
||||||
* @param maxTotalLength 摘要內容的最大總長度 - 控制生成摘要的總字符數,避免過大的返回內容
|
* @param maxTotalLength 摘要內容的最大總長度 - 控制生成摘要的總字符數,避免過大的返回內容
|
||||||
* @returns 包含兩個字段的物件:
|
* @returns 格式化的文件摘要資訊
|
||||||
* - content: 詳細的文件資訊,包含每個檔案的基本資訊和提示訊息
|
|
||||||
* - summary: 簡潔的檔案列表概覽,適合快速瀏覽
|
|
||||||
*/
|
*/
|
||||||
export async function loadTaskRelatedFiles(
|
export async function loadTaskRelatedFiles(
|
||||||
relatedFiles,
|
relatedFiles,
|
||||||
maxTotalLength = 15000 // 控制生成內容的總長度
|
maxTotalLength = 15000 // 控制生成內容的總長度
|
||||||
) {
|
) {
|
||||||
if (!relatedFiles || relatedFiles.length === 0) {
|
if (!relatedFiles || relatedFiles.length === 0) {
|
||||||
return {
|
return "## 相關文件\n\n無相關文件";
|
||||||
content: "",
|
|
||||||
summary: "無相關文件",
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
let totalContent = "";
|
|
||||||
let filesSummary = `## 相關文件內容摘要 (共 ${relatedFiles.length} 個文件)\n\n`;
|
let filesSummary = `## 相關文件內容摘要 (共 ${relatedFiles.length} 個文件)\n\n`;
|
||||||
let totalLength = 0;
|
let totalLength = 0;
|
||||||
|
|
||||||
// 按文件類型優先級排序(首先處理待修改的文件)
|
// 按文件類型優先級排序(首先處理待修改的文件)
|
||||||
const priorityOrder = {
|
const priorityOrder = {
|
||||||
[RelatedFileType.TO_MODIFY]: 1,
|
[RelatedFileType.TO_MODIFY]: 1,
|
||||||
@ -33,17 +29,21 @@ export async function loadTaskRelatedFiles(
|
|||||||
[RelatedFileType.OUTPUT]: 4,
|
[RelatedFileType.OUTPUT]: 4,
|
||||||
[RelatedFileType.OTHER]: 5,
|
[RelatedFileType.OTHER]: 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
const sortedFiles = [...relatedFiles].sort(
|
const sortedFiles = [...relatedFiles].sort(
|
||||||
(a, b) => priorityOrder[a.type] - priorityOrder[b.type]
|
(a, b) => priorityOrder[a.type] - priorityOrder[b.type]
|
||||||
);
|
);
|
||||||
|
|
||||||
// 處理每個文件
|
// 處理每個文件
|
||||||
for (const file of sortedFiles) {
|
for (const file of sortedFiles) {
|
||||||
if (totalLength >= maxTotalLength) {
|
if (totalLength >= maxTotalLength) {
|
||||||
filesSummary += `\n### 已達到上下文長度限制,部分文件未載入\n`;
|
filesSummary += `\n### 已達到上下文長度限制,部分文件未載入\n`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成文件基本資訊
|
// 生成文件基本資訊
|
||||||
const fileInfo = generateFileInfo(file);
|
const fileInfo = generateFileInfo(file);
|
||||||
|
|
||||||
// 添加到總內容
|
// 添加到總內容
|
||||||
const fileHeader = `\n### ${file.type}: ${file.path}${
|
const fileHeader = `\n### ${file.type}: ${file.path}${
|
||||||
file.description ? ` - ${file.description}` : ""
|
file.description ? ` - ${file.description}` : ""
|
||||||
@ -52,17 +52,14 @@ export async function loadTaskRelatedFiles(
|
|||||||
? ` (行 ${file.lineStart}-${file.lineEnd})`
|
? ` (行 ${file.lineStart}-${file.lineEnd})`
|
||||||
: ""
|
: ""
|
||||||
}\n\n`;
|
}\n\n`;
|
||||||
totalContent += fileHeader + "```\n" + fileInfo + "\n```\n\n";
|
|
||||||
filesSummary += `- **${file.path}**${
|
filesSummary += fileHeader + "```\n" + fileInfo + "\n```\n\n";
|
||||||
file.description ? ` - ${file.description}` : ""
|
|
||||||
} (${fileInfo.length} 字符)\n`;
|
|
||||||
totalLength += fileInfo.length + fileHeader.length + 8; // 8 for "```\n" and "\n```"
|
totalLength += fileInfo.length + fileHeader.length + 8; // 8 for "```\n" and "\n```"
|
||||||
}
|
}
|
||||||
return {
|
|
||||||
content: totalContent,
|
return filesSummary;
|
||||||
summary: filesSummary,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成文件基本資訊摘要
|
* 生成文件基本資訊摘要
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user