bmad-method 6.3.1-next.2 β†’ 6.3.1-next.20

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 (155) hide show
  1. package/package.json +1 -2
  2. package/src/bmm-skills/1-analysis/bmad-agent-analyst/SKILL.md +51 -36
  3. package/src/bmm-skills/1-analysis/bmad-agent-analyst/customize.toml +90 -0
  4. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +50 -33
  5. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +81 -0
  6. package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +57 -1
  7. package/src/bmm-skills/1-analysis/bmad-document-project/customize.toml +41 -0
  8. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md +1 -0
  9. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-instructions.md +1 -0
  10. package/src/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +48 -9
  11. package/src/bmm-skills/1-analysis/bmad-prfaq/customize.toml +41 -0
  12. package/src/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +4 -0
  13. package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +44 -9
  14. package/src/bmm-skills/1-analysis/bmad-product-brief/customize.toml +47 -0
  15. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/contextual-discovery.md +8 -7
  16. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/draft-and-review.md +6 -5
  17. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/finalize.md +4 -1
  18. package/src/bmm-skills/1-analysis/bmad-product-brief/prompts/guided-elicitation.md +3 -2
  19. package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +91 -1
  20. package/src/bmm-skills/1-analysis/research/bmad-domain-research/customize.toml +41 -0
  21. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +6 -0
  22. package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +91 -1
  23. package/src/bmm-skills/1-analysis/research/bmad-market-research/customize.toml +41 -0
  24. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +6 -0
  25. package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +91 -1
  26. package/src/bmm-skills/1-analysis/research/bmad-technical-research/customize.toml +41 -0
  27. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +6 -0
  28. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/SKILL.md +50 -35
  29. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.toml +85 -0
  30. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/SKILL.md +50 -31
  31. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +60 -0
  32. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/SKILL.md +99 -1
  33. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/customize.toml +41 -0
  34. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-08-scoping.md +70 -23
  35. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-11-polish.md +1 -1
  36. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-12-complete.md +6 -0
  37. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/SKILL.md +70 -1
  38. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/customize.toml +41 -0
  39. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +6 -0
  40. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/SKILL.md +97 -1
  41. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/customize.toml +42 -0
  42. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +2 -0
  43. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/SKILL.md +99 -1
  44. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/customize.toml +42 -0
  45. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +1 -0
  46. package/src/bmm-skills/3-solutioning/bmad-agent-architect/SKILL.md +50 -30
  47. package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.toml +65 -0
  48. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +86 -1
  49. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/customize.toml +41 -0
  50. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +6 -0
  51. package/src/bmm-skills/3-solutioning/bmad-create-architecture/SKILL.md +69 -1
  52. package/src/bmm-skills/3-solutioning/bmad-create-architecture/customize.toml +41 -0
  53. package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +6 -0
  54. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/SKILL.md +88 -1
  55. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/customize.toml +41 -0
  56. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +6 -0
  57. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +76 -1
  58. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/customize.toml +41 -0
  59. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md +6 -0
  60. package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +48 -43
  61. package/src/bmm-skills/4-implementation/bmad-agent-dev/customize.toml +90 -0
  62. package/src/bmm-skills/4-implementation/bmad-correct-course/SKILL.md +296 -1
  63. package/src/bmm-skills/4-implementation/bmad-correct-course/customize.toml +41 -0
  64. package/src/bmm-skills/4-implementation/bmad-create-story/SKILL.md +412 -1
  65. package/src/bmm-skills/4-implementation/bmad-create-story/customize.toml +41 -0
  66. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md +171 -1
  67. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/customize.toml +41 -0
  68. package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +1507 -1
  69. package/src/bmm-skills/4-implementation/bmad-retrospective/customize.toml +41 -0
  70. package/src/bmm-skills/module.yaml +49 -0
  71. package/src/core-skills/bmad-advanced-elicitation/SKILL.md +7 -1
  72. package/src/core-skills/bmad-customize/SKILL.md +111 -0
  73. package/src/core-skills/bmad-customize/scripts/list_customizable_skills.py +231 -0
  74. package/src/core-skills/bmad-customize/scripts/tests/test_list_customizable_skills.py +249 -0
  75. package/src/core-skills/bmad-distillator/resources/distillate-format-reference.md +1 -1
  76. package/src/core-skills/bmad-party-mode/SKILL.md +13 -10
  77. package/src/core-skills/module-help.csv +1 -0
  78. package/src/core-skills/module.yaml +3 -0
  79. package/src/scripts/resolve_config.py +176 -0
  80. package/src/scripts/resolve_customization.py +230 -0
  81. package/tools/installer/cli-utils.js +0 -137
  82. package/tools/installer/commands/status.js +1 -1
  83. package/tools/installer/commands/uninstall.js +1 -1
  84. package/tools/installer/core/existing-install.js +1 -1
  85. package/tools/installer/core/install-paths.js +12 -6
  86. package/tools/installer/core/installer.js +88 -88
  87. package/tools/installer/core/manifest-generator.js +331 -189
  88. package/tools/installer/core/manifest.js +24 -642
  89. package/tools/installer/file-ops.js +1 -1
  90. package/tools/installer/fs-native.js +116 -0
  91. package/tools/installer/ide/_config-driven.js +1 -1
  92. package/tools/installer/ide/platform-codes.js +1 -1
  93. package/tools/installer/ide/shared/path-utils.js +0 -145
  94. package/tools/installer/ide/shared/skill-manifest.js +1 -1
  95. package/tools/installer/message-loader.js +1 -1
  96. package/tools/installer/modules/community-manager.js +11 -6
  97. package/tools/installer/modules/custom-module-manager.js +1 -28
  98. package/tools/installer/modules/external-manager.js +5 -44
  99. package/tools/installer/modules/official-modules.js +5 -53
  100. package/tools/installer/modules/plugin-resolver.js +1 -1
  101. package/tools/installer/modules/registry-client.js +133 -12
  102. package/tools/installer/modules/version-resolver.js +336 -0
  103. package/tools/installer/project-root.js +55 -1
  104. package/tools/installer/prompts.js +0 -106
  105. package/tools/installer/ui.js +50 -48
  106. package/tools/migrate-custom-module-paths.js +1 -1
  107. package/src/bmm-skills/1-analysis/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -11
  108. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
  109. package/src/bmm-skills/1-analysis/bmad-document-project/workflow.md +0 -25
  110. package/src/bmm-skills/1-analysis/research/bmad-domain-research/workflow.md +0 -51
  111. package/src/bmm-skills/1-analysis/research/bmad-market-research/workflow.md +0 -51
  112. package/src/bmm-skills/1-analysis/research/bmad-technical-research/workflow.md +0 -52
  113. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/bmad-skill-manifest.yaml +0 -11
  114. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -11
  115. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/workflow.md +0 -61
  116. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/workflow.md +0 -35
  117. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/workflow.md +0 -62
  118. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/workflow.md +0 -61
  119. package/src/bmm-skills/3-solutioning/bmad-agent-architect/bmad-skill-manifest.yaml +0 -11
  120. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/workflow.md +0 -47
  121. package/src/bmm-skills/3-solutioning/bmad-create-architecture/workflow.md +0 -32
  122. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/workflow.md +0 -51
  123. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/workflow.md +0 -39
  124. package/src/bmm-skills/4-implementation/bmad-agent-dev/bmad-skill-manifest.yaml +0 -11
  125. package/src/bmm-skills/4-implementation/bmad-correct-course/workflow.md +0 -267
  126. package/src/bmm-skills/4-implementation/bmad-create-story/workflow.md +0 -380
  127. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/workflow.md +0 -136
  128. package/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md +0 -1479
  129. package/tools/installer/ide/shared/agent-command-generator.js +0 -180
  130. package/tools/installer/ide/shared/bmad-artifacts.js +0 -208
  131. package/tools/installer/ide/shared/module-injections.js +0 -136
  132. package/tools/installer/ide/templates/agent-command-template.md +0 -14
  133. package/tools/installer/ide/templates/combined/antigravity.md +0 -8
  134. package/tools/installer/ide/templates/combined/default-agent.md +0 -15
  135. package/tools/installer/ide/templates/combined/default-task.md +0 -10
  136. package/tools/installer/ide/templates/combined/default-tool.md +0 -10
  137. package/tools/installer/ide/templates/combined/default-workflow.md +0 -6
  138. package/tools/installer/ide/templates/combined/gemini-agent.toml +0 -14
  139. package/tools/installer/ide/templates/combined/gemini-task.toml +0 -11
  140. package/tools/installer/ide/templates/combined/gemini-tool.toml +0 -11
  141. package/tools/installer/ide/templates/combined/gemini-workflow-yaml.toml +0 -16
  142. package/tools/installer/ide/templates/combined/gemini-workflow.toml +0 -14
  143. package/tools/installer/ide/templates/combined/kiro-agent.md +0 -16
  144. package/tools/installer/ide/templates/combined/kiro-task.md +0 -9
  145. package/tools/installer/ide/templates/combined/kiro-tool.md +0 -9
  146. package/tools/installer/ide/templates/combined/kiro-workflow.md +0 -7
  147. package/tools/installer/ide/templates/combined/opencode-agent.md +0 -15
  148. package/tools/installer/ide/templates/combined/opencode-task.md +0 -13
  149. package/tools/installer/ide/templates/combined/opencode-tool.md +0 -13
  150. package/tools/installer/ide/templates/combined/opencode-workflow-yaml.md +0 -16
  151. package/tools/installer/ide/templates/combined/opencode-workflow.md +0 -16
  152. package/tools/installer/ide/templates/combined/rovodev.md +0 -9
  153. package/tools/installer/ide/templates/combined/trae.md +0 -9
  154. package/tools/installer/ide/templates/combined/windsurf-workflow.md +0 -10
  155. package/tools/installer/ide/templates/split/.gitkeep +0 -0
