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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method",
4
- "version": "6.0.5-next.13",
4
+ "version": "6.0.5-next.14",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
@@ -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} ${r.step}${detail}`);
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)