bmad-plus 0.4.2 โ†’ 0.4.4

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,50 @@ All notable changes to BMAD+ will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.4] โ€” 2026-05-17
9
+
10
+ ### ๐Ÿ”ง Encoding Fix + i18n Complete + Tests
11
+
12
+ ### Fixed
13
+ - **UTF-8 encoding** โ€” Fixed double-encoding corruption in `i18n.js` caused by PowerShell `Set-Content`
14
+ - **Credits URL** โ€” Now points to public repo `github.com/lrochetta/BMAD-PLUS`
15
+ - **npm re-publish** โ€” v0.4.3 had corrupted Unicode on npm; this release replaces it
16
+
17
+ ### Added
18
+ - **Complete i18n** โ€” CLI guide strings (commands, examples) now translated in all 10 languages (no more EN fallbacks)
19
+ - **Unit tests** โ€” 53+ tests covering i18n, CLI modules, package.json integrity, module.yaml, source files, version consistency
20
+ - **`npm test`** โ€” Jest test script added to package.json
21
+
22
+ ---
23
+
24
+ ## [0.4.3] โ€” 2026-05-17
25
+
26
+ ### ๐Ÿ”ง CLI Commands + Security Hardening + UX Enhancements
27
+
28
+ ### Added
29
+ - **`bmad-plus update`** โ€” Update agents & skills while preserving config, IDE configs, and output directories
30
+ - **`bmad-plus doctor`** โ€” Check installation integrity (version, agents, configs, pack health)
31
+ - **Internationalized `uninstall`** โ€” Uses i18n system from install manifest language (10 languages)
32
+ - **Credits at startup** โ€” Author attribution displayed immediately when installer launches
33
+ - **Enriched post-install guide** โ€” CLI commands section + pack-specific usage examples in selected language
34
+ - **i18n strings for update/uninstall/doctor** โ€” EN, FR, ES, DE, PT-BR, RU, ZH, HE, JA, IT
35
+ - **CLI guide strings** โ€” `guide_cli_title`, `guide_examples_title`, pack examples for SEO/Backup/Animated/OSINT
36
+
37
+ ### Fixed
38
+ - **Security** โ€” Added `mcp-server/.env` to `.gitignore`, created `.env.example` template
39
+ - **Manifest version** โ€” Now reads from `package.json` dynamically (was hardcoded `0.4.0`)
40
+ - **`module.yaml` sync** โ€” Added missing SEO, Backup, Animated pack definitions
41
+ - **`package.json` cleanup** โ€” Removed `oveanet-pack` from `files[]` (already excluded by `.npmignore`)
42
+ - **CI/CD reliability** โ€” Removed `continue-on-error` from npm publish step
43
+ - **Comment accuracy** โ€” Updated "9 languages" โ†’ "10 languages" in install.js header
44
+ - **Installer title** โ€” Now reads version from `package.json` dynamically
45
+
46
+ ### Changed
47
+ - **Dependencies** โ€” Updated `@clack/prompts` 1.1.0 โ†’ 1.4.0, `fs-extra` 11.3.4 โ†’ 11.3.5
48
+ - **npm scripts** โ€” Added `update:bmad` and `doctor:bmad` scripts
49
+
50
+ ---
51
+
8
52
  ## [0.4.2] โ€” 2026-03-19
9
53
 
