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