bmad-method 6.0.5-next.13 → 6.0.5-next.14
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/package.json
CHANGED
|
@@ -1153,12 +1153,6 @@ class Installer {
|
|
|
1153
1153
|
preservedModules: modulesForCsvPreserve,
|
|
1154
1154
|
});
|
|
1155
1155
|
|
|
1156
|
-
addResult(
|
|
1157
|
-
'Manifests',
|
|
1158
|
-
'ok',
|
|
1159
|
-
`${manifestStats.workflows} workflows, ${manifestStats.agents} agents, ${manifestStats.tasks} tasks, ${manifestStats.tools} tools`,
|
|
1160
|
-
);
|
|
1161
|
-
|
|
1162
1156
|
// Merge help catalogs
|
|
1163
1157
|
message('Generating help catalog...');
|
|
1164
1158
|
await this.mergeModuleHelpCatalogs(bmadDir);
|
|
@@ -1379,10 +1373,27 @@ class Installer {
|
|
|
1379
1373
|
*/
|
|
1380
1374
|
async renderInstallSummary(results, context = {}) {
|
|
1381
1375
|
const color = await prompts.getColor();
|
|
1376
|
+
const selectedIdes = new Set((context.ides || []).map((ide) => String(ide).toLowerCase()));
|
|
1382
1377
|
|
|
1383
1378
|
// Build step lines with status indicators
|
|
1384
1379
|
const lines = [];
|
|
1385
1380
|
for (const r of results) {
|
|
1381
|
+
let stepLabel = null;
|
|
1382
|
+
|
|
1383
|
+
if (r.status !== 'ok') {
|
|
1384
|
+
stepLabel = r.step;
|
|
1385
|
+
} else if (r.step === 'Core') {
|
|
1386
|
+
stepLabel = 'BMAD';
|
|
1387
|
+
} else if (r.step.startsWith('Module: ')) {
|
|
1388
|
+
stepLabel = r.step;
|
|
1389
|
+
} else if (selectedIdes.has(String(r.step).toLowerCase())) {
|
|
1390
|
+
stepLabel = r.step;
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
if (!stepLabel) {
|
|
1394
|
+
continue;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1386
1397
|
let icon;
|
|
1387
1398
|
if (r.status === 'ok') {
|
|
1388
1399
|
icon = color.green('\u2713');
|
|
@@ -1392,7 +1403,11 @@ class Installer {
|
|
|
1392
1403
|
icon = color.red('\u2717');
|
|
1393
1404
|
}
|
|
1394
1405
|
const detail = r.detail ? color.dim(` (${r.detail})`) : '';
|
|
1395
|
-
lines.push(` ${icon} ${
|
|
1406
|
+
lines.push(` ${icon} ${stepLabel}${detail}`);
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
if ((context.ides || []).length === 0) {
|
|
1410
|
+
lines.push(` ${color.green('\u2713')} No IDE selected ${color.dim('(installed in _bmad only)')}`);
|
|
1396
1411
|
}
|
|
1397
1412
|
|
|
1398
1413
|
// Context and warnings
|
|
@@ -1415,8 +1430,10 @@ class Installer {
|
|
|
1415
1430
|
` Join our Discord: ${color.dim('https://discord.gg/gk8jAdXWmj')}`,
|
|
1416
1431
|
` Star us on GitHub: ${color.dim('https://github.com/bmad-code-org/BMAD-METHOD/')}`,
|
|
1417
1432
|
` Subscribe on YouTube: ${color.dim('https://www.youtube.com/@BMadCode')}`,
|
|
1418
|
-
` Invoke the ${color.cyan('bmad-help')} skill in your IDE Agent to get started`,
|
|
1419
1433
|
);
|
|
1434
|
+
if (context.ides && context.ides.length > 0) {
|
|
1435
|
+
lines.push(` Invoke the ${color.cyan('bmad-help')} skill in your IDE Agent to get started`);
|
|
1436
|
+
}
|
|
1420
1437
|
|
|
1421
1438
|
await prompts.note(lines.join('\n'), 'BMAD is ready to use!');
|
|
1422
1439
|
}
|
|
@@ -129,6 +129,7 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
129
129
|
|
|
130
130
|
const selectedModules = options.selectedModules || [];
|
|
131
131
|
const results = { agents: 0, workflows: 0, tasks: 0, tools: 0, skills: 0 };
|
|
132
|
+
this.skillWriteTracker = config.skill_format ? new Set() : null;
|
|
132
133
|
|
|
133
134
|
// Install standard artifacts (agents, workflows, tasks, tools)
|
|
134
135
|
if (!skipStandardArtifacts) {
|
|
@@ -159,9 +160,11 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
159
160
|
// Install verbatim skills (type: skill)
|
|
160
161
|
if (config.skill_format) {
|
|
161
162
|
results.skills = await this.installVerbatimSkills(projectDir, bmadDir, targetPath, config);
|
|
163
|
+
results.skillDirectories = this.skillWriteTracker ? this.skillWriteTracker.size : 0;
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
await this.printSummary(results, target_dir, options);
|
|
167
|
+
this.skillWriteTracker = null;
|
|
165
168
|
return { success: true, results };
|
|
166
169
|
}
|
|
167
170
|
|
|
@@ -495,6 +498,7 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
|
|
495
498
|
// Create skill directory
|
|
496
499
|
const skillDir = path.join(targetPath, skillName);
|
|
497
500
|
await this.ensureDir(skillDir);
|
|
501
|
+
this.skillWriteTracker?.add(skillName);
|
|
498
502
|
|
|
499
503
|
// Transform content: rewrite frontmatter for skills format
|
|
500
504
|
const skillContent = this.transformToSkillFormat(content, skillName);
|
|
@@ -667,6 +671,7 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
|
|
667
671
|
const skillDir = path.join(targetPath, canonicalId);
|
|
668
672
|
await fs.remove(skillDir);
|
|
669
673
|
await fs.ensureDir(skillDir);
|
|
674
|
+
this.skillWriteTracker?.add(canonicalId);
|
|
670
675
|
|
|
671
676
|
// Copy all skill files, filtering OS/editor artifacts recursively
|
|
672
677
|
const skipPatterns = new Set(['.DS_Store', 'Thumbs.db', 'desktop.ini']);
|
|
@@ -707,11 +712,10 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
|
|
707
712
|
async printSummary(results, targetDir, options = {}) {
|
|
708
713
|
if (options.silent) return;
|
|
709
714
|
const parts = [];
|
|
715
|
+
const totalSkills =
|
|
716
|
+
results.skillDirectories || (results.workflows || 0) + (results.tasks || 0) + (results.tools || 0) + (results.skills || 0);
|
|
717
|
+
if (totalSkills > 0) parts.push(`${totalSkills} skills`);
|
|
710
718
|
if (results.agents > 0) parts.push(`${results.agents} agents`);
|
|
711
|
-
if (results.workflows > 0) parts.push(`${results.workflows} workflows`);
|
|
712
|
-
if (results.tasks > 0) parts.push(`${results.tasks} tasks`);
|
|
713
|
-
if (results.tools > 0) parts.push(`${results.tools} tools`);
|
|
714
|
-
if (results.skills > 0) parts.push(`${results.skills} skills`);
|
|
715
719
|
await prompts.log.success(`${this.name} configured: ${parts.join(', ')} → ${targetDir}`);
|
|
716
720
|
}
|
|
717
721
|
|
|
@@ -162,10 +162,9 @@ class IdeManager {
|
|
|
162
162
|
// Config-driven handlers return { success, results: { agents, workflows, tasks, tools } }
|
|
163
163
|
const r = handlerResult.results;
|
|
164
164
|
const parts = [];
|
|
165
|
+
const totalSkills = r.skillDirectories || (r.workflows || 0) + (r.tasks || 0) + (r.tools || 0) + (r.skills || 0);
|
|
166
|
+
if (totalSkills > 0) parts.push(`${totalSkills} skills`);
|
|
165
167
|
if (r.agents > 0) parts.push(`${r.agents} agents`);
|
|
166
|
-
if (r.workflows > 0) parts.push(`${r.workflows} workflows`);
|
|
167
|
-
if (r.tasks > 0) parts.push(`${r.tasks} tasks`);
|
|
168
|
-
if (r.tools > 0) parts.push(`${r.tools} tools`);
|
|
169
168
|
detail = parts.join(', ');
|
|
170
169
|
}
|
|
171
170
|
// Propagate handler's success status (default true for backward compat)
|