mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-26 16:02:26 +08:00
208 lines
5.8 KiB
TypeScript
208 lines
5.8 KiB
TypeScript
/**
|
|
* executeTask prompt 生成器
|
|
* 負責將模板和參數組合成最終的 prompt
|
|
*/
|
|
|
|
import { loadPrompt, generatePrompt } from "../loader.js";
|
|
import * as templates from "../templates/executeTask.js";
|
|
import { Task, TaskStatus } from "../../types/index.js";
|
|
|
|
/**
|
|
* 任務複雜度級別的介面
|
|
*/
|
|
interface TaskComplexityLevel {
|
|
VERY_HIGH: string;
|
|
HIGH: string;
|
|
MEDIUM: string;
|
|
LOW: string;
|
|
VERY_LOW: string;
|
|
}
|
|
|
|
/**
|
|
* 任務複雜度評估的介面
|
|
*/
|
|
interface ComplexityAssessment {
|
|
level: string;
|
|
metrics: {
|
|
descriptionLength: number;
|
|
dependenciesCount: number;
|
|
};
|
|
recommendations?: string[];
|
|
}
|
|
|
|
/**
|
|
* executeTask prompt 參數介面
|
|
*/
|
|
export interface ExecuteTaskPromptParams {
|
|
task: Task;
|
|
complexityAssessment?: ComplexityAssessment;
|
|
relatedFilesSummary?: string;
|
|
dependencyTasks?: Task[];
|
|
potentialFiles?: string[];
|
|
}
|
|
|
|
/**
|
|
* 獲取複雜度級別的樣式文字
|
|
* @param level 複雜度級別
|
|
* @returns 樣式文字
|
|
*/
|
|
function getComplexityStyle(level: string): string {
|
|
switch (level) {
|
|
case "VERY_HIGH":
|
|
return "⚠️ **警告:此任務複雜度極高** ⚠️";
|
|
case "HIGH":
|
|
return "⚠️ **注意:此任務複雜度較高**";
|
|
case "MEDIUM":
|
|
return "**提示:此任務具有一定複雜性**";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 獲取 executeTask 的完整 prompt
|
|
* @param params prompt 參數
|
|
* @returns 生成的 prompt
|
|
*/
|
|
export function getExecuteTaskPrompt(params: ExecuteTaskPromptParams): string {
|
|
const {
|
|
task,
|
|
complexityAssessment,
|
|
relatedFilesSummary,
|
|
dependencyTasks,
|
|
potentialFiles,
|
|
} = params;
|
|
|
|
// 處理注意事項
|
|
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
|
|
|
|
// 開始構建基本 prompt
|
|
let basePrompt = generatePrompt(templates.executeTaskTemplate, {
|
|
name: task.name,
|
|
id: task.id,
|
|
description: task.description,
|
|
notes: notes,
|
|
});
|
|
|
|
// 添加實現指南(如果有)
|
|
if (task.implementationGuide) {
|
|
basePrompt += generatePrompt(templates.implementationGuideTemplate, {
|
|
implementationGuide: task.implementationGuide,
|
|
});
|
|
}
|
|
|
|
// 添加驗證標準(如果有)
|
|
if (task.verificationCriteria) {
|
|
basePrompt += generatePrompt(templates.verificationCriteriaTemplate, {
|
|
verificationCriteria: task.verificationCriteria,
|
|
});
|
|
}
|
|
|
|
// 添加分析結果(如果有)
|
|
if (task.analysisResult) {
|
|
basePrompt += generatePrompt(templates.analysisResultTemplate, {
|
|
analysisResult: task.analysisResult,
|
|
});
|
|
}
|
|
|
|
// 添加依賴任務完成摘要(如果有)
|
|
if (dependencyTasks && dependencyTasks.length > 0) {
|
|
const completedDependencyTasks = dependencyTasks.filter(
|
|
(t) => t.status === TaskStatus.COMPLETED && t.summary
|
|
);
|
|
|
|
if (completedDependencyTasks.length > 0) {
|
|
basePrompt += templates.dependencyTaskSummaryTemplate;
|
|
|
|
for (const depTask of completedDependencyTasks) {
|
|
basePrompt += generatePrompt(templates.dependencyTaskItemTemplate, {
|
|
name: depTask.name,
|
|
summary: depTask.summary || "*無完成摘要*",
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// 添加相關文件(如果有)
|
|
if (relatedFilesSummary) {
|
|
basePrompt += generatePrompt(templates.relatedFilesSummaryTemplate, {
|
|
relatedFilesSummary: relatedFilesSummary,
|
|
});
|
|
} else {
|
|
// 無相關文件
|
|
basePrompt += templates.noRelatedFilesTemplate;
|
|
|
|
// 添加潛在相關文件建議(如果有)
|
|
if (potentialFiles && potentialFiles.length > 0) {
|
|
const potentialFilesStr = potentialFiles
|
|
.map((file) => `- 含有 "${file}" 的文件\n`)
|
|
.join("");
|
|
|
|
basePrompt += generatePrompt(templates.recommendedFilesTemplate, {
|
|
potentialFiles: potentialFilesStr,
|
|
});
|
|
}
|
|
}
|
|
|
|
// 添加複雜度評估(如果有)
|
|
if (complexityAssessment) {
|
|
basePrompt += generatePrompt(templates.complexityAssessmentTemplate, {
|
|
level: complexityAssessment.level,
|
|
});
|
|
|
|
// 添加複雜度警告樣式(如果需要)
|
|
const complexityStyle = getComplexityStyle(complexityAssessment.level);
|
|
if (complexityStyle) {
|
|
basePrompt += generatePrompt(templates.complexityWarningTemplate, {
|
|
complexityStyle: complexityStyle,
|
|
});
|
|
}
|
|
|
|
// 添加評估指標
|
|
basePrompt += templates.assessmentMetricsTemplate;
|
|
basePrompt += generatePrompt(templates.descriptionLengthMetric, {
|
|
descriptionLength: complexityAssessment.metrics.descriptionLength,
|
|
});
|
|
basePrompt += generatePrompt(templates.dependenciesCountMetric, {
|
|
dependenciesCount: complexityAssessment.metrics.dependenciesCount,
|
|
});
|
|
|
|
// 添加處理建議(如果有)
|
|
if (
|
|
complexityAssessment.recommendations &&
|
|
complexityAssessment.recommendations.length > 0
|
|
) {
|
|
basePrompt += templates.handlingRecommendationsTemplate;
|
|
if (complexityAssessment.recommendations[0]) {
|
|
basePrompt += generatePrompt(templates.handlingRecommendation1, {
|
|
recommendation1: complexityAssessment.recommendations[0],
|
|
});
|
|
}
|
|
if (complexityAssessment.recommendations[1]) {
|
|
basePrompt += generatePrompt(templates.handlingRecommendation2, {
|
|
recommendation2: complexityAssessment.recommendations[1],
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// 添加執行步驟
|
|
basePrompt += templates.executionStepsTemplate;
|
|
basePrompt += templates.executionStep1;
|
|
basePrompt += templates.executionStep2;
|
|
basePrompt += templates.executionStep3;
|
|
basePrompt += templates.executionStep4;
|
|
|
|
// 添加質量要求
|
|
basePrompt += templates.qualityRequirementsTemplate;
|
|
basePrompt += templates.qualityRequirement1;
|
|
basePrompt += templates.qualityRequirement2;
|
|
basePrompt += templates.qualityRequirement3;
|
|
|
|
// 添加完成提示
|
|
basePrompt += templates.completionReminderTemplate;
|
|
|
|
// 載入可能的自定義 prompt
|
|
return loadPrompt(basePrompt, "EXECUTE_TASK");
|
|
}
|