openai-compatible-task-master
Version:
使用MCP解析PRD文档并生成任务列表
39 lines • 1.73 kB
JavaScript
import { breakupTaskWithLLM } from '../llm/llm_breakup_task.js';
import fs from 'fs-extra';
import path from 'path';
import chalk from 'chalk';
/**
* 将任务分解为子任务
* @param params 必需的参数对象
* @returns 分解后的子任务数组
*/
export async function breakupTask({ taskId, prompt, tasksPath, apiKey, apiUrl, model, streamMode, }) {
if (!apiKey) {
throw new Error('API密钥未提供');
}
try {
// 读取任务文件
const tasksData = await fs.readJSON(path.resolve(tasksPath));
// 查找指定ID的任务
const parentTask = tasksData.tasks.find((task) => String(task.id) === String(taskId));
if (!parentTask) {
throw new Error(`找不到ID为 ${taskId} 的任务`);
}
console.log(chalk.blue(`开始分解任务: ${parentTask.title} (ID: ${parentTask.id})`));
// 调用LLM分解任务
const subTasks = await breakupTaskWithLLM(parentTask, prompt || '请将此任务分解为更小的子任务,每个子任务应该专注于单一职责,并且可以独立完成。', apiUrl, apiKey, model, streamMode);
console.log(chalk.green(`成功将任务分解为 ${subTasks.length} 个子任务`));
// 更新父任务,添加子任务
parentTask.subTasks = subTasks;
// 保存更新后的任务文件
await fs.writeJSON(path.resolve(tasksPath), tasksData, { spaces: 2 });
console.log(chalk.green('已将子任务保存到任务文件'));
return subTasks;
}
catch (error) {
const err = error;
console.error(chalk.red(`分解任务失败: ${err.message}`));
throw err;
}
}
//# sourceMappingURL=breakup_task.js.map