調整任務模板,改用 md 格式方便以後多語系與修改提示詞

This commit is contained in:
siage 2025-04-26 19:58:52 +08:00
parent 05ab337511
commit 5513235d82
60 changed files with 1666 additions and 1183 deletions

776
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,7 @@
"mcp-shrimp-task-manager": "./dist/index.js"
},
"scripts": {
"build": "tsc && node scripts/add-shebang.js",
"build": "tsc && copyfiles -u 1 './src/**/*.md' dist && node scripts/add-shebang.js",
"dev": "ts-node src/index.ts",
"start": "node dist/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
@ -39,6 +39,7 @@
"devDependencies": {
"@types/node": "^20.8.2",
"@types/uuid": "^9.0.6",
"copyfiles": "^2.4.1",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/analyzeTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
/**
* analyzeTask prompt
@ -21,25 +24,23 @@ export interface AnalyzeTaskPromptParams {
* @returns prompt
*/
export function getAnalyzeTaskPrompt(params: AnalyzeTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.analyzeTaskTemplate, {
summary: params.summary,
initialConcept: params.initialConcept,
});
const indexTemplate = loadPromptFromTemplate("analyzeTask/index.md");
// 添加技術審核要點
basePrompt += templates.technicalReviewTemplate;
const iterationTemplate = loadPromptFromTemplate("analyzeTask/iteration.md");
// 如果有前次分析結果,添加相關模板
let iterationPrompt = "";
if (params.previousAnalysis) {
basePrompt += generatePrompt(templates.iterationAnalysisTemplate, {
iterationPrompt = generatePrompt(iterationTemplate, {
previousAnalysis: params.previousAnalysis,
});
}
// 添加下一步行動指導
basePrompt += templates.nextActionTemplate;
let prompt = generatePrompt(indexTemplate, {
summary: params.summary,
initialConcept: params.initialConcept,
iterationPrompt: iterationPrompt,
});
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "ANALYZE_TASK");
return loadPrompt(prompt, "ANALYZE_TASK");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/completeTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
@ -25,22 +28,15 @@ export function getCompleteTaskPrompt(
): string {
const { task, completionTime } = params;
const indexTemplate = loadPromptFromTemplate("completeTask/index.md");
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.completeTaskConfirmationTemplate, {
let prompt = generatePrompt(indexTemplate, {
name: task.name,
id: task.id,
completionTime: completionTime,
});
// 添加任務摘要要求
basePrompt += templates.taskSummaryRequirementsTemplate;
// 添加重要提示
basePrompt += templates.importantReminderTemplate;
// 添加連續執行模式提示
basePrompt += templates.continuousModeReminderTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "COMPLETE_TASK");
return loadPrompt(prompt, "COMPLETE_TASK");
}

View File

@ -3,21 +3,13 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/executeTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task, TaskStatus } from "../../types/index.js";
/**
*
*/
interface TaskComplexityLevel {
VERY_HIGH: string;
HIGH: string;
MEDIUM: string;
LOW: string;
VERY_LOW: string;
}
/**
*
*/
@ -38,7 +30,6 @@ export interface ExecuteTaskPromptParams {
complexityAssessment?: ComplexityAssessment;
relatedFilesSummary?: string;
dependencyTasks?: Task[];
potentialFiles?: string[];
}
/**
@ -65,143 +56,115 @@ function getComplexityStyle(level: string): string {
* @returns prompt
*/
export function getExecuteTaskPrompt(params: ExecuteTaskPromptParams): string {
const {
task,
complexityAssessment,
relatedFilesSummary,
dependencyTasks,
potentialFiles,
} = params;
const { task, complexityAssessment, relatedFilesSummary, dependencyTasks } =
params;
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
const notesTemplate = loadPromptFromTemplate("executeTask/notes.md");
let notesPrompt = "";
if (task.notes) {
notesPrompt = generatePrompt(notesTemplate, {
notes: task.notes,
});
}
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.executeTaskTemplate, {
name: task.name,
id: task.id,
description: task.description,
notes: notes,
});
// 添加實現指南(如果有)
const implementationGuideTemplate = loadPromptFromTemplate(
"executeTask/implementationGuide.md"
);
let implementationGuidePrompt = "";
if (task.implementationGuide) {
basePrompt += generatePrompt(templates.implementationGuideTemplate, {
implementationGuidePrompt = generatePrompt(implementationGuideTemplate, {
implementationGuide: task.implementationGuide,
});
}
// 添加驗證標準(如果有)
const verificationCriteriaTemplate = loadPromptFromTemplate(
"executeTask/verificationCriteria.md"
);
let verificationCriteriaPrompt = "";
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.verificationCriteriaTemplate, {
verificationCriteriaPrompt = generatePrompt(verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加分析結果(如果有)
const analysisResultTemplate = loadPromptFromTemplate(
"executeTask/analysisResult.md"
);
let analysisResultPrompt = "";
if (task.analysisResult) {
basePrompt += generatePrompt(templates.analysisResultTemplate, {
analysisResultPrompt = generatePrompt(analysisResultTemplate, {
analysisResult: task.analysisResult,
});
}
// 添加依賴任務完成摘要(如果有)
const dependencyTasksTemplate = 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) {
basePrompt += templates.dependencyTaskSummaryTemplate;
let dependencyTasksContent = "";
for (const depTask of completedDependencyTasks) {
basePrompt += generatePrompt(templates.dependencyTaskItemTemplate, {
name: depTask.name,
summary: depTask.summary || "*無完成摘要*",
});
dependencyTasksContent += `### ${depTask.name}\n${
depTask.summary || "*無完成摘要*"
}\n\n`;
}
}
}
// 添加相關文件(如果有)
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,
dependencyTasksPrompt = generatePrompt(dependencyTasksTemplate, {
dependencyTasks: dependencyTasksContent,
});
}
}
// 添加複雜度評估(如果有)
const relatedFilesSummaryTemplate = loadPromptFromTemplate(
"executeTask/relatedFilesSummary.md"
);
let relatedFilesSummaryPrompt = "";
relatedFilesSummaryPrompt = generatePrompt(relatedFilesSummaryTemplate, {
relatedFilesSummary: relatedFilesSummary || "當前任務沒有關聯的文件。",
});
const complexityTemplate = loadPromptFromTemplate(
"executeTask/complexity.md"
);
let complexityPrompt = "";
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,
});
// 添加處理建議(如果有)
let recommendationContent = "";
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],
});
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,
});
}
// 添加執行步驟
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;
const indexTemplate = 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,
});
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "EXECUTE_TASK");
return loadPrompt(prompt, "EXECUTE_TASK");
}

View File

