wizz-method 1.0.1 → 1.0.3

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 (211) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/.claude-plugin/marketplace.json +9 -9
  3. package/README.md +4 -4
  4. package/build/artifacts/llms-full.txt +218 -218
  5. package/build/artifacts/llms.txt +4 -4
  6. package/build/site/explanation/advanced-elicitation/index.html +2 -2
  7. package/build/site/explanation/adversarial-review/index.html +2 -2
  8. package/build/site/explanation/analysis-phase/index.html +2 -2
  9. package/build/site/explanation/brainstorming/index.html +2 -2
  10. package/build/site/explanation/checkpoint-preview/index.html +2 -2
  11. package/build/site/explanation/established-projects-faq/index.html +2 -2
  12. package/build/site/explanation/forensic-investigation/index.html +2 -2
  13. package/build/site/explanation/named-agents/index.html +6 -6
  14. package/build/site/explanation/party-mode/index.html +3 -3
  15. package/build/site/explanation/preventing-agent-conflicts/index.html +2 -2
  16. package/build/site/explanation/project-context/index.html +2 -2
  17. package/build/site/explanation/quick-dev/index.html +2 -2
  18. package/build/site/explanation/web-bundles/index.html +2 -2
  19. package/build/site/explanation/why-solutioning-matters/index.html +2 -2
  20. package/build/site/how-to/{customize-bmad → customize-wizz}/index.html +6 -6
  21. package/build/site/how-to/established-projects/index.html +2 -2
  22. package/build/site/how-to/{expand-bmad-for-your-org → expand-wizz-for-your-org}/index.html +7 -7
  23. package/build/site/how-to/{get-answers-about-bmad → get-answers-about-wizz}/index.html +3 -3
  24. package/build/site/how-to/install-custom-modules/index.html +3 -3
  25. package/build/site/how-to/{install-bmad → install-wizz}/index.html +6 -6
  26. package/build/site/how-to/non-interactive-installation/index.html +3 -3
  27. package/build/site/how-to/project-context/index.html +2 -2
  28. package/build/site/how-to/quick-fixes/index.html +2 -2
  29. package/build/site/how-to/shard-large-documents/index.html +2 -2
  30. package/build/site/how-to/upgrade-to-v6/index.html +8 -8
  31. package/build/site/how-to/use-web-bundles/index.html +2 -2
  32. package/build/site/index.html +3 -3
  33. package/build/site/llms-full.txt +218 -218
  34. package/build/site/llms.txt +4 -4
  35. package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
  36. package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
  37. package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
  38. package/build/site/pagefind/fragment/{en_41cab15.pf_fragment → en_887ce56.pf_fragment} +0 -0
  39. package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
  40. package/build/site/pagefind/fragment/{en_56b1635.pf_fragment → en_9b57d7d.pf_fragment} +0 -0
  41. package/build/site/pagefind/fragment/en_ba9fb37.pf_fragment +0 -0
  42. package/build/site/pagefind/fragment/en_bfc56b6.pf_fragment +0 -0
  43. package/build/site/pagefind/fragment/en_c6d9e48.pf_fragment +0 -0
  44. package/build/site/pagefind/fragment/en_cdd885c.pf_fragment +0 -0
  45. package/build/site/pagefind/fragment/en_d890205.pf_fragment +0 -0
  46. package/build/site/pagefind/index/en_5b9d8c6.pf_index +0 -0
  47. package/build/site/pagefind/index/en_868614c.pf_index +0 -0
  48. package/build/site/pagefind/index/en_e4f9bff.pf_index +0 -0
  49. package/build/site/pagefind/pagefind-entry.json +1 -1
  50. package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
  51. package/build/site/reference/agents/index.html +2 -2
  52. package/build/site/reference/commands/index.html +3 -3
  53. package/build/site/reference/core-tools/index.html +3 -3
  54. package/build/site/reference/modules/index.html +4 -4
  55. package/build/site/reference/testing/index.html +2 -2
  56. package/build/site/reference/workflow-map/index.html +2 -2
  57. package/build/site/roadmap/index.html +2 -2
  58. package/build/site/sitemap-0.xml +1 -1
  59. package/build/site/tutorials/getting-started/index.html +4 -4
  60. package/build/site/workflow-map-diagram-fr.html +2 -2
  61. package/package.json +8 -8
  62. package/removals.txt +46 -46
  63. package/src/bmm-skills/1-analysis/research/wizz-domain-research/customize.toml +1 -1
  64. package/src/bmm-skills/1-analysis/research/wizz-market-research/customize.toml +1 -1
  65. package/src/bmm-skills/1-analysis/research/wizz-technical-research/customize.toml +2 -1
  66. package/src/bmm-skills/1-analysis/wizz-agent-analyst/customize.toml +2 -2
  67. package/src/bmm-skills/1-analysis/wizz-agent-tech-writer/customize.toml +2 -2
  68. package/src/bmm-skills/1-analysis/wizz-document-project/customize.toml +1 -1
  69. package/src/bmm-skills/1-analysis/wizz-document-project/templates/index-template.md +1 -1
  70. package/src/bmm-skills/1-analysis/wizz-document-project/templates/project-overview-template.md +1 -1
  71. package/src/bmm-skills/1-analysis/wizz-document-project/templates/source-tree-template.md +1 -1
  72. package/src/bmm-skills/1-analysis/wizz-prfaq/customize.toml +1 -1
  73. package/src/bmm-skills/1-analysis/wizz-product-brief/SKILL.md +1 -1
  74. package/src/bmm-skills/1-analysis/wizz-product-brief/customize.toml +1 -1
  75. package/src/bmm-skills/2-plan-workflows/wizz-agent-pm/customize.toml +2 -2
  76. package/src/bmm-skills/2-plan-workflows/wizz-agent-ux-designer/customize.toml +2 -2
  77. package/src/bmm-skills/2-plan-workflows/wizz-create-prd/SKILL.md +1 -1
  78. package/src/bmm-skills/2-plan-workflows/wizz-create-prd/customize.toml +1 -1
  79. package/src/bmm-skills/2-plan-workflows/wizz-edit-prd/SKILL.md +1 -1
  80. package/src/bmm-skills/2-plan-workflows/wizz-edit-prd/customize.toml +1 -1
  81. package/src/bmm-skills/2-plan-workflows/wizz-prd/SKILL.md +3 -3
  82. package/src/bmm-skills/2-plan-workflows/wizz-prd/customize.toml +2 -2
  83. package/src/bmm-skills/2-plan-workflows/wizz-ux/SKILL.md +2 -2
  84. package/src/bmm-skills/2-plan-workflows/wizz-validate-prd/SKILL.md +1 -1
  85. package/src/bmm-skills/2-plan-workflows/wizz-validate-prd/customize.toml +1 -1
  86. package/src/bmm-skills/3-solutioning/wizz-agent-architect/customize.toml +2 -2
  87. package/src/bmm-skills/3-solutioning/wizz-architecture/SKILL.md +2 -2
  88. package/src/bmm-skills/3-solutioning/wizz-architecture/customize.toml +4 -2
  89. package/src/bmm-skills/3-solutioning/wizz-check-implementation-readiness/customize.toml +1 -1
  90. package/src/bmm-skills/3-solutioning/wizz-create-architecture/SKILL.md +1 -1
  91. package/src/bmm-skills/3-solutioning/wizz-create-architecture/customize.toml +1 -1
  92. package/src/bmm-skills/3-solutioning/wizz-create-epics-and-stories/customize.toml +1 -1
  93. package/src/bmm-skills/3-solutioning/wizz-generate-project-context/customize.toml +1 -1
  94. package/src/bmm-skills/4-implementation/wizz-agent-dev/customize.toml +3 -2
  95. package/src/bmm-skills/4-implementation/wizz-checkpoint-preview/customize.toml +1 -1
  96. package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +1 -1
  97. package/src/bmm-skills/4-implementation/wizz-correct-course/customize.toml +1 -1
  98. package/src/bmm-skills/4-implementation/wizz-create-story/SKILL.md +2 -2
  99. package/src/bmm-skills/4-implementation/wizz-create-story/customize.toml +1 -1
  100. package/src/bmm-skills/4-implementation/wizz-dev-story/SKILL.md +1 -1
  101. package/src/bmm-skills/4-implementation/wizz-dev-story/customize.toml +1 -1
  102. package/src/bmm-skills/4-implementation/wizz-investigate/customize.toml +1 -1
  103. package/src/bmm-skills/4-implementation/wizz-qa-generate-e2e-tests/customize.toml +1 -1
  104. package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +1 -1
  105. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-01-clarify-and-route.md +1 -1
  106. package/src/bmm-skills/4-implementation/wizz-retrospective/customize.toml +1 -1
  107. package/src/bmm-skills/4-implementation/wizz-sprint-planning/customize.toml +1 -1
  108. package/src/bmm-skills/4-implementation/wizz-sprint-status/SKILL.md +5 -5
  109. package/src/bmm-skills/4-implementation/wizz-sprint-status/customize.toml +1 -1
  110. package/src/bmm-skills/module-help.csv +32 -32
  111. package/src/bmm-skills/module.yaml +1 -1
  112. package/src/core-skills/module-help.csv +3 -3
  113. package/src/core-skills/module.yaml +4 -4
  114. package/src/core-skills/wizz-brainstorming/SKILL.md +1 -1
  115. package/src/core-skills/wizz-brainstorming/analysis/catalog-analysis.md +4 -4
  116. package/src/core-skills/wizz-brainstorming/assets/brain-selector.html +5 -5
  117. package/src/core-skills/wizz-brainstorming/customize.toml +1 -1
  118. package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
  119. package/src/core-skills/wizz-brainstorming/scripts/brain.py +5 -5
  120. package/src/core-skills/wizz-brainstorming/scripts/tests/test_brain.py +1 -1
  121. package/src/core-skills/wizz-brainstorming/scripts/tests/test_memlog.py +3 -3
  122. package/src/core-skills/wizz-customize/SKILL.md +6 -6
  123. package/src/core-skills/wizz-customize/scripts/list_customizable_skills.py +3 -3
  124. package/src/core-skills/wizz-customize/scripts/tests/test_list_customizable_skills.py +13 -13
  125. package/src/core-skills/wizz-editorial-review-structure/SKILL.md +1 -1
  126. package/src/core-skills/wizz-help/SKILL.md +3 -3
  127. package/src/core-skills/wizz-party-mode/SKILL.md +5 -3
  128. package/src/core-skills/wizz-party-mode/customize.toml +2 -2
  129. package/src/core-skills/wizz-party-mode/scripts/resolve_party.py +2 -2
  130. package/src/core-skills/wizz-party-mode/scripts/tests/test-resolve_party.py +1 -1
  131. package/src/core-skills/wizz-spec/SKILL.md +3 -3
  132. package/src/core-skills/wizz-spec/customize.toml +2 -2
  133. package/src/modules/wizz/README.md +5 -5
  134. package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
  135. package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
  136. package/src/modules/wizz/agents/wizz-designer/SKILL.md +1 -1
  137. package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
  138. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +2 -2
  139. package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
  140. package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
  141. package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
  142. package/src/modules/wizz/overrides/{bmad-agent-analyst.toml → wizz-agent-analyst.toml} +1 -1
  143. package/src/modules/wizz/overrides/{bmad-agent-architect.toml → wizz-agent-architect.toml} +1 -1
  144. package/src/modules/wizz/overrides/{bmad-agent-dev.toml → wizz-agent-dev.toml} +1 -1
  145. package/src/modules/wizz/overrides/{bmad-agent-pm.toml → wizz-agent-pm.toml} +1 -1
  146. package/src/modules/wizz/overrides/{bmad-agent-tech-writer.toml → wizz-agent-tech-writer.toml} +1 -1
  147. package/src/modules/wizz/overrides/{bmad-agent-ux-designer.toml → wizz-agent-ux-designer.toml} +1 -1
  148. package/src/modules/wizz/scripts/wizz-init.mjs +7 -7
  149. package/src/scripts/resolve_config.py +7 -7
  150. package/src/scripts/resolve_customization.py +2 -2
  151. package/src/scripts/tests/test_memlog.py +1 -1
  152. package/tools/bundle-web-bundles.js +1 -1
  153. package/tools/format-workflow-md.js +2 -2
  154. package/tools/installer/commands/install.js +1 -1
  155. package/tools/installer/commands/status.js +9 -9
  156. package/tools/installer/commands/uninstall.js +5 -5
  157. package/tools/installer/core/existing-install.js +8 -8
  158. package/tools/installer/core/install-paths.js +13 -13
  159. package/tools/installer/core/installer.js +102 -102
  160. package/tools/installer/core/legacy-warnings.js +16 -16
  161. package/tools/installer/core/manifest-generator.js +30 -30
  162. package/tools/installer/core/manifest.js +30 -30
  163. package/tools/installer/core/python-check.js +7 -7
  164. package/tools/installer/ide/_config-driven.js +97 -97
  165. package/tools/installer/ide/manager.js +17 -17
  166. package/tools/installer/ide/platform-codes.yaml +5 -5
  167. package/tools/installer/ide/shared/installed-skills.js +13 -13
  168. package/tools/installer/ide/shared/path-utils.js +46 -46
  169. package/tools/installer/ide/shared/skill-manifest.js +4 -4
  170. package/tools/installer/install-messages.yaml +1 -1
  171. package/tools/installer/list-options.js +3 -3
  172. package/tools/installer/modules/channel-plan.js +1 -1
  173. package/tools/installer/modules/channel-resolver.js +1 -1
  174. package/tools/installer/modules/custom-module-manager.js +16 -16
  175. package/tools/installer/modules/external-manager.js +6 -6
  176. package/tools/installer/modules/official-modules.js +58 -46
  177. package/tools/installer/modules/plugin-resolver.js +3 -3
  178. package/tools/installer/project-root.js +13 -13
  179. package/tools/installer/prompts.js +1 -1
  180. package/tools/installer/set-overrides.js +6 -6
  181. package/tools/installer/ui.js +29 -29
  182. package/tools/installer/yaml-format.js +1 -1
  183. package/tools/migrate-custom-module-paths.js +11 -11
  184. package/tools/skill-validator.md +6 -6
  185. package/tools/validate-skills.js +10 -5
  186. package/web-bundles/README.md +4 -4
  187. package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +1 -1
  188. package/web-bundles/bundles.json +6 -6
  189. package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +1 -1
  190. package/web-bundles/prd-coach/INSTRUCTIONS.md +3 -3
  191. package/web-bundles/prfaq-coach/INSTRUCTIONS.md +3 -3
  192. package/web-bundles/product-brief-coach/INSTRUCTIONS.md +3 -3
  193. package/web-bundles/ux-coach/INSTRUCTIONS.md +1 -1
  194. package/{bmad-modules.yaml → wizz-modules.yaml} +15 -15
  195. package/build/site/pagefind/fragment/en_5ad92a9.pf_fragment +0 -0
  196. package/build/site/pagefind/fragment/en_7aea5bc.pf_fragment +0 -0
  197. package/build/site/pagefind/fragment/en_81bcd7f.pf_fragment +0 -0
  198. package/build/site/pagefind/fragment/en_938e9c4.pf_fragment +0 -0
  199. package/build/site/pagefind/fragment/en_b51d75b.pf_fragment +0 -0
  200. package/build/site/pagefind/fragment/en_c9fea21.pf_fragment +0 -0
  201. package/build/site/pagefind/fragment/en_e07e982.pf_fragment +0 -0
  202. package/build/site/pagefind/fragment/en_f4389af.pf_fragment +0 -0
  203. package/build/site/pagefind/fragment/en_f52c9f9.pf_fragment +0 -0
  204. package/build/site/pagefind/index/en_82c64dc.pf_index +0 -0
  205. package/build/site/pagefind/index/en_d0dd3c7.pf_index +0 -0
  206. package/build/site/pagefind/index/en_e890f88.pf_index +0 -0
  207. package/build/site/pagefind/pagefind.en_ee1b8a17c8.pf_meta +0 -0
  208. /package/build/site/img/{bmad-dark.png → wizz-dark.png} +0 -0
  209. /package/build/site/img/{bmad-light.png → wizz-light.png} +0 -0
  210. /package/src/bmm-skills/1-analysis/wizz-prfaq/{bmad-manifest.json → wizz-manifest.json} +0 -0
  211. /package/tools/installer/{bmad-cli.js → wizz-cli.js} +0 -0
