bmad-method 4.27.0 → 4.27.2

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.
Files changed (99) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bmad-core/agent-teams/team-all.yaml +6 -6
  3. package/bmad-core/agent-teams/team-fullstack.yaml +6 -6
  4. package/bmad-core/agent-teams/team-no-ui.yaml +2 -2
  5. package/bmad-core/agents/analyst.md +17 -20
  6. package/bmad-core/agents/architect.md +15 -18
  7. package/bmad-core/agents/bmad-master.md +55 -56
  8. package/bmad-core/agents/bmad-orchestrator.md +24 -23
  9. package/bmad-core/agents/dev.md +10 -10
  10. package/bmad-core/agents/pm.md +17 -20
  11. package/bmad-core/agents/po.md +12 -15
  12. package/bmad-core/agents/qa.md +7 -8
  13. package/bmad-core/agents/sm.md +8 -13
  14. package/bmad-core/agents/ux-expert.md +7 -11
  15. package/bmad-core/core-config.yaml +1 -1
  16. package/bmad-core/templates/architecture-tmpl.yaml +650 -0
  17. package/bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
  18. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +476 -0
  19. package/bmad-core/templates/brownfield-prd-tmpl.yaml +280 -0
  20. package/bmad-core/templates/competitor-analysis-tmpl.yaml +293 -0
  21. package/bmad-core/templates/front-end-architecture-tmpl.yaml +206 -0
  22. package/bmad-core/templates/front-end-spec-tmpl.yaml +349 -0
  23. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +805 -0
  24. package/bmad-core/templates/market-research-tmpl.yaml +252 -0
  25. package/bmad-core/templates/{prd-tmpl2.yaml → prd-tmpl.yaml} +3 -3
  26. package/bmad-core/templates/project-brief-tmpl.yaml +221 -0
  27. package/bmad-core/templates/story-tmpl.yaml +137 -0
  28. package/common/tasks/create-doc.md +55 -67
  29. package/common/utils/bmad-doc-template.md +29 -0
  30. package/dist/agents/analyst.txt +1004 -1061
  31. package/dist/agents/architect.txt +2460 -2872
  32. package/dist/agents/bmad-master.txt +3842 -4354
  33. package/dist/agents/bmad-orchestrator.txt +211 -87
  34. package/dist/agents/dev.txt +4 -8
  35. package/dist/agents/pm.txt +557 -587
  36. package/dist/agents/po.txt +149 -102
  37. package/dist/agents/qa.txt +145 -35
  38. package/dist/agents/sm.txt +145 -100
  39. package/dist/agents/ux-expert.txt +413 -522
  40. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +1258 -1236
  41. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +623 -573
  42. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +263 -248
  43. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +9135 -4942
  44. package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +288 -251
  45. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +1123 -1145
  46. package/dist/teams/team-all.txt +4583 -4837
  47. package/dist/teams/team-fullstack.txt +5276 -5520
  48. package/dist/teams/team-ide-minimal.txt +375 -185
  49. package/dist/teams/team-no-ui.txt +4875 -5051
  50. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +2 -2
  51. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +17 -15
  52. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +13 -11
  53. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +13 -11
  54. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +1 -1
  55. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +613 -0
  56. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +356 -0
  57. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +343 -0
  58. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +253 -0
  59. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +484 -0
  60. package/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.md +14 -12
  61. package/expansion-packs/bmad-creator-tools/config.yaml +1 -1
  62. package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.yaml +178 -0
  63. package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.yaml +154 -0
  64. package/expansion-packs/bmad-creator-tools/templates/expansion-pack-plan-tmpl.yaml +120 -0
  65. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +14 -14
  66. package/expansion-packs/bmad-infrastructure-devops/config.yaml +1 -1
  67. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +424 -0
  68. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +629 -0
  69. package/package.json +1 -1
  70. package/tools/builders/web-builder.js +65 -85
  71. package/tools/installer/package.json +1 -1
  72. package/tools/lib/dependency-resolver.js +8 -19
  73. package/zoo/docs/architecture.md +812 -0
  74. package/zoo/docs/brief.md +253 -0
  75. package/zoo/docs/prd.md +500 -0
  76. package/zoo/docs/stories/1.1.story.md +278 -0
  77. package/bmad-core/templates/architecture-tmpl.md +0 -776
  78. package/bmad-core/templates/brainstorming-output-tmpl.md +0 -149
  79. package/bmad-core/templates/brownfield-architecture-tmpl.md +0 -544
  80. package/bmad-core/templates/brownfield-prd-tmpl.md +0 -266
  81. package/bmad-core/templates/competitor-analysis-tmpl.md +0 -291
  82. package/bmad-core/templates/front-end-architecture-tmpl.md +0 -175
  83. package/bmad-core/templates/front-end-spec-tmpl.md +0 -413
  84. package/bmad-core/templates/fullstack-architecture-tmpl.md +0 -1018
  85. package/bmad-core/templates/market-research-tmpl.md +0 -263
  86. package/bmad-core/templates/prd-tmpl.md +0 -202
  87. package/bmad-core/templates/project-brief-tmpl.md +0 -232
  88. package/bmad-core/templates/story-tmpl.md +0 -58
  89. package/common/tasks/create-doc2.md +0 -65
  90. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.md +0 -560
  91. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.md +0 -345
  92. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.md +0 -331
  93. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.md +0 -235
  94. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.md +0 -470
  95. package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.md +0 -154
  96. package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.md +0 -143
  97. package/expansion-packs/bmad-creator-tools/templates/expansion-pack-plan-tmpl.md +0 -91
  98. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.md +0 -415
  99. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
