diff --git a/tools/cli/installers/lib/ide/_base-ide.js b/tools/cli/installers/lib/ide/_base-ide.js index 1950f32d7..acf24d956 100644 --- a/tools/cli/installers/lib/ide/_base-ide.js +++ b/tools/cli/installers/lib/ide/_base-ide.js @@ -152,8 +152,7 @@ class BaseIdeSetup { const agentName = path.basename(filePath, '.md'); return { name: this.formatTitle(agentName), - description: agentName.includes('saga') ? 'Strategic Analyst' : - agentName.includes('freya') ? 'Designer' : '', + description: agentName.includes('saga') ? 'Strategic Analyst' : agentName.includes('freya') ? 'Designer' : '', icon: '📋', slug: agentName.split('-')[0], }; @@ -176,8 +175,7 @@ class BaseIdeSetup { * @returns {string} Launcher content */ formatAgentLauncher(agentName, agentPath) { - const relativePath = path.relative(process.cwd(), agentPath) - .replaceAll('\\', '/'); // Convert Windows paths to forward slashes + const relativePath = path.relative(process.cwd(), agentPath).replaceAll('\\', '/'); // Convert Windows paths to forward slashes return ` diff --git a/tools/cli/installers/lib/ide/cline.js b/tools/cli/installers/lib/ide/cline.js index 96fa98a13..cf311bb7d 100644 --- a/tools/cli/installers/lib/ide/cline.js +++ b/tools/cli/installers/lib/ide/cline.js @@ -67,9 +67,7 @@ class ClineSetup extends BaseIdeSetup { const contentWithoutFrontmatter = content.replace(frontmatterRegex, ''); // Add title header for Cline - const title = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const title = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; return `# ${title} diff --git a/tools/cli/installers/lib/ide/crush.js b/tools/cli/installers/lib/ide/crush.js index ffe8280ea..f15301e55 100644 --- a/tools/cli/installers/lib/ide/crush.js +++ b/tools/cli/installers/lib/ide/crush.js @@ -27,9 +27,7 @@ class CrushSetup extends BaseIdeSetup { } processContent(content, metadata = {}) { - const title = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const title = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; return `# ${title} diff --git a/tools/cli/installers/lib/ide/cursor.js b/tools/cli/installers/lib/ide/cursor.js index 2475e8b8a..d0e189438 100644 --- a/tools/cli/installers/lib/ide/cursor.js +++ b/tools/cli/installers/lib/ide/cursor.js @@ -65,9 +65,9 @@ class CursorSetup extends BaseIdeSetup { const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/; const contentWithoutFrontmatter = content.replace(frontmatterRegex, ''); - const description = metadata.name ? - `WDS Agent: ${metadata.name} - ${metadata.description}` : - `WDS Agent: ${metadata.description || 'Agent'}`; + const description = metadata.name + ? `WDS Agent: ${metadata.name} - ${metadata.description}` + : `WDS Agent: ${metadata.description || 'Agent'}`; // Create Cursor MDC metadata header const mdcHeader = `--- diff --git a/tools/cli/installers/lib/ide/gemini.js b/tools/cli/installers/lib/ide/gemini.js index cf9c978b8..c2f0ec725 100644 --- a/tools/cli/installers/lib/ide/gemini.js +++ b/tools/cli/installers/lib/ide/gemini.js @@ -28,9 +28,7 @@ class GeminiSetup extends BaseIdeSetup { } processContent(content, metadata = {}) { - const description = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const description = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; // Escape content for TOML multi-line string const escapedContent = content.replaceAll('"""', String.raw`\"\"\"`); diff --git a/tools/cli/installers/lib/ide/iflow.js b/tools/cli/installers/lib/ide/iflow.js index de42b2de4..d54f15018 100644 --- a/tools/cli/installers/lib/ide/iflow.js +++ b/tools/cli/installers/lib/ide/iflow.js @@ -27,9 +27,7 @@ class IFlowSetup extends BaseIdeSetup { } processContent(content, metadata = {}) { - const title = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const title = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; return `# ${title} diff --git a/tools/cli/installers/lib/ide/kilo.js b/tools/cli/installers/lib/ide/kilo.js index 9fef11da7..a45c5a7ef 100644 --- a/tools/cli/installers/lib/ide/kilo.js +++ b/tools/cli/installers/lib/ide/kilo.js @@ -29,7 +29,10 @@ class KiloSetup extends BaseIdeSetup { modesContent += `\n roleDefinition: "${agent.metadata.description || 'WDS Agent'}"`; modesContent += `\n customInstructions: |`; // Indent launcher content for YAML block - const indented = launcher.split('\n').map(line => ` ${line}`).join('\n'); + const indented = launcher + .split('\n') + .map((line) => ` ${line}`) + .join('\n'); modesContent += `\n${indented}\n`; } diff --git a/tools/cli/installers/lib/ide/kiro-cli.js b/tools/cli/installers/lib/ide/kiro-cli.js index c89815b15..61486de34 100644 --- a/tools/cli/installers/lib/ide/kiro-cli.js +++ b/tools/cli/installers/lib/ide/kiro-cli.js @@ -27,10 +27,7 @@ class KiroCliSetup extends BaseIdeSetup { description: agent.metadata.description || 'WDS Agent', prompt: `./${agent.slug}-prompt.md`, }; - await this.writeFile( - path.join(targetDir, `${agent.slug}.json`), - JSON.stringify(jsonConfig, null, 2) - ); + await this.writeFile(path.join(targetDir, `${agent.slug}.json`), JSON.stringify(jsonConfig, null, 2)); // Write markdown prompt await this.writeFile(path.join(targetDir, `${agent.slug}-prompt.md`), launcher); diff --git a/tools/cli/installers/lib/ide/manager.js b/tools/cli/installers/lib/ide/manager.js index 2b068ab36..5560bb6ba 100644 --- a/tools/cli/installers/lib/ide/manager.js +++ b/tools/cli/installers/lib/ide/manager.js @@ -37,11 +37,7 @@ class IdeManager { // Get all JS files in the IDE directory const files = fs.readdirSync(ideDir).filter((file) => { // Skip base class, manager, and utility files (starting with _) - return ( - file.endsWith('.js') && - !file.startsWith('_') && - file !== 'manager.js' - ); + return file.endsWith('.js') && !file.startsWith('_') && file !== 'manager.js'; }); // Sort alphabetically for consistent ordering diff --git a/tools/cli/installers/lib/ide/qwen.js b/tools/cli/installers/lib/ide/qwen.js index 6ef487c50..2a214e88b 100644 --- a/tools/cli/installers/lib/ide/qwen.js +++ b/tools/cli/installers/lib/ide/qwen.js @@ -28,9 +28,7 @@ class QwenSetup extends BaseIdeSetup { } processContent(content, metadata = {}) { - const description = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const description = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; // Escape content for TOML multi-line string const escapedContent = content.replaceAll('"""', String.raw`\"\"\"`); diff --git a/tools/cli/installers/lib/ide/trae.js b/tools/cli/installers/lib/ide/trae.js index d92f92e44..f078257d1 100644 --- a/tools/cli/installers/lib/ide/trae.js +++ b/tools/cli/installers/lib/ide/trae.js @@ -27,9 +27,7 @@ class TraeSetup extends BaseIdeSetup { } processContent(content, metadata = {}) { - const title = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const title = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; return `# ${title} diff --git a/tools/cli/installers/lib/ide/windsurf.js b/tools/cli/installers/lib/ide/windsurf.js index 94d8f1300..0f4d641de 100644 --- a/tools/cli/installers/lib/ide/windsurf.js +++ b/tools/cli/installers/lib/ide/windsurf.js @@ -61,9 +61,7 @@ class WindsurfSetup extends BaseIdeSetup { * @returns {string} Processed content with Windsurf YAML frontmatter */ processContent(content, metadata = {}) { - const description = metadata.name ? - `${metadata.name} - ${metadata.description}` : - metadata.description || 'WDS Agent'; + const description = metadata.name ? `${metadata.name} - ${metadata.description}` : metadata.description || 'WDS Agent'; return `--- description: ${description} diff --git a/tools/cli/lib/installer.js b/tools/cli/lib/installer.js index b7d20c898..76efd6043 100644 --- a/tools/cli/lib/installer.js +++ b/tools/cli/lib/installer.js @@ -49,17 +49,17 @@ class Installer { } // Handle update vs fresh for existing target path - if (action === 'update' && await fs.pathExists(wdsDir)) { + if (action === 'update' && (await fs.pathExists(wdsDir))) { // Preserve config.yaml during update const configPath = path.join(wdsDir, 'config.yaml'); - if (!config._savedConfigYaml && await fs.pathExists(configPath)) { + if (!config._savedConfigYaml && (await fs.pathExists(configPath))) { config._savedConfigYaml = await fs.readFile(configPath, 'utf8'); } const removeSpinner = ora('Updating WDS files...').start(); await fs.remove(wdsDir); removeSpinner.succeed('Old files cleared'); - } else if (action === 'fresh' && await fs.pathExists(wdsDir)) { + } else if (action === 'fresh' && (await fs.pathExists(wdsDir))) { const removeSpinner = ora('Removing existing WDS installation...').start(); await fs.remove(wdsDir); removeSpinner.succeed('Old installation removed'); @@ -71,7 +71,9 @@ class Installer { const savedData = yaml.load(config._savedConfigYaml); if (!config.ides && savedData.ides) config.ides = savedData.ides; if (!config.root_folder && savedData.output_folder) config.root_folder = savedData.output_folder; - } catch { /* ignore parse errors, defaults will apply */ } + } catch { + /* ignore parse errors, defaults will apply */ + } } // Ensure parent directory exists (for _bmad/wds/) @@ -116,18 +118,13 @@ class Installer { const { IdeManager } = require('../installers/lib/ide/manager'); const ideManager = new IdeManager(); - const results = await ideManager.setup( - projectDir, - wdsDir, - config.ides, - { - logger: { - log: (msg) => {}, // Suppress detailed logs during spinner - warn: (msg) => console.log(msg), - }, - wdsFolderName: wdsFolder, - } - ); + const results = await ideManager.setup(projectDir, wdsDir, config.ides, { + logger: { + log: (msg) => {}, // Suppress detailed logs during spinner + warn: (msg) => console.log(msg), + }, + wdsFolderName: wdsFolder, + }); const successCount = results.success.length; const failedCount = results.failed.length; @@ -285,12 +282,7 @@ class Installer { const docsPath = path.join(projectDir, rootFolder); // Simplified 4-phase structure - const folders = [ - 'A-Product-Brief', - 'B-Trigger-Map', - 'C-UX-Scenarios', - 'D-Design-System', - ]; + const folders = ['A-Product-Brief', 'B-Trigger-Map', 'C-UX-Scenarios', 'D-Design-System']; for (const folder of folders) { const folderPath = path.join(docsPath, folder); @@ -313,7 +305,6 @@ class Installer { await fs.ensureDir(progressPath); await fs.ensureDir(path.join(progressPath, 'agent-experiences')); } - } module.exports = { Installer };