@@ -8,7 +8,7 @@ const { Config } = require('./config');
8
8
  const { getProjectRoot, getSourcePath } = require('../project-root');
9
9
  const { ManifestGenerator } = require('./manifest-generator');
10
10
  const prompts = require('../prompts');
11
- const { BMAD_FOLDER_NAME } = require('../ide/shared/path-utils');
11
+ const { WIZZ_FOLDER_NAME } = require('../ide/shared/path-utils');
12
12
  const { InstallPaths } = require('./install-paths');
13
13
  const { ExternalModuleManager } = require('../modules/external-manager');
14
14
  const { resolveModuleVersion } = require('../modules/version-resolver');
@@ -24,7 +24,7 @@ class Installer {
24
24
  this.ideManager = new IdeManager();
25
25
  this.fileOps = new FileOps();
26
26
  this.installedFiles = new Set(); // Track all installed files
27
- this.bmadFolderName = BMAD_FOLDER_NAME;
27
+ this.wizzFolderName = WIZZ_FOLDER_NAME;
28
28
  }
29
29
 
30
30
  /**
@@ -41,7 +41,7 @@ class Installer {
41
41
  const config = Config.build(originalConfig);
42
42
  const paths = await InstallPaths.create(config);
43
43
  const officialModules = await OfficialModules.build(config, paths);
44
- const existingInstall = await ExistingInstall.detect(paths.bmadDir);
44
+ const existingInstall = await ExistingInstall.detect(paths.wizzDir);
45
45
 
46
46
  try {
47
47
  await warnPreNativeSkillsLegacy({
@@ -50,7 +50,7 @@ class Installer {
50
50
  });
51
51
  } catch (error) {
52
52
  // Legacy-dir scan is informational; never let it abort install.
53
- await prompts.log.warn(`Warning: Could not check for legacy BMAD entries: ${error.message}`);
53
+ await prompts.log.warn(`Warning: Could not check for legacy WIZZ entries: ${error.message}`);
54
54
  }
55
55
 
56
56
  if (existingInstall.installed) {
@@ -64,7 +64,7 @@ class Installer {
64
64
  // Capture pre-install module versions for from→to display
65
65
  const preInstallVersions = new Map();
66
66
  if (existingInstall.installed) {
67
- const existingModules = await this.manifest.getAllModuleVersions(paths.bmadDir);
67
+ const existingModules = await this.manifest.getAllModuleVersions(paths.wizzDir);
68
68
  for (const mod of existingModules) {
69
69
  if (mod.name && mod.version) {
70
70
  preInstallVersions.set(mod.name, mod.version);
@@ -78,7 +78,7 @@ class Installer {
78
78
 
79
79
  // Capture previously installed skill rows before they get overwritten
80
80
  const preservedModules = originalConfig._preserveModules || [];
81
- const previousSkillManifestRows = await this._readSkillManifestRows(paths.bmadDir);
81
+ const previousSkillManifestRows = await this._readSkillManifestRows(paths.wizzDir);
82
82
  const previousSkillIds = this._getPreviousSkillIdsForCleanup(previousSkillManifestRows, preservedModules);
83
83
 
84
84
  const allModules = config.modules || [];
@@ -98,13 +98,13 @@ class Installer {
98
98
 
99
99
  // Skills are now in IDE directories — remove redundant copies from _wizz/.
100
100
  // Also cleans up skill dirs left by older installer versions.
101
- await this._cleanupSkillDirs(paths.bmadDir);
101
+ await this._cleanupSkillDirs(paths.wizzDir);
102
102
 
103
103
  const restoreResult = await this._restoreUserFiles(paths, updateState);
104
104
 
105
105
  // Render consolidated summary
106
106
  await this.renderInstallSummary(results, {
107
- bmadDir: paths.bmadDir,
107
+ wizzDir: paths.wizzDir,
108
108
  modules: config.modules,
109
109
  ides: config.ides,
110
110
  customFiles: restoreResult.customFiles.length > 0 ? restoreResult.customFiles : undefined,
@@ -114,7 +114,7 @@ class Installer {
114
114
 
115
115
  return {
116
116
  success: true,
117
- path: paths.bmadDir,
117
+ path: paths.wizzDir,
118
118
  modules: config.modules,
119
119
  ides: config.ides,
120
120
  projectDir: paths.projectRoot,
@@ -256,7 +256,7 @@ class Installer {
256
256
  installTasks.push({
257
257
  title: 'Creating module directories',
258
258
  task: async (message) => {
259
- const verboseMode = process.env.BMAD_VERBOSE_INSTALL === 'true' || config.verbose;
259
+ const verboseMode = process.env.WIZZ_VERBOSE_INSTALL === 'true' || config.verbose;
260
260
  const moduleLogger = {
261
261
  log: async (msg) => (verboseMode ? await prompts.log.message(msg) : undefined),
262
262
  error: async (msg) => await prompts.log.error(msg),
@@ -266,7 +266,7 @@ class Installer {
266
266
  if (config.modules && config.modules.length > 0) {
267
267
  for (const moduleName of config.modules) {
268
268
  message(`Setting up ${moduleName}...`);
269
- const result = await officialModules.createModuleDirectories(moduleName, paths.bmadDir, {
269
+ const result = await officialModules.createModuleDirectories(moduleName, paths.wizzDir, {
270
270
  installedIDEs: config.ides || [],
271
271
  moduleConfig: moduleConfigs[moduleName] || {},
272
272
  existingModuleConfig: officialModules.existingConfig?.[moduleName] || {},
@@ -290,7 +290,7 @@ class Installer {
290
290
  const configTask = {
291
291
  title: 'Generating configurations',
292
292
  task: async (message) => {
293
- await this.generateModuleConfigs(paths.bmadDir, moduleConfigs);
293
+ await this.generateModuleConfigs(paths.wizzDir, moduleConfigs);
294
294
  addResult('Configurations', 'ok', 'generated');
295
295
 
296
296
  this.installedFiles.add(paths.manifestFile());
@@ -314,14 +314,14 @@ class Installer {
314
314
  modulesForCsvPreserve = preservedModules.length > 0 ? [...allModules, ...preservedModules] : allModules;
315
315
  }
316
316
 
317
- await this._trackPreservedModuleFiles(paths.bmadDir, preservedModules);
317
+ await this._trackPreservedModuleFiles(paths.wizzDir, preservedModules);
318
318
 
319
- await manifestGen.generateManifests(paths.bmadDir, allModulesForManifest, [...this.installedFiles], {
319
+ await manifestGen.generateManifests(paths.wizzDir, allModulesForManifest, [...this.installedFiles], {
320
320
  ides: config.ides || [],
321
321
  preservedModules: modulesForCsvPreserve,
322
322
  moduleConfigs,
323
323
  });
324
- await this._appendPreservedSkillManifestRows(paths.bmadDir, previousSkillManifestRows, preservedModules);
324
+ await this._appendPreservedSkillManifestRows(paths.wizzDir, previousSkillManifestRows, preservedModules);
325
325
 
326
326
  // Apply post-install --set TOML patches. Runs after writeCentralConfig
327
327
  // (inside generateManifests above) so the patch operates on the
@@ -329,7 +329,7 @@ class Installer {
329
329
  // See `tools/installer/set-overrides.js` for routing rules.
330
330
  if (config.setOverrides && Object.keys(config.setOverrides).length > 0) {
331
331
  const { applySetOverrides } = require('../set-overrides');
332
- const applied = await applySetOverrides(config.setOverrides, paths.bmadDir);
332
+ const applied = await applySetOverrides(config.setOverrides, paths.wizzDir);
333
333
  if (applied.length > 0) {
334
334
  const summary = applied.map((a) => `${a.module}.${a.key} → ${a.file}`).join(', ');
335
335
  await prompts.log.info(`Applied --set overrides: ${summary}`);
@@ -337,7 +337,7 @@ class Installer {
337
337
  }
338
338
 
339
339
  message('Generating help catalog...');
340
- await this.mergeModuleHelpCatalogs(paths.bmadDir, manifestGen.agents);
340
+ await this.mergeModuleHelpCatalogs(paths.wizzDir, manifestGen.agents);
341
341
  addResult('Help catalog', 'ok');
342
342
 
343
343
  return 'Configurations generated';
@@ -380,7 +380,7 @@ class Installer {
380
380
  return;
381
381
  }
382
382
 
383
- const setupResults = await this.ideManager.setupBatch(validIdes, paths.projectRoot, paths.bmadDir, {
383
+ const setupResults = await this.ideManager.setupBatch(validIdes, paths.projectRoot, paths.wizzDir, {
384
384
  selectedModules: allModules || [],
385
385
  verbose: config.verbose,
386
386
  previousSkillIds,
@@ -401,41 +401,41 @@ class Installer {
401
401
  * Skills are self-contained in IDE directories, so _wizz/ only needs
402
402
  * module-level files (config.yaml, _config/, etc.).
403
403
  * Also cleans up skill dirs left by older installer versions.
404
- * @param {string} bmadDir - BMAD installation directory
404
+ * @param {string} wizzDir - WIZZ installation directory
405
405
  */
