UNPKG

conductor-tasks

Version:

Task Manager for AI Development

91 lines 4.52 kB
import { z } from "zod"; import * as fs from 'fs'; import * as path from 'path'; import logger from "../core/logger.js"; import { IDEType } from '../core/types.js'; import { IDERulesManager } from '../ide/ideRulesManager.js'; export const InitializeProjectSchema = { projectName: z.string().describe("Name of the project"), projectDescription: z.string().describe("Description of the project"), filePath: z.string().describe("Full path where to save TASKS.md (or main project file if evolving)") }; export async function initializeProjectHandler(taskManager, params) { try { const { projectName, projectDescription, filePath: correctAbsoluteTasksMdPath } = params; logger.info(`Initializing project: ${projectName}. Target tasks file: ${correctAbsoluteTasksMdPath}`); const resolvedTargetFilePath = path.resolve(correctAbsoluteTasksMdPath); logger.info(`Resolved target file path for TASKS.md: ${resolvedTargetFilePath}`); if (fs.existsSync(resolvedTargetFilePath)) { logger.warn(`Task file already exists at ${resolvedTargetFilePath}. Project initialization aborted.`); return { content: [ { type: "text", text: `Error: A task file (or main project file) already exists at ${resolvedTargetFilePath}. Cannot fully re-initialize project at this location if it implies overwriting.` } ], isError: true }; } const result = await taskManager.mcpInitializeTasks(projectName, projectDescription, resolvedTargetFilePath); logger.info(`Core task system initialized successfully for ${projectName}.`); try { const projectRootForIdeRules = path.dirname(resolvedTargetFilePath); const envIdeType = process.env.IDE; let ideType = IDEType.CURSOR; if (envIdeType) { const normalizedType = envIdeType.toLowerCase(); const validIdeType = Object.values(IDEType).find(type => type.toLowerCase() === normalizedType); if (validIdeType) ideType = validIdeType; } logger.info(`Using IDE type ${ideType} for rule generation during project initialization.`); logger.info(`Project root for rule generation: ${projectRootForIdeRules}`); const ideRulesManager = IDERulesManager.getInstance(); ideRulesManager.setWorkspaceRoot(projectRootForIdeRules); ideRulesManager.setIDEType(ideType); logger.info('Calling forceResetRules() to generate IDE-specific rules for the project.'); await ideRulesManager.forceResetRules(); logger.info(`Generated IDE-specific rule files for ${ideType} for project ${projectName}.`); } catch (error) { logger.error('Failed to generate IDE rule files during project initialization', { error: error.stack || error.message || String(error) }); } const resultText = `Project "${projectName}" initialized successfully. Task management file is at ${taskManager.getTasksFilePath()}. IDE rules generated.`; const suggested_actions = [ { tool_name: "list-tasks", reason: "View the initial set of tasks created for the project.", user_facing_suggestion: `List tasks for project '${projectName}'?` }, { tool_name: "create-task", parameters: { title: "Define initial milestones", description: "Outline the first set of major milestones for the project." }, reason: "Start populating the project with high-level tasks.", user_facing_suggestion: `Create a task to define initial milestones for '${projectName}'?` } ]; return { content: [ { type: "text", text: resultText, }, ], suggested_actions, }; } catch (error) { logger.error('Error initializing project:', { error }); return { content: [ { type: "text", text: `Error initializing project: ${error.message || String(error)}` } ], isError: true }; } } //# sourceMappingURL=initializeProjectHandler.js.map