| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /**
- * 任务处理模块
- *
- * 负责处理单个任务,将任务描述发送给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<Object>} 处理结果
- */
- 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,
- };
- }
|