splitTasks.ts•2.44 kB
/**
* splitTasks prompt generator
* Responsible for combining templates and parameters into the final prompt
*/
import {
loadPrompt,
generatePrompt,
loadPromptFromTemplate,
} from "../loader.js";
import { Task } from "../../types/index.js";
/**
* splitTasks prompt parameter interface
*/
export interface SplitTasksPromptParams {
globalAnalysisResult?: string;
memoryDir?: string;
updateMode: "append" | "overwrite" | "selective" | "clearAllTasks";
tasks?: Task[];
allTasks?: Task[];
createdTasks?: Task[];
}
/**
* Get the complete splitTasks prompt
* @param params prompt parameters
* @returns generated prompt
*/
export function getSplitTasksPrompt(params: SplitTasksPromptParams): string {
const indexTemplate = loadPromptFromTemplate("splitTasks/index.md");
let tasksContext = "";
if (params.tasks && params.tasks.length > 0) {
const taskDetailsTemplate = loadPromptFromTemplate("splitTasks/taskDetails.md");
// Convert task list to formatted task details
let taskDetailsContent = "";
params.tasks.forEach((task, index) => {
// Format dependencies if they exist
let dependenciesContent = "";
if (task.dependencies && task.dependencies.length > 0) {
dependenciesContent =
task.dependencies
.map(dep => {
// Find dependency task name for more friendly display
const depTaskName = params.tasks?.find(t => t.id === dep.taskId)?.name || dep.taskId;
return `\`${depTaskName}\``;
})
.join(", ");
}
taskDetailsContent += `Task ${index + 1}:\n`;
taskDetailsContent += `- ID: ${task.id}\n`;
taskDetailsContent += `- Name: ${task.name}\n`;
taskDetailsContent += `- Description: ${task.description}\n`;
if (dependenciesContent) {
taskDetailsContent += `- Dependencies: ${dependenciesContent}\n`;
}
taskDetailsContent += `- Status: ${task.status}\n\n`;
});
tasksContext = generatePrompt(taskDetailsTemplate, {
taskCount: params.tasks.length.toString(),
taskDetails: taskDetailsContent
});
}
let prompt = generatePrompt(indexTemplate, {
globalAnalysisResult: params.globalAnalysisResult,
tasksContext: tasksContext,
updateMode: params.updateMode,
memoryDir: params.memoryDir
});
// Load possible custom prompt
return loadPrompt(prompt, "SPLIT_TASKS");
}