bmad-enhanced 1.3.5 → 1.3.7
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 +26 -0
- package/package.json +1 -1
- package/scripts/install-all-agents.js +50 -4
- package/scripts/update/bmad-version.js +27 -1
- package/scripts/update/migrations/1.0.x-to-1.3.0.js +16 -7
- package/scripts/update/migrations/1.1.x-to-1.3.0.js +18 -9
- package/scripts/update/migrations/1.2.x-to-1.3.0.js +18 -9
- package/scripts/update/migrations/registry.js +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [1.3.6] - 2026-02-18
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
**🔍 Improved Installation Diagnostics:**
|
|
15
|
+
- Added detailed debugging output to config.yaml creation in install script
|
|
16
|
+
- Shows exact file path where config.yaml will be created
|
|
17
|
+
- Verifies file existence immediately after write
|
|
18
|
+
- Catches and displays any errors during config creation
|
|
19
|
+
- Better error handling with try-catch blocks
|
|
20
|
+
|
|
21
|
+
**📊 Improved Version Check Messaging:**
|
|
22
|
+
- `bmad-version` now distinguishes between "fresh", "partial", and "corrupted" installations
|
|
23
|
+
- "Partial installation" message when config.yaml is missing but other files exist
|
|
24
|
+
- "Corrupted installation" message when required agent files are missing
|
|
25
|
+
- Each scenario now provides specific next steps for resolution
|
|
26
|
+
- No longer shows generic "Not installed" for all cases
|
|
27
|
+
|
|
28
|
+
**What this helps with:**
|
|
29
|
+
- Easier troubleshooting when installations fail
|
|
30
|
+
- Clear indication of what's wrong with partial installations
|
|
31
|
+
- Better guidance on how to fix installation issues
|
|
32
|
+
- More detailed logs for support/debugging
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
10
36
|
## [1.3.5] - 2026-02-18
|
|
11
37
|
|
|
12
38
|
### Fixed
|
package/package.json
CHANGED
|
@@ -157,12 +157,14 @@ function updateConfig() {
|
|
|
157
157
|
const configPath = path.join(process.cwd(), '_bmad', 'bme', '_vortex', 'config.yaml');
|
|
158
158
|
const manifestPath = path.join(process.cwd(), '_bmad', '_config', 'agent-manifest.csv');
|
|
159
159
|
|
|
160
|
+
console.log(`${CYAN} →${RESET} Config path: ${configPath}`);
|
|
161
|
+
|
|
160
162
|
// Create config
|
|
161
163
|
const configContent = `---
|
|
162
164
|
submodule_name: _vortex
|
|
163
165
|
description: Contextualize and Externalize streams - Strategic framing and validated learning
|
|
164
166
|
module: bme
|
|
165
|
-
version: 1.3.
|
|
167
|
+
version: 1.3.7
|
|
166
168
|
|
|
167
169
|
# Output Configuration
|
|
168
170
|
output_folder: "{project-root}/_bmad-output/vortex-artifacts"
|
|
@@ -191,9 +193,21 @@ workflows:
|
|
|
191
193
|
party_mode_enabled: true
|
|
192
194
|
core_module: bme
|
|
193
195
|
`;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
|
|
197
|
+
try {
|
|
198
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
199
|
+
fs.writeFileSync(configPath, configContent);
|
|
200
|
+
|
|
201
|
+
// Verify file was created
|
|
202
|
+
if (fs.existsSync(configPath)) {
|
|
203
|
+
console.log(`${GREEN} ✓${RESET} Created config.yaml`);
|
|
204
|
+
} else {
|
|
205
|
+
console.error(`${RED} ✗${RESET} Config file not found after write!`);
|
|
206
|
+
}
|
|
207
|
+
} catch (error) {
|
|
208
|
+
console.error(`${RED} ✗${RESET} Error creating config.yaml:`, error.message);
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
197
211
|
|
|
198
212
|
// Create manifest
|
|
199
213
|
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
@@ -288,11 +302,43 @@ function printSuccess() {
|
|
|
288
302
|
console.log('');
|
|
289
303
|
}
|
|
290
304
|
|
|
305
|
+
function cleanupLegacyFiles() {
|
|
306
|
+
console.log(`${CYAN} →${RESET} Cleaning up legacy files...`);
|
|
307
|
+
|
|
308
|
+
// Remove _designos directory (pre-Vortex structure) from all possible locations
|
|
309
|
+
const legacyPaths = [
|
|
310
|
+
path.join(process.cwd(), '_bmad', 'bme', '_designos'),
|
|
311
|
+
path.join(process.cwd(), '_bmad', '_designos'),
|
|
312
|
+
];
|
|
313
|
+
|
|
314
|
+
for (const legacyPath of legacyPaths) {
|
|
315
|
+
if (fs.existsSync(legacyPath)) {
|
|
316
|
+
fs.removeSync(legacyPath);
|
|
317
|
+
console.log(`${GREEN} ✓${RESET} Removed legacy directory: ${path.relative(process.cwd(), legacyPath)}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Remove deprecated agent files from _vortex/agents
|
|
322
|
+
const agentsDir = path.join(process.cwd(), '_bmad', 'bme', '_vortex', 'agents');
|
|
323
|
+
const deprecatedAgents = ['empathy-mapper.md', 'wireframe-designer.md'];
|
|
324
|
+
|
|
325
|
+
for (const agent of deprecatedAgents) {
|
|
326
|
+
const agentPath = path.join(agentsDir, agent);
|
|
327
|
+
if (fs.existsSync(agentPath)) {
|
|
328
|
+
fs.removeSync(agentPath);
|
|
329
|
+
console.log(`${GREEN} ✓${RESET} Removed deprecated agent: ${agent}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
console.log(`${GREEN} ✓${RESET} Legacy cleanup complete`);
|
|
334
|
+
}
|
|
335
|
+
|
|
291
336
|
async function main() {
|
|
292
337
|
try {
|
|
293
338
|
printBanner();
|
|
294
339
|
checkPrerequisites();
|
|
295
340
|
copyAllAgentFiles();
|
|
341
|
+
cleanupLegacyFiles();
|
|
296
342
|
updateConfig();
|
|
297
343
|
createOutputDirectory();
|
|
298
344
|
verifyInstallation();
|
|
@@ -21,7 +21,7 @@ async function main() {
|
|
|
21
21
|
console.log('');
|
|
22
22
|
|
|
23
23
|
// Fresh install - not installed yet
|
|
24
|
-
if (scenario === 'fresh'
|
|
24
|
+
if (scenario === 'fresh') {
|
|
25
25
|
console.log(chalk.yellow('Status: Not installed'));
|
|
26
26
|
console.log(`Package version: ${chalk.cyan(targetVersion)}`);
|
|
27
27
|
console.log('');
|
|
@@ -30,6 +30,32 @@ async function main() {
|
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// Partial installation - config.yaml missing but some files exist
|
|
34
|
+
if (scenario === 'partial' || !currentVersion) {
|
|
35
|
+
console.log(chalk.red('Status: Partial installation (config.yaml missing)'));
|
|
36
|
+
console.log(`Package version: ${chalk.cyan(targetVersion)}`);
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log(chalk.yellow('This indicates an installation error.'));
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log('Try running: ' + chalk.cyan('npx bmad-install-agents'));
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log('If the problem persists, check the installation logs.');
|
|
43
|
+
console.log('');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Corrupted installation
|
|
48
|
+
if (scenario === 'corrupted') {
|
|
49
|
+
console.log(chalk.red('Status: Corrupted installation (missing required files)'));
|
|
50
|
+
console.log(`Package version: ${chalk.cyan(targetVersion)}`);
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log(chalk.yellow('Some required files are missing.'));
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log('Run: ' + chalk.cyan('npx bmad-install-agents') + ' to reinstall');
|
|
55
|
+
console.log('');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
33
59
|
// Installed
|
|
34
60
|
console.log(`Installed version: ${chalk.cyan(currentVersion)}`);
|
|
35
61
|
console.log(`Package version: ${chalk.cyan(targetVersion)}`);
|
|
@@ -16,7 +16,7 @@ const configMerger = require('../lib/config-merger');
|
|
|
16
16
|
module.exports = {
|
|
17
17
|
name: '1.0.x-to-1.3.0',
|
|
18
18
|
fromVersion: '1.0.x',
|
|
19
|
-
toVersion: '1.3.
|
|
19
|
+
toVersion: '1.3.7',
|
|
20
20
|
breaking: true,
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -65,7 +65,7 @@ module.exports = {
|
|
|
65
65
|
changes.push('Installed 7 new Vortex Framework workflows');
|
|
66
66
|
|
|
67
67
|
// 5. Update config.yaml with new structure
|
|
68
|
-
await updateConfig(targetDir, '1.3.
|
|
68
|
+
await updateConfig(targetDir, '1.3.7');
|
|
69
69
|
changes.push('Updated config.yaml');
|
|
70
70
|
|
|
71
71
|
// 6. Update agent files
|
|
@@ -289,12 +289,21 @@ async function copyUserGuides() {
|
|
|
289
289
|
* Remove old _designos directory (pre-Vortex structure)
|
|
290
290
|
*/
|
|
291
291
|
async function removeOldDesignosDirectory() {
|
|
292
|
-
const
|
|
292
|
+
const legacyPaths = [
|
|
293
|
+
path.join(process.cwd(), '_bmad/bme/_designos'),
|
|
294
|
+
path.join(process.cwd(), '_bmad/_designos'),
|
|
295
|
+
];
|
|
293
296
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
297
|
+
let removed = false;
|
|
298
|
+
for (const designosPath of legacyPaths) {
|
|
299
|
+
if (fs.existsSync(designosPath)) {
|
|
300
|
+
await fs.remove(designosPath);
|
|
301
|
+
console.log(` Removed legacy directory: ${path.relative(process.cwd(), designosPath)}`);
|
|
302
|
+
removed = true;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (!removed) {
|
|
298
307
|
console.log(' No legacy _designos directory found (OK)');
|
|
299
308
|
}
|
|
300
309
|
}
|
|
@@ -17,7 +17,7 @@ const configMerger = require('../lib/config-merger');
|
|
|
17
17
|
module.exports = {
|
|
18
18
|
name: '1.1.x-to-1.3.0',
|
|
19
19
|
fromVersion: '1.1.x',
|
|
20
|
-
toVersion: '1.3.
|
|
20
|
+
toVersion: '1.3.7',
|
|
21
21
|
breaking: false,
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -27,7 +27,7 @@ module.exports = {
|
|
|
27
27
|
async preview() {
|
|
28
28
|
return {
|
|
29
29
|
actions: [
|
|
30
|
-
'Update version: 1.1.x → 1.3.
|
|
30
|
+
'Update version: 1.1.x → 1.3.7',
|
|
31
31
|
'Verify deprecated workflows archived',
|
|
32
32
|
'Remove legacy _designos directory (pre-Vortex structure)',
|
|
33
33
|
'Remove deprecated agent files (empathy-mapper.md, wireframe-designer.md)',
|
|
@@ -47,8 +47,8 @@ module.exports = {
|
|
|
47
47
|
const targetDir = path.join(process.cwd(), '_bmad/bme/_vortex');
|
|
48
48
|
|
|
49
49
|
// 1. Update version in config.yaml
|
|
50
|
-
await updateConfigVersion('1.3.
|
|
51
|
-
changes.push('Updated version to 1.3.
|
|
50
|
+
await updateConfigVersion('1.3.7');
|
|
51
|
+
changes.push('Updated version to 1.3.7');
|
|
52
52
|
|
|
53
53
|
// 2. Verify deprecated structure exists
|
|
54
54
|
await ensureDeprecatedStructure(targetDir);
|
|
@@ -190,12 +190,21 @@ async function copyUserGuides() {
|
|
|
190
190
|
* Remove old _designos directory (pre-Vortex structure)
|
|
191
191
|
*/
|
|
192
192
|
async function removeOldDesignosDirectory() {
|
|
193
|
-
const
|
|
193
|
+
const legacyPaths = [
|
|
194
|
+
path.join(process.cwd(), '_bmad/bme/_designos'),
|
|
195
|
+
path.join(process.cwd(), '_bmad/_designos'),
|
|
196
|
+
];
|
|
194
197
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
let removed = false;
|
|
199
|
+
for (const designosPath of legacyPaths) {
|
|
200
|
+
if (fs.existsSync(designosPath)) {
|
|
201
|
+
await fs.remove(designosPath);
|
|
202
|
+
console.log(` Removed legacy directory: ${path.relative(process.cwd(), designosPath)}`);
|
|
203
|
+
removed = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (!removed) {
|
|
199
208
|
console.log(' No legacy _designos directory found (OK)');
|
|
200
209
|
}
|
|
201
210
|
}
|
|
@@ -17,7 +17,7 @@ const configMerger = require('../lib/config-merger');
|
|
|
17
17
|
module.exports = {
|
|
18
18
|
name: '1.2.x-to-1.3.0',
|
|
19
19
|
fromVersion: '1.2.x',
|
|
20
|
-
toVersion: '1.3.
|
|
20
|
+
toVersion: '1.3.7',
|
|
21
21
|
breaking: false,
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -27,7 +27,7 @@ module.exports = {
|
|
|
27
27
|
async preview() {
|
|
28
28
|
return {
|
|
29
29
|
actions: [
|
|
30
|
-
'Update version: 1.2.x → 1.3.
|
|
30
|
+
'Update version: 1.2.x → 1.3.7',
|
|
31
31
|
'Verify deprecated workflows archived',
|
|
32
32
|
'Remove legacy _designos directory (pre-Vortex structure)',
|
|
33
33
|
'Remove deprecated agent files (empathy-mapper.md, wireframe-designer.md)',
|
|
@@ -47,8 +47,8 @@ module.exports = {
|
|
|
47
47
|
const targetDir = path.join(process.cwd(), '_bmad/bme/_vortex');
|
|
48
48
|
|
|
49
49
|
// 1. Update version in config.yaml
|
|
50
|
-
await updateConfigVersion('1.3.
|
|
51
|
-
changes.push('Updated version to 1.3.
|
|
50
|
+
await updateConfigVersion('1.3.7');
|
|
51
|
+
changes.push('Updated version to 1.3.7');
|
|
52
52
|
|
|
53
53
|
// 2. Verify deprecated structure exists
|
|
54
54
|
await ensureDeprecatedStructure(targetDir);
|
|
@@ -190,12 +190,21 @@ async function copyUserGuides() {
|
|
|
190
190
|
* Remove old _designos directory (pre-Vortex structure)
|
|
191
191
|
*/
|
|
192
192
|
async function removeOldDesignosDirectory() {
|
|
193
|
-
const
|
|
193
|
+
const legacyPaths = [
|
|
194
|
+
path.join(process.cwd(), '_bmad/bme/_designos'),
|
|
195
|
+
path.join(process.cwd(), '_bmad/_designos'),
|
|
196
|
+
];
|
|
194
197
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
let removed = false;
|
|
199
|
+
for (const designosPath of legacyPaths) {
|
|
200
|
+
if (fs.existsSync(designosPath)) {
|
|
201
|
+
await fs.remove(designosPath);
|
|
202
|
+
console.log(` Removed legacy directory: ${path.relative(process.cwd(), designosPath)}`);
|
|
203
|
+
removed = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (!removed) {
|
|
199
208
|
console.log(' No legacy _designos directory found (OK)');
|
|
200
209
|
}
|
|
201
210
|
}
|
|
@@ -14,7 +14,7 @@ const MIGRATIONS = [
|
|
|
14
14
|
{
|
|
15
15
|
name: '1.0.x-to-1.3.0',
|
|
16
16
|
fromVersion: '1.0.x',
|
|
17
|
-
toVersion: '1.3.
|
|
17
|
+
toVersion: '1.3.7',
|
|
18
18
|
breaking: true,
|
|
19
19
|
description: 'Migrate empathy-map workflow to lean-persona',
|
|
20
20
|
module: null // Loaded on demand
|
|
@@ -22,7 +22,7 @@ const MIGRATIONS = [
|
|
|
22
22
|
{
|
|
23
23
|
name: '1.1.x-to-1.3.0',
|
|
24
24
|
fromVersion: '1.1.x',
|
|
25
|
-
toVersion: '1.3.
|
|
25
|
+
toVersion: '1.3.7',
|
|
26
26
|
breaking: false,
|
|
27
27
|
description: 'Archive deprecated workflows, update agents',
|
|
28
28
|
module: null // Loaded on demand
|
|
@@ -30,7 +30,7 @@ const MIGRATIONS = [
|
|
|
30
30
|
{
|
|
31
31
|
name: '1.2.x-to-1.3.0',
|
|
32
32
|
fromVersion: '1.2.x',
|
|
33
|
-
toVersion: '1.3.
|
|
33
|
+
toVersion: '1.3.7',
|
|
34
34
|
breaking: false,
|
|
35
35
|
description: 'Update to v1.3.0 with migration system',
|
|
36
36
|
module: null // Loaded on demand
|