@ -3,9 +3,12 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/getTaskDetail.js";
import { Task, RelatedFile } from "../../types/index.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
* getTaskDetail prompt
@ -28,96 +31,108 @@ export function getGetTaskDetailPrompt(
// 如果有錯誤,顯示錯誤訊息
if (error) {
return generatePrompt(templates.errorTemplate, {
const errorTemplate = loadPromptFromTemplate("getTaskDetail/error.md");
return generatePrompt(errorTemplate, {
errorMessage: error,
});
}
// 如果找不到任務,顯示找不到任務的訊息
if (!task) {
return generatePrompt(templates.taskNotFoundTemplate, {
const notFoundTemplate = loadPromptFromTemplate(
"getTaskDetail/notFound.md"
);
return generatePrompt(notFoundTemplate, {
taskId,
});
}
// 開始構建基本 prompt
let basePrompt = templates.taskDetailTitleTemplate;
// 添加任務基本信息
basePrompt += generatePrompt(templates.taskBasicInfoTemplate, {
name: task.name,
id: task.id,
status: task.status,
description: task.description,
});
// 添加注記(如果有)
let notesPrompt = "";
if (task.notes) {
basePrompt += generatePrompt(templates.taskNotesTemplate, {
const notesTemplate = loadPromptFromTemplate("getTaskDetail/notes.md");
notesPrompt = generatePrompt(notesTemplate, {
notes: task.notes,
});
}
// 添加依賴任務(如果有)
let dependenciesPrompt = "";
if (task.dependencies && task.dependencies.length > 0) {
basePrompt += generatePrompt(templates.taskDependenciesTemplate, {
const dependenciesTemplate = loadPromptFromTemplate(
"getTaskDetail/dependencies.md"
);
dependenciesPrompt = generatePrompt(dependenciesTemplate, {
dependencies: task.dependencies
.map((dep) => `\`${dep.taskId}\``)
.join(", "),
});
}
// 添加實現指南(如果有)
let implementationGuidePrompt = "";
if (task.implementationGuide) {
basePrompt += generatePrompt(templates.taskImplementationGuideTemplate, {
const implementationGuideTemplate = loadPromptFromTemplate(
"getTaskDetail/implementationGuide.md"
);
implementationGuidePrompt = generatePrompt(implementationGuideTemplate, {
implementationGuide: task.implementationGuide,
});
}
// 添加驗證標準(如果有)
let verificationCriteriaPrompt = "";
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.taskVerificationCriteriaTemplate, {
const verificationCriteriaTemplate = loadPromptFromTemplate(
"getTaskDetail/verificationCriteria.md"
);
verificationCriteriaPrompt = generatePrompt(verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加相關文件(如果有)
let relatedFilesPrompt = "";
if (task.relatedFiles && task.relatedFiles.length > 0) {
const fileItems = task.relatedFiles
.map((file) =>
generatePrompt(templates.taskRelatedFileItemTemplate, {
path: file.path,
type: file.type,
description: file.description ? `: ${file.description}` : "",
})
)
.join("\n");
basePrompt += generatePrompt(templates.taskRelatedFilesTemplate, {
files: fileItems,
const relatedFilesTemplate = loadPromptFromTemplate(
"getTaskDetail/relatedFiles.md"
);
relatedFilesPrompt = generatePrompt(relatedFilesTemplate, {
files: task.relatedFiles
.map(
(file) =>
`- \`${file.path}\` (${file.type})${
file.description ? `: ${file.description}` : ""
}`
)
.join("\n"),
});
}
// 添加時間信息
basePrompt += generatePrompt(templates.taskTimeInfoTemplate, {
let complatedSummaryPrompt = "";
if (task.completedAt) {
const complatedSummaryTemplate = loadPromptFromTemplate(
"getTaskDetail/complatedSummary.md"
);
complatedSummaryPrompt = generatePrompt(complatedSummaryTemplate, {
completedTime: new Date(task.completedAt).toLocaleString("zh-TW"),
summary: task.summary || "*無完成摘要*",
});
}
const indexTemplate = loadPromptFromTemplate("getTaskDetail/index.md");
// 開始構建基本 prompt
let prompt = generatePrompt(indexTemplate, {
name: task.name,
id: task.id,
status: task.status,
description: task.description,
notesTemplate: notesPrompt,
dependenciesTemplate: dependenciesPrompt,
implementationGuideTemplate: implementationGuidePrompt,
verificationCriteriaTemplate: verificationCriteriaPrompt,
relatedFilesTemplate: relatedFilesPrompt,
createdTime: new Date(task.createdAt).toLocaleString("zh-TW"),
updatedTime: new Date(task.updatedAt).toLocaleString("zh-TW"),
complatedSummaryTemplate: complatedSummaryPrompt,
});
// 添加完成時間(如果有)
if (task.completedAt) {
basePrompt += generatePrompt(templates.taskCompletedTimeTemplate, {
completedTime: new Date(task.completedAt).toLocaleString("zh-TW"),
});
}
// 添加完成摘要(如果有)
if (task.summary) {
basePrompt += generatePrompt(templates.taskSummaryTemplate, {
summary: task.summary,
});
}
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "GET_TASK_DETAIL");
return loadPrompt(prompt, "GET_TASK_DETAIL");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import { initProjectRulesTemplate } from "../templates/initProjectRules.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { getRulesFilePath } from "../../utils/pathUtils.js";
/**
* initProjectRules prompt
@ -23,7 +26,8 @@ export function getInitProjectRulesPrompt(
): string {
// 使用基本模板
const rulesPath = getRulesFilePath();
const basePrompt = generatePrompt(initProjectRulesTemplate, {
const indexTemplate = loadPromptFromTemplate("initProjectRules/index.md");
const basePrompt = generatePrompt(indexTemplate, {
rulesPath,
});

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/listTasks.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task, TaskStatus } from "../../types/index.js";
/**
@ -26,31 +29,21 @@ export function getListTasksPrompt(params: ListTasksPromptParams): string {
// 如果沒有任務,顯示通知
if (allTasks.length === 0) {
const notFoundTemplate = loadPromptFromTemplate("listTasks/notFound.md");
const statusText = status === "all" ? "任何" : `任何 ${status}`;
return generatePrompt(templates.noTasksNoticeTemplate, {
return generatePrompt(notFoundTemplate, {
statusText: statusText,
});
}
// 開始構建基本 prompt
let basePrompt = templates.dashboardTitleTemplate;
// 添加狀態概覽
basePrompt += templates.statusOverviewTitleTemplate;
// 獲取所有狀態的計數
const statusCounts = Object.values(TaskStatus)
.map((statusType) => {
const count = tasks[statusType]?.length || 0;
return generatePrompt(templates.statusCountTemplate, {
status: statusType,
count: count,
});
return `- **${statusType}**: ${count} 個任務`;
})
.join("\n");
basePrompt += `${statusCounts}\n\n`;
let filterStatus = "all";
switch (status) {
case "pending":
@ -64,58 +57,43 @@ export function getListTasksPrompt(params: ListTasksPromptParams): string {
break;
}
let taskDetails = "";
let taskDetailsTemplate = loadPromptFromTemplate("listTasks/taskDetails.md");
// 添加每個狀態下的詳細任務
for (const statusType of Object.values(TaskStatus)) {
const tasksWithStatus = tasks[statusType] || [];
if (
tasksWithStatus.length > 0 &&
(filterStatus === "all" || filterStatus === statusType)
) {
basePrompt += generatePrompt(templates.statusSectionTitleTemplate, {
status: statusType,
count: tasksWithStatus.length,
});
for (const task of tasksWithStatus) {
basePrompt += formatTaskDetails(task);
let dependencies = "沒有依賴";
if (task.dependencies && task.dependencies.length > 0) {
dependencies = task.dependencies
.map((d) => `\`${d.taskId}\``)
.join(", ");
}
taskDetails += generatePrompt(taskDetailsTemplate, {
name: task.name,
id: task.id,
description: task.description,
createAt: task.createdAt,
complatedSummary:
(task.summary || "").substring(0, 100) +
((task.summary || "").length > 100 ? "..." : ""),
dependencies: dependencies,
complatedAt: task.completedAt,
});
}
}
}
const indexTemplate = loadPromptFromTemplate("listTasks/index.md");
let prompt = generatePrompt(indexTemplate, {
statusCount: statusCounts,
taskDetailsTemplate: taskDetails,
});
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "LIST_TASKS");
}
/**
*
* @param task
* @returns
*/
function formatTaskDetails(task: Task): string {
// 此函數內容應來自原始的 formatTaskDetails 函數
// 根據實際需求實現詳細的任務格式化邏輯
let result = `### ${task.name}\n**ID:** \`${task.id}\`\n**描述:** ${task.description}\n`;
if (task.status === TaskStatus.COMPLETED && task.summary) {
result += `**完成摘要:** ${task.summary.substring(0, 100)}${
task.summary.length > 100 ? "..." : ""
}\n`;
}
if (task.dependencies && task.dependencies.length > 0) {
result += `**依賴:** ${task.dependencies
.map((d) => `\`${d.taskId}\``)
.join(", ")}\n`;
}
result += `**創建時間:** ${new Date(task.createdAt).toLocaleString()}\n`;
if (task.status === TaskStatus.COMPLETED && task.completedAt) {
result += `**完成時間:** ${new Date(task.completedAt).toLocaleString()}\n`;
}
result += "\n";
return result;
return loadPrompt(prompt, "LIST_TASKS");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/planTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { getRulesFilePath } from "../../utils/pathUtils.js";
import { Task, TaskDependency } from "../../types/index.js";
@ -26,34 +29,20 @@ export interface PlanTaskPromptParams {
* @returns prompt
*/
export function getPlanTaskPrompt(params: PlanTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.planTaskTemplate, {
description: params.description,
});
// 如果有 requirements添加到 prompt 中
if (params.requirements) {
basePrompt += generatePrompt(templates.requirementsTemplate, {
requirements: params.requirements,
});
}
// 如果需要參考現有任務
let tasksContent = "";
if (
params.existingTasksReference &&
params.completedTasks &&
params.pendingTasks
) {
const allTasks = [...params.completedTasks, ...params.pendingTasks];
// 如果存在任務,則添加相關資訊
if (allTasks.length > 0) {
basePrompt += templates.existingTasksReferenceTemplate;
let completeTasksContent = "no completed tasks";
// 處理已完成任務
if (params.completedTasks.length > 0) {
basePrompt += templates.completedTasksTitleTemplate;
completeTasksContent = "";
// 最多顯示10個已完成任務避免提示詞過長
const tasksToShow =
params.completedTasks.length > 10
@ -63,140 +52,81 @@ export function getPlanTaskPrompt(params: PlanTaskPromptParams): string {
tasksToShow.forEach((task, index) => {
// 產生完成時間資訊 (如果有)
const completedTimeText = task.completedAt
? ` - 完成時間${task.completedAt.toLocaleString()}\n`
? ` - completedAt${task.completedAt.toLocaleString()}\n`
: "";
// 使用模板生成任務顯示項目
basePrompt += generatePrompt(templates.completedTaskItemTemplate, {
index: index + 1,
taskName: task.name,
taskId: task.id,
taskDescription:
task.description.length > 100
? task.description.substring(0, 100) + "..."
: task.description,
completedTime: completedTimeText,
});
completeTasksContent += `{index}. **${task.name}** (ID: \`${
task.id
}\`)\n - description${
task.description.length > 100
? task.description.substring(0, 100) + "..."
: task.description
}\n${completedTimeText}`;
// 如果不是最後一個任務,添加換行
if (index < tasksToShow.length - 1) {
basePrompt += "\n\n";
completeTasksContent += "\n\n";
}
});
// 如果有更多任務,顯示提示
if (params.completedTasks.length > 10) {
basePrompt += `\n\n*僅顯示前10個${params.completedTasks.length} 個)*\n`;
completeTasksContent += `\n\n*僅顯示前10個${params.completedTasks.length} 個)*\n`;
}
}
let unfinishedTasksContent = "no pending tasks";
// 處理未完成任務
if (params.pendingTasks && params.pendingTasks.length > 0) {
basePrompt += templates.pendingTasksTitleTemplate;
unfinishedTasksContent = "";
params.pendingTasks.forEach((task, index) => {
// 處理依賴關係 (如果有)
const dependenciesText =
task.dependencies && task.dependencies.length > 0
? ` - 依賴${task.dependencies
? ` - dependence${task.dependencies
.map((dep: TaskDependency) => `\`${dep.taskId}\``)
.join(", ")}\n`
: "";
// 使用模板生成未完成任務顯示項目
basePrompt += generatePrompt(templates.pendingTaskItemTemplate, {
index: index + 1,
taskName: task.name,
taskId: task.id,
taskDescription:
task.description.length > 150
? task.description.substring(0, 150) + "..."
: task.description,
taskStatus: task.status,
dependencies: dependenciesText,
});
unfinishedTasksContent += `${index + 1}. **${task.name}** (ID: \`${
task.id
}\`)\n - description${
task.description.length > 150
? task.description.substring(0, 150) + "..."
: task.description
}\n - status${task.status}\n${dependenciesText}`;
// 如果不是最後一個任務,添加換行
if (index < (params.pendingTasks?.length ?? 0) - 1) {
basePrompt += "\n\n";
unfinishedTasksContent += "\n\n";
}
});
}
// 添加任務調整原則
basePrompt += templates.taskAdjustmentPrinciplesTemplate;
basePrompt += templates.taskAdjustmentPrinciplesContent;
basePrompt += templates.taskAdjustmentPrinciplesContent2;
basePrompt += templates.taskAdjustmentPrinciplesContent3;
basePrompt += templates.taskAdjustmentPrinciplesContent4;
basePrompt += templates.taskAdjustmentPrinciplesContent5;
// 添加任務更新模式指導
basePrompt += templates.taskUpdateModesTemplate;
basePrompt += templates.taskUpdateModesContent1;
basePrompt += templates.taskUpdateModesContent1Detail;
basePrompt += templates.taskUpdateModesContent1Usage;
basePrompt += templates.taskUpdateModesContent2;
basePrompt += templates.taskUpdateModesContent2Detail;
basePrompt += templates.taskUpdateModesContent2Usage;
basePrompt += templates.taskUpdateModesContent3;
basePrompt += templates.taskUpdateModesContent3Detail;
basePrompt += templates.taskUpdateModesContent3Usage;
basePrompt += templates.taskUpdateModesContent3Mechanism;
const tasksTemplate = loadPromptFromTemplate("planTask/tasks.md");
tasksContent = generatePrompt(tasksTemplate, {
completedTasks: completeTasksContent,
unfinishedTasks: unfinishedTasksContent,
});
}
}
// 添加分析指引
basePrompt += templates.analysisGuideTemplate;
// 添加任務記憶檢索相關模板
basePrompt += templates.memoryDirTemplate;
basePrompt += generatePrompt(templates.memoryDirContent, {
memoryDir: params.memoryDir,
});
basePrompt += templates.memoryDirUsageGuide;
// 添加查詢建議
basePrompt += templates.queryRecommendationsTemplate;
basePrompt += templates.queryHighPriority;
basePrompt += templates.queryHighPriorityItems;
basePrompt += templates.queryHighPriorityItems2;
basePrompt += templates.queryHighPriorityItems3;
basePrompt += templates.queryHighPriorityItems4;
basePrompt += templates.queryMediumPriority;
basePrompt += templates.queryMediumPriorityItems;
basePrompt += templates.queryMediumPriorityItems2;
basePrompt += templates.queryMediumPriorityItems3;
basePrompt += templates.queryLowPriority;
basePrompt += templates.queryLowPriorityItems;
basePrompt += templates.queryLowPriorityItems2;
basePrompt += templates.queryLowPriorityItems3;
basePrompt += templates.queryReminder;
// 添加資訊收集指南
basePrompt += templates.infoCollectionGuideTemplate;
basePrompt += templates.infoCollectionGuideItems;
basePrompt += templates.infoCollectionGuideItems2;
basePrompt += templates.infoCollectionGuideItems3;
const rulesPath = getRulesFilePath();
// 添加下一步指導
basePrompt += generatePrompt(templates.nextStepsTemplate, {
rulesPath,
});
basePrompt += templates.nextStepsContent1;
basePrompt += templates.nextStepsContent1Detail;
let thoughtTemplate = "";
if (process.env.ENABLE_THOUGHT_CHAIN !== "false") {
basePrompt += templates.nextStepsThoughtTemplate;
basePrompt += templates.nextStepsThoughtDetail1;
basePrompt += templates.nextStepsThoughtDetail2;
thoughtTemplate = loadPromptFromTemplate("planTask/hasThought.md");
} else {
basePrompt += templates.nextStepsContent2;
basePrompt += templates.nextStepsContent2Detail1;
basePrompt += templates.nextStepsContent2Detail2;
thoughtTemplate = loadPromptFromTemplate("planTask/noThought.md");
}
const rulesPath = getRulesFilePath();
const indexTemplate = loadPromptFromTemplate("planTask/index.md");
let prompt = generatePrompt(indexTemplate, {
description: params.description,
requirements: params.requirements || "No requirements",
tasksTemplate: tasksContent,
rulesPath: rulesPath,
memoryDir: params.memoryDir,
thoughtTemplate: thoughtTemplate,
});
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "PLAN_TASK");
return loadPrompt(prompt, "PLAN_TASK");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/queryTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
@ -28,69 +31,40 @@ export interface QueryTaskPromptParams {
export function getQueryTaskPrompt(params: QueryTaskPromptParams): string {
const { query, isId, tasks, totalTasks, page, pageSize, totalPages } = params;
// 初始化基本 prompt
let basePrompt = generatePrompt(templates.searchHeaderTemplate, {
query,
searchMode: isId
? templates.searchModeIdTemplate
: templates.searchModeKeywordTemplate,
totalTasks,
});
// 如果沒有找到任務
if (tasks.length === 0) {
basePrompt += generatePrompt(
isId ? templates.noResultsIdTemplate : templates.noResultsKeywordTemplate,
{ query }
);
return loadPrompt(basePrompt, "QUERY_TASK");
}
// 添加任務列表
basePrompt += templates.resultListHeaderTemplate;
// 格式化找到的任務
for (const task of tasks) {
basePrompt += formatTaskSummary(task);
}
// 添加分頁信息
if (totalPages > 1) {
basePrompt += generatePrompt(templates.paginationInfoTemplate, {
page,
totalPages,
pageSize,
totalTasks,
const notFoundTemplate = loadPromptFromTemplate("queryTask/notFound.md");
return generatePrompt(notFoundTemplate, {
query,
});
}
// 添加使用提示
basePrompt += templates.usageHintTemplate;
const taskDetailsTemplate = loadPromptFromTemplate(
"queryTask/taskDetails.md"
);
let tasksContent = "";
for (const task of tasks) {
tasksContent += generatePrompt(taskDetailsTemplate, {
taskId: task.id,
taskName: task.name,
taskStatus: task.status,
taskDescription:
task.description.length > 100
? `${task.description.substring(0, 100)}...`
: task.description,
createdAt: new Date(task.createdAt).toLocaleString(),
});
}
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "QUERY_TASK");
}
/**
*
* @param task
* @returns
*/
function formatTaskSummary(task: Task): string {
// 簡化版的任務摘要,比完整格式更精簡
let result = generatePrompt(templates.taskSummaryTemplate, {
taskId: task.id,
taskName: task.name,
taskStatus: task.status,
taskDescription:
task.description.length > 100
? `${task.description.substring(0, 100)}...`
: task.description,
createdAt: new Date(task.createdAt).toLocaleString(),
completedAt: task.completedAt
? new Date(task.completedAt).toLocaleString()
: "尚未完成",
const indexTemplate = loadPromptFromTemplate("queryTask/index.md");
const prompt = generatePrompt(indexTemplate, {
tasksContent,
page,
totalPages,
pageSize,
totalTasks,
query,
});
return result;
// 載入可能的自定義 prompt
return loadPrompt(prompt, "QUERY_TASK");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/reflectTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
/**
* reflectTask prompt
@ -20,30 +23,12 @@ export interface ReflectTaskPromptParams {
* @returns prompt
*/
export function getReflectTaskPrompt(params: ReflectTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.reflectTaskTemplate, {
const indexTemplate = loadPromptFromTemplate("reflectTask/index.md");
const prompt = generatePrompt(indexTemplate, {
summary: params.summary,
analysis: params.analysis,
});
// 添加評估要點
basePrompt += templates.evaluationPointsTemplate;
// 添加決策點指導
basePrompt += templates.decisionPointsTemplate;
// 添加更新模式選擇指導
basePrompt += templates.updateModesTemplate;
// 添加知識傳遞機制指導
basePrompt += templates.knowledgeTransferTemplate;
// 添加任務過多處理指導
basePrompt += templates.taskOverflowTemplate;
// 添加結尾提醒
basePrompt += templates.conclusionTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "REFLECT_TASK");
return loadPrompt(prompt, "REFLECT_TASK");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/splitTasks.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
@ -16,126 +19,65 @@ export interface SplitTasksPromptParams {
allTasks: Task[];
}
/**
*
* @param updateMode
* @returns
*/
function getUpdateModeDescription(updateMode: string): string {
switch (updateMode) {
case "overwrite":
return "覆蓋未完成任務(已完成任務已保留)";
case "selective":
return "選擇性更新";
case "append":
default:
return "新增至現有任務清單";
}
}
/**
*
* @param task
* @param index
* @param allTasks
* @returns
*/
function formatTaskItem(task: Task, index: number, allTasks: Task[]): string {
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
// 處理實現指南
const implementationGuide = task.implementationGuide
? `**實現指南:** ${
task.implementationGuide.length > 100
? task.implementationGuide.substring(0, 100) +
"... (執行時可查看完整內容)"
: task.implementationGuide
}\n`
: "";
// 處理驗證標準
const verificationCriteria = task.verificationCriteria
? `**驗證標準:** ${
task.verificationCriteria.length > 100
? task.verificationCriteria.substring(0, 100) +
"... (驗證時可查看完整內容)"
: task.verificationCriteria
}\n`
: "";
// 處理依賴任務
const dependencies =
task.dependencies && task.dependencies.length > 0
? `**依賴任務:** ${task.dependencies
.map((d: any) => {
// 查找依賴任務的名稱,提供更友好的顯示
const depTask = allTasks.find((t) => t.id === d.taskId);
return depTask
? `"${depTask.name}" (\`${d.taskId}\`)`
: `\`${d.taskId}\``;
})
.join(", ")}\n`
: "**依賴任務:** 無\n";
// 使用模板生成任務項目
return generatePrompt(templates.taskItemTemplate, {
index: index + 1,
name: task.name,
id: task.id,
description: task.description,
notes,
implementationGuide,
verificationCriteria,
dependencies,
});
}
/**
* splitTasks prompt
* @param params prompt
* @returns prompt
*/
export function getSplitTasksPrompt(params: SplitTasksPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.splitTasksTitleTemplate, {
updateMode: params.updateMode,
});
const taskDetailsTemplate = loadPromptFromTemplate(
"splitTasks/taskDetails.md"
);
// 添加更新模式描述
basePrompt += generatePrompt(templates.updateModeDescriptionTemplate, {
updateDescription: getUpdateModeDescription(params.updateMode),
});
const tasksContent = params.createdTasks
.map((task, index) => {
let implementationGuide = "no implementation guide";
if (task.implementationGuide) {
implementationGuide =
task.implementationGuide.length > 100
? task.implementationGuide.substring(0, 100) + "..."
: task.implementationGuide;
}
// 添加拆分策略
basePrompt += templates.splitStrategyTemplate;
let verificationCriteria = "no verification criteria";
if (task.verificationCriteria) {
verificationCriteria =
task.verificationCriteria.length > 100
? task.verificationCriteria.substring(0, 100) + "..."
: task.verificationCriteria;
}
// 添加任務質量審核
basePrompt += templates.qualityReviewTemplate;
const dependencies = task.dependencies
? task.dependencies
.map((d: any) => {
// 查找依賴任務的名稱,提供更友好的顯示
const depTask = params.allTasks.find((t) => t.id === d.taskId);
return depTask
? `"${depTask.name}" (\`${d.taskId}\`)`
: `\`${d.taskId}\``;
})
.join(", ")
: "no dependencies";
// 添加任務清單標題
basePrompt += templates.taskListTitleTemplate;
// 添加所有建立的任務
basePrompt += params.createdTasks
.map((task, index) => formatTaskItem(task, index, params.allTasks))
return generatePrompt(taskDetailsTemplate, {
index: index + 1,
name: task.name,
id: task.id,
description: task.description,
notes: task.notes || "no notes",
implementationGuide: implementationGuide,
verificationCriteria: verificationCriteria,
dependencies: dependencies,
});
})
.join("\n");
// 添加空行
basePrompt += "\n\n";
// 添加依賴關係管理
basePrompt += templates.dependencyManagementTemplate;
basePrompt += templates.dependencyManagementContent1;
basePrompt += templates.dependencyManagementContent2;
basePrompt += templates.dependencyManagementContent3;
basePrompt += templates.dependencyManagementContent4;
// 添加決策點
basePrompt += templates.decisionPointsTemplate;
basePrompt += templates.decisionPointContent1;
basePrompt += templates.decisionPointContent2;
const indexTemplate = loadPromptFromTemplate("splitTasks/index.md");
const prompt = generatePrompt(indexTemplate, {
updateMode: params.updateMode,
tasksContent,
});
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "SPLIT_TASKS");
return loadPrompt(prompt, "SPLIT_TASKS");
}

View File

@ -3,8 +3,11 @@
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/verifyTask.js";
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
@ -20,7 +23,10 @@ export interface VerifyTaskPromptParams {
* @param maxLength
* @returns
*/
function extractSummary(content: string, maxLength: number): string {
function extractSummary(
content: string | undefined,
maxLength: number
): string {
if (!content) return "";
if (content.length <= maxLength) {
@ -38,56 +44,21 @@ function extractSummary(content: string, maxLength: number): string {
*/
export function getVerifyTaskPrompt(params: VerifyTaskPromptParams): string {
const { task } = params;
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.verifyTaskTemplate, {
const indexTemplate = loadPromptFromTemplate("verifyTask/index.md");
const prompt = generatePrompt(indexTemplate, {
name: task.name,
id: task.id,
description: task.description,
notes: notes,
notes: task.notes || "no notes",
verificationCriteria:
task.verificationCriteria || "no verification criteria",
implementationGuideSummary:
extractSummary(task.implementationGuide, 200) ||
"no implementation guide",
analysisResult:
extractSummary(task.analysisResult, 300) || "no analysis result",
});
// 添加任務特定的驗證標準(如果有)
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加實現指南摘要(如果有)
if (task.implementationGuide) {
const implementationGuideSummary =
task.implementationGuide.length > 200
? task.implementationGuide.substring(0, 200) + "... (參見完整實現指南)"
: task.implementationGuide;
basePrompt += generatePrompt(templates.implementationGuideSummaryTemplate, {
implementationGuideSummary: implementationGuideSummary,
});
}
// 添加分析結果摘要(如果有)
if (task.analysisResult) {
basePrompt += generatePrompt(templates.analysisSummaryTemplate, {
analysisSummary: extractSummary(task.analysisResult, 300),
});
}
// 添加標準驗證標準
basePrompt += templates.standardVerificationCriteriaTemplate;
// 添加報告要求
basePrompt += templates.reportRequirementsTemplate;
// 添加決策點
basePrompt += templates.decisionPointsTemplate;
basePrompt += templates.decisionPoint1;
basePrompt += templates.decisionPoint2;
basePrompt += templates.decisionPoint3;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "VERIFY_TASK");
return loadPrompt(prompt, "VERIFY_TASK");
}

View File

@ -19,7 +19,3 @@ export { getListTasksPrompt } from "./generators/listTasks.js";
export { getQueryTaskPrompt } from "./generators/queryTask.js";
export { getGetTaskDetailPrompt } from "./generators/getTaskDetail.js";
export { getInitProjectRulesPrompt } from "./generators/initProjectRules.js";
// 等等
// 導入初始化專案規範模板
export { initProjectRulesTemplate } from "./templates/initProjectRules.js";

View File

@ -3,6 +3,13 @@
* prompt
*/
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
function processEnvString(input: string | undefined): string {
if (!input) return "";
@ -65,3 +72,16 @@ export function generatePrompt(
return result;
}
/**
* prompt
* @param templatePath
* @returns
*/
export function loadPromptFromTemplate(templatePath: string): string {
const template = fs.readFileSync(
path.join(__dirname, "templates", templatePath),
"utf-8"
);
return template;
}

View File

@ -1,43 +0,0 @@
/**
* prompt
* analyzeTask prompt
*/
// 基本任務分析模板
export const analyzeTaskTemplate = `**請嚴格遵守以下指導**\n## 代碼庫分析\n\n### 任務摘要\n\`\`\`\n{summary}\n\`\`\`\n\n已收到初步解答構想\n\n\`\`\`\n{initialConcept}\n\`\`\`\n\n`;
// 技術審核要點模板
export const technicalReviewTemplate = `## 技術審核要點\n\n### 1. 代碼庫分析
-
-
-
### 2.
-
-
-
### 3.
-
-
-
### 4.
-
-
-
`;
// 迭代分析模板(用於分析已有的前次分析結果)
export const iterationAnalysisTemplate = `\n\n## 迭代分析\n\n請對照先前分析結果\n\n\`\`\`\n{previousAnalysis}\n\`\`\`\n\n請識別
1.
2.
3.
4. `;
// 下一步行動模板
export const nextActionTemplate = `\n\n## 下一步行動\n\n完成分析後使用「reflect_task」工具提交最終分析包含\n\n1. **原始任務摘要** - 保持與第一階段一致
2. **** -
`;

View File

@ -0,0 +1,50 @@
**請嚴格遵守以下指導**
## 代碼庫分析
### 任務摘要
{summary}
### 解答構想
{initialConcept}
## 技術審核要點
注意尋找程式碼重用機會,避免重複實作已有功能,降低技術債務風險。
### 1. 代碼庫分析
- 尋找可重用組件和類似實現
- 確定新功能的適當位置
- 評估與現有模塊的整合方式
### 2. 技術策略評估
- 考慮模塊化和可擴展性設計
- 評估提案的未來兼容性
- 規劃測試策略和覆蓋範圍
### 3. 風險和質量分析
- 識別技術債務和效能瓶頸
- 評估安全性和數據完整性
- 檢查錯誤處理機制
### 4. 實施建議
- 遵循項目架構風格
- 建議實施方法和技術選擇
- 提出明確開發步驟
{previousAnalysis}
## 下一步行動
完成分析後使用「reflect_task」工具提交最終分析包含
1. **原始任務摘要** - 保持與第一階段一致
2. **完整分析結果** - 技術細節、接口依賴、實施策略、驗收標準
您的分析將決定解決方案質量,請全面考慮各種技術因素和業務約束。

View File

@ -0,0 +1,12 @@
## 迭代分析
請對照先前分析結果:
{previousAnalysis}
請識別:
1. 已解決的問題及解決方案有效性
2. 仍存在的問題及其優先級
3. 新方案如何解決未解決問題
4. 迭代過程中獲得的新見解

View File

@ -1,16 +0,0 @@
/**
* prompt
* completeTask prompt
*/
// 基本任務完成確認模板
export const completeTaskConfirmationTemplate = `**請嚴格遵守以下指導**\n## 任務完成確認\n\n任務 "{name}" (ID: \`{id}\`) 已於 {completionTime} 成功標記為完成。\n\n`;
// 任務摘要要求模板
export const taskSummaryRequirementsTemplate = `## 任務摘要要求\n\n請提供此次完成任務的摘要總結包含以下關鍵要點\n\n1. 任務目標與主要成果\n2. 實施的解決方案要點\n3. 遇到的主要挑戰及解決方法\n\n`;
// 重要提示模板
export const importantReminderTemplate = `**重要提示:** 請在當前回應中提供任務摘要總結。完成本次任務摘要後,請等待用戶明確指示後再繼續執行其他任務。請勿自動開始執行下一個任務。\n\n`;
// 連續執行模式提示模板
export const continuousModeReminderTemplate = `如果用戶要求連續執行任務請使用「execute_task」工具開始執行下一個任務。`;

View File

@ -0,0 +1,17 @@
**請嚴格遵守以下指導**
## 任務完成確認
任務 "{name}" (ID: `{id}`) 已於 {completionTime} 成功標記為完成。
## 任務摘要要求
請提供此次完成任務的摘要總結,包含以下關鍵要點:
1. 任務目標與主要成果
2. 實施的解決方案要點
3. 遇到的主要挑戰及解決方法
**重要提示:**
請在當前回應中提供任務摘要總結。完成本次任務摘要後,請等待用戶明確指示後再繼續執行其他任務。請勿自動開始執行下一個任務。
如果用戶要求連續執行任務請使用「execute_task」工具開始執行下一個任務。

View File

@ -1,63 +0,0 @@
/**
* prompt
* executeTask prompt
*/
// 基本任務執行模板
export const executeTaskTemplate = `**請嚴格遵守以下指導**\n## 任務執行\n\n**名稱:** {name}\n**ID:** \`{id}\`\n**描述:** {description}\n{notes}\n`;
// 實現指南模板
export const implementationGuideTemplate = `\n## 實現指南\n\n{implementationGuide}\n\n`;
// 驗證標準模板
export const verificationCriteriaTemplate = `\n## 驗證標準\n\n{verificationCriteria}\n\n`;
// 分析背景模板
export const analysisResultTemplate = `\n## 分析背景\n\n{analysisResult}\n\n`;
// 相關文件模板
export const relatedFilesSummaryTemplate = `## 相關文件\n\n{relatedFilesSummary}\n\n`;
// 相關文件未指定模板
export const noRelatedFilesTemplate = `## 相關文件\n\n當前任務沒有關聯的文件。可以使用 \`update_task\` 工具添加相關文件,以便在執行任務時提供上下文。`;
// 推薦相關文件模板
export const recommendedFilesTemplate = `\n\n### 推薦操作\n基於任務描述您可能需要查看以下相關文件\n{potentialFiles}\n使用 update_task 工具關聯相關文件,以獲得更好的上下文記憶支持。`;
// 依賴任務完成摘要模板
export const dependencyTaskSummaryTemplate = `\n## 依賴任務完成摘要\n\n`;
// 單個依賴任務摘要模板
export const dependencyTaskItemTemplate = `### {name}\n{summary}\n\n`;
// 任務複雜度評估模板
export const complexityAssessmentTemplate = `\n## 任務複雜度評估\n\n- **複雜度級別:** {level}`;
// 複雜度警告模板
export const complexityWarningTemplate = `\n\n{complexityStyle}\n`;
// 評估指標模板
export const assessmentMetricsTemplate = `\n### 評估指標\n`;
export const descriptionLengthMetric = `- 描述長度: {descriptionLength} 字符\n`;
export const dependenciesCountMetric = `- 依賴任務數: {dependenciesCount} 個\n`;
// 處理建議模板
export const handlingRecommendationsTemplate = `\n### 處理建議\n`;
export const handlingRecommendation1 = `1. {recommendation1}\n`;
export const handlingRecommendation2 = `2. {recommendation2}\n`;
// 執行步驟模板
export const executionStepsTemplate = `\n## 執行步驟\n\n`;
export const executionStep1 = `1. **分析需求** - 理解任務需求和約束條件\n`;
export const executionStep2 = `2. **設計方案** - 制定實施計劃和測試策略\n`;
export const executionStep3 = `3. **實施方案** - 按計劃執行,處理邊緣情況\n`;
export const executionStep4 = `4. **測試驗證** - 確保功能正確性和穩健性\n`;
// 質量要求模板
export const qualityRequirementsTemplate = `\n## 質量要求\n\n`;
export const qualityRequirement1 = `- **範圍管理** - 僅修改相關代碼,避免功能蔓延\n`;
export const qualityRequirement2 = `- **代碼質量** - 符合編碼標準,處理異常情況\n`;
export const qualityRequirement3 = `- **效能考量** - 注意算法效率和資源使用\n\n`;
// 完成提示模板
export const completionReminderTemplate = `開始根據指示執行任務執行完成後請直接使用「verify_task」工具進行驗證。`;

View File

@ -0,0 +1,3 @@
## 分析背景
{analysisResult}

View File

@ -0,0 +1,15 @@
## 任務複雜度評估
- **複雜度級別:** {level}
{complexityStyle}
### 評估指標
- 描述長度: {descriptionLength} 字符
- 依賴任務數: {dependenciesCount} 個
### 處理建議
{recommendation}

View File

@ -0,0 +1,3 @@
## 依賴任務完成摘要
{{ dependencyTasks }}

View File

@ -0,0 +1,3 @@
## 實現指南
{implementationGuide}

View File

@ -0,0 +1,38 @@
**請嚴格遵守以下指導**
## 任務執行
**名稱:** {name}
**ID:** `{id}`
**描述:** {description}
{notesTemplate}
{implementationGuideTemplate}
{verificationCriteriaTemplate}
{analysisResultTemplate}
{dependencyTasksTemplate}
{relatedFilesSummaryTemplate}
{complexityTemplate}
## 執行步驟
1. **分析需求** - 理解任務需求和約束條件
2. **設計方案** - 制定實施計劃和測試策略
3. **實施方案** - 按計劃執行,處理邊緣情況
4. **測試驗證** - 確保功能正確性和穩健性
## 質量要求
- **範圍管理** - 僅修改相關代碼,避免功能蔓延
- **代碼質量** - 符合編碼標準,處理異常情況
- **效能考量** - 注意算法效率和資源使用
開始根據指示執行任務執行完成後請直接使用「verify_task」工具進行驗證。

View File

@ -0,0 +1 @@
**注意事項:** {notes}

View File

@ -0,0 +1,5 @@
## 相關文件
可以使用 `update_task` 工具添加相關文件,以便在執行任務時提供上下文。
{relatedFilesSummary}

View File

@ -0,0 +1,3 @@
## 驗證標準
{verificationCriteria}

View File

@ -1,43 +0,0 @@
/**
* prompt
* getTaskDetail prompt
*/
// 任務詳情標題模板
export const taskDetailTitleTemplate = `## 任務完整詳情\n\n`;
// 任務基本信息模板
export const taskBasicInfoTemplate = `### {name}\n\n**ID:** \`{id}\`\n\n**狀態:** {status}\n\n**描述:**\n{description}\n\n`;
// 任務注記模板
export const taskNotesTemplate = `**注記:**\n{notes}\n\n`;
// 任務依賴模板
export const taskDependenciesTemplate = `**依賴任務:** {dependencies}\n\n`;
// 任務實現指南模板
export const taskImplementationGuideTemplate = `**實現指南:**\n\`\`\`\n{implementationGuide}\n\`\`\`\n\n`;
// 任務驗證標準模板
export const taskVerificationCriteriaTemplate = `**驗證標準:**\n\`\`\`\n{verificationCriteria}\n\`\`\`\n\n`;
// 任務相關文件標題模板
export const taskRelatedFilesTemplate = `**相關文件:**\n{files}\n`;
// 單個相關文件模板
export const taskRelatedFileItemTemplate = `- \`{path}\` ({type}){description}`;
// 任務時間信息模板
export const taskTimeInfoTemplate = `**創建時間:** {createdTime}\n**更新時間:** {updatedTime}\n`;
// 任務完成時間模板
export const taskCompletedTimeTemplate = `**完成時間:** {completedTime}\n\n`;
// 任務完成摘要模板
export const taskSummaryTemplate = `**完成摘要:**\n{summary}\n\n`;
// 錯誤模板 - 找不到任務
export const taskNotFoundTemplate = `## 錯誤\n\n找不到ID為 \`{taskId}\` 的任務。請確認任務ID是否正確。`;
// 系統錯誤模板
export const errorTemplate = `## 系統錯誤\n\n取得任務詳情時發生錯誤: {errorMessage}`;

View File

@ -0,0 +1,5 @@
**完成時間:** {completedTime}
**完成摘要:**
{summary}

View File

@ -0,0 +1 @@
**依賴任務:** {dependencies}

View File

@ -0,0 +1,3 @@
## 系統錯誤
取得任務詳情時發生錯誤: {errorMessage}

View File

@ -0,0 +1,3 @@
**實現指南:**
{implementationGuide}

View File

@ -0,0 +1,25 @@
## 任務完整詳情
### {name}
**ID:** `{id}`
**狀態:** {status}
**描述:**{description}
{notesTemplate}
{dependenciesTemplate}
{implementationGuideTemplate}
{verificationCriteriaTemplate}
{relatedFilesTemplate}
**創建時間:** {createdTime}
**更新時間:** {updatedTime}
{complatedSummaryTemplate}

View File

@ -0,0 +1,3 @@
## 錯誤
找不到 ID 為 `{taskId}` 的任務。請確認任務 ID 是否正確。

View File

@ -0,0 +1 @@
**注意事項:** {notes}

View File

@ -0,0 +1,3 @@
**相關文件:**
{files}

View File

@ -0,0 +1,3 @@
**驗證標準:**
{verificationCriteria}

View File

@ -1,10 +1,4 @@
/**
* 初始化專案規範 prompt 模板
* 包含指導如何產生專案規範文件的提示詞
*/
// 基本提示詞模板
export const initProjectRulesTemplate = `請用 「process_thought」 工具思考以下問題
請用 「process_thought」 工具思考以下問題
# 專案規範初始化指南
@ -14,11 +8,13 @@ export const initProjectRulesTemplate = `請用 「process_thought」 工具思
**必須生成一個專屬於 AI Agent 操作使用的專案規範文件(rules.md)。**
**必須專注於以下關鍵目標:**
- 明確專案特定規則與限制,禁止包含通用開發知識
- 提供 AI 執行任務時所需的專案特定資訊
- 為 AI 決策過程提供明確指導
**強制規定:**
- 完成的規範必須使 AI Agent 能立即理解哪些檔案必須參考或修改
- 明確指示多檔案連動修改要求(例如修改 README.md 時必須同步修改 /docs/zh/README.md
- 使用命令式語言定義規則,避免解釋性內容
@ -26,6 +22,7 @@ export const initProjectRulesTemplate = `請用 「process_thought」 工具思
- 請提供範例什麼事可以做的,什麼事不可以做的
**嚴重禁止:**
- 禁止包含通用開發知識
- 禁止包含 LLM 已知的通用開發知識
- 進行專案功能解釋
@ -34,13 +31,16 @@ export const initProjectRulesTemplate = `請用 「process_thought」 工具思
請使用以下結構建立規範文件:
\`\`\`markdown
```markdown
# 開發守則
## 標題
### 副標題
- 規則一
- 規則二
\`\`\`
```
## 內容指南
@ -72,4 +72,3 @@ export const initProjectRulesTemplate = `請用 「process_thought」 工具思
**思考完畢後請立即編輯 rules.md 文件禁止呼叫「analyze_task」工具**
**如果檔案已經存在或用戶要求更新,請思考規範是否已經過時,是否需要補充更新**
**如果是更新模式,除非必要否則你應該保持現有的規範,以最小變更為原則的修改**
`;

View File

@ -1,19 +0,0 @@
/**
* prompt
* listTasks prompt
*/
// 任務管理儀表板標題模板
export const dashboardTitleTemplate = `# 任務管理儀表板\n\n`;
// 任務狀態概覽標題模板
export const statusOverviewTitleTemplate = `## 任務狀態概覽\n\n`;
// 單個任務狀態計數模板
export const statusCountTemplate = `- **{status}**: {count} 個任務`;
// 任務狀態分類標題模板
export const statusSectionTitleTemplate = `## {status} ({count})\n\n`;
// 系統通知模板 - 無任務
export const noTasksNoticeTemplate = `## 系統通知\n\n目前系統中沒有{statusText}任務。請查詢其他狀態任務或先使用「split_tasks」工具創建任務結構再進行後續操作。`;

View File

@ -0,0 +1,7 @@
# 任務管理儀表板
## 任務狀態概覽
{statusCount}
{taskDetailsTemplate}

View File

@ -0,0 +1,3 @@
# 系統通知
目前系統中沒有{statusText}任務。請查詢其他狀態任務或先使用「split_tasks」工具創建任務結構再進行後續操作。

View File

@ -0,0 +1,13 @@
### {name}
**ID:** `{id}`
**描述:** {description}
{complatedSummary}
**依賴:** {dependencies}
**創建時間:** {createAt}
{complatedAt}

View File

@ -1,99 +0,0 @@
/**
* prompt
* planTask prompt
*/
// 基本任務分析模板
export const planTaskTemplate = `**請嚴格遵守以下指導**\n## 任務分析\n\n{description}\n\n`;
// 要求與限制模板
export const requirementsTemplate = `## 要求與限制\n\n{requirements}\n\n`;
// 現有任務參考引導
export const existingTasksReferenceTemplate = `## 現有任務參考\n\n`;
// 已完成任務標題
export const completedTasksTitleTemplate = `### 已完成任務\n\n`;
// 已完成任務項目模板
export const completedTaskItemTemplate = `{index}. **{taskName}** (ID: \`{taskId}\`)\n - 描述:{taskDescription}\n{completedTime}`;
// 未完成任務標題
export const pendingTasksTitleTemplate = `\n### 未完成任務\n\n`;
// 未完成任務項目模板
export const pendingTaskItemTemplate = `{index}. **{taskName}** (ID: \`{taskId}\`)\n - 描述:{taskDescription}\n - 狀態:{taskStatus}\n{dependencies}`;
// 任務調整原則
export const taskAdjustmentPrinciplesTemplate = `\n## 任務調整原則\n\n`;
export const taskAdjustmentPrinciplesContent = `1. **已完成任務保護** - 已完成任務不可修改或刪除\n`;
export const taskAdjustmentPrinciplesContent2 = `2. **未完成任務可調整** - 可根據新需求修改未完成任務\n`;
export const taskAdjustmentPrinciplesContent3 = `3. **任務ID一致性** - 引用現有任務必須使用原始ID\n`;
export const taskAdjustmentPrinciplesContent4 = `4. **依賴關係完整性** - 避免循環依賴,不依賴已標記移除的任務\n`;
export const taskAdjustmentPrinciplesContent5 = `5. **任務延續性** - 新任務應與現有任務構成連貫整體\n\n`;
// 任務更新模式指導
export const taskUpdateModesTemplate = `## 任務更新模式\n\n`;
export const taskUpdateModesContent1 = `### 1. **追加模式(append)**\n`;
export const taskUpdateModesContent1Detail = `- 保留所有現有任務,僅添加新任務\n`;
export const taskUpdateModesContent1Usage = `- 適用:逐步擴展功能,現有計劃仍有效\n\n`;
export const taskUpdateModesContent2 = `### 2. **覆蓋模式(overwrite)**\n`;
export const taskUpdateModesContent2Detail = `- 清除所有現有未完成任務,完全使用新任務列表\n`;
export const taskUpdateModesContent2Usage = `- 適用:徹底變更方向,現有未完成任務已不相關\n\n`;
export const taskUpdateModesContent3 = `### 3. **選擇性更新模式(selective)**\n`;
export const taskUpdateModesContent3Detail = `- 根據任務名稱匹配選擇性更新任務,保留其他現有任務\n`;
export const taskUpdateModesContent3Usage = `- 適用:部分調整任務計劃,保留部分未完成任務\n`;
export const taskUpdateModesContent3Mechanism = `- 工作原理:更新同名任務,創建新任務,保留其他任務\n\n`;
// 分析指引模板
export const analysisGuideTemplate = `## 分析指引\n\n1. 確定任務的目標和預期成果
2.
3.
4.
5.
6. \n\n`;
// 任務記憶檢索模板
export const memoryDirTemplate = `## 任務記憶檢索\n\n`;
export const memoryDirContent = `過去任務記錄儲存在 **{memoryDir}**。\n`;
export const memoryDirUsageGuide = `使用查詢工具時,請根據以下情境判斷:\n\n`;
// 查詢建議模板
export const queryRecommendationsTemplate = `### 查詢建議\n\n`;
export const queryHighPriority = `- **必查(高優先級)**:\n`;
export const queryHighPriorityItems = ` - 涉及修改或擴展現有功能,需了解原有實現\n`;
export const queryHighPriorityItems2 = ` - 任務描述提到需參考以往工作或已有實現經驗\n`;
export const queryHighPriorityItems3 = ` - 涉及系統內部技術實現或關鍵組件\n`;
export const queryHighPriorityItems4 = ` - 用戶要求必須查詢記憶\n\n`;
export const queryMediumPriority = `- **可查(中優先級)**:\n`;
export const queryMediumPriorityItems = ` - 新功能與現有系統有整合需求,實現部分獨立\n`;
export const queryMediumPriorityItems2 = ` - 功能標準化且需符合系統慣例\n`;
export const queryMediumPriorityItems3 = ` - 不確定是否已有類似實現\n\n`;
export const queryLowPriority = `- **可跳過(低優先級)**:\n`;
export const queryLowPriorityItems = ` - 完全全新、獨立的功能\n`;
export const queryLowPriorityItems2 = ` - 基本設置或簡單標準任務\n`;
export const queryLowPriorityItems3 = ` - 用戶明確指示不需參考過去記錄\n\n`;
export const queryReminder = `> ※ 查詢記憶可幫助了解過往方案,借鑒成功經驗並避免重複錯誤。\n\n`;
// 資訊收集指南模板
export const infoCollectionGuideTemplate = `## 資訊收集指南\n\n`;
export const infoCollectionGuideItems = `1. **詢問用戶** - 當你對任務要求有疑問時,直接詢問用戶\n`;
export const infoCollectionGuideItems2 = `2. **查詢記憶** - 使用「query_task」工具查詢以往記憶是否有相關任務\n`;
export const infoCollectionGuideItems3 = `3. **網路搜索** - 當出現你不理解的名詞或概念時,使用網路搜尋工具找尋答案\n\n`;
// 下一步模板
export const nextStepsTemplate = `## 下一步\n\n⚠ 重要:請先閱讀 {rulesPath} 規則再進行任何分析或設計 ⚠️\n\n`;
export const nextStepsContent1 = `**第一步:根據任務描述決定是否查詢記憶**\n`;
export const nextStepsContent1Detail = `- 判斷任務是否屬於必查情境若是請先使用「query_task」查詢過往記錄否則可直接進行分析。\n\n`;
export const nextStepsContent2 = `**第二步:使用 analyze_task 提交分析結果**\n`;
export const nextStepsContent2Detail1 = `1. **任務摘要** - 目標、範圍、挑戰和限制條件\n`;
export const nextStepsContent2Detail2 = `2. **初步解答構想** - 可行的技術方案和實施計劃\n`;
export const nextStepsThoughtTemplate = `**第二步必須強制使用「process_thought」思考答案 (禁止直接使用analyze_task)**\n`;
export const nextStepsThoughtDetail1 = `1. **強制思考過程** - 必須展示逐步推理過程,包括假設、驗證和調整\n`;
export const nextStepsThoughtDetail2 = `2. 警告必須先使用「process_thought」工具思考嚴格禁止直接使用analyze_task或直接回答\n`;

View File

@ -0,0 +1,4 @@
**第二步必須強制使用「process_thought」思考答案 (禁止直接使用 analyze_task)**
1. **強制思考過程** - 必須展示逐步推理過程,包括假設、驗證和調整
2. 警告必須先使用「process_thought」工具思考嚴格禁止直接使用 analyze_task 或直接回答

View File

@ -0,0 +1,62 @@
**請嚴格遵守以下指導**
## 任務分析
{description}
## 要求與限制
{requirements}
{tasksTemplate}
## 分析指引
1. 確定任務的目標和預期成果
2. 識別技術挑戰和關鍵決策點
3. 考慮潛在解決方案和替代方案
4. 評估各方案優缺點
5. 判斷是否需要分解為子任務
6. 考慮與現有系統的集成需求
## 任務記憶檢索
過去任務記錄儲存在 **{memoryDir}**。
使用查詢工具時,請根據以下情境判斷:
- **必查(高優先級)**:
- 涉及修改或擴展現有功能,需了解原有實現
- 任務描述提到需參考以往工作或已有實現經驗
- 涉及系統內部技術實現或關鍵組件
- 用戶要求必須查詢記憶
- **可查(中優先級)**:
- 新功能與現有系統有整合需求,實現部分獨立
- 功能標準化且需符合系統慣例
- 不確定是否已有類似實現
- **可跳過(低優先級)**:
- 完全全新、獨立的功能
- 基本設置或簡單標準任務
- 用戶明確指示不需參考過去記錄
> ※ 查詢記憶可幫助了解過往方案,借鑒成功經驗並避免重複錯誤。
## 資訊收集指南
1. **詢問用戶** - 當你對任務要求有疑問時,直接詢問用戶
2. **查詢記憶** - 使用「query_task」工具查詢以往記憶是否有相關任務
3. **網路搜索** - 當出現你不理解的名詞或概念時,使用網路搜尋工具找尋答案
## 下一步
⚠️ 重要:請先閱讀 {rulesPath} 規則再進行任何分析或設計 ⚠️
**第一步:根據任務描述決定是否查詢記憶**
- 判斷任務是否屬於必查情境若是請先使用「query_task」查詢過往記錄否則可直接進行分析。
{thoughtTemplate}

View File

@ -0,0 +1,4 @@
**第二步:使用 analyze_task 提交分析結果**
1. **任務摘要** - 目標、範圍、挑戰和限制條件
2. **初步解答構想** - 可行的技術方案和實施計劃

View File

@ -0,0 +1,35 @@
## 現有任務參考
### 已完成任務
{completedTasks}
### 未完成任務
{unfinishedTasks}
## 任務調整原則
1. **已完成任務保護** - 已完成任務不可修改或刪除
2. **未完成任務可調整** - 可根據新需求修改未完成任務
3. **任務 ID 一致性** - 引用現有任務必須使用原始 ID
4. **依賴關係完整性** - 避免循環依賴,不依賴已標記移除的任務
5. **任務延續性** - 新任務應與現有任務構成連貫整體
## 任務更新模式
### 1. **追加模式(append)**
- 保留所有現有任務,僅添加新任務
- 適用:逐步擴展功能,現有計劃仍有效
### 2. **覆蓋模式(overwrite)**
- 清除所有現有未完成任務,完全使用新任務列表
- 適用:徹底變更方向,現有未完成任務已不相關
### 3. **選擇性更新模式(selective)**
- 根據任務名稱匹配選擇性更新任務,保留其他現有任務
- 適用:部分調整任務計劃,保留部分未完成任務
- 工作原理:更新同名任務,創建新任務,保留其他任務

View File

@ -1,143 +0,0 @@
/**
* prompt
* queryTask prompt
*/
/**
* queryTask
* {} {{}}
*/
/**
* -
*/
export const searchModeIdTemplate = "任務ID查詢";
export const searchModeKeywordTemplate = "關鍵字查詢";
/**
*
* {searchMode}
*/
export const searchHeaderTemplate = `
#
##
- : {query}
- : {searchMode}
- : {totalTasks}
`;
/**
* - ID查詢和關鍵字查詢兩個獨立模板
*
* export const noResultsTemplate = `
* ##
* "{query}"
*
* ### :
* {{#if isId}}
* - ID不存在或格式不正確
* -
* {{else}}
* -
* - 使
* -
* {{/if}}
*
* 使 \`list_tasks\` 命令查看所有現有任務。
* `;
*/
/**
* - ID查詢
*/
export const noResultsIdTemplate = `
##
"{query}"
### :
- ID不存在或格式不正確
-
使 \`list_tasks\` 命令查看所有現有任務。
`;
/**
* -
*/
export const noResultsKeywordTemplate = `
##
"{query}"
### :
-
- 使
-
使 \`list_tasks\` 命令查看所有現有任務。
`;
/**
*
*/
export const resultListHeaderTemplate = `
##
:
`;
/**
*
*/
export const paginationInfoTemplate = `
##
- : {page} / {totalPages}
- : {pageSize}
- : {totalTasks}
page
`;
/**
*
*/
export const taskSummaryTemplate = `
### {taskName} (ID: {taskId})
- : {taskStatus}
- : {taskDescription}
- : {createdAt}
- : {completedAt}
`;
/**
* 使
*/
export const usageHintTemplate = `
##
- 使 \`get_task_detail {任務ID}\` 查看任務完整詳情
- 使 \`execute_task {任務ID}\` 執行特定任務
- 使 \`list_tasks\` 查看所有任務
`;
// 查詢結果標題模板
export const queryResultTitleTemplate = `## 查詢結果 ({totalResults})\n\n`;
// 單個任務顯示模板
export const taskDisplayTemplate = `### {name}
**ID:** \`{id}\`
**:** {status}
**:** {description}
{notes}
{implementationGuide}
{verificationCriteria}
{summary}
**:** {createdTime}
**:** {updatedTime}
{completedTime}
**:** 使get_task_detail {id} `;
// 下一頁指示模板
export const nextPageGuideTemplate = `\n\n要查看下一頁結果請使用相同的查詢參數但將頁碼設為 {nextPage}。`;
// 系統錯誤模板
export const errorTemplate = `## 系統錯誤\n\n查詢任務時發生錯誤: {errorMessage}`;

View File

@ -0,0 +1,24 @@
# 任務查詢結果
## 查詢資訊
- 查詢詞: {query}
## 任務列表
以下是符合查詢的任務:
{tasksContent}
## 分頁資訊
- 當前頁: {page} / {totalPages}
- 每頁顯示: {pageSize} 筆
- 總計結果: {totalTasks} 筆
您可以指定 page 參數查看更多結果。
## 相關操作提示
- 使用 `get_task_detail {任務ID}` 查看任務完整詳情
- 使用 `list_tasks` 查看所有任務

View File

@ -0,0 +1,15 @@
# 任務查詢結果
## 無符合結果
沒有找到符合 "{query}" 的任務。
### 可能的原因:
- 您提供的任務 ID 不存在或格式不正確
- 任務可能已被刪除
- 關鍵字拼寫可能有誤
- 請嘗試使用更簡短或相近的關鍵詞
- 任務清單可能為空
您可以使用 `list_tasks` 命令查看所有現有任務或使用其他關鍵字搜尋歷史紀錄。

View File

@ -0,0 +1,5 @@
### {taskName} (ID: {taskId})
- 狀態: {taskStatus}
- 描述: {taskDescription}
- 建立時間: {createdAt}

View File

@ -1,60 +1,68 @@
/**
* 方案評估 prompt 模板
* 包含所有用於構建完整 reflectTask prompt 的模板片段
*/
**請嚴格遵守以下指導**
// 基本方案評估模板
export const reflectTaskTemplate = `**請嚴格遵守以下指導**\n## 方案評估\n\n### 任務摘要\n\`\`\`\n{summary}\n\`\`\`\n\n### 分析結果\n\`\`\`\n{analysis}\n\`\`\`\n\n`;
## 方案評估
### 任務摘要
{summary}
### 分析結果
{analysis}
## 評估要點
// 評估要點模板
export const evaluationPointsTemplate = `## 評估要點
### 1. 技術完整性
- 檢查方案技術缺陷和邏輯漏洞
- 驗證邊緣情況和異常處理
- 確認數據流和控制流完整性
- 評估技術選型合理性
### 2. 效能與可擴展性
- 分析資源使用效率和優化空間
- 評估系統負載擴展能力
- 識別潛在優化點
- 考慮未來功能擴展可能性
### 3. 需求符合度
- 核對功能需求實現情況
- 檢查非功能性需求符合度
- 確認需求理解準確性
- 評估用戶體驗和業務流程整合`;
- 評估用戶體驗和業務流程整合
## 決策點
// 決策點模板
export const decisionPointsTemplate = `## 決策點
根據評估結果選擇後續行動:
- **發現關鍵問題**使用「analyze_task」重新提交改進方案
- **輕微調整**:在下一步執行中應用這些小的改進
- **方案完善**使用「split_tasks」將解決方案分解為可執行子任務如果任務太多或內容過長請使用多次使用「split_tasks」工具每次只提交一小部分任務\n\n`;
- **方案完善**使用「split_tasks」將解決方案分解為可執行子任務如果任務太多或內容過長請使用多次使用「split_tasks」工具每次只提交一小部分任務
## split_tasks 更新模式選擇
// 更新模式選擇模板
export const updateModesTemplate = `## split_tasks 更新模式選擇
- **append** - 保留所有現有任務並添加新任務
- **overwrite** - 清除未完成任務,保留已完成任務
- **selective** - 選擇性更新特定任務,保留其他任務
- **clearAllTasks** - 清除所有任務並創建備份\n\n`;
- **clearAllTasks** - 清除所有任務並創建備份
## 知識傳遞機制
// 知識傳遞機制模板
export const knowledgeTransferTemplate = `## 知識傳遞機制
1. **全局分析結果** - 關聯完整分析文檔
2. **任務專屬實現指南** - 每個任務保存具體實現方法
3. **任務專屬驗證標準** - 設置明確驗證要求\n\n`;
3. **任務專屬驗證標準** - 設置明確驗證要求
## 任務拆分指南(請嚴格遵守以下規則)
// 任務過多處理模板
export const taskOverflowTemplate = `## 任務拆分指南(請嚴格遵守以下規則)
- **原子性**:每個子任務應該可獨立運作或測試
- **依賴性**:如果任務依賴於其他任務請標註 「dependencies」 字段
- **適度拆分**:避免過度細化(粒度過小)或過度合併(粒度過大)
- **必要時整合**:修改的內容不多或不複雜,可以適當於其他任務整合,避免任務過於簡單造成任務過多
- **重複調用**如果任務太多或內容過長導致「split_tasks」工具無法正常運作時請使用多次使用「split_tasks」工具每次只提交一小部分任務
- **簡化任務**:如果每次只新增一個任務還是無法正常運作,請考慮再次拆分任務,或者簡化任務但必須保留核心內容
- **嚴重警告** 你每次呼叫 split_tasks 傳遞的參數不能超過8000個字如果超出 8000 個字請多次呼叫工具完成\n\n`;
// 結尾提醒模板
export const conclusionTemplate = `請嚴格審查方案,確保解決方案質量。`;
**嚴重警告** 你每次呼叫 split_tasks 傳遞的參數不能超過 5000 個字,如果超出 5000 個字請多次呼叫工具完成
**現在開始呼叫「split_tasks」工具**

View File

@ -1,46 +0,0 @@
/**
* prompt
* splitTasks prompt
*/
// 任務拆分標題模板
export const splitTasksTitleTemplate = `## 任務拆分 - {updateMode} 模式\n\n`;
// 任務更新模式描述模板
export const updateModeDescriptionTemplate = `任務已{updateDescription}。\n\n`;
// 任務拆分策略模板
export const splitStrategyTemplate = `## 拆分策略\n\n1. **按功能分解** - 獨立可測試的子功能,明確輸入輸出
2. **** - 沿
3. **** -
4. **** - \n\n`;
// 任務質量審核模板
export const qualityReviewTemplate = `## 任務質量審核\n\n1. **任務原子性** - 每個任務足夠小且具體,可獨立完成
2. **** -
3. **** - \n\n`;
// 任務清單標題模板
export const taskListTitleTemplate = `## 任務清單\n\n`;
// 單個任務顯示模板
export const taskItemTemplate = `### 任務 {index}{name}
**ID:** \`{id}\`
**:** {description}
{notes}
{implementationGuide}
{verificationCriteria}
{dependencies}
`;
// 依賴關係管理模板
export const dependencyManagementTemplate = `## 依賴關係管理\n\n`;
export const dependencyManagementContent1 = `- 設置依賴可使用任務名稱或任務ID\n`;
export const dependencyManagementContent2 = `- 最小化依賴數量,只設置直接前置任務\n`;
export const dependencyManagementContent3 = `- 避免循環依賴,確保任務圖有向無環\n`;
export const dependencyManagementContent4 = `- 平衡關鍵路徑,優化並行執行可能性\n\n`;
// 決策點模板
export const decisionPointsTemplate = `## 決策點\n\n`;
export const decisionPointContent1 = `- 發現任務拆分不合理重新呼叫「split_tasks」調整\n`;
export const decisionPointContent2 = `- 確認任務拆分完善:生成執行計劃,確定優先順序\n- **嚴重警告** 你每次呼叫 split_tasks 傳遞的參數不能超過8000個字如果超出 8000 個字請多次呼叫工具完成`;

View File

@ -0,0 +1,34 @@
## 任務拆分 - {updateMode} 模式
## 拆分策略
1. **按功能分解** - 獨立可測試的子功能,明確輸入輸出
2. **按技術層次分解** - 沿架構層次分離任務,確保接口明確
3. **按開發階段分解** - 核心功能先行,優化功能後續
4. **按風險分解** - 隔離高風險部分,降低整體風險
## 任務質量審核
1. **任務原子性** - 每個任務足夠小且具體,可獨立完成
2. **依賴關係** - 任務依賴形成有向無環圖,避免循環依賴
3. **描述完整性** - 每個任務描述清晰準確,包含必要上下文
## 任務清單
{tasksContent}
## 依賴關係管理
- 設置依賴可使用任務名稱或任務 ID
- 最小化依賴數量,只設置直接前置任務
- 避免循環依賴,確保任務圖有向無環
- 平衡關鍵路徑,優化並行執行可能性
## 決策點
- 發現任務拆分不合理重新呼叫「split_tasks」調整
- 確認任務拆分完善:生成執行計劃,確定優先順序
**嚴重警告** 你每次呼叫 split_tasks 傳遞的參數不能超過 5000 個字,如果超出 5000 個字請多次呼叫工具完成
**如果還有剩餘任務請繼續呼叫「split_tasks」**

View File

@ -0,0 +1,12 @@
### 任務 {index}{name}
**ID:** `{id}`
**描述:** {description}
**注意事項:** {notes}
**實現指南:** {implementationGuide}
**驗證標準:** {verificationCriteria}
**依賴任務:** {dependencies}

View File

@ -1,28 +0,0 @@
/**
* prompt
* verifyTask prompt
*/
// 基本任務驗證模板
export const verifyTaskTemplate = `**請嚴格遵守以下指導**\n## 任務驗證\n\n**名稱:** {name}\n**ID:** \`{id}\`\n**描述:** {description}\n{notes}\n`;
// 驗證標準模板
export const verificationCriteriaTemplate = `\n## 驗證標準\n\n{verificationCriteria}\n\n`;
// 實現指南摘要模板
export const implementationGuideSummaryTemplate = `\n## 實現指南摘要\n\n{implementationGuideSummary}\n\n`;
// 分析要點模板
export const analysisSummaryTemplate = `\n## 分析要點\n\n{analysisSummary}\n\n`;
// 標準驗證標準模板
export const standardVerificationCriteriaTemplate = `## 驗證標準\n\n1. **需求符合性(30%)** - 功能完整性、約束條件遵循、邊緣情況處理\n2. **技術質量(30%)** - 架構一致性、程式健壯性、實現優雅性\n3. **集成兼容性(20%)** - 系統整合、互操作性、兼容性維護\n4. **性能可擴展性(20%)** - 效能優化、負載適應性、資源管理\n\n`;
// 報告要求模板
export const reportRequirementsTemplate = `## 報告要求\n\n提供整體評分和評級各項標準評估問題與建議及最終結論。\n\n`;
// 決策點模板
export const decisionPointsTemplate = `## 下一步\n\n**根據驗證結果選擇你的下一步行動:**\n`;
export const decisionPoint1 = `- **嚴重錯誤**直接使用「plan_task」工具重新規劃任務\n`;
export const decisionPoint2 = `- **輕微錯誤**:直接修復問題\n`;
export const decisionPoint3 = `- **無錯誤**直接使用「complete_task」工具標記完成\n`;

View File

@ -0,0 +1,44 @@
**請嚴格遵守以下指導**
## 任務驗證
**名稱:** {name}
**ID:** `{id}`
**描述:** {description}
**注意事項:** {notes}
## 驗證標準
{verificationCriteria}
## 實現指南摘要
{implementationGuideSummary}
## 分析要點
{analysisSummary}
## 驗證標準
1. **需求符合性(30%)** - 功能完整性、約束條件遵循、邊緣情況處理
2. **技術質量(30%)** - 架構一致性、程式健壯性、實現優雅性
3. **集成兼容性(20%)** - 系統整合、互操作性、兼容性維護
4. **性能可擴展性(20%)** - 效能優化、負載適應性、資源管理
## 報告要求
提供整體評分和評級,各項標準評估,問題與建議,及最終結論。
## 下一步
**根據驗證結果選擇你的下一步行動:**
- **嚴重錯誤**直接使用「plan_task」工具重新規劃任務
- **輕微錯誤**:直接修復問題
- **無錯誤**直接使用「complete_task」工具標記完成
**請直接決定你的下一步行為,請勿詢問用戶**

View File

@ -661,43 +661,12 @@ export async function executeTask({
}
}
// 嘗試自動發現相關文件
let potentialFiles: string[] = [];
if (!task.relatedFiles || task.relatedFiles.length === 0) {
// 基於任務名稱和描述關鍵詞,嘗試推測可能相關的文件
const taskWords = [
...task.name.split(/[\s,.;:]+/),
...task.description.split(/[\s,.;:]+/),
]
.filter((word) => word.length > 3)
.map((word) => word.toLowerCase());
// 從關鍵詞中提取可能的文件名或路徑片段
potentialFiles = taskWords.filter(
(word) =>
/^[a-z0-9]+$/i.test(word) &&
![
"task",
"function",
"model",
"index",
"with",
"from",
"this",
].includes(word.toLowerCase())
);
// 只保留前5個
potentialFiles = potentialFiles.slice(0, 5);
}
// 使用prompt生成器獲取最終prompt
const prompt = getExecuteTaskPrompt({
task,
complexityAssessment,
relatedFilesSummary,
dependencyTasks,
potentialFiles,
});
return {