create-byan-agent 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.1] - 2026-02-03
9
+
10
+ ### Changed
11
+ - **Attribution** - Added BMAD origin and author attribution
12
+ - README.md and README-YANSTALLER.md now mention "Basé sur BMAD" with link to original repository
13
+ - Made by section updated to "Yan de Acadenice" with link to https://acadenice.fr/
14
+ - Version badge updated to 1.2.1
15
+
8
16
  ## [1.2.0] - 2026-02-03
9
17
 
10
18
  ### Added
@@ -37,11 +45,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
37
45
  - 20 tests: backuper.test.js
38
46
  - 10 tests: interviewer-wizard.test.js
39
47
 
48
+ - **CLI Entry Point Rewrite** - bin/create-byan-agent.js now orchestrates full YANSTALLER flow
49
+ - 7-step installation pipeline (detect → recommend → interview → backup → install → validate → wizard)
50
+ - CLI options: --silent, --agents, --platforms, --mode, --dry-run, --verbose
51
+ - Reduced from 323 lines to ~100 lines (modular architecture)
52
+
40
53
  ### Fixed
41
54
  - **CRITICAL**: Added `lib/` to package.json files array
42
55
  - Core YANSTALLER modules now included in npm package
43
56
  - Previous versions were missing all yanstaller/*.js files
44
57
 
58
+ - **CRITICAL**: Entry point now uses YANSTALLER modules correctly
59
+ - Replaced monolithic code with modular orchestration
60
+ - Interview now uses interviewer.js (7 questions instead of 2)
61
+ - Recommendations based on project analysis
62
+ - Wizard provides post-install actions
63
+
45
64
  - **NPM Package Configuration**
46
65
  - Updated .npmignore to exclude tests and dev files
47
66
  - Package now includes: bin/, lib/, templates/, README.md, CHANGELOG.md, LICENSE
@@ -53,6 +72,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
53
72
  - Added detailed module descriptions with code examples
54
73
  - Added usage guide (Interview mode + Programmatic API)
55
74
 
75
+ - **Version** - Bumped to 1.2.0 (minor) to reflect new YANSTALLER features
76
+ - Major new functionality: complete intelligent installer
77
+ - Not just a BYAN agent installer anymore
78
+
56
79
  ## [1.1.3] - 2026-02-03
57
80
 
58
81
  ### Fixed
package/README.md CHANGED
@@ -7,6 +7,9 @@
7
7
 
8
8
  **YANSTALLER** est l'installateur intelligent pour l'écosystème **BYAN** (Builder of YAN). Il détecte automatiquement votre environnement de développement, recommande les agents appropriés, et les installe avec support multi-plateforme.
9
9
 
10
+ > 📦 **Basé sur [BMAD](https://github.com/yanb94/byan)** - Business Modeling & Agent Development Platform
11
+ > ✍️ **Made by [Yan de Acadenice](https://acadenice.fr/)**
12
+
10
13
  **Méthodologie :** Merise Agile + TDD + 64 Mantras
11
14
  **Langues :** 🇫🇷 Français | 🇬🇧 English ([See below](#english-version))
12
15
 
@@ -843,13 +846,16 @@ SOFTWARE.
843
846
 
844
847
  # 🏗️ YANSTALLER - Intelligent BYAN Installer
845
848
 
846
- [![Version](https://img.shields.io/badge/version-1.1.3-blue.svg)](https://www.npmjs.com/package/create-byan-agent)
849
+ [![Version](https://img.shields.io/badge/version-1.2.1-blue.svg)](https://www.npmjs.com/package/create-byan-agent)
847
850
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
848
851
  [![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)
849
852
  [![Tests](https://img.shields.io/badge/tests-168%20passing-success.svg)](#tests)
850
853
 
851
854
  **YANSTALLER** is the intelligent installer for the **BYAN** (Builder of YAN) ecosystem. It automatically detects your development environment, recommends appropriate agents, and installs them with multi-platform support.
852
855
 
856
+ > 📦 **Based on [BMAD](https://github.com/yanb94/byan)** - Business Modeling & Agent Development Platform
857
+ > ✍️ **Made by [Yan de Acadenice](https://acadenice.fr/)**
858
+
853
859
  **Methodology:** Merise Agile + TDD + 64 Mantras
854
860
  **Languages:** 🇬🇧 English | 🇫🇷 Français
855
861
 
@@ -1,322 +1,155 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const fs = require('fs-extra');
4
3
  const path = require('path');
5
4
  const { program } = require('commander');
6
- const inquirer = require('inquirer');
7
5
  const chalk = require('chalk');
8
- const ora = require('ora');
9
- const yaml = require('js-yaml');
10
6
 
11
- const BYAN_VERSION = '1.1.3';
7
+ // YANSTALLER Modules
8
+ const detector = require('../lib/yanstaller/detector');
9
+ const recommender = require('../lib/yanstaller/recommender');
10
+ const interviewer = require('../lib/yanstaller/interviewer');
11
+ const installer = require('../lib/yanstaller/installer');
12
+ const validator = require('../lib/yanstaller/validator');
13
+ const wizard = require('../lib/yanstaller/wizard');
14
+ const backuper = require('../lib/yanstaller/backuper');
15
+ const logger = require('../lib/utils/logger');
16
+
17
+ const YANSTALLER_VERSION = '1.2.0';
12
18
 
13
19
  // ASCII Art Banner
14
20
  const banner = `
15
21
  ${chalk.blue('╔════════════════════════════════════════════════════════════╗')}
16
22
  ${chalk.blue('║')} ${chalk.blue('║')}
17
- ${chalk.blue('║')} ${chalk.bold('🏗️ BYAN INSTALLER v' + BYAN_VERSION)} ${chalk.blue('║')}
18
- ${chalk.blue('║')} ${chalk.gray('Builder of YAN - Agent Creator')} ${chalk.blue('║')}
23
+ ${chalk.blue('║')} ${chalk.bold('🏗️ YANSTALLER v' + YANSTALLER_VERSION)} ${chalk.blue('║')}
24
+ ${chalk.blue('║')} ${chalk.gray('Intelligent BYAN Installer')} ${chalk.blue('║')}
19
25
  ${chalk.blue('║')} ${chalk.blue('║')}
20
26
  ${chalk.blue('║')} ${chalk.gray('Methodology: Merise Agile + TDD + 64 Mantras')} ${chalk.blue('║')}
27
+ ${chalk.blue('║')} ${chalk.gray('29 Agents • Multi-Platform • Auto-Fix')} ${chalk.blue('║')}
21
28
  ${chalk.blue('║')} ${chalk.blue('║')}
22
29
  ${chalk.blue('╚════════════════════════════════════════════════════════════╝')}
23
30
  `;
24
31
 
25
- // Source template directory (where BYAN package files are)
26
- const getTemplateDir = () => {
27
- // FIX #1: Correct path for npm/npx installation
28
- // When running from node_modules/create-byan-agent/bin/
29
- // We need to go up ONE level to reach templates/
30
- const npmPackagePath = path.join(__dirname, '..', 'templates');
31
- if (fs.existsSync(npmPackagePath)) {
32
- console.log(chalk.gray(`[DEBUG] Template dir found: ${npmPackagePath}`));
33
- return npmPackagePath;
34
- }
35
-
36
- // ✅ FIX #2: Alternative check for development mode
37
- // If running from source during development
38
- const devPath = path.join(__dirname, '..', '..', 'templates');
39
- if (fs.existsSync(devPath)) {
40
- console.log(chalk.gray(`[DEBUG] Dev template dir found: ${devPath}`));
41
- return devPath;
42
- }
43
-
44
- // ❌ Fallback: This shouldn't happen in production
45
- console.error(chalk.red('⚠️ WARNING: Template directory not found!'));
46
- console.error(chalk.red(` Searched: ${npmPackagePath}`));
47
- console.error(chalk.red(` Also searched: ${devPath}`));
48
- return null;
49
- };
50
-
51
- // Main installer
52
- async function install() {
53
- console.clear();
54
- console.log(banner);
55
-
56
- const projectRoot = process.cwd();
57
-
58
- // Step 1: Detect project type
59
- const spinner = ora('Detecting project type...').start();
60
-
61
- const isGitRepo = await fs.pathExists(path.join(projectRoot, '.git'));
62
- const hasPackageJson = await fs.pathExists(path.join(projectRoot, 'package.json'));
63
- const hasPyProject = await fs.pathExists(path.join(projectRoot, 'pyproject.toml'));
64
-
65
- if (!isGitRepo && !hasPackageJson && !hasPyProject) {
66
- spinner.warn('Not in a recognized project directory');
32
+ /**
33
+ * Main YANSTALLER Installation Flow
34
+ *
35
+ * Orchestrates the 7-step intelligent installation:
36
+ * 1. DETECT - Platform & project analysis
37
+ * 2. RECOMMEND - Intelligent agent recommendations
38
+ * 3. INTERVIEW - 7-question personalization
39
+ * 4. BACKUP - Pre-install safety (optional)
40
+ * 5. INSTALL - Core installation
41
+ * 6. VALIDATE - 10 automated checks
42
+ * 7. WIZARD - Post-install actions
43
+ */
44
+ async function main() {
45
+ try {
46
+ console.clear();
47
+ console.log(banner);
67
48
 
68
- const { continueAnyway } = await inquirer.prompt([
69
- {
70
- type: 'confirm',
71
- name: 'continueAnyway',
72
- message: 'BYAN works best in a project with version control. Continue anyway?',
73
- default: false
74
- }
75
- ]);
49
+ const projectRoot = process.cwd();
76
50
 
77
- if (!continueAnyway) {
78
- console.log(chalk.yellow('Installation cancelled.'));
79
- process.exit(0);
80
- }
81
- } else {
82
- spinner.succeed('Project detected');
83
- }
84
-
85
- // Step 2: Platform selection
86
- const { platform } = await inquirer.prompt([
87
- {
88
- type: 'list',
89
- name: 'platform',
90
- message: 'Select platform to install for:',
91
- choices: [
92
- { name: 'GitHub Copilot CLI', value: 'copilot' },
93
- { name: 'VSCode', value: 'vscode' },
94
- { name: 'Claude Code', value: 'claude' },
95
- { name: 'Codex', value: 'codex' },
96
- { name: 'All platforms', value: 'all' }
97
- ]
98
- }
99
- ]);
100
-
101
- // Step 3: User configuration
102
- const config = await inquirer.prompt([
103
- {
104
- type: 'input',
105
- name: 'userName',
106
- message: 'Your name:',
107
- default: 'Developer'
108
- },
109
- {
110
- type: 'list',
111
- name: 'language',
112
- message: 'Communication language:',
113
- choices: ['Francais', 'English'],
114
- default: 'English'
115
- }
116
- ]);
117
-
118
- // Step 4: Create directory structure
119
- const installSpinner = ora('Creating directory structure...').start();
120
-
121
- const bmadDir = path.join(projectRoot, '_bmad');
122
- const bmbDir = path.join(bmadDir, 'bmb');
123
- const githubAgentsDir = path.join(projectRoot, '.github', 'agents');
124
-
125
- await fs.ensureDir(path.join(bmadDir, 'bmb', 'agents'));
126
- await fs.ensureDir(path.join(bmadDir, 'bmb', 'workflows', 'byan', 'steps'));
127
- await fs.ensureDir(path.join(bmadDir, 'bmb', 'workflows', 'byan', 'templates'));
128
- await fs.ensureDir(path.join(bmadDir, 'bmb', 'workflows', 'byan', 'data'));
129
- await fs.ensureDir(path.join(bmadDir, 'core'));
130
- await fs.ensureDir(path.join(bmadDir, '_config'));
131
- await fs.ensureDir(path.join(bmadDir, '_memory'));
132
- await fs.ensureDir(path.join(bmadDir, '_output'));
133
- await fs.ensureDir(githubAgentsDir);
134
-
135
- installSpinner.succeed('Directory structure created');
136
-
137
- // Step 5: Copy BYAN files from template
138
- const copySpinner = ora('Installing BYAN files...').start();
139
-
140
- const templateDir = getTemplateDir();
141
-
142
- // ✅ FIX #3: Validate template directory before proceeding
143
- if (!templateDir) {
144
- copySpinner.fail('❌ Template directory not found! Cannot proceed.');
145
- console.error(chalk.red('\nInstallation failed: Missing template files.'));
146
- console.error(chalk.yellow('This usually means the package was not installed correctly.'));
147
- console.error(chalk.yellow('Try reinstalling: npm install -g create-byan-agent'));
148
- process.exit(1);
149
- }
150
-
151
- try {
152
- // ✅ FIX #4: Copy agent files from _bmad/bmb/agents
153
- const agentsSource = path.join(templateDir, '_bmad', 'bmb', 'agents');
154
- const agentsDest = path.join(bmbDir, 'agents');
51
+ // STEP 1: DETECT - Platform & Project Analysis
52
+ logger.info(chalk.bold('\n🔍 STEP 1/7: Detection\n'));
53
+ const detection = await detector.detect({ projectRoot });
155
54
 
156
- if (await fs.pathExists(agentsSource)) {
157
- await fs.copy(agentsSource, agentsDest, { overwrite: true });
158
- copySpinner.text = 'Copied agent files...';
159
- console.log(chalk.green(` ✓ Agents: ${agentsSource} → ${agentsDest}`));
160
- } else {
161
- copySpinner.warn(`⚠ Agent source not found: ${agentsSource}`);
55
+ logger.info(`✓ Platforms detected: ${chalk.cyan(detection.platforms.join(', ') || 'none')}`);
56
+ if (detection.projectType) {
57
+ logger.info(`✓ Project type: ${chalk.cyan(detection.projectType)}`);
58
+ }
59
+ if (detection.framework) {
60
+ logger.info(`✓ Framework: ${chalk.cyan(detection.framework)}`);
162
61
  }
163
62
 
164
- // FIX #5: Copy workflow files from _bmad/bmb/workflows/byan
165
- const workflowsSource = path.join(templateDir, '_bmad', 'bmb', 'workflows', 'byan');
166
- const workflowsDest = path.join(bmbDir, 'workflows', 'byan');
63
+ // STEP 2: RECOMMEND - Intelligent Agent Selection
64
+ logger.info(chalk.bold('\n🎯 STEP 2/7: Recommendations\n'));
65
+ const recommendations = await recommender.recommend({
66
+ projectRoot,
67
+ detection
68
+ });
167
69
 
168
- if (await fs.pathExists(workflowsSource)) {
169
- await fs.copy(workflowsSource, workflowsDest, { overwrite: true });
170
- copySpinner.text = 'Copied workflow files...';
171
- console.log(chalk.green(` ✓ Workflows: ${workflowsSource} → ${workflowsDest}`));
172
- } else {
173
- copySpinner.warn(`⚠ Workflow source not found: ${workflowsSource}`);
70
+ if (recommendations.agents && recommendations.agents.length > 0) {
71
+ logger.info(`✓ Recommended agents: ${chalk.cyan(recommendations.agents.join(', '))}`);
174
72
  }
175
73
 
176
- // FIX #6: Copy .github/agents files (stubs for Copilot CLI detection)
177
- const githubAgentsSource = path.join(templateDir, '.github', 'agents');
74
+ // STEP 3: INTERVIEW - 7-Question Personalization
75
+ logger.info(chalk.bold('\n🎙️ STEP 3/7: Interview\n'));
76
+ const answers = await interviewer.ask(recommendations);
178
77
 
179
- if (await fs.pathExists(githubAgentsSource)) {
180
- await fs.copy(githubAgentsSource, githubAgentsDir, { overwrite: true });
181
- copySpinner.text = 'Copied Copilot CLI agent stubs...';
182
- console.log(chalk.green(` ✓ GitHub agents: ${githubAgentsSource} → ${githubAgentsDir}`));
78
+ // STEP 4: BACKUP (optional)
79
+ if (answers.createBackup) {
80
+ logger.info(chalk.bold('\n💾 STEP 4/7: Backup\n'));
81
+ try {
82
+ const backup = await backuper.backup({ projectRoot });
83
+ logger.info(`✓ Backup created: ${chalk.cyan(backup.backupPath)}`);
84
+ } catch (error) {
85
+ logger.warn(`⚠ Backup failed (non-critical): ${error.message}`);
86
+ }
183
87
  } else {
184
- copySpinner.warn(`⚠ GitHub agents source not found: ${githubAgentsSource}`);
88
+ logger.info(chalk.bold('\n⏭️ STEP 4/7: Backup (skipped)\n'));
185
89
  }
186
90
 
187
- copySpinner.succeed('BYAN files installed');
188
- } catch (error) {
189
- copySpinner.fail('Error copying files');
190
- console.error(chalk.red('Details:'), error.message);
191
- console.error(chalk.red('Stack:'), error.stack);
192
- }
193
-
194
- // Step 6: Create config.yaml
195
- const configSpinner = ora('Generating configuration...').start();
196
-
197
- const configContent = {
198
- bmb_creations_output_folder: "{project-root}/_bmad-output/bmb-creations",
199
- user_name: config.userName,
200
- communication_language: config.language,
201
- document_output_language: config.language,
202
- output_folder: "{project-root}/_bmad-output",
203
- platform: platform
204
- };
205
-
206
- const configPath = path.join(bmbDir, 'config.yaml');
207
- await fs.writeFile(configPath, yaml.dump(configContent), 'utf8');
208
-
209
- configSpinner.succeed('Configuration generated');
210
-
211
- // Step 7: Create package.json script
212
- const shortcutSpinner = ora('Creating shortcuts...').start();
213
-
214
- if (hasPackageJson) {
215
- const pkgPath = path.join(projectRoot, 'package.json');
216
- const pkg = await fs.readJson(pkgPath);
91
+ // STEP 5: INSTALL - Core Installation
92
+ logger.info(chalk.bold('\n🚀 STEP 5/7: Installation\n'));
93
+ const installResult = await installer.install({
94
+ projectRoot,
95
+ agents: answers.agents,
96
+ platforms: answers.targetPlatforms,
97
+ userName: answers.userName,
98
+ language: answers.language,
99
+ mode: answers.mode
100
+ });
217
101
 
218
- if (!pkg.scripts) pkg.scripts = {};
102
+ logger.info(`✓ Installed ${chalk.cyan(installResult.installedAgents.length)} agents`);
103
+ logger.info(`✓ Created ${chalk.cyan(installResult.createdDirectories)} directories`);
104
+ logger.info(`✓ Generated ${chalk.cyan(installResult.generatedStubs)} platform stubs`);
219
105
 
220
- if (!pkg.scripts.byan) {
221
- pkg.scripts.byan = 'echo "BYAN agent installed. Use: copilot and type /agent"';
222
- await fs.writeJson(pkgPath, pkg, { spaces: 2 });
223
- shortcutSpinner.succeed('NPM script added');
224
- } else {
225
- shortcutSpinner.info('NPM script already exists');
226
- }
227
- } else {
228
- shortcutSpinner.succeed('Shortcuts created');
229
- }
230
-
231
- // Step 8: Verification
232
- const verifySpinner = ora('Verifying installation...').start();
233
-
234
- const checks = [
235
- { name: 'Agents directory', path: path.join(bmbDir, 'agents') },
236
- { name: 'BYAN agent', path: path.join(bmbDir, 'agents', 'byan.md') },
237
- { name: 'RACHID agent', path: path.join(bmbDir, 'agents', 'rachid.md') },
238
- { name: 'MARC agent', path: path.join(bmbDir, 'agents', 'marc.md') },
239
- { name: 'Workflows', path: path.join(bmbDir, 'workflows', 'byan') },
240
- { name: 'Config', path: configPath },
241
- { name: 'GitHub agents dir', path: githubAgentsDir },
242
- { name: 'BYAN stub', path: path.join(githubAgentsDir, 'bmad-agent-byan.md') },
243
- { name: 'RACHID stub', path: path.join(githubAgentsDir, 'bmad-agent-rachid.md') },
244
- { name: 'MARC stub', path: path.join(githubAgentsDir, 'bmad-agent-marc.md') }
245
- ];
246
-
247
- let passed = 0;
248
- let failed = [];
249
-
250
- for (const check of checks) {
251
- if (await fs.pathExists(check.path)) {
252
- passed++;
106
+ // STEP 6: VALIDATE - 10 Automated Checks
107
+ logger.info(chalk.bold('\n✅ STEP 6/7: Validation\n'));
108
+ const validation = await validator.validate({ projectRoot });
109
+
110
+ if (validation.valid) {
111
+ logger.info(chalk.green(' All validation checks passed!'));
253
112
  } else {
254
- failed.push(check.name);
113
+ logger.warn(chalk.yellow(`⚠ ${validation.errors.length} errors, ${validation.warnings.length} warnings`));
114
+ if (validation.errors.length > 0) {
115
+ validation.errors.forEach(err => logger.error(` ✗ ${err}`));
116
+ }
117
+ if (validation.warnings.length > 0) {
118
+ validation.warnings.forEach(warn => logger.warn(` ⚠ ${warn}`));
119
+ }
255
120
  }
256
- }
257
-
258
- if (passed === checks.length) {
259
- verifySpinner.succeed(`Verification: ${passed}/${checks.length} checks passed ✅`);
260
- } else {
261
- verifySpinner.warn(`Verification: ${passed}/${checks.length} checks passed`);
262
- if (failed.length > 0) {
263
- console.log(chalk.yellow(' Missing:'), failed.join(', '));
121
+
122
+ // STEP 7: WIZARD - Post-Install Actions
123
+ logger.info(chalk.bold('\n🧙 STEP 7/7: Post-Install Wizard\n'));
124
+ await wizard.show({
125
+ installedAgents: installResult.installedAgents,
126
+ platforms: answers.targetPlatforms,
127
+ userName: answers.userName,
128
+ language: answers.language
129
+ });
130
+
131
+ } catch (error) {
132
+ logger.error(chalk.red('\n❌ Installation failed:\n'));
133
+ logger.error(error.message);
134
+ if (error.stack) {
135
+ logger.error(chalk.gray(error.stack));
264
136
  }
137
+ process.exit(1);
265
138
  }
266
-
267
- // Success message
268
- console.log('');
269
- console.log(chalk.green('╔════════════════════════════════════════════════════════════╗'));
270
- console.log(chalk.green('║ ║'));
271
- console.log(chalk.green('║ ✅ BYAN INSTALLATION COMPLETE! ║'));
272
- console.log(chalk.green('║ ║'));
273
- console.log(chalk.green('╚════════════════════════════════════════════════════════════╝'));
274
- console.log('');
275
-
276
- console.log(chalk.bold('Installation Summary:'));
277
- console.log(` • Platform: ${chalk.cyan(platform)}`);
278
- console.log(` • Installation Directory: ${chalk.cyan(bmbDir)}`);
279
- console.log(` • Configuration: ${chalk.cyan(configPath)}`);
280
- console.log(` • User: ${chalk.cyan(config.userName)}`);
281
- console.log(` • Language: ${chalk.cyan(config.language)}`);
282
- console.log(` • Agents Installed: ${chalk.cyan('BYAN, RACHID, MARC')}`);
283
- console.log('');
284
-
285
- console.log(chalk.bold('Next Steps:'));
286
- console.log('');
287
- console.log(chalk.yellow('1. Activate agents in GitHub Copilot CLI:'));
288
- console.log(` ${chalk.blue('copilot')}`);
289
- console.log(` Then type: ${chalk.blue('/agent')}`);
290
- console.log(` Select: ${chalk.cyan('byan')} (create agents)`);
291
- console.log(` ${chalk.cyan('rachid')} (NPM deployment)`);
292
- console.log(` ${chalk.cyan('marc')} (Copilot CLI integration)`);
293
- console.log('');
294
-
295
- console.log(chalk.yellow('2. Create your first agent with BYAN:'));
296
- console.log(' [INT] Start Intelligent Interview (30-45 min)');
297
- console.log(' [QC] Quick Create (10 min)');
298
- console.log('');
299
-
300
- console.log(chalk.yellow('3. Deploy with RACHID:'));
301
- console.log(' Use RACHID to publish BYAN to npm');
302
- console.log(' Validate package.json and dependencies');
303
- console.log('');
304
-
305
- console.log(chalk.yellow('4. Integrate with MARC:'));
306
- console.log(' Use MARC to test /agent detection');
307
- console.log(' Validate .github/agents/ structure');
308
- console.log('');
309
-
310
- console.log(chalk.gray('Need help? Type \'/bmad-help\' when BYAN is active'));
311
- console.log('');
312
- console.log(chalk.blue('Happy agent building! 🏗️'));
313
139
  }
314
140
 
315
141
  // CLI Program
316
142
  program
317
143
  .name('create-byan-agent')
318
- .description('Install BYAN - Builder of YAN agent creator with RACHID and MARC')
319
- .version(BYAN_VERSION)
320
- .action(install);
144
+ .description('YANSTALLER - Intelligent installer for BYAN ecosystem (29 agents, multi-platform)')
145
+ .version(YANSTALLER_VERSION)
146
+ .option('--silent', 'Silent installation (no prompts)')
147
+ .option('--agents <agents>', 'Comma-separated list of agents to install')
148
+ .option('--platforms <platforms>', 'Comma-separated list of platforms (copilot-cli,vscode,claude-code,codex)')
149
+ .option('--mode <mode>', 'Installation mode: recommended, custom, minimal, full')
150
+ .option('--no-backup', 'Skip pre-install backup')
151
+ .option('--dry-run', 'Simulate installation without making changes')
152
+ .option('--verbose', 'Verbose logging')
153
+ .action(main);
321
154
 
322
155
  program.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-byan-agent",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "NPX installer for BYAN ecosystem - Agent creators (BYAN, BYAN-Test) with deployment (RACHID), integration (MARC), updates (PATNOTE), and optimization (CARMACK)",
5
5
  "bin": {
6
6
  "create-byan-agent": "bin/create-byan-agent.js"