/** * 任务处理模块 * * 负责处理单个任务,将任务描述发送给Cursor执行代码开发 */ import { info, error } from './logger.js'; /** * 处理任务 * * 这个函数将任务描述格式化后返回,供Cursor通过MCP协议接收并执行 * * @param {Object} task - 任务对象 * @param {number} task.task_id - 任务ID * @param {string} task.task_name - 任务名称 * @param {string} task.task_description - 任务描述(markdown格式) * @returns {Promise} 处理结果 */ export async function processTask(task) { info(`[Task Processor] Processing task ${task.task_id}: ${task.task_name}`); const startTime = Date.now(); try { // 构建任务执行消息 // 这个消息将通过MCP协议返回给Cursor,Cursor会解析并执行 const taskMessage = { type: 'development_task', task_id: task.task_id, task_name: task.task_name, description: task.task_description, timestamp: new Date().toISOString(), }; // 格式化任务描述,确保是有效的markdown const formattedDescription = formatTaskDescription(task); info(`[Task Processor] Task ${task.task_id} description formatted successfully (${formattedDescription.length} characters)`); // 返回任务信息,供Cursor处理 // Cursor会接收到这个信息,并根据描述执行代码开发 const result = { success: true, message: `Task ${task.task_id} prepared for execution`, task_id: task.task_id, task_name: task.task_name, formatted_description: formattedDescription, // 这些字段将在任务完成后更新到数据库 code_name: null, code_path: null, execution_instructions: ` 请根据以下任务描述进行代码开发: ## 任务信息 - 任务ID: ${task.task_id} - 任务名称: ${task.task_name} ## 任务描述 ${formattedDescription} ## 执行要求 1. 仔细阅读任务描述,理解需求 2. 根据描述开发相应的代码 3. 确保代码符合项目规范 4. 完成后,请提供生成的代码文件名和路径信息 `, }; const duration = Date.now() - startTime; info(`[Task Processor] Task ${task.task_id} processed successfully in ${duration}ms`); return result; } catch (err) { const duration = Date.now() - startTime; error(`[Task Processor] Task ${task.task_id} processing failed after ${duration}ms: ${err.message}`); return { success: false, message: `Failed to process task: ${err.message}`, error: err.stack, }; } } /** * 格式化任务描述 * * @param {Object} task - 任务对象 * @returns {string} 格式化后的任务描述 */ function formatTaskDescription(task) { let description = task.task_description || ''; // 确保描述是有效的markdown格式 // 如果描述不是以markdown格式开头,添加一些基本格式 if (!description.trim().startsWith('#')) { description = `# ${task.task_name}\n\n${description}`; } return description; } /** * 验证任务描述格式 * * @param {string} description - 任务描述 * @returns {boolean} 是否为有效的markdown格式 */ export function validateTaskDescription(description) { if (!description || typeof description !== 'string') { return false; } // 基本验证:检查是否包含一些内容 if (description.trim().length === 0) { return false; } return true; } /** * 提取任务中的关键信息 * * @param {Object} task - 任务对象 * @returns {Object} 提取的关键信息 */ export function extractTaskInfo(task) { const description = task.task_description || ''; // 尝试提取代码文件名和路径(如果任务描述中包含) const codeNameMatch = description.match(/代码文件名[::]\s*([^\n]+)/i); const codePathMatch = description.match(/代码路径[::]\s*([^\n]+)/i); return { code_name: codeNameMatch ? codeNameMatch[1].trim() : null, code_path: codePathMatch ? codePathMatch[1].trim() : null, }; }