bmad-method 6.3.1-next.4 → 6.3.1-next.5

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.3.1-next.4",
4
+ "version": "6.3.1-next.5",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
@@ -1,5 +1,6 @@
1
1
  code: core
2
2
  name: "BMad Core Module"
3
+ description: "Core configuration and shared resources"
3
4
 
4
5
  header: "BMad Core Configuration"
5
6
  subheader: "Configure the core settings for your BMad installation.\nThese settings will be used across all installed bmad skills, workflows, and agents."
@@ -598,7 +598,7 @@ class UI {
598
598
  const officialCodes = new Set(officialSelected);
599
599
  const externalManager = new ExternalModuleManager();
600
600
  const registryModules = await externalManager.listAvailable();
601
- const officialRegistryCodes = new Set(registryModules.map((m) => m.code));
601
+ const officialRegistryCodes = new Set(['core', 'bmm', ...registryModules.map((m) => m.code)]);
602
602
  const installedNonOfficial = [...installedModuleIds].filter((id) => !officialRegistryCodes.has(id));
603
603
 
604
604
  // Phase 2: Community modules (category drill-down)
@@ -630,6 +630,11 @@ class UI {
630
630
  * @returns {Array} Selected official module codes
631
631
  */
632
632
  async _selectOfficialModules(installedModuleIds = new Set()) {
633
+ // Built-in modules (core, bmm) come from local source, not the registry
634
+ const { OfficialModules } = require('./modules/official-modules');
635
+ const builtInModules = (await new OfficialModules().listAvailable()).modules || [];
636
+
637
+ // External modules come from the registry (with fallback)
633
638
  const externalManager = new ExternalModuleManager();
634
639
  const registryModules = await externalManager.listAvailable();
635
640
 
@@ -637,20 +642,34 @@ class UI {
637
642
  const initialValues = [];
638
643
  const lockedValues = ['core'];
639
644
 
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;
645
+ const buildModuleEntry = async (code, name, description, isDefault) => {
646
+ const isInstalled = installedModuleIds.has(code);
647
+ const version = await getMarketplaceVersion(code);
648
+ const label = version ? `${name} (v${version})` : name;
644
649
  return {
645
650
  label,
646
- value: mod.code,
647
- hint: mod.description,
648
- selected: isInstalled,
651
+ value: code,
652
+ hint: description,
653
+ selected: isInstalled || isDefault,
649
654
  };
650
655
  };
651
656
 
657
+ // Add built-in modules first (always available regardless of network)
658
+ const builtInCodes = new Set();
659
+ for (const mod of builtInModules) {
660
+ const code = mod.id;
661
+ builtInCodes.add(code);
662
+ const entry = await buildModuleEntry(code, mod.name, mod.description, mod.defaultSelected);
663
+ allOptions.push({ label: entry.label, value: entry.value, hint: entry.hint });
664
+ if (entry.selected) {
665
+ initialValues.push(code);
666
+ }
667
+ }
668
+
669
+ // Add external registry modules (skip built-in duplicates)
652
670
  for (const mod of registryModules) {
653
- const entry = await buildModuleEntry(mod);
671
+ if (mod.builtIn || builtInCodes.has(mod.code)) continue;
672
+ const entry = await buildModuleEntry(mod.code, mod.name, mod.description, mod.defaultSelected);
654
673
  allOptions.push({ label: entry.label, value: entry.value, hint: entry.hint });
655
674
  if (entry.selected) {
656
675
  initialValues.push(mod.code);
@@ -1122,12 +1141,26 @@ class UI {
1122
1141
  * @returns {Array} Default module codes
1123
1142
  */
1124
1143
  async getDefaultModules(installedModuleIds = new Set()) {
1125
- const externalManager = new ExternalModuleManager();
1126
- const registryModules = await externalManager.listAvailable();
1144
+ // Built-in modules with default_selected come from local source
1145
+ const { OfficialModules } = require('./modules/official-modules');
1146
+ const builtInModules = (await new OfficialModules().listAvailable()).modules || [];
1127
1147
 
1128
1148
  const defaultModules = [];
1149
+ const seen = new Set();
1150
+
1151
+ for (const mod of builtInModules) {
1152
+ if (mod.defaultSelected || installedModuleIds.has(mod.id)) {
1153
+ defaultModules.push(mod.id);
1154
+ seen.add(mod.id);
1155
+ }
1156
+ }
1157
+
1158
+ // Add external registry defaults
1159
+ const externalManager = new ExternalModuleManager();
1160
+ const registryModules = await externalManager.listAvailable();
1129
1161
 
1130
1162
  for (const mod of registryModules) {
1163
+ if (mod.builtIn || seen.has(mod.code)) continue;
1131
1164
  if (mod.defaultSelected || installedModuleIds.has(mod.code)) {
1132
1165
  defaultModules.push(mod.code);
1133
1166
  }