重構executeTask函數以簡化相關文件摘要的生成,將loadTaskRelatedFiles函數的返回值調整為直接返回格式化的摘要文本,並移除不再使用的內容變數,提升代碼可讀性與維護性。

This commit is contained in:
siage 2025-04-12 02:53:09 +08:00
parent 8cb3a3228d
commit 35740be220
2 changed files with 19 additions and 63 deletions

View File

@ -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,
},
], ],
}; };
} }

View File

@ -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,
};
} }
/** /**
* 生成文件基本資訊摘要 * 生成文件基本資訊摘要
* *