@@ -498,26 +498,6 @@ async function password(options) {
498
498
  return result;
499
499
  }
500
500
 
501
- /**
502
- * Group multiple prompts together
503
- * @param {Object} prompts - Object of prompt functions
504
- * @param {Object} [options] - Group options
505
- * @returns {Promise<Object>} Object with all answers
506
- */
507
- async function group(prompts, options = {}) {
508
- const clack = await getClack();
509
-
510
- const result = await clack.group(prompts, {
511
- onCancel: () => {
512
- clack.cancel('Operation cancelled');
513
- process.exit(0);
514
- },
515
- ...options,
516
- });
517
-
518
- return result;
519
- }
520
-
521
501
  /**
522
502
  * Run tasks with spinner feedback
523
503
  * @param {Array} tasks - Array of task objects [{title, task, enabled?}]
@@ -578,42 +558,6 @@ async function box(content, title, options) {
578
558
  clack.box(content, title, options);
579
559
  }
580
560
 
581
- /**
582
- * Create a progress bar for visualizing task completion
583
- * @param {Object} [options] - Progress options (max, style, etc.)
584
- * @returns {Promise<Object>} Progress controller with start, advance, stop methods
585
- */
586
- async function progress(options) {
587
- const clack = await getClack();
588
- return clack.progress(options);
589
- }
590
-
591
- /**
592
- * Create a task log for displaying scrolling subprocess output
593
- * @param {Object} options - TaskLog options (title, limit, retainLog)
594
- * @returns {Promise<Object>} TaskLog controller with message, success, error methods
595
- */
596
- async function taskLog(options) {
597
- const clack = await getClack();
598
- return clack.taskLog(options);
599
- }
600
-
601
- /**
602
- * File system path prompt with autocomplete
603
- * @param {Object} options - Path options
604
- * @param {string} options.message - The prompt message
605
- * @param {string} [options.initialValue] - Initial path value
606
- * @param {boolean} [options.directory=false] - Only allow directories
607
- * @param {Function} [options.validate] - Validation function
608
- * @returns {Promise<string>} Selected path
609
- */
610
- async function pathPrompt(options) {
611
- const clack = await getClack();
612
- const result = await clack.path(options);
613
- await handleCancel(result);
614
- return result;
615
- }
616
-
617
561
  /**
618
562
  * Autocomplete single-select prompt with type-ahead filtering
619
563
  * @param {Object} options - Autocomplete options
@@ -631,50 +575,6 @@ async function autocomplete(options) {
631
575
  return result;
632
576
  }
633
577
 
634
- /**
635
- * Key-based instant selection prompt
636
- * @param {Object} options - SelectKey options
637
- * @param {string} options.message - The prompt message
638
- * @param {Array} options.options - Array of choices [{value, label, hint?}]
639
- * @returns {Promise<any>} Selected value
640
- */
641
- async function selectKey(options) {
642
- const clack = await getClack();
643
- const result = await clack.selectKey(options);
644
- await handleCancel(result);
645
- return result;
646
- }
647
-
648
- /**
649
- * Stream messages with dynamic content (for LLMs, generators, etc.)
650
- */
651
- const stream = {
652
- async info(generator) {
653
- const clack = await getClack();
654
- return clack.stream.info(generator);
655
- },
656
- async success(generator) {
657
- const clack = await getClack();
658
- return clack.stream.success(generator);
659
- },
660
- async step(generator) {
661
- const clack = await getClack();
662
- return clack.stream.step(generator);
663
- },
664
- async warn(generator) {
665
- const clack = await getClack();
666
- return clack.stream.warn(generator);
667
- },
668
- async error(generator) {
669
- const clack = await getClack();
670
- return clack.stream.error(generator);
671
- },
672
- async message(generator, options) {
673
- const clack = await getClack();
674
- return clack.stream.message(generator, options);
675
- },
676
- };
677
-
678
578
  /**
679
579
  * Get the color utility (picocolors instance from @clack/prompts)
680
580
  * @returns {Promise<Object>} The color utility (picocolors)
@@ -790,20 +690,14 @@ module.exports = {
790
690
  note,
791
691
  box,
792
692
  spinner,
793
- progress,
794
- taskLog,
795
693
  select,
796
694
  multiselect,
797
695
  autocompleteMultiselect,
798
696
  autocomplete,
799
- selectKey,
800
697
  confirm,
801
698
  text,
802
- path: pathPrompt,
803
699
  password,
804
- group,
805
700
  tasks,
806
701
  log,
807
- stream,
808
702
  prompt,
809
703
  };
@@ -1,50 +1,19 @@
1
1
  const path = require('node:path');
2
2
  const os = require('node:os');
3
- const fs = require('fs-extra');
3
+ const fs = require('./fs-native');
4
4
  const { CLIUtils } = require('./cli-utils');
5
5
  const { ExternalModuleManager } = require('./modules/external-manager');
6
- const { getProjectRoot } = require('./project-root');
6
+ const { resolveModuleVersion } = require('./modules/version-resolver');
7
7
  const prompts = require('./prompts');
8
8
 
9
9
  /**
10
- * Read module version from .claude-plugin/marketplace.json
10
+ * Read a module version from the freshest local metadata available.
11
11
  * @param {string} moduleCode - Module code (e.g., 'core', 'bmm', 'cis')
12
12
  * @returns {string} Version string or empty string
13
13
  */