@@ -211,6 +211,7 @@ These references map directly to bundle sections:
211
211
  parsed["activation-instructions"] = parsed["activation-instructions"].filter(
212
212
  (instruction) => {
213
213
  return (
214
+ typeof instruction === 'string' &&
214
215
  !instruction.startsWith("IDE-FILE-RESOLUTION:") &&
215
216
  !instruction.startsWith("REQUEST-RESOLUTION:")
216
217
  );
@@ -393,67 +394,57 @@ These references map directly to bundle sections:
393
394
  if (Array.isArray(resources)) {
394
395
  for (const resourceName of resources) {
395
396
  let found = false;
396
- const extensions = [".md", ".yaml"];
397
397
 
398
398
  // Try expansion pack first
399
- for (const ext of extensions) {
400
- const resourcePath = path.join(packDir, resourceType, `${resourceName}${ext}`);
401
- try {
402
- const resourceContent = await fs.readFile(resourcePath, "utf8");
403
- const resourceWebPath = this.convertToWebPath(resourcePath, packName);
404
- sections.push(
405
- this.formatSection(resourceWebPath, resourceContent, packName)
406
- );
407
- found = true;
408
- break;
409
- } catch (error) {
410
- // Not in expansion pack, continue
411
- }
399
+ const resourcePath = path.join(packDir, resourceType, resourceName);
400
+ try {
401
+ const resourceContent = await fs.readFile(resourcePath, "utf8");
402
+ const resourceWebPath = this.convertToWebPath(resourcePath, packName);
403
+ sections.push(
404
+ this.formatSection(resourceWebPath, resourceContent, packName)
405
+ );
406
+ found = true;
407
+ } catch (error) {
408
+ // Not in expansion pack, continue
412
409
  }
413
410
 
414
411
  // If not found in expansion pack, try core
415
412
  if (!found) {
416
- for (const ext of extensions) {
417
- const corePath = path.join(
418
- this.rootDir,
419
- "bmad-core",
420
- resourceType,
421
- `${resourceName}${ext}`
413
+ const corePath = path.join(
414
+ this.rootDir,
415
+ "bmad-core",
416
+ resourceType,
417
+ resourceName
418
+ );
419
+ try {
420
+ const coreContent = await fs.readFile(corePath, "utf8");
421
+ const coreWebPath = this.convertToWebPath(corePath, packName);
422
+ sections.push(
423
+ this.formatSection(coreWebPath, coreContent, packName)
422
424
  );
423
- try {
424
- const coreContent = await fs.readFile(corePath, "utf8");
425
- const coreWebPath = this.convertToWebPath(corePath, packName);
426
- sections.push(
427
- this.formatSection(coreWebPath, coreContent, packName)
428
- );
429
- found = true;
430
- break;
431
- } catch (error) {
432
- // Not in core either, continue
433
- }
425
+ found = true;
426
+ } catch (error) {
427
+ // Not in core either, continue
434
428
  }
435
429
  }
436
430
 
437
431
  // If not found in core, try common folder
438
432
  if (!found) {
439
- for (const ext of extensions) {
440
- const commonPath = path.join(
441
- this.rootDir,
442
- "common",
443
- resourceType,
444
- `${resourceName}${ext}`
433
+ const commonPath = path.join(
434
+ this.rootDir,
435
+ "common",
436
+ resourceType,
437
+ resourceName
438
+ );
439
+ try {
440
+ const commonContent = await fs.readFile(commonPath, "utf8");
441
+ const commonWebPath = this.convertToWebPath(commonPath, packName);
442
+ sections.push(
443
+ this.formatSection(commonWebPath, commonContent, packName)
445
444
  );
446
- try {
447
- const commonContent = await fs.readFile(commonPath, "utf8");
448
- const commonWebPath = this.convertToWebPath(commonPath, packName);
449
- sections.push(
450
- this.formatSection(commonWebPath, commonContent, packName)
451
- );
452
- found = true;
453
- break;
454
- } catch (error) {
455
- // Not in common either, continue
456
- }
445
+ found = true;
446
+ } catch (error) {
447
+ // Not in common either, continue
457
448
  }
458
449
  }
459
450
 
@@ -509,8 +500,7 @@ These references map directly to bundle sections:
509
500
  for (const resourceFile of resourceFiles.filter(
510
501
  (f) => f.endsWith(".md") || f.endsWith(".yaml")
511
502
  )) {
512
- const fileName = resourceFile.replace(/\.(md|yaml)$/, "");
513
- expansionResources.set(`${resourceDir}#${fileName}`, true);
503
+ expansionResources.set(`${resourceDir}#${resourceFile}`, true);
514
504
  }
515
505
  } catch (error) {
516
506
  // Directory might not exist, that's fine
@@ -597,55 +587,45 @@ These references map directly to bundle sections:
597
587
  // Always prefer expansion pack versions if they exist
598
588
  for (const [key, dep] of allDependencies) {
599
589
  let found = false;
600
- const extensions = [".md", ".yaml"];
601
590
 
602
591
  // Always check expansion pack first, even if the dependency came from a core agent
603
592
  if (expansionResources.has(key)) {
604
593
  // We know it exists in expansion pack, find and load it
605
- for (const ext of extensions) {
606
- const expansionPath = path.join(packDir, dep.type, `${dep.name}${ext}`);
607
- try {
608
- const content = await fs.readFile(expansionPath, "utf8");
609
- const expansionWebPath = this.convertToWebPath(expansionPath, packName);
610
- sections.push(this.formatSection(expansionWebPath, content, packName));
611
- console.log(` ✓ Using expansion override for ${key}`);
612
- found = true;
613
- break;
614
- } catch (error) {
615
- // Try next extension
616
- }
594
+ const expansionPath = path.join(packDir, dep.type, dep.name);
595
+ try {
596
+ const content = await fs.readFile(expansionPath, "utf8");
597
+ const expansionWebPath = this.convertToWebPath(expansionPath, packName);
598
+ sections.push(this.formatSection(expansionWebPath, content, packName));
599
+ console.log(` ✓ Using expansion override for ${key}`);
600
+ found = true;
601
+ } catch (error) {
602
+ // Try next extension
617
603
  }
618
604
  }
619
605
 
620
606
  // If not found in expansion pack (or doesn't exist there), try core
621
607
  if (!found) {
622
- for (const ext of extensions) {
623
- const corePath = path.join(this.rootDir, "bmad-core", dep.type, `${dep.name}${ext}`);
624
- try {
625
- const content = await fs.readFile(corePath, "utf8");
626
- const coreWebPath = this.convertToWebPath(corePath, packName);
627
- sections.push(this.formatSection(coreWebPath, content, packName));
628
- found = true;
629
- break;
630
- } catch (error) {
631
- // Not in core either, continue
632
- }
608
+ const corePath = path.join(this.rootDir, "bmad-core", dep.type, dep.name);
609
+ try {
610
+ const content = await fs.readFile(corePath, "utf8");
611
+ const coreWebPath = this.convertToWebPath(corePath, packName);
612
+ sections.push(this.formatSection(coreWebPath, content, packName));
613
+ found = true;
614
+ } catch (error) {
615
+ // Not in core either, continue
633
616
  }
634
617
  }
635
618
 
636
619
  // If not found in core, try common folder
637
620
  if (!found) {
638
- for (const ext of extensions) {
639
- const commonPath = path.join(this.rootDir, "common", dep.type, `${dep.name}${ext}`);
640
- try {
641
- const content = await fs.readFile(commonPath, "utf8");
642
- const commonWebPath = this.convertToWebPath(commonPath, packName);
643
- sections.push(this.formatSection(commonWebPath, content, packName));
644
- found = true;
645
- break;
646
- } catch (error) {
647
- // Not in common either, continue
648
- }
621
+ const commonPath = path.join(this.rootDir, "common", dep.type, dep.name);
622
+ try {
623
+ const content = await fs.readFile(commonPath, "utf8");
624
+ const commonWebPath = this.convertToWebPath(commonPath, packName);
625
+ sections.push(this.formatSection(commonWebPath, content, packName));
626
+ found = true;
627
+ } catch (error) {
628
+ // Not in common either, continue
649
629
  }
650
630
  }
651
631
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.27.0",
3
+ "version": "4.27.2",
4
4
  "description": "BMad Method installer - AI-powered Agile development framework",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {
@@ -116,31 +116,20 @@ class DependencyResolver {
116
116
  }
117
117
 
118
118
  try {
119
- const extensions = ['.md', '.yaml'];
120
119
  let content = null;
121
120
  let filePath = null;
122
121
 
123
122
  // First try bmad-core
124
- for (const ext of extensions) {
123
+ try {
124
+ filePath = path.join(this.bmadCore, type, id);
125
+ content = await fs.readFile(filePath, 'utf8');
126
+ } catch (e) {
127
+ // If not found in bmad-core, try common folder
125
128
  try {
126
- filePath = path.join(this.bmadCore, type, `${id}${ext}`);
129
+ filePath = path.join(this.common, type, id);
127
130
  content = await fs.readFile(filePath, 'utf8');
128
- break;
129
- } catch (e) {
130
- // Try next extension
131
- }
132
- }
133
-
134
- // If not found in bmad-core, try common folder
135
- if (!content) {
136
- for (const ext of extensions) {
137
- try {
138
- filePath = path.join(this.common, type, `${id}${ext}`);
139
- content = await fs.readFile(filePath, 'utf8');
140
- break;
141
- } catch (e) {
142
- // Try next extension
143
- }
131
+ } catch (e2) {
132
+ // File not found in either location
144
133
  }
145
134
  }
146
135