10
54
  ### ๐Ÿ“ฆ Public Packs โ€” SEO/Backup/Animated now in npm
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ๐Ÿš€ BMAD+ โ€” Augmented AI-Driven Development Framework
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](CHANGELOG.md)
3
+ [![Version](https://img.shields.io/badge/version-0.4.4-blue.svg)](CHANGELOG.md)
4
4
  [![Based on](https://img.shields.io/badge/based%20on-BMAD--METHOD%20v6.2.0-green.svg)](https://github.com/bmad-code-org/BMAD-METHOD)
5
5
  [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
6
6
 
@@ -425,6 +425,8 @@ BMAD+/
425
425
  | **0.4.0** | 2026-03-19 | ๐Ÿข SEO Engine v2.1 โ€” SKILL.md orchestrator, Google APIs, HTML reports, competitor benchmark, 50 tests, GSC + GA4 extensions |
426
426
  | **0.4.1** | 2026-03-19 |
427
427
  | **0.4.2** | 2026-03-19 | Public packs SEO/Backup/Animated agents now in npm package | ๐ŸŒ 10-language CLI, CI/CD pipeline, `.npmignore`, `/deploy` workflow, security hardening |
428
+ | **0.4.3** | 2026-05-17 | ๐Ÿ”ง update + doctor commands, i18n complete, credits fix |
429
+ | **0.4.4** | 2026-05-17 | ๐Ÿ”ง `update` + `doctor` commands, i18n uninstall, enriched guide with CLI commands & examples, credits at startup, security hardening |
428
430
 
429
431
  See [CHANGELOG.md](CHANGELOG.md) for full details.
430
432
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-plus",
4
- "version": "0.4.2",
4
+ "version": "0.4.4",
5
5
  "description": "BMAD+ โ€” Augmented AI-Driven Development Framework with multi-role agents, autopilot, and parallel execution",
6
6
  "keywords": [
7
7
  "bmad",
@@ -27,19 +27,21 @@
27
27
  "tools",
28
28
  "src/bmad-plus",
29
29
  "osint-agent-package",
30
- "oveanet-pack",
31
30
  "readme-international",
32
31
  "CHANGELOG.md"
33
32
  ],
34
33
  "scripts": {
35
34
  "install:bmad": "node tools/cli/bmad-plus-cli.js install",
35
+ "update:bmad": "node tools/cli/bmad-plus-cli.js update",
36
+ "doctor:bmad": "node tools/cli/bmad-plus-cli.js doctor",
37
+ "test": "jest",
36
38
  "uninstall:bmad": "node tools/cli/bmad-plus-cli.js uninstall"
37
39
  },
38
40
  "dependencies": {
39
- "@clack/prompts": "^1.0.0",
41
+ "@clack/prompts": "^1.4.0",
40
42
  "chalk": "^4.1.2",
41
43
  "commander": "^14.0.0",
42
- "fs-extra": "^11.3.0",
44
+ "fs-extra": "^11.3.5",
43
45
  "js-yaml": "^4.1.0",
44
46
  "picocolors": "^1.1.1"
45
47
  },
@@ -48,5 +50,8 @@
48
50
  },
49
51
  "publishConfig": {
50
52
  "access": "public"
53
+ },
54
+ "devDependencies": {
55
+ "jest": "^30.4.2"
51
56
  }
52
57
  }
@@ -1,6 +1,6 @@
1
1
  # ๐Ÿš€ BMAD+ โ€” Erweitertes KI-gestรผtztes Entwicklungs-Framework
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](../CHANGELOG.md)
3
+ [![Version](https://img.shields.io/badge/version-0.4.4-blue.svg)](../CHANGELOG.md)
4
4
  [![Based on](https://img.shields.io/badge/based%20on-BMAD--METHOD%20v6.2.0-green.svg)](https://github.com/bmad-code-org/BMAD-METHOD)
5
5
  [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](../LICENSE)
6
6
 
@@ -1,6 +1,6 @@
1
1
  # ๐Ÿš€ BMAD+ โ€” Framework de Desarrollo Impulsado por IA Aumentada
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](../CHANGELOG.md)
3
+ [![Version](https://img.shields.io/badge/version-0.4.4-blue.svg)](../CHANGELOG.md)
4
4
  [![Based on](https://img.shields.io/badge/based%20on-BMAD--METHOD%20v6.2.0-green.svg)](https://github.com/bmad-code-org/BMAD-METHOD)
5
5
  [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](../LICENSE)
6
6
 
@@ -1,6 +1,6 @@
1
1
  # ๐Ÿš€ BMAD+ โ€” Augmented AI-Driven Development Framework
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](../CHANGELOG.md)
3
+ [![Version](https://img.shields.io/badge/version-0.4.4-blue.svg)](../CHANGELOG.md)
4
4
  [![Based on](https://img.shields.io/badge/based%20on-BMAD--METHOD%20v6.2.0-green.svg)](https://github.com/bmad-code-org/BMAD-METHOD)
5
5
  [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](../LICENSE)
6
6
 
@@ -74,6 +74,35 @@ packs:
74
74
  - bmad-audit-scan
75
75
  - bmad-audit-report
76
76
 
77
+ seo:
78
+ name: "SEO Audit 360"
79
+ icon: "๐Ÿ”"
80
+ description: "3 agents (Scout, Chief, Judge) + 6-phase audit + PageSpeed loop"
81
+ required: false
82
+ packDir: pack-seo
83
+ agents:
84
+ - seo-scout
85
+ - seo-chief
86
+ - seo-judge
87
+
88
+ backup:
89
+ name: "Universal Backup"
90
+ icon: "๐Ÿ—‚๏ธ"
91
+ description: "Timestamped ZIP backup with smart exclusions"
92
+ required: false
93
+ packDir: pack-backup
94
+ agents:
95
+ - backup-agent
96
+
97
+ animated:
98
+ name: "Animated Website"
99
+ icon: "๐ŸŽฌ"
100
+ description: "Luxury scroll-driven website from video"
101
+ required: false
102
+ packDir: pack-animated
103
+ agents:
104
+ - animated-website-agent
105
+
77
106
  install_packs:
78
107
  prompt:
79
108
  - "Quels packs additionnels souhaites-tu installer ?"
@@ -2,6 +2,7 @@
2
2
 
3
3
  /**
4
4
  * BMAD+ CLI โ€” Main entry point
5
+ * Commands: install, uninstall, update, doctor
5
6
  */
6
7
 
7
8
  const { program } = require('commander');
@@ -22,6 +23,8 @@ if (process.stdin.isTTY) {
22
23
  // Register commands
23
24
  const install = require('./commands/install');
24
25
  const uninstall = require('./commands/uninstall');
26
+ const update = require('./commands/update');
27
+ const doctor = require('./commands/doctor');
25
28
 
26
29
  program
27
30
  .version(packageJson.version)
@@ -43,6 +46,26 @@ const uninstallCmd = program
43
46
  .description('Remove BMAD+ from your project');
44
47
  uninstallCmd.action(uninstall.action);
45
48
 
49
+ // Update command
50
+ const updateCmd = program
51
+ .command('update')
52
+ .description('Update BMAD+ agents and skills (preserves config)');
53
+
54
+ for (const option of update.options || []) {
55
+ updateCmd.option(...option);
56
+ }
57
+ updateCmd.action(update.action);
58
+
59
+ // Doctor command
60
+ const doctorCmd = program
61
+ .command('doctor')
62
+ .description('Check BMAD+ installation integrity');
63
+
64
+ for (const option of doctor.options || []) {
65
+ doctorCmd.option(...option);
66
+ }
67
+ doctorCmd.action(doctor.action);
68
+
46
69
  program.parse(process.argv);
47
70
 
48
71
  if (process.argv.slice(2).length === 0) {
@@ -0,0 +1,175 @@
1
+ /**
2
+ * BMAD+ Doctor Command
3
+ * Checks installation integrity and reports issues
4
+ *
5
+ * Author: Laurent Rochetta
6
+ */
7
+
8
+ const path = require('node:path');
9
+ const fs = require('node:fs');
10
+ const clack = require('@clack/prompts');
11
+ const pc = require('picocolors');
12
+ const { t } = require('../i18n');
13
+
14
+ module.exports = {
15
+ command: 'doctor',
16
+ description: 'Check BMAD+ installation integrity',
17
+ options: [
18
+ ['-d, --directory <path>', 'Project directory (default: current directory)'],
19
+ ],
20
+ action: async (options) => {
21
+ const projectDir = path.resolve(options.directory || process.cwd());
22
+ const packageJson = require('../../../package.json');
23
+
24
+ clack.intro(pc.bgBlue(pc.white(` BMAD+ Doctor v${packageJson.version} `)));
25
+
26
+ let checks = 0;
27
+ let passed = 0;
28
+ let warnings = 0;
29
+ let errors = 0;
30
+
31
+ // โ”€โ”€ Check 1: Installation manifest โ”€โ”€
32
+ checks++;
33
+ const manifestPath = path.join(projectDir, '_bmad', '.bmad-plus-install.json');
34
+ if (!fs.existsSync(manifestPath)) {
35
+ clack.log.error('โŒ BMAD+ is not installed in this directory');
36
+ clack.outro(pc.red('Run `npx bmad-plus install` first.'));
37
+ return;
38
+ }
39
+
40
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
41
+ clack.log.success(`โœ… Manifest found โ€” v${manifest.version}`);
42
+ passed++;
43
+
44
+ // โ”€โ”€ Check 2: Version comparison โ”€โ”€
45
+ checks++;
46
+ if (manifest.version === packageJson.version) {
47
+ clack.log.success(`โœ… Version up to date (v${manifest.version})`);
48
+ passed++;
49
+ } else {
50
+ clack.log.warn(`โš ๏ธ Version mismatch: installed v${manifest.version} โ†’ latest v${packageJson.version}`);
51
+ clack.log.info(' Run `npx bmad-plus update` to upgrade');
52
+ warnings++;
53
+ }
54
+
55
+ // โ”€โ”€ Check 3: Agent files โ”€โ”€
56
+ checks++;
57
+ const agentsDir = path.join(projectDir, '.agents', 'skills');
58
+ if (fs.existsSync(agentsDir)) {
59
+ const agentDirs = fs.readdirSync(agentsDir, { withFileTypes: true })
60
+ .filter(d => d.isDirectory())
61
+ .map(d => d.name);
62
+ clack.log.success(`โœ… ${agentDirs.length} agent/skill directories found`);
63
+ passed++;
64
+
65
+ // Check each expected agent from manifest packs
66
+ const expectedAgents = {
67
+ core: ['agent-strategist', 'agent-architect-dev', 'agent-quality', 'agent-orchestrator'],
68
+ osint: ['agent-shadow'],
69
+ maker: ['agent-maker'],
70
+ seo: ['pack-seo'],
71
+ backup: ['pack-backup'],
72
+ animated: ['pack-animated'],
73
+ };
74
+
75
+ for (const pack of (manifest.packs || ['core'])) {
76
+ const expected = expectedAgents[pack] || [];
77
+ for (const agent of expected) {
78
+ checks++;
79
+ const agentPath = path.join(agentsDir, agent);
80
+ if (fs.existsSync(agentPath)) {
81
+ passed++;
82
+ } else {
83
+ clack.log.warn(`โš ๏ธ Missing agent: ${agent} (pack: ${pack})`);
84
+ warnings++;
85
+ }
86
+ }
87
+ }
88
+ } else {
89
+ clack.log.error('โŒ No .agents/skills/ directory found');
90
+ errors++;
91
+ }
92
+
93
+ // โ”€โ”€ Check 4: Config files โ”€โ”€
94
+ checks++;
95
+ const configPath = path.join(projectDir, '_bmad', 'config.yaml');
96
+ if (fs.existsSync(configPath)) {
97
+ clack.log.success('โœ… config.yaml present');
98
+ passed++;
99
+ } else {
100
+ clack.log.error('โŒ config.yaml missing');
101
+ errors++;
102
+ }
103
+
104
+ // โ”€โ”€ Check 5: Module config โ”€โ”€
105
+ checks++;
106
+ const moduleYaml = path.join(projectDir, '_bmad', 'module.yaml');
107
+ if (fs.existsSync(moduleYaml)) {
108
+ clack.log.success('โœ… module.yaml present');
109
+ passed++;
110
+ } else {
111
+ clack.log.warn('โš ๏ธ module.yaml missing');
112
+ warnings++;
113
+ }
114
+
115
+ // โ”€โ”€ Check 6: IDE configs โ”€โ”€
116
+ checks++;
117
+ const ideFiles = ['CLAUDE.md', 'GEMINI.md', 'AGENTS.md'].filter(f =>
118
+ fs.existsSync(path.join(projectDir, f))
119
+ );
120
+ if (ideFiles.length > 0) {
121
+ clack.log.success(`โœ… ${ideFiles.length} IDE config(s): ${ideFiles.join(', ')}`);
122
+ passed++;
123
+ } else {
124
+ clack.log.warn('โš ๏ธ No IDE config files found');
125
+ warnings++;
126
+ }
127
+
128
+ // โ”€โ”€ Check 7: Output directories โ”€โ”€
129
+ checks++;
130
+ const outputDir = path.join(projectDir, '_bmad-output');
131
+ if (fs.existsSync(outputDir)) {
132
+ clack.log.success('โœ… _bmad-output/ directory exists');
133
+ passed++;
134
+ } else {
135
+ clack.log.warn('โš ๏ธ _bmad-output/ not found');
136
+ warnings++;
137
+ }
138
+
139
+ // โ”€โ”€ Check 8: Skills integrity (SKILL.md exists in pack dirs) โ”€โ”€
140
+ if (manifest.packs && manifest.packs.includes('seo')) {
141
+ checks++;
142
+ const seoSkill = path.join(agentsDir, 'pack-seo', 'SKILL.md');
143
+ if (fs.existsSync(seoSkill)) {
144
+ clack.log.success('โœ… SEO Engine SKILL.md present');
145
+ passed++;
146
+ } else {
147
+ clack.log.error('โŒ SEO Engine SKILL.md missing โ€” /seo audit will not work');
148
+ errors++;
149
+ }
150
+ }
151
+
152
+ // โ”€โ”€ Summary โ”€โ”€
153
+ const summaryColor = errors > 0 ? pc.red : warnings > 0 ? pc.yellow : pc.green;
154
+ const summaryIcon = errors > 0 ? 'โŒ' : warnings > 0 ? 'โš ๏ธ' : 'โœ…';
155
+
156
+ clack.note([
157
+ `${summaryIcon} ${passed}/${checks} checks passed`,
158
+ errors > 0 ? `โŒ ${errors} error(s)` : null,
159
+ warnings > 0 ? `โš ๏ธ ${warnings} warning(s)` : null,
160
+ '',
161
+ `๐Ÿ“ฆ Version: v${manifest.version}`,
162
+ `๐Ÿ“… Installed: ${manifest.installed.split('T')[0]}`,
163
+ `๐Ÿ—ฃ๏ธ Language: ${manifest.language || 'N/A'}`,
164
+ `๐Ÿ“ฆ Packs: ${(manifest.packs || ['core']).join(', ')}`,
165
+ ].filter(Boolean).join('\n'), '๐Ÿฉบ BMAD+ Health Report');
166
+
167
+ clack.outro(summaryColor(
168
+ errors > 0
169
+ ? 'Issues found โ€” run `npx bmad-plus install` to fix'
170
+ : warnings > 0
171
+ ? 'Minor issues found โ€” consider running `npx bmad-plus update`'
172
+ : 'Everything looks great! ๐ŸŽ‰'
173
+ ));
174
+ },
175
+ };
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * BMAD+ Install Command
3
3
  * Installs agents, skills, and IDE configs into the current project
4
- * Supports 9 languages: EN, FR, ES, DE, PT-BR, RU, ZH, HE, JA
4
+ * Supports 10 languages: EN, FR, ES, DE, PT-BR, RU, ZH, HE, JA, IT
5
5
  *
6
6
  * Author: Laurent Rochetta
7
7
  */
@@ -118,7 +118,9 @@ module.exports = {
118
118
  const bmadSrc = path.join(__dirname, '..', '..', '..', 'src', 'bmad-plus');
119
119
 
120
120
  // โ”€โ”€ Step 0: Language Selection โ”€โ”€
121
- clack.intro(pc.bgCyan(pc.black(' BMAD+ Installer v0.4.2 ')));
121
+ const pkgJson = require('../../../package.json');
122
+ clack.intro(pc.bgCyan(pc.black(` BMAD+ Installer v${pkgJson.version} `)));
123
+ clack.log.info(pc.dim('โœจ Created by Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS'));
122
124
 
123
125
  let lang = 'en';
124
126
  if (!options.yes) {
@@ -373,8 +375,9 @@ module.exports = {
373
375
  fsExtra.ensureDirSync(path.join(projectDir, 'docs'));
374
376
 
375
377
  // โ”€โ”€ Step 8: Write install manifest โ”€โ”€
378
+ const pkgVersion = require('../../../package.json').version;
376
379
  const manifest = {
377
- version: '0.4.0',
380
+ version: pkgVersion,
378
381
  uiLanguage: lang,
379
382
  installed: new Date().toISOString(),
380
383
  packs: selectedPacks,
@@ -431,6 +434,40 @@ module.exports = {
431
434
  i.guide_or_auto,
432
435
  '',
433
436
  `${i.guide_output}: _bmad-output/discovery/ & _bmad-output/build/`,
437
+ '',
438
+ 'โ”€'.repeat(50),
439
+ '',
440
+ `๐Ÿ“ฆ ${i.guide_cli_title || 'CLI Commands'}:`,
441
+ ` npx bmad-plus install ${i.guide_cli_install || 'โ€” Install agents & skills'}`,
442
+ ` npx bmad-plus update ${i.guide_cli_update || 'โ€” Update agents (keeps config)'}`,
443
+ ` npx bmad-plus doctor ${i.guide_cli_doctor || 'โ€” Check installation health'}`,
444
+ ` npx bmad-plus uninstall ${i.guide_cli_uninstall || 'โ€” Remove BMAD+ from project'}`,
445
+ );
446
+
447
+ // Add pack-specific examples
448
+ const examples = [];
449
+ if (selectedPacks.includes('seo')) {
450
+ examples.push(` ${i.guide_example_seo || '๐Ÿ” SEO: "/seo audit https://example.com"'}`);
451
+ }
452
+ if (selectedPacks.includes('backup')) {
453
+ examples.push(` ${i.guide_example_backup || '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP timestamped'}`);
454
+ }
455
+ if (selectedPacks.includes('animated')) {
456
+ examples.push(` ${i.guide_example_animated || '๐ŸŽฌ Animated: "/animated build hero.mp4"'}`);
457
+ }
458
+ if (selectedPacks.includes('osint')) {
459
+ examples.push(` ${i.guide_example_osint || '๐Ÿ” OSINT: "Shadow, investigate John Doe"'}`);
460
+ }
461
+
462
+ if (examples.length > 0) {
463
+ agentGuide.push(
464
+ '',
465
+ `๐Ÿ’ก ${i.guide_examples_title || 'Quick Examples'}:`,
466
+ ...examples
467
+ );
468
+ }
469
+
470
+ agentGuide.push(
434
471
  '',
435
472
  '---',
436
473
  i.guide_credits
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * BMAD+ Uninstall Command
3
3
  * Removes BMAD+ agents, skills, and configs from the current project
4
+ * Internationalized โ€” uses i18n system
5
+ *
6
+ * Author: Laurent Rochetta
4
7
  */
5
8
 
6
9
  const path = require('node:path');
@@ -8,6 +11,7 @@ const fs = require('node:fs');
8
11
  const fsExtra = require('fs-extra');
9
12
  const clack = require('@clack/prompts');
10
13
  const pc = require('picocolors');
14
+ const { t, getLanguageOptions } = require('../i18n');
11
15
 
12
16
  module.exports = {
13
17
  command: 'uninstall',
@@ -26,45 +30,67 @@ module.exports = {
26
30
  }
27
31
 
28
32
  const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
29
- clack.log.info(`Found BMAD+ v${manifest.version} (installed ${manifest.installed})`);
33
+
34
+ // Use the language from install manifest, or ask
35
+ let lang = manifest.uiLanguage || 'en';
36
+ const i = t(lang);
37
+
38
+ clack.log.info(`BMAD+ v${manifest.version} (${i.installed_on || 'installed'} ${manifest.installed.split('T')[0]})`);
39
+ clack.log.info(`${i.selected_packs}: ${(manifest.packs || ['core']).join(', ')}`);
30
40
 
31
41
  const confirm = await clack.confirm({
32
- message: 'Supprimer BMAD+ de ce projet ?',
42
+ message: i.uninstall_confirm || 'Remove BMAD+ from this project?',
33
43
  });
34
44
 
35
45
  if (!confirm || clack.isCancel(confirm)) {
36
- clack.cancel('Cancelled.');
46
+ clack.cancel(i.cancelled);
37
47
  return;
38
48
  }
39
49
 
40
50
  const spinner = clack.spinner();
41
- spinner.start('Suppression...');
51
+ spinner.start(i.uninstall_removing || 'Removing...');
52
+
53
+ let removed = 0;
42
54
 
43
55
  // Remove .agents/skills/ (BMAD+ agents & skills)
44
56
  const agentsDir = path.join(projectDir, '.agents');
45
57
  if (fs.existsSync(agentsDir)) {
46
58
  fsExtra.removeSync(agentsDir);
59
+ removed++;
47
60
  }
48
61
 
49
62
  // Remove _bmad/ config
50
63
  const bmadDir = path.join(projectDir, '_bmad');
51
64
  if (fs.existsSync(bmadDir)) {
52
65
  fsExtra.removeSync(bmadDir);
66
+ removed++;
67
+ }
68
+
69
+ // Remove _bmad-output/ (only if empty)
70
+ const outputDir = path.join(projectDir, '_bmad-output');
71
+ if (fs.existsSync(outputDir)) {
72
+ const contents = fs.readdirSync(outputDir, { recursive: true }).filter(f => !f.startsWith('.'));
73
+ if (contents.length === 0) {
74
+ fsExtra.removeSync(outputDir);
75
+ removed++;
76
+ } else {
77
+ clack.log.info(i.uninstall_output_kept || '๐Ÿ“ _bmad-output/ kept (contains files)');
78
+ }
53
79
  }
54
80
 
55
- // Remove IDE configs
81
+ // Remove IDE configs (only BMAD+-generated ones)
56
82
  for (const configFile of ['CLAUDE.md', 'GEMINI.md', 'AGENTS.md', 'OPENCODE.md']) {
57
83
  const p = path.join(projectDir, configFile);
58
84
  if (fs.existsSync(p)) {
59
- // Only remove if it's a BMAD+ generated file
60
85
  const content = fs.readFileSync(p, 'utf8');
61
86
  if (content.includes('BMAD+')) {
62
87
  fs.unlinkSync(p);
88
+ removed++;
63
89
  }
64
90
  }
65
91
  }
66
92
 
67
- spinner.stop('โœ… BMAD+ supprimรฉ');
68
- clack.outro(pc.green('Done!'));
93
+ spinner.stop(i.uninstall_done ? i.uninstall_done(removed) : `โœ… BMAD+ removed (${removed} items)`);
94
+ clack.outro(pc.green(i.guide_ready ? '๐Ÿ‘‹ Done!' : 'Done!'));
69
95
  },
70
96
  };
@@ -0,0 +1,172 @@
1
+ /**
2
+ * BMAD+ Update Command
3
+ * Updates agents and skills while preserving user config
4
+ *
5
+ * Author: Laurent Rochetta
6
+ */
7
+
8
+ const path = require('node:path');
9
+ const fs = require('node:fs');
10
+ const fsExtra = require('fs-extra');
11
+ const clack = require('@clack/prompts');
12
+ const pc = require('picocolors');
13
+ const { t } = require('../i18n');
14
+
15
+ // Same pack definitions as install.js โ€” keep in sync
16
+ const PACKS = {
17
+ core: {
18
+ agents: ['agent-strategist', 'agent-architect-dev', 'agent-quality', 'agent-orchestrator'],
19
+ skills: ['bmad-plus-autopilot', 'bmad-plus-parallel', 'bmad-plus-sync'],
20
+ data: ['role-triggers.yaml'],
21
+ },
22
+ osint: {
23
+ agents: ['agent-shadow'],
24
+ skills: [],
25
+ externalPackage: 'osint-agent-package',
26
+ },
27
+ maker: {
28
+ agents: ['agent-maker'],
29
+ skills: [],
30
+ data: [],
31
+ },
32
+ seo: { agents: [], skills: [], packDir: 'pack-seo' },
33
+ backup: { agents: [], skills: [], packDir: 'pack-backup' },
34
+ animated: { agents: [], skills: [], packDir: 'pack-animated' },
35
+ };
36
+
37
+ module.exports = {
38
+ command: 'update',
39
+ description: 'Update BMAD+ agents and skills (preserves config)',
40
+ options: [
41
+ ['-d, --directory <path>', 'Project directory (default: current directory)'],
42
+ ],
43
+ action: async (options) => {
44
+ const projectDir = path.resolve(options.directory || process.cwd());
45
+ const bmadSrc = path.join(__dirname, '..', '..', '..', 'src', 'bmad-plus');
46
+ const packageJson = require('../../../package.json');
47
+
48
+ clack.intro(pc.bgMagenta(pc.white(` BMAD+ Updater v${packageJson.version} `)));
49
+
50
+ // Check if installed
51
+ const manifestPath = path.join(projectDir, '_bmad', '.bmad-plus-install.json');
52
+ if (!fs.existsSync(manifestPath)) {
53
+ clack.log.error('BMAD+ is not installed in this directory.');
54
+ clack.log.info('Run `npx bmad-plus install` first.');
55
+ clack.outro(pc.red('Update aborted.'));
56
+ return;
57
+ }
58
+
59
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
60
+ const lang = manifest.uiLanguage || 'en';
61
+ const i = t(lang);
62
+
63
+ clack.log.info(`๐Ÿ“ฆ Installed: v${manifest.version} โ†’ Available: v${packageJson.version}`);
64
+
65
+ if (manifest.version === packageJson.version) {
66
+ clack.log.success(i.update_current || 'โœ… Already up to date!');
67
+ clack.outro(pc.green('Nothing to update.'));
68
+ return;
69
+ }
70
+
71
+ const selectedPacks = manifest.packs || ['core'];
72
+ clack.log.info(`${i.selected_packs}: ${selectedPacks.join(', ')}`);
73
+
74
+ const confirm = await clack.confirm({
75
+ message: i.update_confirm || `Update from v${manifest.version} to v${packageJson.version}?`,
76
+ });
77
+
78
+ if (!confirm || clack.isCancel(confirm)) {
79
+ clack.cancel(i.cancelled);
80
+ return;
81
+ }
82
+
83
+ const spinner = clack.spinner();
84
+ spinner.start(i.update_updating || 'Updating agents and skills...');
85
+
86
+ const targetAgentsDir = path.join(projectDir, '.agents', 'skills');
87
+ const targetDataDir = path.join(projectDir, '.agents', 'data');
88
+
89
+ fsExtra.ensureDirSync(targetAgentsDir);
90
+ fsExtra.ensureDirSync(targetDataDir);
91
+
92
+ let updated = 0;
93
+
94
+ for (const packId of selectedPacks) {
95
+ const pack = PACKS[packId];
96
+ if (!pack) continue;
97
+
98
+ // Update agents
99
+ for (const agent of (pack.agents || [])) {
100
+ const src = path.join(bmadSrc, 'agents', agent);
101
+ const dest = path.join(targetAgentsDir, agent);
102
+ if (fs.existsSync(src)) {
103
+ fsExtra.copySync(src, dest, { overwrite: true });
104
+ updated++;
105
+ }
106
+ }
107
+
108
+ // Update skills
109
+ for (const skill of (pack.skills || [])) {
110
+ const src = path.join(bmadSrc, 'skills', skill);
111
+ const dest = path.join(targetAgentsDir, skill);
112
+ if (fs.existsSync(src)) {
113
+ fsExtra.copySync(src, dest, { overwrite: true });
114
+ updated++;
115
+ }
116
+ }
117
+
118
+ // Update data files
119
+ for (const dataFile of (pack.data || [])) {
120
+ const src = path.join(bmadSrc, 'data', dataFile);
121
+ const dest = path.join(targetDataDir, dataFile);
122
+ if (fs.existsSync(src)) {
123
+ fsExtra.copySync(src, dest, { overwrite: true });
124
+ updated++;
125
+ }
126
+ }
127
+
128
+ // Update external package (OSINT)
129
+ if (pack.externalPackage) {
130
+ const extSrc = path.join(__dirname, '..', '..', '..', pack.externalPackage, 'skills');
131
+ if (fs.existsSync(extSrc)) {
132
+ fsExtra.copySync(extSrc, targetAgentsDir, { overwrite: true });
133
+ updated++;
134
+ }
135
+ }
136
+
137
+ // Update pack directory (SEO, Backup, Animated)
138
+ if (pack.packDir) {
139
+ const packSrc = path.join(bmadSrc, 'agents', pack.packDir);
140
+ const packDest = path.join(targetAgentsDir, pack.packDir);
141
+ if (fs.existsSync(packSrc)) {
142
+ fsExtra.copySync(packSrc, packDest, { overwrite: true });
143
+ updated++;
144
+ }
145
+ }
146
+ }
147
+
148
+ // Update module config (always)
149
+ const moduleYaml = path.join(bmadSrc, 'module.yaml');
150
+ const targetBmadDir = path.join(projectDir, '_bmad');
151
+ if (fs.existsSync(moduleYaml)) {
152
+ fsExtra.copySync(moduleYaml, path.join(targetBmadDir, 'module.yaml'));
153
+ updated++;
154
+ }
155
+
156
+ const helpCsv = path.join(bmadSrc, 'module-help.csv');
157
+ if (fs.existsSync(helpCsv)) {
158
+ fsExtra.copySync(helpCsv, path.join(targetBmadDir, 'module-help.csv'));
159
+ updated++;
160
+ }
161
+
162
+ // Update manifest version (preserve everything else)
163
+ manifest.version = packageJson.version;
164
+ manifest.lastUpdated = new Date().toISOString();
165
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf8');
166
+
167
+ spinner.stop(i.update_done ? i.update_done(updated) : `โœ… ${updated} files updated to v${packageJson.version}`);
168
+
169
+ clack.log.info('๐Ÿ“‹ Config preserved: config.yaml, IDE configs, output directories');
170
+ clack.outro(pc.green(i.update_ready || `BMAD+ v${packageJson.version} is ready! ๐Ÿš€`));
171
+ },
172
+ };
package/tools/cli/i18n.js CHANGED
@@ -10,7 +10,7 @@ const LANGUAGES = {
10
10
  flag: '๐Ÿ‡ฌ๐Ÿ‡ง',
11
11
  name: 'English',
12
12
  locale: 'en',
13
- installer_title: ' BMAD+ Installer v0.4.2 ',
13
+ installer_title: ' BMAD+ Installer v0.4.4 ',
14
14
  select_language: 'Select your language',
15
15
  installing_to: 'Installing to',
16
16
  select_packs: 'Which packs to install? (Core is always included)',
@@ -49,14 +49,36 @@ const LANGUAGES = {
49
49
  guide_or_auto: 'โšก Or: "autopilot" to manage everything automatically',
50
50
  guide_output: '๐Ÿ“ Output',
51
51
  guide_ready: 'BMAD+ is ready! Talk to Atlas to get started ๐Ÿš€',
52
- guide_credits: 'โœจ BMAD+ is created by Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
52
+ guide_credits: 'โœจ BMAD+ is created by Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
53
+ // Uninstall
54
+ uninstall_confirm: 'Remove BMAD+ from this project?',
55
+ uninstall_removing: 'Removing...',
56
+ uninstall_done: (n) => `โœ… BMAD+ removed (${n} items)`,
57
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ kept (contains files)',
58
+ installed_on: 'installed',
59
+ // Update
60
+ update_confirm: 'Update agents and skills?',
61
+ update_updating: 'Updating agents and skills...',
62
+ update_done: (n) => `โœ… ${n} files updated`,
63
+ update_current: 'โœ… Already up to date!',
64
+ update_ready: 'Update complete! ๐Ÿš€',
65
+ guide_cli_title: 'CLI Commands',
66
+ guide_cli_install: 'โ€” Install agents & skills',
67
+ guide_cli_update: 'โ€” Update agents (keeps config)',
68
+ guide_cli_doctor: 'โ€” Check installation health',
69
+ guide_cli_uninstall: 'โ€” Remove BMAD+ from project',
70
+ guide_examples_title: 'Quick Examples',
71
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
72
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP timestamped',
73
+ guide_example_animated: '๐ŸŽฌ Animated: "/animated build hero.mp4"',
74
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
53
75
  },
54
76
 
55
77
  fr: {
56
78
  flag: '๐Ÿ‡ซ๐Ÿ‡ท',
57
79
  name: 'Franรงais',
58
80
  locale: 'fr',
59
- installer_title: ' BMAD+ Installeur v0.4.2 ',
81
+ installer_title: ' BMAD+ Installeur v0.4.4 ',
60
82
  select_language: 'Choisissez votre langue',
61
83
  installing_to: 'Installation dans',
62
84
  select_packs: 'Quels packs installer ? (Core est toujours inclus)',
@@ -95,14 +117,34 @@ const LANGUAGES = {
95
117
  guide_or_auto: 'โšก Ou : "autopilot" pour tout gรฉrer automatiquement',
96
118
  guide_output: '๐Ÿ“ Sortie',
97
119
  guide_ready: 'BMAD+ est prรชt ! Parle ร  Atlas pour commencer ๐Ÿš€',
98
- guide_credits: 'โœจ BMAD+ est crรฉรฉ par Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
120
+ guide_credits: 'โœจ BMAD+ est crรฉรฉ par Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
121
+ uninstall_confirm: 'Supprimer BMAD+ de ce projet ?',
122
+ uninstall_removing: 'Suppression...',
123
+ uninstall_done: (n) => `โœ… BMAD+ supprimรฉ (${n} รฉlรฉments)`,
124
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ conservรฉ (contient des fichiers)',
125
+ installed_on: 'installรฉ le',
126
+ update_confirm: 'Mettre ร  jour les agents et skills ?',
127
+ update_updating: 'Mise ร  jour des agents et skills...',
128
+ update_done: (n) => `โœ… ${n} fichiers mis ร  jour`,
129
+ update_current: 'โœ… Dรฉjร  ร  jour !',
130
+ update_ready: 'Mise ร  jour terminรฉe ! ๐Ÿš€',
131
+ guide_cli_title: 'Commandes CLI',
132
+ guide_cli_install: 'โ€” Installer agents & skills',
133
+ guide_cli_update: 'โ€” Mettre ร  jour (conserve la config)',
134
+ guide_cli_doctor: 'โ€” Vรฉrifier l\'installation',
135
+ guide_cli_uninstall: 'โ€” Supprimer BMAD+ du projet',
136
+ guide_examples_title: 'Exemples rapides',
137
+ guide_example_seo: '๐Ÿ” SEO : "/seo audit https://example.com"',
138
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup : "/backup create" โ†’ ZIP horodatรฉ',
139
+ guide_example_animated: '๐ŸŽฌ Animรฉ : "/animated build hero.mp4"',
140
+ guide_example_osint: '๐Ÿ” OSINT : "Shadow, investigate John Doe"',
99
141
  },
100
142
 
101
143
  es: {
102
144
  flag: '๐Ÿ‡ช๐Ÿ‡ธ',
103
145
  name: 'Espaรฑol',
104
146
  locale: 'es',
105
- installer_title: ' BMAD+ Instalador v0.4.2 ',
147
+ installer_title: ' BMAD+ Instalador v0.4.4 ',
106
148
  select_language: 'Seleccione su idioma',
107
149
  installing_to: 'Instalando en',
108
150
  select_packs: 'ยฟQuรฉ packs instalar? (Core siempre estรก incluido)',
@@ -141,14 +183,34 @@ const LANGUAGES = {
141
183
  guide_or_auto: 'โšก O: "autopilot" para gestionar todo automรกticamente',
142
184
  guide_output: '๐Ÿ“ Salida',
143
185
  guide_ready: 'ยกBMAD+ estรก listo! Habla con Atlas para comenzar ๐Ÿš€',
144
- guide_credits: 'โœจ BMAD+ es creado por Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
186
+ guide_credits: 'โœจ BMAD+ es creado por Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
187
+ uninstall_confirm: 'ยฟEliminar BMAD+ de este proyecto?',
188
+ uninstall_removing: 'Eliminando...',
189
+ uninstall_done: (n) => `โœ… BMAD+ eliminado (${n} elementos)`,
190
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ conservado (contiene archivos)',
191
+ installed_on: 'instalado el',
192
+ update_confirm: 'ยฟActualizar agentes y habilidades?',
193
+ update_updating: 'Actualizando agentes y habilidades...',
194
+ update_done: (n) => `โœ… ${n} archivos actualizados`,
195
+ update_current: 'โœ… ยกYa estรก actualizado!',
196
+ update_ready: 'ยกActualizaciรณn completada! ๐Ÿš€',
197
+ guide_cli_title: 'Comandos CLI',
198
+ guide_cli_install: 'โ€” Instalar agentes y habilidades',
199
+ guide_cli_update: 'โ€” Actualizar (conserva la config)',
200
+ guide_cli_doctor: 'โ€” Verificar la instalaciรณn',
201
+ guide_cli_uninstall: 'โ€” Eliminar BMAD+ del proyecto',
202
+ guide_examples_title: 'Ejemplos rรกpidos',
203
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
204
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP con marca de tiempo',
205
+ guide_example_animated: '๐ŸŽฌ Animado: "/animated build hero.mp4"',
206
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
145
207
  },
146
208
 
147
209
  de: {
148
210
  flag: '๐Ÿ‡ฉ๐Ÿ‡ช',
149
211
  name: 'Deutsch',
150
212
  locale: 'de',
151
- installer_title: ' BMAD+ Installer v0.4.2 ',
213
+ installer_title: ' BMAD+ Installer v0.4.4 ',
152
214
  select_language: 'Wรคhlen Sie Ihre Sprache',
153
215
  installing_to: 'Installiere in',
154
216
  select_packs: 'Welche Packs installieren? (Core ist immer enthalten)',
@@ -187,14 +249,34 @@ const LANGUAGES = {
187
249
  guide_or_auto: 'โšก Oder: "autopilot" fรผr vollautomatische Verwaltung',
188
250
  guide_output: '๐Ÿ“ Ausgabe',
189
251
  guide_ready: 'BMAD+ ist bereit! Sprich mit Atlas um loszulegen ๐Ÿš€',
190
- guide_credits: 'โœจ BMAD+ wurde erstellt von Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
252
+ guide_credits: 'โœจ BMAD+ wurde erstellt von Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
253
+ uninstall_confirm: 'BMAD+ aus diesem Projekt entfernen?',
254
+ uninstall_removing: 'Entfernen...',
255
+ uninstall_done: (n) => `โœ… BMAD+ entfernt (${n} Elemente)`,
256
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ beibehalten (enthรคlt Dateien)',
257
+ installed_on: 'installiert am',
258
+ update_confirm: 'Agenten und Skills aktualisieren?',
259
+ update_updating: 'Agenten und Skills werden aktualisiert...',
260
+ update_done: (n) => `โœ… ${n} Dateien aktualisiert`,
261
+ update_current: 'โœ… Bereits aktuell!',
262
+ update_ready: 'Update abgeschlossen! ๐Ÿš€',
263
+ guide_cli_title: 'CLI-Befehle',
264
+ guide_cli_install: 'โ€” Agenten & Skills installieren',
265
+ guide_cli_update: 'โ€” Aktualisieren (Konfiguration bleibt)',
266
+ guide_cli_doctor: 'โ€” Installation prรผfen',
267
+ guide_cli_uninstall: 'โ€” BMAD+ vom Projekt entfernen',
268
+ guide_examples_title: 'Schnellbeispiele',
269
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
270
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP mit Zeitstempel',
271
+ guide_example_animated: '๐ŸŽฌ Animiert: "/animated build hero.mp4"',
272
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
191
273
  },
192
274
 
193
275
  'pt-br': {
194
276
  flag: '๐Ÿ‡ง๐Ÿ‡ท',
195
277
  name: 'Portuguรชs (Brasil)',
196
278
  locale: 'pt-BR',
197
- installer_title: ' BMAD+ Instalador v0.4.2 ',
279
+ installer_title: ' BMAD+ Instalador v0.4.4 ',
198
280
  select_language: 'Selecione seu idioma',
199
281
  installing_to: 'Instalando em',
200
282
  select_packs: 'Quais packs instalar? (Core sempre estรก incluรญdo)',
@@ -233,14 +315,34 @@ const LANGUAGES = {
233
315
  guide_or_auto: 'โšก Ou: "autopilot" para gerenciar tudo automaticamente',
234
316
  guide_output: '๐Ÿ“ Saรญda',
235
317
  guide_ready: 'BMAD+ estรก pronto! Fale com Atlas para comeรงar ๐Ÿš€',
236
- guide_credits: 'โœจ BMAD+ foi criado por Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
318
+ guide_credits: 'โœจ BMAD+ foi criado por Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
319
+ uninstall_confirm: 'Remover BMAD+ deste projeto?',
320
+ uninstall_removing: 'Removendo...',
321
+ uninstall_done: (n) => `โœ… BMAD+ removido (${n} itens)`,
322
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ mantido (contรฉm arquivos)',
323
+ installed_on: 'instalado em',
324
+ update_confirm: 'Atualizar agentes e habilidades?',
325
+ update_updating: 'Atualizando agentes e habilidades...',
326
+ update_done: (n) => `โœ… ${n} arquivos atualizados`,
327
+ update_current: 'โœ… Jรก estรก atualizado!',
328
+ update_ready: 'Atualizaรงรฃo concluรญda! ๐Ÿš€',
329
+ guide_cli_title: 'Comandos CLI',
330
+ guide_cli_install: 'โ€” Instalar agentes e habilidades',
331
+ guide_cli_update: 'โ€” Atualizar (mantรฉm config)',
332
+ guide_cli_doctor: 'โ€” Verificar instalaรงรฃo',
333
+ guide_cli_uninstall: 'โ€” Remover BMAD+ do projeto',
334
+ guide_examples_title: 'Exemplos rรกpidos',
335
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
336
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP com timestamp',
337
+ guide_example_animated: '๐ŸŽฌ Animado: "/animated build hero.mp4"',
338
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
237
339
  },
238
340
 
239
341
  ru: {
240
342
  flag: '๐Ÿ‡ท๐Ÿ‡บ',
241
343
  name: 'ะ ัƒััะบะธะน',
242
344
  locale: 'ru',
243
- installer_title: ' BMAD+ ะฃัั‚ะฐะฝะพะฒั‰ะธะบ v0.4.2 ',
345
+ installer_title: ' BMAD+ ะฃัั‚ะฐะฝะพะฒั‰ะธะบ v0.4.4 ',
244
346
  select_language: 'ะ’ั‹ะฑะตั€ะธั‚ะต ัะทั‹ะบ',
245
347
  installing_to: 'ะฃัั‚ะฐะฝะพะฒะบะฐ ะฒ',
246
348
  select_packs: 'ะšะฐะบะธะต ะฟะฐะบะตั‚ั‹ ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ? (Core ะฒัะตะณะดะฐ ะฒะบะปัŽั‡ั‘ะฝ)',
@@ -279,14 +381,34 @@ const LANGUAGES = {
279
381
  guide_or_auto: 'โšก ะ˜ะปะธ: "autopilot" ะดะปั ะฟะพะปะฝะพะน ะฐะฒั‚ะพะผะฐั‚ะธะทะฐั†ะธะธ',
280
382
  guide_output: '๐Ÿ“ ะ’ั‹ะฒะพะด',
281
383
  guide_ready: 'BMAD+ ะณะพั‚ะพะฒ! ะŸะพะณะพะฒะพั€ะธั‚ะต ั Atlas ั‡ั‚ะพะฑั‹ ะฝะฐั‡ะฐั‚ัŒ ๐Ÿš€',
282
- guide_credits: 'โœจ BMAD+ ัะพะทะดะฐะฝ Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
384
+ guide_credits: 'โœจ BMAD+ ัะพะทะดะฐะฝ Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
385
+ uninstall_confirm: 'ะฃะดะฐะปะธั‚ัŒ BMAD+ ะธะท ัั‚ะพะณะพ ะฟั€ะพะตะบั‚ะฐ?',
386
+ uninstall_removing: 'ะฃะดะฐะปะตะฝะธะต...',
387
+ uninstall_done: (n) => `โœ… BMAD+ ัƒะดะฐะปั‘ะฝ (${n} ัะปะตะผะตะฝั‚ะพะฒ)`,
388
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ ัะพั…ั€ะฐะฝั‘ะฝ (ัะพะดะตั€ะถะธั‚ ั„ะฐะนะปั‹)',
389
+ installed_on: 'ัƒัั‚ะฐะฝะพะฒะปะตะฝะพ',
390
+ update_confirm: 'ะžะฑะฝะพะฒะธั‚ัŒ ะฐะณะตะฝั‚ะพะฒ ะธ ะฝะฐะฒั‹ะบะธ?',
391
+ update_updating: 'ะžะฑะฝะพะฒะปะตะฝะธะต ะฐะณะตะฝั‚ะพะฒ ะธ ะฝะฐะฒั‹ะบะพะฒ...',
392
+ update_done: (n) => `โœ… ${n} ั„ะฐะนะปะพะฒ ะพะฑะฝะพะฒะปะตะฝะพ`,
393
+ update_current: 'โœ… ะฃะถะต ะฐะบั‚ัƒะฐะปัŒะฝะพ!',
394
+ update_ready: 'ะžะฑะฝะพะฒะปะตะฝะธะต ะทะฐะฒะตั€ัˆะตะฝะพ! ๐Ÿš€',
395
+ guide_cli_title: 'ะšะพะผะฐะฝะดั‹ CLI',
396
+ guide_cli_install: 'โ€” ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะฐะณะตะฝั‚ะพะฒ',
397
+ guide_cli_update: 'โ€” ะžะฑะฝะพะฒะธั‚ัŒ (ัะพั…ั€ะฐะฝะธั‚ัŒ ะบะพะฝั„ะธะณ)',
398
+ guide_cli_doctor: 'โ€” ะŸั€ะพะฒะตั€ะธั‚ัŒ ัƒัั‚ะฐะฝะพะฒะบัƒ',
399
+ guide_cli_uninstall: 'โ€” ะฃะดะฐะปะธั‚ัŒ BMAD+',
400
+ guide_examples_title: 'ะ‘ั‹ัั‚ั€ั‹ะต ะฟั€ะธะผะตั€ั‹',
401
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
402
+ guide_example_backup: '๐Ÿ—‚๏ธ ะ‘ัะบะฐะฟ: "/backup create" โ†’ ZIP',
403
+ guide_example_animated: '๐ŸŽฌ ะะฝะธะผะฐั†ะธั: "/animated build hero.mp4"',
404
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
283
405
  },
284
406
 
285
407
  zh: {
286
408
  flag: '๐Ÿ‡จ๐Ÿ‡ณ',
287
409
  name: 'ไธญๆ–‡ (็ฎ€ไฝ“)',
288
410
  locale: 'zh-CN',
289
- installer_title: ' BMAD+ ๅฎ‰่ฃ…็จ‹ๅบ v0.4.2 ',
411
+ installer_title: ' BMAD+ ๅฎ‰่ฃ…็จ‹ๅบ v0.4.4 ',
290
412
  select_language: '้€‰ๆ‹ฉๆ‚จ็š„่ฏญ่จ€',
291
413
  installing_to: 'ๅฎ‰่ฃ…ๅˆฐ',
292
414
  select_packs: 'ๅฎ‰่ฃ…ๅ“ชไบ›ๅŒ…๏ผŸ๏ผˆCore ๅง‹็ปˆๅŒ…ๅซ๏ผ‰',
@@ -325,14 +447,34 @@ const LANGUAGES = {
325
447
  guide_or_auto: 'โšก ๆˆ–่€…๏ผš"autopilot" ๅ…จ่‡ชๅŠจ็ฎก็†',
326
448
  guide_output: '๐Ÿ“ ่พ“ๅ‡บ',
327
449
  guide_ready: 'BMAD+ ๅทฒๅฐฑ็ปช๏ผไธŽ Atlas ไบค่ฐˆๅผ€ๅง‹ ๐Ÿš€',
328
- guide_credits: 'โœจ BMAD+ ็”ฑ Laurent Rochetta ๅˆ›ๅปบ โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
450
+ guide_credits: 'โœจ BMAD+ ็”ฑ Laurent Rochetta ๅˆ›ๅปบ โ€” github.com/lrochetta/BMAD-PLUS โœจ',
451
+ uninstall_confirm: 'ไปŽๆญค้กน็›ฎไธญๅˆ ้™ค BMAD+๏ผŸ',
452
+ uninstall_removing: 'ๅˆ ้™คไธญ...',
453
+ uninstall_done: (n) => `โœ… BMAD+ ๅทฒๅˆ ้™ค๏ผˆ${n} ้กน๏ผ‰`,
454
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ ๅทฒไฟ็•™๏ผˆๅŒ…ๅซๆ–‡ไปถ๏ผ‰',
455
+ installed_on: 'ๅฎ‰่ฃ…ไบŽ',
456
+ update_confirm: 'ๆ›ดๆ–ฐไปฃ็†ๅ’ŒๆŠ€่ƒฝ๏ผŸ',
457
+ update_updating: 'ๆญฃๅœจๆ›ดๆ–ฐไปฃ็†ๅ’ŒๆŠ€่ƒฝ...',
458
+ update_done: (n) => `โœ… ${n} ไธชๆ–‡ไปถๅทฒๆ›ดๆ–ฐ`,
459
+ update_current: 'โœ… ๅทฒๆ˜ฏๆœ€ๆ–ฐ็‰ˆๆœฌ๏ผ',
460
+ update_ready: 'ๆ›ดๆ–ฐๅฎŒๆˆ๏ผ๐Ÿš€',
461
+ guide_cli_title: 'CLI ๅ‘ฝไปค',
462
+ guide_cli_install: 'โ€” ๅฎ‰่ฃ…ไปฃ็†ๅ’ŒๆŠ€่ƒฝ',
463
+ guide_cli_update: 'โ€” ๆ›ดๆ–ฐ๏ผˆไฟ็•™้…็ฝฎ๏ผ‰',
464
+ guide_cli_doctor: 'โ€” ๆฃ€ๆŸฅๅฎ‰่ฃ…',
465
+ guide_cli_uninstall: 'โ€” ๅˆ ้™ค BMAD+',
466
+ guide_examples_title: 'ๅฟซ้€Ÿ็คบไพ‹',
467
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
468
+ guide_example_backup: '๐Ÿ—‚๏ธ ๅค‡ไปฝ: "/backup create" โ†’ ZIP',
469
+ guide_example_animated: '๐ŸŽฌ ๅŠจ็”ป: "/animated build hero.mp4"',
470
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
329
471
  },
330
472
 
331
473
  he: {
332
474
  flag: '๐Ÿ‡ฎ๐Ÿ‡ฑ',
333
475
  name: 'ืขื‘ืจื™ืช',
334
476
  locale: 'he',
335
- installer_title: ' BMAD+ ืžืชืงื™ืŸ v0.4.2 ',
477
+ installer_title: ' BMAD+ ืžืชืงื™ืŸ v0.4.4 ',
336
478
  select_language: 'ื‘ื—ืจ ืืช ื”ืฉืคื” ืฉืœืš',
337
479
  installing_to: 'ืžืชืงื™ืŸ ื‘',
338
480
  select_packs: 'ืื™ืœื• ื—ื‘ื™ืœื•ืช ืœื”ืชืงื™ืŸ? (Core ืชืžื™ื“ ื›ืœื•ืœ)',
@@ -371,14 +513,34 @@ const LANGUAGES = {
371
513
  guide_or_auto: 'โšก ืื•: "autopilot" ืœื ื™ื”ื•ืœ ืื•ื˜ื•ืžื˜ื™ ืžืœื',
372
514
  guide_output: '๐Ÿ“ ืคืœื˜',
373
515
  guide_ready: '!BMAD+ ืžื•ื›ืŸ! ื“ื‘ืจ ืขื Atlas ื›ื“ื™ ืœื”ืชื—ื™ืœ ๐Ÿš€',
374
- guide_credits: 'โœจ BMAD+ ื ื•ืฆืจ ืขืœ ื™ื“ื™ Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
516
+ guide_credits: 'โœจ BMAD+ ื ื•ืฆืจ ืขืœ ื™ื“ื™ Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
517
+ uninstall_confirm: 'ืœื”ืกื™ืจ ืืช BMAD+ ืžื”ืคืจื•ื™ืงื˜ ื”ื–ื”?',
518
+ uninstall_removing: 'ืžืกื™ืจ...',
519
+ uninstall_done: (n) => `โœ… BMAD+ ื”ื•ืกืจ (${n} ืคืจื™ื˜ื™ื)`,
520
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ ื ืฉืžืจ (ืžื›ื™ืœ ืงื‘ืฆื™ื)',
521
+ installed_on: 'ื”ื•ืชืงืŸ ื‘',
522
+ update_confirm: 'ืœืขื“ื›ืŸ ืกื•ื›ื ื™ื ื•ื›ื™ืฉื•ืจื™ื?',
523
+ update_updating: 'ืžืขื“ื›ืŸ ืกื•ื›ื ื™ื ื•ื›ื™ืฉื•ืจื™ื...',
524
+ update_done: (n) => `โœ… ${n} ืงื‘ืฆื™ื ืขื•ื“ื›ื ื•`,
525
+ update_current: 'โœ… ื›ื‘ืจ ืžืขื•ื“ื›ืŸ!',
526
+ update_ready: 'ื”ืขื“ื›ื•ืŸ ื”ื•ืฉืœื! ๐Ÿš€',
527
+ guide_cli_title: 'ืคืงื•ื“ื•ืช CLI',
528
+ guide_cli_install: 'โ€” ื”ืชืงื ืช ืกื•ื›ื ื™ื',
529
+ guide_cli_update: 'โ€” ืขื“ื›ื•ืŸ (ืฉื•ืžืจ ืชืฆื•ืจื”)',
530
+ guide_cli_doctor: 'โ€” ื‘ื“ื™ืงืช ื”ืชืงื ื”',
531
+ guide_cli_uninstall: 'โ€” ื”ืกืจืช BMAD+',
532
+ guide_examples_title: 'ื“ื•ื’ืžืื•ืช ืžื”ื™ืจื•ืช',
533
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
534
+ guide_example_backup: '๐Ÿ—‚๏ธ ื’ื™ื‘ื•ื™: "/backup create" โ†’ ZIP',
535
+ guide_example_animated: '๐ŸŽฌ ืื ื™ืžืฆื™ื”: "/animated build hero.mp4"',
536
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
375
537
  },
376
538
 
377
539
  ja: {
378
540
  flag: '๐Ÿ‡ฏ๐Ÿ‡ต',
379
541
  name: 'ๆ—ฅๆœฌ่ชž',
380
542
  locale: 'ja',
381
- installer_title: ' BMAD+ ใ‚คใƒณใ‚นใƒˆใƒผใƒฉใƒผ v0.4.2 ',
543
+ installer_title: ' BMAD+ ใ‚คใƒณใ‚นใƒˆใƒผใƒฉใƒผ v0.4.4 ',
382
544
  select_language: '่จ€่ชžใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„',
383
545
  installing_to: 'ใ‚คใƒณใ‚นใƒˆใƒผใƒซๅ…ˆ',
384
546
  select_packs: 'ใฉใฎใƒ‘ใƒƒใ‚ฏใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใพใ™ใ‹๏ผŸ๏ผˆCoreใฏๅธธใซๅซใพใ‚Œใพใ™๏ผ‰',
@@ -417,14 +579,34 @@ const LANGUAGES = {
417
579
  guide_or_auto: 'โšก ใพใŸใฏ: "autopilot" ใงๅ…จ่‡ชๅ‹•็ฎก็†',
418
580
  guide_output: '๐Ÿ“ ๅ‡บๅŠ›',
419
581
  guide_ready: 'BMAD+ ๆบ–ๅ‚™ๅฎŒไบ†๏ผAtlasใซ่ฉฑใ—ใ‹ใ‘ใฆๅง‹ใ‚ใพใ—ใ‚‡ใ† ๐Ÿš€',
420
- guide_credits: 'โœจ BMAD+ ใฏ Laurent Rochetta ใซใ‚ˆใฃใฆไฝœๆˆใ•ใ‚Œใพใ—ใŸ โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
582
+ guide_credits: 'โœจ BMAD+ ใฏ Laurent Rochetta ใซใ‚ˆใฃใฆไฝœๆˆใ•ใ‚Œใพใ—ใŸ โ€” github.com/lrochetta/BMAD-PLUS โœจ',
583
+ uninstall_confirm: 'ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‹ใ‚‰BMAD+ใ‚’ๅ‰Š้™คใ—ใพใ™ใ‹๏ผŸ',
584
+ uninstall_removing: 'ๅ‰Š้™คไธญ...',
585
+ uninstall_done: (n) => `โœ… BMAD+ใ‚’ๅ‰Š้™คใ—ใพใ—ใŸ๏ผˆ${n}้ …็›ฎ๏ผ‰`,
586
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ ใฏไฟๆŒใ•ใ‚Œใพใ—ใŸ๏ผˆใƒ•ใ‚กใ‚คใƒซใŒๅซใพใ‚Œใฆใ„ใพใ™๏ผ‰',
587
+ installed_on: 'ใ‚คใƒณใ‚นใƒˆใƒผใƒซๆ—ฅ',
588
+ update_confirm: 'ใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใจใ‚นใ‚ญใƒซใ‚’ๆ›ดๆ–ฐใ—ใพใ™ใ‹๏ผŸ',
589
+ update_updating: 'ใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใจใ‚นใ‚ญใƒซใ‚’ๆ›ดๆ–ฐไธญ...',
590
+ update_done: (n) => `โœ… ${n}ใƒ•ใ‚กใ‚คใƒซใ‚’ๆ›ดๆ–ฐใ—ใพใ—ใŸ`,
591
+ update_current: 'โœ… ๆœ€ๆ–ฐใฎ็Šถๆ…‹ใงใ™๏ผ',
592
+ update_ready: 'ใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆๅฎŒไบ†๏ผ๐Ÿš€',
593
+ guide_cli_title: 'CLIใ‚ณใƒžใƒณใƒ‰',
594
+ guide_cli_install: 'โ€” ใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซ',
595
+ guide_cli_update: 'โ€” ๆ›ดๆ–ฐ๏ผˆ่จญๅฎšไฟๆŒ๏ผ‰',
596
+ guide_cli_doctor: 'โ€” ใ‚คใƒณใ‚นใƒˆใƒผใƒซ็ขบ่ช',
597
+ guide_cli_uninstall: 'โ€” BMAD+ใ‚’ๅ‰Š้™ค',
598
+ guide_examples_title: 'ใ‚ฏใ‚คใƒƒใ‚ฏไพ‹',
599
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
600
+ guide_example_backup: '๐Ÿ—‚๏ธ ใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—: "/backup create" โ†’ ZIP',
601
+ guide_example_animated: '๐ŸŽฌ ใ‚ขใƒ‹ใƒก: "/animated build hero.mp4"',
602
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
421
603
  },
422
604
 
423
605
  it: {
424
606
  flag: '๐Ÿ‡ฎ๐Ÿ‡น',
425
607
  name: 'Italiano',
426
608
  locale: 'it',
427
- installer_title: ' BMAD+ Installatore v0.4.2 ',
609
+ installer_title: ' BMAD+ Installatore v0.4.4 ',
428
610
  select_language: 'Seleziona la tua lingua',
429
611
  installing_to: 'Installazione in',
430
612
  select_packs: 'Quali pack installare? (Core รจ sempre incluso)',
@@ -463,7 +645,27 @@ const LANGUAGES = {
463
645
  guide_or_auto: 'โšก Oppure: "autopilot" per gestire tutto automaticamente',
464
646
  guide_output: '๐Ÿ“ Output',
465
647
  guide_ready: 'BMAD+ รจ pronto! Parla con Atlas per iniziare ๐Ÿš€',
466
- guide_credits: 'โœจ BMAD+ รจ creato da Laurent Rochetta โ€” github.com/lrochetta | linkedin.com/in/laurentrochetta โœจ',
648
+ guide_credits: 'โœจ BMAD+ รจ creato da Laurent Rochetta โ€” github.com/lrochetta/BMAD-PLUS โœจ',
649
+ uninstall_confirm: 'Rimuovere BMAD+ da questo progetto?',
650
+ uninstall_removing: 'Rimozione...',
651
+ uninstall_done: (n) => `โœ… BMAD+ rimosso (${n} elementi)`,
652
+ uninstall_output_kept: '๐Ÿ“ _bmad-output/ conservato (contiene file)',
653
+ installed_on: 'installato il',
654
+ update_confirm: 'Aggiornare agenti e skill?',
655
+ update_updating: 'Aggiornamento agenti e skill...',
656
+ update_done: (n) => `โœ… ${n} file aggiornati`,
657
+ update_current: 'โœ… Giร  aggiornato!',
658
+ update_ready: 'Aggiornamento completato! ๐Ÿš€',
659
+ guide_cli_title: 'Comandi CLI',
660
+ guide_cli_install: 'โ€” Installa agenti e skill',
661
+ guide_cli_update: 'โ€” Aggiorna (mantiene la config)',
662
+ guide_cli_doctor: 'โ€” Verifica installazione',
663
+ guide_cli_uninstall: 'โ€” Rimuovi BMAD+ dal progetto',
664
+ guide_examples_title: 'Esempi rapidi',
665
+ guide_example_seo: '๐Ÿ” SEO: "/seo audit https://example.com"',
666
+ guide_example_backup: '๐Ÿ—‚๏ธ Backup: "/backup create" โ†’ ZIP con timestamp',
667
+ guide_example_animated: '๐ŸŽฌ Animato: "/animated build hero.mp4"',
668
+ guide_example_osint: '๐Ÿ” OSINT: "Shadow, investigate John Doe"',
467
669
  },
468
670
  };
469
671