14
- async function getMarketplaceVersion(moduleCode) {
15
- let marketplacePath;
16
- if (moduleCode === 'core' || moduleCode === 'bmm') {
17
- marketplacePath = path.join(getProjectRoot(), '.claude-plugin', 'marketplace.json');
18
- } else {
19
- const cacheDir = path.join(os.homedir(), '.bmad', 'cache', 'external-modules', moduleCode);
20
- marketplacePath = path.join(cacheDir, '.claude-plugin', 'marketplace.json');
21
- }
22
- try {
23
- if (await fs.pathExists(marketplacePath)) {
24
- const data = JSON.parse(await fs.readFile(marketplacePath, 'utf8'));
25
- return _extractMarketplaceVersion(data);
26
- }
27
- } catch {
28
- // ignore
29
- }
30
- return '';
31
- }
32
-
33
- /**
34
- * Extract the highest version from marketplace.json plugins array.
35
- * Handles multiple plugins per file safely.
36
- * @param {Object} data - Parsed marketplace.json
37
- * @returns {string} Version string or empty string
38
- */
39
- function _extractMarketplaceVersion(data) {
40
- const plugins = data?.plugins;
41
- if (!Array.isArray(plugins) || plugins.length === 0) return '';
42
- // Use the highest version across all plugins in the file
43
- let best = '';
44
- for (const p of plugins) {
45
- if (p.version && (!best || p.version > best)) best = p.version;
46
- }
47
- return best;
14
+ async function getModuleVersion(moduleCode) {
15
+ const versionInfo = await resolveModuleVersion(moduleCode);
16
+ return versionInfo.version || '';
48
17
  }
49
18
 
50
19
  /**
@@ -598,7 +567,7 @@ class UI {
598
567
  const officialCodes = new Set(officialSelected);
599
568
  const externalManager = new ExternalModuleManager();
600
569
  const registryModules = await externalManager.listAvailable();
601
- const officialRegistryCodes = new Set(registryModules.map((m) => m.code));
570
+ const officialRegistryCodes = new Set(['core', 'bmm', ...registryModules.map((m) => m.code)]);
602
571
  const installedNonOfficial = [...installedModuleIds].filter((id) => !officialRegistryCodes.has(id));
603
572
 
604
573
  // Phase 2: Community modules (category drill-down)
@@ -630,6 +599,11 @@ class UI {
630
599
  * @returns {Array} Selected official module codes
631
600
  */
632
601
  async _selectOfficialModules(installedModuleIds = new Set()) {
602
+ // Built-in modules (core, bmm) come from local source, not the registry
603
+ const { OfficialModules } = require('./modules/official-modules');
604
+ const builtInModules = (await new OfficialModules().listAvailable()).modules || [];
605
+
606
+ // External modules come from the registry (with fallback)
633
607
  const externalManager = new ExternalModuleManager();
634
608
  const registryModules = await externalManager.listAvailable();
635
609
 
@@ -637,20 +611,34 @@ class UI {
637
611
  const initialValues = [];
638
612
  const lockedValues = ['core'];
639
613
 
640
- const buildModuleEntry = async (mod) => {
641
- const isInstalled = installedModuleIds.has(mod.code);
642
- const version = await getMarketplaceVersion(mod.code);
643
- const label = version ? `${mod.name} (v${version})` : mod.name;
614
+ const buildModuleEntry = async (code, name, description, isDefault) => {
615
+ const isInstalled = installedModuleIds.has(code);
616
+ const version = await getModuleVersion(code);
617
+ const label = version ? `${name} (v${version})` : name;
644
618
  return {
645
619
  label,
646
- value: mod.code,
647
- hint: mod.description,
648
- selected: isInstalled,
620
+ value: code,
621
+ hint: description,
622
+ selected: isInstalled || isDefault,
649
623
  };
650
624
  };
651
625
 
626
+ // Add built-in modules first (always available regardless of network)
627
+ const builtInCodes = new Set();
628
+ for (const mod of builtInModules) {
629
+ const code = mod.id;
630
+ builtInCodes.add(code);
631
+ const entry = await buildModuleEntry(code, mod.name, mod.description, mod.defaultSelected);
632
+ allOptions.push({ label: entry.label, value: entry.value, hint: entry.hint });
633
+ if (entry.selected) {
634
+ initialValues.push(code);
635
+ }
636
+ }
637
+
638
+ // Add external registry modules (skip built-in duplicates)
652
639
  for (const mod of registryModules) {
653
- const entry = await buildModuleEntry(mod);
640
+ if (mod.builtIn || builtInCodes.has(mod.code)) continue;
641
+ const entry = await buildModuleEntry(mod.code, mod.name, mod.description, mod.defaultSelected);
654
642
  allOptions.push({ label: entry.label, value: entry.value, hint: entry.hint });
655
643
  if (entry.selected) {
656
644
  initialValues.push(mod.code);
@@ -1122,12 +1110,26 @@ class UI {
1122
1110
  * @returns {Array} Default module codes
1123
1111
  */
1124
1112
  async getDefaultModules(installedModuleIds = new Set()) {
1125
- const externalManager = new ExternalModuleManager();
1126
- const registryModules = await externalManager.listAvailable();
1113
+ // Built-in modules with default_selected come from local source
1114
+ const { OfficialModules } = require('./modules/official-modules');
1115
+ const builtInModules = (await new OfficialModules().listAvailable()).modules || [];
1127
1116
 
1128
1117
  const defaultModules = [];
1118
+ const seen = new Set();
1119
+
1120
+ for (const mod of builtInModules) {
1121
+ if (mod.defaultSelected || installedModuleIds.has(mod.id)) {
1122
+ defaultModules.push(mod.id);
1123
+ seen.add(mod.id);
1124
+ }
1125
+ }
1126
+
1127
+ // Add external registry defaults
1128
+ const externalManager = new ExternalModuleManager();
1129
+ const registryModules = await externalManager.listAvailable();
1129
1130
 
1130
1131
  for (const mod of registryModules) {
1132
+ if (mod.builtIn || seen.has(mod.code)) continue;
1131
1133
  if (mod.defaultSelected || installedModuleIds.has(mod.code)) {
1132
1134
  defaultModules.push(mod.code);
1133
1135
  }
@@ -3,7 +3,7 @@
3
3
  * This should be run once to update existing installations
4
4
  */
5
5
 
6
- const fs = require('fs-extra');
6
+ const fs = require('./installer/fs-native');
7
7
  const path = require('node:path');
8
8
  const yaml = require('yaml');
9
9
  const chalk = require('chalk');
@@ -1,11 +0,0 @@
1
- type: agent
2
- name: bmad-agent-analyst
3
- displayName: Mary
4
- title: Business Analyst
5
- icon: "πŸ“Š"
6
- capabilities: "market research, competitive analysis, requirements elicitation, domain expertise"
7
- role: Strategic Business Analyst + Requirements Expert
8
- identity: "Senior analyst with deep expertise in market research, competitive analysis, and requirements elicitation. Specializes in translating vague needs into actionable specs."
9
- communicationStyle: "Speaks with the excitement of a treasure hunter - thrilled by every clue, energized when patterns emerge. Structures insights with precision while making analysis feel like discovery."
10
- principles: "Channel expert business analysis frameworks: draw upon Porter's Five Forces, SWOT analysis, root cause analysis, and competitive intelligence methodologies to uncover what others miss. Every business challenge has root causes waiting to be discovered. Ground findings in verifiable evidence. Articulate requirements with absolute precision. Ensure all stakeholder voices heard."
11
- module: bmm
@@ -1,11 +0,0 @@
1
- type: agent
2
- name: bmad-agent-tech-writer
3
- displayName: Paige
4
- title: Technical Writer
5
- icon: "πŸ“š"
6
- capabilities: "documentation, Mermaid diagrams, standards compliance, concept explanation"
7
- role: Technical Documentation Specialist + Knowledge Curator
8
- identity: "Experienced technical writer expert in CommonMark, DITA, OpenAPI. Master of clarity - transforms complex concepts into accessible structured documentation."
9
- communicationStyle: "Patient educator who explains like teaching a friend. Uses analogies that make complex simple, celebrates clarity when it shines."
10
- principles: "Every Technical Document I touch helps someone accomplish a task. Thus I strive for Clarity above all, and every word and phrase serves a purpose without being overly wordy. I believe a picture/diagram is worth 1000s of words and will include diagrams over drawn out text. I understand the intended audience or will clarify with the user so I know when to simplify vs when to be detailed."
11
- module: bmm
@@ -1,25 +0,0 @@
1
- # Document Project Workflow
2
-
3
- **Goal:** Document brownfield projects for AI context.
4
-
5
- **Your Role:** Project documentation specialist.
6
- - Communicate all responses in {communication_language}
7
-
8
- ---
9
-
10
- ## INITIALIZATION
11
-
12
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
13
- - Use `{user_name}` for greeting
14
- - Use `{communication_language}` for all communications
15
- - Use `{document_output_language}` for output documents
16
- - Use `{planning_artifacts}` for output location and artifact scanning
17
- - Use `{project_knowledge}` for additional context scanning
18
-
19
- 2. **Greet user** as `{user_name}`, speaking in `{communication_language}`.
20
-
21
- ---
22
-
23
- ## EXECUTION
24
-
25
- Read fully and follow: `./instructions.md`
@@ -1,51 +0,0 @@
1
- # Domain Research Workflow
2
-
3
- **Goal:** Conduct comprehensive domain/industry research using current web data and verified sources to produce complete research documents with compelling narratives and proper citations.
4
-
5
- **Your Role:** You are a domain research facilitator working with an expert partner. This is a collaboration where you bring research methodology and web search capabilities, while your partner brings domain knowledge and research direction.
6
-
7
- ## PREREQUISITE
8
-
9
- **β›” Web search required.** If unavailable, abort and tell the user.
10
-
11
- ## Activation
12
-
13
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
14
- - Use `{user_name}` for greeting
15
- - Use `{communication_language}` for all communications
16
- - Use `{document_output_language}` for output documents
17
- - Use `{planning_artifacts}` for output location and artifact scanning
18
- - Use `{project_knowledge}` for additional context scanning
19
-
20
- ## QUICK TOPIC DISCOVERY
21
-
22
- "Welcome {{user_name}}! Let's get started with your **domain/industry research**.
23
-
24
- **What domain, industry, or sector do you want to research?**
25
-
26
- For example:
27
- - 'The healthcare technology industry'
28
- - 'Sustainable packaging regulations in Europe'
29
- - 'Construction and building materials sector'
30
- - 'Or any other domain you have in mind...'"
31
-
32
- ### Topic Clarification
33
-
34
- Based on the user's topic, briefly clarify:
35
- 1. **Core Domain**: "What specific aspect of [domain] are you most interested in?"
36
- 2. **Research Goals**: "What do you hope to achieve with this research?"
37
- 3. **Scope**: "Should we focus broadly or dive deep into specific aspects?"
38
-
39
- ## ROUTE TO DOMAIN RESEARCH STEPS
40
-
41
- After gathering the topic and goals:
42
-
43
- 1. Set `research_type = "domain"`
44
- 2. Set `research_topic = [discovered topic from discussion]`
45
- 3. Set `research_goals = [discovered goals from discussion]`
46
- 4. Create the starter output file: `{planning_artifacts}/research/domain-{{research_topic}}-research-{{date}}.md` with exact copy of the `./research.template.md` contents
47
- 5. Load: `./domain-steps/step-01-init.md` with topic context
48
-
49
- **Note:** The discovered topic from the discussion should be passed to the initialization step, so it doesn't need to ask "What do you want to research?" again - it can focus on refining the scope for domain research.
50
-
51
- **βœ… YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`**
@@ -1,51 +0,0 @@
1
- # Market Research Workflow
2
-
3
- **Goal:** Conduct comprehensive market research using current web data and verified sources to produce complete research documents with compelling narratives and proper citations.
4
-
5
- **Your Role:** You are a market research facilitator working with an expert partner. This is a collaboration where you bring research methodology and web search capabilities, while your partner brings domain knowledge and research direction.
6
-
7
- ## PREREQUISITE
8
-
9
- **β›” Web search required.** If unavailable, abort and tell the user.
10
-
11
- ## Activation
12
-
13
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
14
- - Use `{user_name}` for greeting
15
- - Use `{communication_language}` for all communications
16
- - Use `{document_output_language}` for output documents
17
- - Use `{planning_artifacts}` for output location and artifact scanning
18
- - Use `{project_knowledge}` for additional context scanning
19
-
20
- ## QUICK TOPIC DISCOVERY
21
-
22
- "Welcome {{user_name}}! Let's get started with your **market research**.
23
-
24
- **What topic, problem, or area do you want to research?**
25
-
26
- For example:
27
- - 'The electric vehicle market in Europe'
28
- - 'Plant-based food alternatives market'
29
- - 'Mobile payment solutions in Southeast Asia'
30
- - 'Or anything else you have in mind...'"
31
-
32
- ### Topic Clarification
33
-
34
- Based on the user's topic, briefly clarify:
35
- 1. **Core Topic**: "What exactly about [topic] are you most interested in?"
36
- 2. **Research Goals**: "What do you hope to achieve with this research?"
37
- 3. **Scope**: "Should we focus broadly or dive deep into specific aspects?"
38
-
39
- ## ROUTE TO MARKET RESEARCH STEPS
40
-
41
- After gathering the topic and goals:
42
-
43
- 1. Set `research_type = "market"`
44
- 2. Set `research_topic = [discovered topic from discussion]`
45
- 3. Set `research_goals = [discovered goals from discussion]`
46
- 4. Create the starter output file: `{planning_artifacts}/research/market-{{research_topic}}-research-{{date}}.md` with exact copy of the `./research.template.md` contents
47
- 5. Load: `./steps/step-01-init.md` with topic context
48
-
49
- **Note:** The discovered topic from the discussion should be passed to the initialization step, so it doesn't need to ask "What do you want to research?" again - it can focus on refining the scope for market research.
50
-
51
- **βœ… YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`**
@@ -1,52 +0,0 @@
1
-
2
- # Technical Research Workflow
3
-
4
- **Goal:** Conduct comprehensive technical research using current web data and verified sources to produce complete research documents with compelling narratives and proper citations.
5
-
6
- **Your Role:** You are a technical research facilitator working with an expert partner. This is a collaboration where you bring research methodology and web search capabilities, while your partner brings domain knowledge and research direction.
7
-
8
- ## PREREQUISITE
9
-
10
- **β›” Web search required.** If unavailable, abort and tell the user.
11
-
12
- ## Activation
13
-
14
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
15
- - Use `{user_name}` for greeting
16
- - Use `{communication_language}` for all communications
17
- - Use `{document_output_language}` for output documents
18
- - Use `{planning_artifacts}` for output location and artifact scanning
19
- - Use `{project_knowledge}` for additional context scanning
20
-
21
- ## QUICK TOPIC DISCOVERY
22
-
23
- "Welcome {{user_name}}! Let's get started with your **technical research**.
24
-
25
- **What technology, tool, or technical area do you want to research?**
26
-
27
- For example:
28
- - 'React vs Vue for large-scale applications'
29
- - 'GraphQL vs REST API architectures'
30
- - 'Serverless deployment options for Node.js'
31
- - 'Or any other technical topic you have in mind...'"
32
-
33
- ### Topic Clarification
34
-
35
- Based on the user's topic, briefly clarify:
36
- 1. **Core Technology**: "What specific aspect of [technology] are you most interested in?"
37
- 2. **Research Goals**: "What do you hope to achieve with this research?"
38
- 3. **Scope**: "Should we focus broadly or dive deep into specific aspects?"
39
-
40
- ## ROUTE TO TECHNICAL RESEARCH STEPS
41
-
42
- After gathering the topic and goals:
43
-
44
- 1. Set `research_type = "technical"`
45
- 2. Set `research_topic = [discovered topic from discussion]`
46
- 3. Set `research_goals = [discovered goals from discussion]`
47
- 4. Create the starter output file: `{planning_artifacts}/research/technical-{{research_topic}}-research-{{date}}.md` with exact copy of the `./research.template.md` contents
48
- 5. Load: `./technical-steps/step-01-init.md` with topic context
49
-
50
- **Note:** The discovered topic from the discussion should be passed to the initialization step, so it doesn't need to ask "What do you want to research?" again - it can focus on refining the scope for technical research.
51
-
52
- **βœ… YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`**
@@ -1,11 +0,0 @@
1
- type: agent
2
- name: bmad-agent-pm
3
- displayName: John
4
- title: Product Manager
5
- icon: "πŸ“‹"
6
- capabilities: "PRD creation, requirements discovery, stakeholder alignment, user interviews"
7
- role: "Product Manager specializing in collaborative PRD creation through user interviews, requirement discovery, and stakeholder alignment."
8
- identity: "Product management veteran with 8+ years launching B2B and consumer products. Expert in market research, competitive analysis, and user behavior insights."
9
- communicationStyle: "Asks 'WHY?' relentlessly like a detective on a case. Direct and data-sharp, cuts through fluff to what actually matters."
10
- principles: "Channel expert product manager thinking: draw upon deep knowledge of user-centered design, Jobs-to-be-Done framework, opportunity scoring, and what separates great products from mediocre ones. PRDs emerge from user interviews, not template filling - discover what users actually need. Ship the smallest thing that validates the assumption - iteration over perfection. Technical feasibility is a constraint, not the driver - user value first."
11
- module: bmm
@@ -1,11 +0,0 @@
1
- type: agent
2
- name: bmad-agent-ux-designer
3
- displayName: Sally
4
- title: UX Designer
5
- icon: "🎨"
6
- capabilities: "user research, interaction design, UI patterns, experience strategy"
7
- role: User Experience Designer + UI Specialist
8
- identity: "Senior UX Designer with 7+ years creating intuitive experiences across web and mobile. Expert in user research, interaction design, AI-assisted tools."
9
- communicationStyle: "Paints pictures with words, telling user stories that make you FEEL the problem. Empathetic advocate with creative storytelling flair."
10
- principles: "Every decision serves genuine user needs. Start simple, evolve through feedback. Balance empathy with edge case attention. AI tools accelerate human-centered design. Data-informed but always creative."
11
- module: bmm
@@ -1,61 +0,0 @@
1
- ---
2
- main_config: '{project-root}/_bmad/bmm/config.yaml'
3
- outputFile: '{planning_artifacts}/prd.md'
4
- ---
5
-
6
- # PRD Create Workflow
7
-
8
- **Goal:** Create comprehensive PRDs through structured workflow facilitation.
9
-
10
- **Your Role:** Product-focused PM facilitator collaborating with an expert peer.
11
-
12
- You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description.
13
-
14
- ## WORKFLOW ARCHITECTURE
15
-
16
- This uses **step-file architecture** for disciplined execution:
17
-
18
- ### Core Principles
19
-
20
- - **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
21
- - **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so
22
- - **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed
23
- - **State Tracking**: Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document
24
- - **Append-Only Building**: Build documents by appending content as directed to the output file
25
-
26
- ### Step Processing Rules
27
-
28
- 1. **READ COMPLETELY**: Always read the entire step file before taking any action
29
- 2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate
30
- 3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection
31
- 4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue)
32
- 5. **SAVE STATE**: Update `stepsCompleted` in frontmatter before loading next step
33
- 6. **LOAD NEXT**: When directed, read fully and follow the next step file
34
-
35
- ### Critical Rules (NO EXCEPTIONS)
36
-
37
- - πŸ›‘ **NEVER** load multiple step files simultaneously
38
- - πŸ“– **ALWAYS** read entire step file before execution
39
- - 🚫 **NEVER** skip steps or optimize the sequence
40
- - πŸ’Ύ **ALWAYS** update frontmatter of output files when writing the final output for a specific step
41
- - 🎯 **ALWAYS** follow the exact instructions in the step file
42
- - ⏸️ **ALWAYS** halt at menus and wait for user input
43
- - πŸ“‹ **NEVER** create mental todo lists from future steps
44
-
45
- ## Activation
46
-
47
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
48
- - Use `{user_name}` for greeting
49
- - Use `{communication_language}` for all communications
50
- - Use `{document_output_language}` for output documents
51
- - Use `{planning_artifacts}` for output location and artifact scanning
52
- - Use `{project_knowledge}` for additional context scanning
53
-
54
- βœ… YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the configured `{communication_language}`.
55
- βœ… YOU MUST ALWAYS WRITE all artifact and document content in `{document_output_language}`.
56
-
57
- 2. Route to Create Workflow
58
-
59
- "**Create Mode: Creating a new PRD from scratch.**"
60
-
61
- Read fully and follow: `./steps-c/step-01-init.md`
@@ -1,35 +0,0 @@
1
- # Create UX Design Workflow
2
-
3
- **Goal:** Create comprehensive UX design specifications through collaborative visual exploration and informed decision-making where you act as a UX facilitator working with a product stakeholder.
4
-
5
- ---
6
-
7
- ## WORKFLOW ARCHITECTURE
8
-
9
- This uses **micro-file architecture** for disciplined execution:
10
-
11
- - Each step is a self-contained file with embedded rules
12
- - Sequential progression with user control at each step
13
- - Document state tracked in frontmatter
14
- - Append-only document building through conversation
15
-
16
- ---
17
-
18
- ## Activation
19
-
20
- 1. Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve::
21
- - Use `{user_name}` for greeting
22
- - Use `{communication_language}` for all communications
23
- - Use `{document_output_language}` for output documents
24
- - Use `{planning_artifacts}` for output location and artifact scanning
25
- - Use `{project_knowledge}` for additional context scanning
26
-
27
- ### Paths
28
-
29
- - `default_output_file` = `{planning_artifacts}/ux-design-specification.md`
30
-
31
- ## EXECUTION
32
-
33
- - βœ… YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
34
- - βœ… YOU MUST ALWAYS WRITE all artifact and document content in `{document_output_language}`
35
- - Read fully and follow: `./steps/step-01-init.md` to begin the UX design workflow.