@@ -21,6 +21,7 @@ const {
2121 copyAgents,
2222 copyCommands,
2323 copyWorkflows,
24+ copyVersionFile,
2425 createClaudeJson,
2526 createStarterPRD,
2627 createGitignore,
@@ -88,10 +89,78 @@ ${colors.green}Report issues:${colors.reset}
8889 ` ) ;
8990}
9091
92+ /**
93+ * Check system dependencies
94+ * @returns {object } - Status of required dependencies
95+ */
96+ function checkDependencies ( ) {
97+ const checks = {
98+ node : { installed : false , version : null , min : '18.0.0' } ,
99+ git : { installed : false , version : null } ,
100+ } ;
101+
102+ // Check Node.js
103+ try {
104+ const nodeVersion = process . version . slice ( 1 ) ; // Remove 'v' prefix
105+ checks . node . installed = true ;
106+ checks . node . version = nodeVersion ;
107+
108+ const [ major ] = nodeVersion . split ( '.' ) . map ( Number ) ;
109+ const [ minMajor ] = checks . node . min . split ( '.' ) . map ( Number ) ;
110+ checks . node . meetsRequirement = major >= minMajor ;
111+ } catch ( error ) {
112+ checks . node . installed = false ;
113+ }
114+
115+ // Check Git
116+ try {
117+ const gitVersion = execSync ( 'git --version' , { encoding : 'utf-8' } ) . trim ( ) ;
118+ checks . git . installed = true ;
119+ checks . git . version = gitVersion . replace ( 'git version ' , '' ) ;
120+ checks . git . meetsRequirement = true ;
121+ } catch ( error ) {
122+ checks . git . installed = false ;
123+ }
124+
125+ return checks ;
126+ }
127+
91128async function cmdInit ( options = { } ) {
92129 printBanner ( ) ;
93130 console . log ( `${ colors . bright } Initializing New AgentCodeX Project${ colors . reset } \n` ) ;
94131
132+ // Check dependencies first
133+ console . log ( `${ colors . cyan } Checking system dependencies...${ colors . reset } \n` ) ;
134+ const deps = checkDependencies ( ) ;
135+
136+ let hasErrors = false ;
137+
138+ // Node.js check
139+ if ( ! deps . node . installed ) {
140+ console . error ( `${ colors . red } ✗ Node.js not found${ colors . reset } ` ) ;
141+ hasErrors = true ;
142+ } else if ( ! deps . node . meetsRequirement ) {
143+ console . error ( `${ colors . red } ✗ Node.js ${ deps . node . version } (requires ${ deps . node . min } +)${ colors . reset } ` ) ;
144+ hasErrors = true ;
145+ } else {
146+ console . log ( `${ colors . green } ✓ Node.js ${ deps . node . version } ${ colors . reset } ` ) ;
147+ }
148+
149+ // Git check
150+ if ( ! deps . git . installed ) {
151+ console . error ( `${ colors . red } ✗ Git not found${ colors . reset } ` ) ;
152+ hasErrors = true ;
153+ } else {
154+ console . log ( `${ colors . green } ✓ Git ${ deps . git . version } ${ colors . reset } ` ) ;
155+ }
156+
157+ if ( hasErrors ) {
158+ console . error ( `\n${ colors . red } Missing required dependencies. Please install and try again.${ colors . reset } \n` ) ;
159+ process . exit ( 1 ) ;
160+ }
161+
162+ console . log ( '' ) ;
163+
95164 // Use CLI flags if provided, otherwise prompt
96165 let PROJECT_NAME , DEV_URL , PROD_URL ;
97166
@@ -122,10 +191,14 @@ async function cmdInit(options = {}) {
122191
123192 console . log ( `\n${ colors . cyan } Creating project structure...${ colors . reset } \n` ) ;
124193
194+ // Track project root for cleanup on failure
195+ let projectRoot = null ;
196+
125197 try {
126198 // Initialize project structure (use current directory)
127199 const baseDir = options . baseDir || process . cwd ( ) ;
128200 const projectInfo = initializeProject ( PROJECT_NAME , DEV_URL , PROD_URL , baseDir ) ;
201+ projectRoot = projectInfo . projectRoot ;
129202
130203 // Get source directories
131204 const frameworkRoot = path . join ( __dirname , '..' ) ;
@@ -146,6 +219,10 @@ async function cmdInit(options = {}) {
146219 const targetWorkflowsDir = path . join ( projectInfo . projectRoot , '.github' , 'workflows' ) ;
147220 copyWorkflows ( sourceWorkflowsDir , targetWorkflowsDir ) ;
148221
222+ // Copy framework version file (CRITICAL for sync system)
223+ console . log ( `${ colors . cyan } Copying framework version file...${ colors . reset } ` ) ;
224+ copyVersionFile ( frameworkRoot , projectInfo . projectRoot ) ;
225+
149226 // Create claude.json (REQUIRED for slash commands to work)
150227 console . log ( `${ colors . cyan } Creating .claude/claude.json...${ colors . reset } ` ) ;
151228 createClaudeJson ( path . join ( projectInfo . projectRoot , '.claude' ) ) ;
@@ -245,7 +322,7 @@ async function cmdInit(options = {}) {
245322 console . log ( `${ colors . bright } What MAESTRO Will Do:${ colors . reset } ` ) ;
246323 console . log ( ` • Read your PRD from docs/ideation/` ) ;
247324 console . log ( ` • Ask for OpenAI API key and any other credentials` ) ;
248- console . log ( ` • Orchestrate 21 specialized agents` ) ;
325+ console . log ( ` • Orchestrate 23 specialized agents` ) ;
249326 console . log ( ` • Build complete application (~45 minutes)` ) ;
250327 console . log ( ` • Deploy to ${ DEV_URL } \n` ) ;
251328
@@ -256,6 +333,35 @@ async function cmdInit(options = {}) {
256333
257334 } catch ( error ) {
258335 console . error ( `\n${ colors . red } ✗ Error creating project: ${ error . message } ${ colors . reset } \n` ) ;
336+
337+ // Cleanup: Remove partially created project directory
338+ if ( projectRoot && fs . existsSync ( projectRoot ) ) {
339+ console . log ( `${ colors . yellow } Cleaning up partial project...${ colors . reset } ` ) ;
340+ try {
341+ fs . rmSync ( projectRoot , { recursive : true , force : true } ) ;
342+ console . log ( `${ colors . green } ✓ Cleanup complete${ colors . reset } \n` ) ;
343+ } catch ( cleanupError ) {
344+ console . error ( `${ colors . red } ⚠ Failed to clean up ${ projectRoot } ${ colors . reset } ` ) ;
345+ console . error ( `${ colors . yellow } Please remove it manually.${ colors . reset } \n` ) ;
346+ }
347+ }
348+
349+ // Provide helpful error context
350+ console . log ( `${ colors . bright } Troubleshooting:${ colors . reset } ` ) ;
351+ if ( error . message . includes ( 'EEXIST' ) ) {
352+ console . log ( ` • Project "${ PROJECT_NAME } " already exists` ) ;
353+ console . log ( ` • Choose a different name or remove existing project\n` ) ;
354+ } else if ( error . message . includes ( 'EACCES' ) || error . message . includes ( 'EPERM' ) ) {
355+ console . log ( ` • Permission denied - check directory write permissions` ) ;
356+ console . log ( ` • Try running with appropriate permissions\n` ) ;
357+ } else if ( error . message . includes ( 'not found' ) ) {
358+ console . log ( ` • Framework files missing - reinstall AgentCodeX` ) ;
359+ console . log ( ` • Run: npm install -g agentcodex\n` ) ;
360+ } else {
361+ console . log ( ` • Check framework installation: npm list -g agentcodex` ) ;
362+ console . log ( ` • Report issue: https://github.com/ScaledMinds/AgentCodeX/issues\n` ) ;
363+ }
364+
259365 process . exit ( 1 ) ;
260366 }
261367}
0 commit comments