/**
* executeTask prompt 生成器
* 負責將模板和參數組合成最終的 prompt
* executeTask prompt generator
* Responsible for combining templates and parameters into the final prompt
*/
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task, TaskStatus } from "../../types/index.js";
/**
* 任務複雜度評估的介面
* Interface for task complexity assessment
*/
interface ComplexityAssessment {
level: string;
metrics: {
descriptionLength: number;
dependenciesCount: number;
};
recommendations?: string[];
}
/**
* executeTask prompt 參數介面
* executeTask prompt parameter interface
*/
export interface ExecuteTaskPromptParams {
task: Task;
complexityAssessment?: ComplexityAssessment;
relatedFilesSummary?: string;
dependencyTasks?: Task[];
}
/**
* 獲取複雜度級別的樣式文字
* Get styled text for complexity level
* @param level 複雜度級別
* @param level complexity level
* @returns 樣式文字
* @returns styled text
*/
function getComplexityStyle(level: string): string {
switch (level) {
case "VERY_HIGH":
return "⚠️ **警告:此任務複雜度極高** ⚠️";
// ⚠️ **Warning: This task has extremely high complexity** ⚠️
case "HIGH":
return "⚠️ **注意:此任務複雜度較高**";
// ⚠️ **Notice: This task has relatively high complexity**
case "MEDIUM":
return "**提示:此任務具有一定複雜性**";
// **Tip: This task has some complexity**
default:
return "";
}
}
/**
* 獲取 executeTask 的完整 prompt
* Get the complete prompt for executeTask
* @param params prompt 參數
* @param params prompt parameters
* @returns 生成的 prompt
* @returns generated prompt
*/
export async function getExecuteTaskPrompt(
params: ExecuteTaskPromptParams
): Promise<string> {
const { task, complexityAssessment, relatedFilesSummary, dependencyTasks } =
params;
const notesTemplate = await loadPromptFromTemplate("executeTask/notes.md");
let notesPrompt = "";
if (task.notes) {
notesPrompt = generatePrompt(notesTemplate, {
notes: task.notes,
});
}
const implementationGuideTemplate = await loadPromptFromTemplate(
"executeTask/implementationGuide.md"
);
let implementationGuidePrompt = "";
if (task.implementationGuide) {
implementationGuidePrompt = generatePrompt(implementationGuideTemplate, {
implementationGuide: task.implementationGuide,
});
}
const verificationCriteriaTemplate = await loadPromptFromTemplate(
"executeTask/verificationCriteria.md"
);
let verificationCriteriaPrompt = "";
if (task.verificationCriteria) {
verificationCriteriaPrompt = generatePrompt(verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
const analysisResultTemplate = await loadPromptFromTemplate(
"executeTask/analysisResult.md"
);
let analysisResultPrompt = "";
if (task.analysisResult) {
analysisResultPrompt = generatePrompt(analysisResultTemplate, {
analysisResult: task.analysisResult,
});
}
const dependencyTasksTemplate = await loadPromptFromTemplate(
"executeTask/dependencyTasks.md"
);
let dependencyTasksPrompt = "";
if (dependencyTasks && dependencyTasks.length > 0) {
const completedDependencyTasks = dependencyTasks.filter(
(t) => t.status === TaskStatus.COMPLETED && t.summary
);
if (completedDependencyTasks.length > 0) {
let dependencyTasksContent = "";
for (const depTask of completedDependencyTasks) {
dependencyTasksContent += `### ${depTask.name}\n${
depTask.summary || "*無完成摘要*"
// "*No completion summary*"
}\n\n`;
}
dependencyTasksPrompt = generatePrompt(dependencyTasksTemplate, {
dependencyTasks: dependencyTasksContent,
});
}
}
const relatedFilesSummaryTemplate = await loadPromptFromTemplate(
"executeTask/relatedFilesSummary.md"
);
let relatedFilesSummaryPrompt = "";
relatedFilesSummaryPrompt = generatePrompt(relatedFilesSummaryTemplate, {
relatedFilesSummary: relatedFilesSummary || "當前任務沒有關聯的文件。",
// "The current task has no associated files."
});
const complexityTemplate = await loadPromptFromTemplate(
"executeTask/complexity.md"
);
let complexityPrompt = "";
if (complexityAssessment) {
const complexityStyle = getComplexityStyle(complexityAssessment.level);
let recommendationContent = "";
if (
complexityAssessment.recommendations &&
complexityAssessment.recommendations.length > 0
) {
for (const recommendation of complexityAssessment.recommendations) {
recommendationContent += `- ${recommendation}\n`;
}
}
complexityPrompt = generatePrompt(complexityTemplate, {
level: complexityAssessment.level,
complexityStyle: complexityStyle,
descriptionLength: complexityAssessment.metrics.descriptionLength,
dependenciesCount: complexityAssessment.metrics.dependenciesCount,
recommendation: recommendationContent,
});
}
const indexTemplate = await loadPromptFromTemplate("executeTask/index.md");
let prompt = generatePrompt(indexTemplate, {
name: task.name,
id: task.id,
description: task.description,
notesTemplate: notesPrompt,
implementationGuideTemplate: implementationGuidePrompt,
verificationCriteriaTemplate: verificationCriteriaPrompt,
analysisResultTemplate: analysisResultPrompt,
dependencyTasksTemplate: dependencyTasksPrompt,
relatedFilesSummaryTemplate: relatedFilesSummaryPrompt,
complexityTemplate: complexityPrompt,
});
// 如果任務有指定的代理,添加 sub-agent 命令
if (task.agent) {
// 在 prompt 開頭添加 use sub-agent 命令
prompt = `use sub-agent ${task.agent}\n\n${prompt}`;
}
// 載入可能的自定義 prompt
// Load possible custom prompt
return loadPrompt(prompt, "EXECUTE_TASK");
}