406
- async _cleanupSkillDirs(bmadDir) {
406
+ async _cleanupSkillDirs(wizzDir) {
407
407
  const csv = require('csv-parse/sync');
408
- const csvPath = path.join(bmadDir, '_config', 'skill-manifest.csv');
408
+ const csvPath = path.join(wizzDir, '_config', 'skill-manifest.csv');
409
409
  if (!(await fs.pathExists(csvPath))) return;
410
410
 
411
411
  const csvContent = await fs.readFile(csvPath, 'utf8');
412
412
  const records = csv.parse(csvContent, { columns: true, skip_empty_lines: true });
413
- const bmadFolderName = path.basename(bmadDir);
414
- const bmadPrefix = bmadFolderName + '/';
413
+ const wizzFolderName = path.basename(wizzDir);
414
+ const wizzPrefix = wizzFolderName + '/';
415
415
 
416
416
  for (const record of records) {
417
417
  if (!record.path) continue;
418
- const relativePath = record.path.startsWith(bmadPrefix) ? record.path.slice(bmadPrefix.length) : record.path;
419
- const sourceDir = path.dirname(path.join(bmadDir, relativePath));
418
+ const relativePath = record.path.startsWith(wizzPrefix) ? record.path.slice(wizzPrefix.length) : record.path;
419
+ const sourceDir = path.dirname(path.join(wizzDir, relativePath));
420
420
  if (await fs.pathExists(sourceDir)) {
421
421
  await fs.remove(sourceDir);
422
- await this._removeEmptyParents(path.dirname(sourceDir), bmadDir);
422
+ await this._removeEmptyParents(path.dirname(sourceDir), wizzDir);
423
423
  }
424
424
  }
425
425
  }
426
426
 
427
427
  /**
428
428
  * Remove now-empty parent directories left behind after skill dir cleanup.
429
- * Walks up from dir, stopping at (and never removing) bmadDir. Best-effort:
429
+ * Walks up from dir, stopping at (and never removing) wizzDir. Best-effort:
430
430
  * a directory that vanishes or fills in mid-walk just ends the walk.
431
431
  * @param {string} dir - Directory to start walking up from
432
- * @param {string} bmadDir - BMAD installation directory (boundary)
432
+ * @param {string} wizzDir - WIZZ installation directory (boundary)
433
433
  */
434
- async _removeEmptyParents(dir, bmadDir) {
434
+ async _removeEmptyParents(dir, wizzDir) {
435
435
  let current = dir;
436
436
  while (true) {
437
437
  // Path-boundary check (not a string prefix, so siblings like _wizz2 don't match).
438
- const rel = path.relative(bmadDir, current);
438
+ const rel = path.relative(wizzDir, current);
439
439
  if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) break;
440
440
  try {
441
441
  const entries = await fs.readdir(current);
@@ -448,8 +448,8 @@ class Installer {
448
448
  }
449
449
  }
450
450
 
451
- async _readSkillManifestRows(bmadDir) {
452
- const csvPath = path.join(bmadDir, '_config', 'skill-manifest.csv');
451
+ async _readSkillManifestRows(wizzDir) {
452
+ const csvPath = path.join(wizzDir, '_config', 'skill-manifest.csv');
453
453
  if (!(await fs.pathExists(csvPath))) return [];
454
454
 
455
455
  try {
@@ -473,17 +473,17 @@ class Installer {
473
473
  return ids;
474
474
  }
475
475
 
476
- async _appendPreservedSkillManifestRows(bmadDir, previousRows, preservedModules = []) {
476
+ async _appendPreservedSkillManifestRows(wizzDir, previousRows, preservedModules = []) {
477
477
  if (!previousRows || previousRows.length === 0 || preservedModules.length === 0) return;
478
478
 
479
479
  const preservedModuleSet = new Set(preservedModules);
480
480
  const rowsToPreserve = previousRows.filter((row) => row.canonicalId && row.module && preservedModuleSet.has(row.module));
481
481
  if (rowsToPreserve.length === 0) return;
482
482
 
483
- const csvPath = path.join(bmadDir, '_config', 'skill-manifest.csv');
483
+ const csvPath = path.join(wizzDir, '_config', 'skill-manifest.csv');
484
484
  if (!(await fs.pathExists(csvPath))) return;
485
485
 
486
- const currentRows = await this._readSkillManifestRows(bmadDir);
486
+ const currentRows = await this._readSkillManifestRows(wizzDir);
487
487
  const activeIds = new Set(currentRows.map((row) => row.canonicalId).filter(Boolean));
488
488
  const appendedRows = [];
489
489
 
@@ -529,7 +529,7 @@ class Installer {
529
529
  message(`Restoring ${updateState.customFiles.length} custom files...`);
530
530
 
531
531
  for (const originalPath of updateState.customFiles) {
532
- const relativePath = path.relative(paths.bmadDir, originalPath);
532
+ const relativePath = path.relative(paths.wizzDir, originalPath);
533
533
  const backupPath = path.join(updateState.tempBackupDir, relativePath);
534
534
 
535
535
  if (await fs.pathExists(backupPath)) {
@@ -552,7 +552,7 @@ class Installer {
552
552
  message(`Restoring ${restoredModifiedFiles.length} modified files as .bak...`);
553
553
 
554
554
  for (const modifiedFile of restoredModifiedFiles) {
555
- const relativePath = path.relative(paths.bmadDir, modifiedFile.path);
555
+ const relativePath = path.relative(paths.wizzDir, modifiedFile.path);
556
556
  const tempBackupPath = path.join(updateState.tempModifiedBackupDir, relativePath);
557
557
  const bakPath = modifiedFile.path + '.bak';
558
558
 
@@ -584,8 +584,8 @@ class Installer {
584
584
  */
585
585
  async _prepareUpdateState(paths, config, existingInstall, officialModules) {
586
586
  // Detect custom and modified files BEFORE updating (compare current files vs files-manifest.csv)
587
- const existingFilesManifest = await this.readFilesManifest(paths.bmadDir);
588
- const { customFiles, modifiedFiles } = await this.detectCustomFiles(paths.bmadDir, existingFilesManifest);
587
+ const existingFilesManifest = await this.readFilesManifest(paths.wizzDir);
588
+ const { customFiles, modifiedFiles } = await this.detectCustomFiles(paths.wizzDir, existingFilesManifest);
589
589
 
590
590
  // Preserve existing core configuration during updates
591
591
  // (no-op for quick-update which already has core config from collectModuleConfigQuick)
@@ -630,7 +630,7 @@ class Installer {
630
630
  await fs.ensureDir(tempBackupDir);
631
631
 
632
632
  for (const customFile of customFiles) {
633
- const relativePath = path.relative(paths.bmadDir, customFile);
633
+ const relativePath = path.relative(paths.wizzDir, customFile);
634
634
  const backupPath = path.join(tempBackupDir, relativePath);
635
635
  await fs.ensureDir(path.dirname(backupPath));
636
636
  await fs.copy(customFile, backupPath);
@@ -642,7 +642,7 @@ class Installer {
642
642
  await fs.ensureDir(tempModifiedBackupDir);
643
643
 
644
644
  for (const modifiedFile of modifiedFiles) {
645
- const relativePath = path.relative(paths.bmadDir, modifiedFile.path);
645
+ const relativePath = path.relative(paths.wizzDir, modifiedFile.path);
646
646
  const tempBackupPath = path.join(tempModifiedBackupDir, relativePath);
647
647
  await fs.ensureDir(path.dirname(tempBackupPath));
648
648
  await fs.copy(modifiedFile.path, tempBackupPath, { overwrite: true });
@@ -696,9 +696,9 @@ class Installer {
696
696
  }
697
697
  }
698
698
 
699
- async _trackPreservedModuleFiles(bmadDir, preservedModules = []) {
699
+ async _trackPreservedModuleFiles(wizzDir, preservedModules = []) {
700
700
  for (const moduleName of preservedModules) {
701
- const modulePath = path.join(bmadDir, moduleName);
701
+ const modulePath = path.join(wizzDir, moduleName);
702
702
  if (await fs.pathExists(modulePath)) {
703
703
  await this._trackFilesRecursive(modulePath);
704
704
  }
@@ -727,7 +727,7 @@ class Installer {
727
727
  const moduleConfig = officialModules.moduleConfigs[moduleName] || {};
728
728
  const installResult = await officialModules.install(
729
729
  moduleName,
730
- paths.bmadDir,
730
+ paths.wizzDir,
731
731
  (filePath) => {
732
732
  this.installedFiles.add(filePath);
733
733
  },
@@ -769,11 +769,11 @@ class Installer {
769
769
 
770
770
  /**
771
771
  * Read files-manifest.csv
772
- * @param {string} bmadDir - BMAD installation directory
772
+ * @param {string} wizzDir - WIZZ installation directory
773
773
  * @returns {Array} Array of file entries from files-manifest.csv
774
774
  */
775
- async readFilesManifest(bmadDir) {
776
- const filesManifestPath = path.join(bmadDir, '_config', 'files-manifest.csv');
775
+ async readFilesManifest(wizzDir) {
776
+ const filesManifestPath = path.join(wizzDir, '_config', 'files-manifest.csv');
777
777
  if (!(await fs.pathExists(filesManifestPath))) {
778
778
  return [];
779
779
  }
@@ -825,11 +825,11 @@ class Installer {
825
825
 
826
826
  /**
827
827
  * Detect custom and modified files
828
- * @param {string} bmadDir - BMAD installation directory
828
+ * @param {string} wizzDir - WIZZ installation directory
829
829
  * @param {Array} existingFilesManifest - Previous files from files-manifest.csv
830
830
  * @returns {Object} Object with customFiles and modifiedFiles arrays
831
831
  */
832
- async detectCustomFiles(bmadDir, existingFilesManifest) {
832
+ async detectCustomFiles(wizzDir, existingFilesManifest) {
833
833
  const customFiles = [];
834
834
  const modifiedFiles = [];
835
835
 
@@ -837,7 +837,7 @@ class Installer {
837
837
  // per-user runtime data generated by agents with sidecars. These files
838
838
  // aren't installer-managed and must never be reported as "custom" or
839
839
  // "modified" — they're user state, not user overrides.
840
- const bmadMemoryPaths = ['_memory', 'memory'];
840
+ const wizzMemoryPaths = ['_memory', 'memory'];
841
841
 
842
842
  // Check if the manifest has hashes - if not, we can't detect modifications
843
843
  let manifestHasHashes = false;
@@ -849,7 +849,7 @@ class Installer {
849
849
  const installedFilesMap = new Map();
850
850
  for (const fileEntry of existingFilesManifest) {
851
851
  if (fileEntry.path) {
852
- const absolutePath = path.join(bmadDir, fileEntry.path);
852
+ const absolutePath = path.join(wizzDir, fileEntry.path);
853
853
  installedFilesMap.set(path.normalize(absolutePath), {
854
854
  hash: fileEntry.hash,
855
855
  relativePath: fileEntry.path,
@@ -857,7 +857,7 @@ class Installer {
857
857
  }
858
858
  }
859
859
 
860
- // Recursively scan bmadDir for all files
860
+ // Recursively scan wizzDir for all files
861
861
  const scanDirectory = async (dir) => {
862
862
  try {
863
863
  const entries = await fs.readdir(dir, { withFileTypes: true });
@@ -875,7 +875,7 @@ class Installer {
875
875
  const fileInfo = installedFilesMap.get(normalizedPath);
876
876
 
877
877
  // Skip certain system files that are auto-generated
878
- const relativePath = path.relative(bmadDir, fullPath);
878
+ const relativePath = path.relative(wizzDir, fullPath);
879
879
  const fileName = path.basename(fullPath);
880
880
 
881
881
  // Skip _config directory EXCEPT for modified agent customizations
@@ -883,7 +883,7 @@ class Installer {
883
883
  // Special handling for .customize.yaml files - only preserve if modified
884
884
  if (relativePath.includes('/agents/') && fileName.endsWith('.customize.yaml')) {
885
885
  // Check if the customization file has been modified from manifest
886
- const manifestPath = path.join(bmadDir, '_config', 'manifest.yaml');
886
+ const manifestPath = path.join(wizzDir, '_config', 'manifest.yaml');
887
887
  if (await fs.pathExists(manifestPath)) {
888
888
  const crypto = require('node:crypto');
889
889
  const currentContent = await fs.readFile(fullPath, 'utf8');
@@ -903,7 +903,7 @@ class Installer {
903
903
  continue;
904
904
  }
905
905
 
906
- if (bmadMemoryPaths.some((mp) => relativePath === mp || relativePath.startsWith(mp + '/'))) {
906
+ if (wizzMemoryPaths.some((mp) => relativePath === mp || relativePath.startsWith(mp + '/'))) {
907
907
  continue;
908
908
  }
909
909
 
@@ -937,29 +937,29 @@ class Installer {
937
937
  }
938
938
  };
939
939
 
940
- await scanDirectory(bmadDir);
940
+ await scanDirectory(wizzDir);
941
941
  return { customFiles, modifiedFiles };
942
942
  }
943
943
 
944
944
  /**
945
945
  * Generate clean config.yaml files for each installed module
946
- * @param {string} bmadDir - BMAD installation directory
946
+ * @param {string} wizzDir - WIZZ installation directory
947
947
  * @param {Object} moduleConfigs - Collected configuration values
948
948
  */
949
- async generateModuleConfigs(bmadDir, moduleConfigs) {
949
+ async generateModuleConfigs(wizzDir, moduleConfigs) {
950
950
  const yaml = require('yaml');
951
951
 
952
952
  // Extract core config values to share with other modules
953
953
  const coreConfig = moduleConfigs.core || {};
954
954
 
955
955
  // Get all installed module directories
956
- const entries = await fs.readdir(bmadDir, { withFileTypes: true });
956
+ const entries = await fs.readdir(wizzDir, { withFileTypes: true });
957
957
  const nonModuleDirs = new Set(['_config', '_memory', 'memory', 'docs', 'scripts', 'custom']);
958
958
  const installedModules = entries.filter((entry) => entry.isDirectory() && !nonModuleDirs.has(entry.name)).map((entry) => entry.name);
959
959
 
960
960
  // Generate config.yaml for each installed module
961
961
  for (const moduleName of installedModules) {
962
- const modulePath = path.join(bmadDir, moduleName);
962
+ const modulePath = path.join(wizzDir, moduleName);
963
963
 
964
964
  // Get module-specific config or use empty object if none
965
965
  const config = moduleConfigs[moduleName] || {};
@@ -1040,17 +1040,17 @@ class Installer {
1040
1040
  * Merge all module-help.csv files into a single wizz-help.csv.
1041
1041
  * Scans all installed modules for module-help.csv and merges them.
1042
1042
  * Output preserves the source schema verbatim — see schema below.
1043
- * @param {string} bmadDir - BMAD installation directory
1043
+ * @param {string} wizzDir - WIZZ installation directory
1044
1044
  * @param {Array<Object>} _agentEntries - Unused; retained for call-site compatibility
1045
1045
  */
1046
- async mergeModuleHelpCatalogs(bmadDir, _agentEntries = []) {
1046
+ async mergeModuleHelpCatalogs(wizzDir, _agentEntries = []) {
1047
1047
  const allRows = [];
1048
1048
  const headerRow = MODULE_HELP_CSV_HEADER;
1049
1049
  const COLUMN_COUNT = 13;
1050
1050
  const PHASE_INDEX = 7;
1051
1051
 
1052
1052
  // Get all installed module directories
1053
- const entries = await fs.readdir(bmadDir, { withFileTypes: true });
1053
+ const entries = await fs.readdir(wizzDir, { withFileTypes: true });
1054
1054
  const nonModuleDirs = new Set(['_config', '_memory', 'memory', 'docs', 'scripts', 'custom']);
1055
1055
  const installedModules = entries.filter((entry) => entry.isDirectory() && !nonModuleDirs.has(entry.name)).map((entry) => entry.name);
1056
1056
 
@@ -1065,7 +1065,7 @@ class Installer {
1065
1065
 
1066
1066
  // Map installed module paths
1067
1067
  for (const moduleName of installedModules) {
1068
- const modulePath = path.join(bmadDir, moduleName);
1068
+ const modulePath = path.join(wizzDir, moduleName);
1069
1069
  modulePaths.set(moduleName, modulePath);
1070
1070
  }
1071
1071
 
@@ -1111,7 +1111,7 @@ class Installer {
1111
1111
  allRows.push(padded.map((c) => this.escapeCSVField(c)).join(','));
1112
1112
  }
1113
1113
 
1114
- if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
1114
+ if (process.env.WIZZ_VERBOSE_INSTALL === 'true') {
1115
1115
  await prompts.log.message(` Merged module-help from: ${moduleName}`);
1116
1116
  }
1117
1117
  } catch (error) {
@@ -1136,7 +1136,7 @@ class Installer {
1136
1136
  const sortedRows = decorated.map((d) => d.row);
1137
1137
 
1138
1138
  // Write merged catalog
1139
- const outputDir = path.join(bmadDir, '_config');
1139
+ const outputDir = path.join(wizzDir, '_config');
1140
1140
  await fs.ensureDir(outputDir);
1141
1141
  const outputPath = path.join(outputDir, 'wizz-help.csv');
1142
1142
 
@@ -1146,7 +1146,7 @@ class Installer {
1146
1146
  // Track the installed file
1147
1147
  this.installedFiles.add(outputPath);
1148
1148
 
1149
- if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
1149
+ if (process.env.WIZZ_VERBOSE_INSTALL === 'true') {
1150
1150
  await prompts.log.message(` Generated wizz-help.csv: ${sortedRows.length} workflows`);
1151
1151
  }
1152
1152
  }
@@ -1154,7 +1154,7 @@ class Installer {
1154
1154
  /**
1155
1155
  * Render a consolidated install summary using prompts.note()
1156
1156
  * @param {Array} results - Array of {step, status: 'ok'|'error'|'warn', detail}
1157
- * @param {Object} context - {bmadDir, modules, ides, customFiles, modifiedFiles}
1157
+ * @param {Object} context - {wizzDir, modules, ides, customFiles, modifiedFiles}
1158
1158
  */
1159
1159
  async renderInstallSummary(results, context = {}) {
1160
1160
  const color = await prompts.getColor();
@@ -1216,8 +1216,8 @@ class Installer {
1216
1216
 
1217
1217
  // Context and warnings
1218
1218
  lines.push('');
1219
- if (context.bmadDir) {
1220
- lines.push(` Installed to: ${context.bmadDir}`);
1219
+ if (context.wizzDir) {
1220
+ lines.push(` Installed to: ${context.wizzDir}`);
1221
1221
  }
1222
1222
  if (context.customFiles && context.customFiles.length > 0) {
1223
1223
  lines.push(` ${color.cyan(`Custom files preserved: ${context.customFiles.length}`)}`);
@@ -1250,18 +1250,18 @@ class Installer {
1250
1250
  */
1251
1251
  async quickUpdate(config) {
1252
1252
  const projectDir = path.resolve(config.directory);
1253
- const { bmadDir } = await this.findBmadDir(projectDir);
1253
+ const { wizzDir } = await this.findWizzDir(projectDir);
1254
1254
 
1255
- // Check if bmad directory exists
1256
- if (!(await fs.pathExists(bmadDir))) {
1257
- throw new Error(`Wizz not installed at ${bmadDir}. Use regular install for first-time setup.`);
1255
+ // Check if wizz directory exists
1256
+ if (!(await fs.pathExists(wizzDir))) {
1257
+ throw new Error(`Wizz not installed at ${wizzDir}. Use regular install for first-time setup.`);
1258
1258
  }
1259
1259
 
1260
1260
  // Detect existing installation
1261
- const existingInstall = await ExistingInstall.detect(bmadDir);
1261
+ const existingInstall = await ExistingInstall.detect(wizzDir);
1262
1262
  const installedModules = existingInstall.moduleIds;
1263
1263
  const configuredIdes = existingInstall.ides;
1264
- const projectRoot = path.dirname(bmadDir);
1264
+ const projectRoot = path.dirname(wizzDir);
1265
1265
 
1266
1266
  // Get available modules (what we have source for)
1267
1267
  const availableModulesData = await new OfficialModules().listAvailable();
@@ -1285,7 +1285,7 @@ class Installer {
1285
1285
  const customMgr = new CustomModuleManager();
1286
1286
  for (const moduleId of installedModules) {
1287
1287
  if (!availableModules.some((m) => m.id === moduleId)) {
1288
- const customSource = await customMgr.findModuleSourceByCode(moduleId, { bmadDir });
1288
+ const customSource = await customMgr.findModuleSourceByCode(moduleId, { wizzDir });
1289
1289
  if (customSource) {
1290
1290
  availableModules.push({
1291
1291
  id: moduleId,
@@ -1313,7 +1313,7 @@ class Installer {
1313
1313
  // silently redecide it. Without this, modules previously on 'next' or
1314
1314
  // 'pinned' would trigger a stable-channel tag lookup at config-collection
1315
1315
  // time, burning GitHub API quota and potentially failing.
1316
- const manifestData = await this.manifest.read(bmadDir);
1316
+ const manifestData = await this.manifest.read(wizzDir);
1317
1317
  const channelOptions = { global: null, nextSet: new Set(), pins: new Map(), warnings: [] };
1318
1318
  if (manifestData?.modulesDetailed) {
1319
1319
  const { fetchStableTags, classifyUpgrade, parseGitHubRepo } = require('../modules/channel-resolver');
@@ -1418,7 +1418,7 @@ class Installer {
1418
1418
  }
1419
1419
 
1420
1420
  /**
1421
- * Uninstall BMAD with selective removal options
1421
+ * Uninstall WIZZ with selective removal options
1422
1422
  * @param {string} directory - Project directory
1423
1423
  * @param {Object} options - Uninstall options
1424
1424
  * @param {boolean} [options.removeModules=true] - Remove _wizz/ directory
@@ -1428,15 +1428,15 @@ class Installer {
1428
1428
  */
1429
1429
  async uninstall(directory, options = {}) {
1430
1430
  const projectDir = path.resolve(directory);
1431
- const { bmadDir } = await this.findBmadDir(projectDir);
1431
+ const { wizzDir } = await this.findWizzDir(projectDir);
1432
1432
 
1433
- if (!(await fs.pathExists(bmadDir))) {
1433
+ if (!(await fs.pathExists(wizzDir))) {
1434
1434
  return { success: false, reason: 'not-installed' };
1435
1435
  }
1436
1436
 
1437
1437
  // 1. DETECT: Read state BEFORE deleting anything
1438
- const existingInstall = await ExistingInstall.detect(bmadDir);
1439
- const outputFolder = await this._readOutputFolder(bmadDir);
1438
+ const existingInstall = await ExistingInstall.detect(wizzDir);
1439
+ const outputFolder = await this._readOutputFolder(wizzDir);
1440
1440
 
1441
1441
  const removed = { modules: false, ideConfigs: false, outputFolder: false };
1442
1442
 
@@ -1451,7 +1451,7 @@ class Installer {
1451
1451
  removed.outputFolder = await this.uninstallOutputFolder(projectDir, outputFolder);
1452
1452
  }
1453
1453
 
1454
- // 4. BMAD DIRECTORY (last, after everything that needs it)
1454
+ // 4. WIZZ DIRECTORY (last, after everything that needs it)
1455
1455
  if (options.removeModules !== false) {
1456
1456
  removed.modules = await this.uninstallModules(projectDir);
1457
1457
  }
@@ -1502,9 +1502,9 @@ class Installer {
1502
1502
  * @returns {Promise<boolean>} Whether the directory was removed
1503
1503
  */
1504
1504
  async uninstallModules(projectDir) {
1505
- const { bmadDir } = await this.findBmadDir(projectDir);
1506
- if (await fs.pathExists(bmadDir)) {
1507
- await fs.remove(bmadDir);
1505
+ const { wizzDir } = await this.findWizzDir(projectDir);
1506
+ if (await fs.pathExists(wizzDir)) {
1507
+ await fs.remove(wizzDir);
1508
1508
  return true;
1509
1509
  }
1510
1510
  return false;
@@ -1515,8 +1515,8 @@ class Installer {
1515
1515
  */
1516
1516
  async getStatus(directory) {
1517
1517
  const projectDir = path.resolve(directory);
1518
- const { bmadDir } = await this.findBmadDir(projectDir);
1519
- return await ExistingInstall.detect(bmadDir);
1518
+ const { wizzDir } = await this.findWizzDir(projectDir);
1519
+ return await ExistingInstall.detect(wizzDir);
1520
1520
  }
1521
1521
 
1522
1522
  /**
@@ -1528,37 +1528,37 @@ class Installer {
1528
1528
 
1529
1529
  /**
1530
1530
  * Get the configured output folder name for a project
1531
- * Resolves bmadDir internally from projectDir
1531
+ * Resolves wizzDir internally from projectDir
1532
1532
  * @param {string} projectDir - Project directory
1533
1533
  * @returns {string} Output folder name (relative, default: '_wizz-output')
1534
1534
  */
1535
1535
  async getOutputFolder(projectDir) {
1536
- const { bmadDir } = await this.findBmadDir(projectDir);
1537
- return this._readOutputFolder(bmadDir);
1536
+ const { wizzDir } = await this.findWizzDir(projectDir);
1537
+ return this._readOutputFolder(wizzDir);
1538
1538
  }
1539
1539
 
1540
1540
  /**
1541
- * Find the bmad installation directory in a project
1541
+ * Find the wizz installation directory in a project
1542
1542
  * Always uses the standard _wizz folder name
1543
1543
  * @param {string} projectDir - Project directory
1544
- * @returns {Promise<Object>} { bmadDir: string }
1544
+ * @returns {Promise<Object>} { wizzDir: string }
1545
1545
  */
1546
- async findBmadDir(projectDir) {
1547
- const bmadDir = path.join(projectDir, BMAD_FOLDER_NAME);
1548
- return { bmadDir };
1546
+ async findWizzDir(projectDir) {
1547
+ const wizzDir = path.join(projectDir, WIZZ_FOLDER_NAME);
1548
+ return { wizzDir };
1549
1549
  }
1550
1550
 
1551
1551
  /**
1552
1552
  * Read the output_folder setting from module config files
1553
1553
  * Checks bmm/config.yaml first, then other module configs
1554
- * @param {string} bmadDir - BMAD installation directory
1554
+ * @param {string} wizzDir - WIZZ installation directory
1555
1555
  * @returns {string} Output folder path or default
1556
1556
  */
1557
- async _readOutputFolder(bmadDir) {
1557
+ async _readOutputFolder(wizzDir) {
1558
1558
  const yaml = require('yaml');
1559
1559
 
1560
1560
  // Check bmm/config.yaml first (most common)
1561
- const bmmConfigPath = path.join(bmadDir, 'bmm', 'config.yaml');
1561
+ const bmmConfigPath = path.join(wizzDir, 'bmm', 'config.yaml');
1562
1562
  if (await fs.pathExists(bmmConfigPath)) {
1563
1563
  try {
1564
1564
  const content = await fs.readFile(bmmConfigPath, 'utf8');
@@ -1574,10 +1574,10 @@ class Installer {
1574
1574
 
1575
1575
  // Scan other module config.yaml files
1576
1576
  try {
1577
- const entries = await fs.readdir(bmadDir, { withFileTypes: true });
1577
+ const entries = await fs.readdir(wizzDir, { withFileTypes: true });
1578
1578
  for (const entry of entries) {
1579
1579
  if (!entry.isDirectory() || entry.name === 'bmm' || entry.name.startsWith('_')) continue;
1580
- const configPath = path.join(bmadDir, entry.name, 'config.yaml');
1580
+ const configPath = path.join(wizzDir, entry.name, 'config.yaml');
1581
1581
  if (await fs.pathExists(configPath)) {
1582
1582
  try {
1583
1583
  const content = await fs.readFile(configPath, 'utf8');