diff --git a/cli/src/commands/init.ts b/cli/src/commands/init.ts index e3bae33..3f9be0c 100755 --- a/cli/src/commands/init.ts +++ b/cli/src/commands/init.ts @@ -101,17 +101,18 @@ async function templateInstall( targetDir: string, aiType: AIType, spinner: ReturnType, - isGlobal = false + isGlobal = false, + force = false ): Promise { spinner.text = isGlobal ? 'Generating skill files globally...' : 'Generating skill files from templates...'; if (aiType === 'all') { - return generateAllPlatformFiles(targetDir, isGlobal); + return generateAllPlatformFiles(targetDir, isGlobal, force); } - return generatePlatformFiles(targetDir, aiType, isGlobal); + return generatePlatformFiles(targetDir, aiType, isGlobal, force); } export async function initCommand(options: InitOptions): Promise { @@ -178,7 +179,7 @@ export async function initCommand(options: InitOptions): Promise { } } else { // Use new template-based generation (default) - copiedFolders = await templateInstall(cwd, aiType, spinner, isGlobal); + copiedFolders = await templateInstall(cwd, aiType, spinner, isGlobal, options.force); installMethod = 'template'; } diff --git a/cli/src/utils/template.ts b/cli/src/utils/template.ts index 3223a6e..d671a4d 100755 --- a/cli/src/utils/template.ts +++ b/cli/src/utils/template.ts @@ -187,7 +187,8 @@ async function copyDataAndScripts(targetSkillDir: string): Promise { export async function generatePlatformFiles( targetDir: string, aiType: string, - isGlobal = false + isGlobal = false, + force = false ): Promise { const config = await loadPlatformConfig(aiType); const createdFolders: string[] = []; @@ -208,6 +209,13 @@ export async function generatePlatformFiles( // Render and write skill file (pass isGlobal to adjust paths) const skillContent = await renderSkillFile(config, isGlobal); const skillFilePath = join(skillDir, config.folderStructure.filename); + + const fileAlreadyExists = await exists(skillFilePath); + if (fileAlreadyExists && !force) { + console.log(` Skipped (already exists): ${skillFilePath} — use --force to overwrite`); + return []; + } + await writeFile(skillFilePath, skillContent, 'utf-8'); createdFolders.push(config.folderStructure.root); @@ -220,12 +228,12 @@ export async function generatePlatformFiles( /** * Generate files for all AI types */ -export async function generateAllPlatformFiles(targetDir: string, isGlobal = false): Promise { +export async function generateAllPlatformFiles(targetDir: string, isGlobal = false, force = false): Promise { const allFolders = new Set(); for (const aiType of Object.keys(AI_TO_PLATFORM)) { try { - const folders = await generatePlatformFiles(targetDir, aiType, isGlobal); + const folders = await generatePlatformFiles(targetDir, aiType, isGlobal, force); folders.forEach(f => allFolders.add(f)); } catch { // Skip if generation fails for a platform