bmalph 2.5.0 → 2.7.0

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 (176) hide show
  1. package/README.md +50 -36
  2. package/bmad/lite/create-prd.md +145 -0
  3. package/dist/cli.js +13 -4
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/check-updates.js +3 -18
  6. package/dist/commands/check-updates.js.map +1 -0
  7. package/dist/commands/doctor-checks.js +103 -0
  8. package/dist/commands/doctor-checks.js.map +1 -0
  9. package/dist/commands/doctor-health-checks.js +101 -0
  10. package/dist/commands/doctor-health-checks.js.map +1 -0
  11. package/dist/commands/doctor-runtime-checks.js +143 -0
  12. package/dist/commands/doctor-runtime-checks.js.map +1 -0
  13. package/dist/commands/doctor.js +6 -372
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/implement.js +14 -17
  16. package/dist/commands/implement.js.map +1 -0
  17. package/dist/commands/init.js +26 -47
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/reset.js +7 -10
  20. package/dist/commands/reset.js.map +1 -0
  21. package/dist/commands/run.js +46 -0
  22. package/dist/commands/run.js.map +1 -0
  23. package/dist/commands/status.js +8 -46
  24. package/dist/commands/status.js.map +1 -0
  25. package/dist/commands/upgrade.js +8 -11
  26. package/dist/commands/upgrade.js.map +1 -0
  27. package/dist/commands/watch.js +5 -5
  28. package/dist/commands/watch.js.map +1 -0
  29. package/dist/installer.js +332 -78
  30. package/dist/installer.js.map +1 -0
  31. package/dist/platform/aider.js +8 -64
  32. package/dist/platform/aider.js.map +1 -0
  33. package/dist/platform/claude-code.js +6 -40
  34. package/dist/platform/claude-code.js.map +1 -0
  35. package/dist/platform/codex.js +8 -60
  36. package/dist/platform/codex.js.map +1 -0
  37. package/dist/platform/copilot.js +11 -66
  38. package/dist/platform/copilot.js.map +1 -0
  39. package/dist/platform/cursor.js +10 -65
  40. package/dist/platform/cursor.js.map +1 -0
  41. package/dist/platform/detect.js +2 -1
  42. package/dist/platform/detect.js.map +1 -0
  43. package/dist/platform/doctor-checks.js +70 -0
  44. package/dist/platform/doctor-checks.js.map +1 -0
  45. package/dist/platform/instructions-snippet.js +74 -0
  46. package/dist/platform/instructions-snippet.js.map +1 -0
  47. package/dist/platform/registry.js +7 -0
  48. package/dist/platform/registry.js.map +1 -0
  49. package/dist/platform/resolve.js +1 -0
  50. package/dist/platform/resolve.js.map +1 -0
  51. package/dist/platform/types.js +10 -1
  52. package/dist/platform/types.js.map +1 -0
  53. package/dist/platform/windsurf.js +8 -64
  54. package/dist/platform/windsurf.js.map +1 -0
  55. package/dist/reset.js +24 -27
  56. package/dist/reset.js.map +1 -0
  57. package/dist/run/ralph-process.js +95 -0
  58. package/dist/run/ralph-process.js.map +1 -0
  59. package/dist/run/run-dashboard.js +104 -0
  60. package/dist/run/run-dashboard.js.map +1 -0
  61. package/dist/run/types.js +2 -0
  62. package/dist/run/types.js.map +1 -0
  63. package/dist/transition/artifact-scan.js +6 -15
  64. package/dist/transition/artifact-scan.js.map +1 -0
  65. package/dist/transition/artifacts.js +2 -1
  66. package/dist/transition/artifacts.js.map +1 -0
  67. package/dist/transition/context.js +1 -0
  68. package/dist/transition/context.js.map +1 -0
  69. package/dist/transition/fix-plan.js +1 -0
  70. package/dist/transition/fix-plan.js.map +1 -0
  71. package/dist/transition/index.js +1 -0
  72. package/dist/transition/index.js.map +1 -0
  73. package/dist/transition/orchestration.js +19 -28
  74. package/dist/transition/orchestration.js.map +1 -0
  75. package/dist/transition/preflight.js +1 -0
  76. package/dist/transition/preflight.js.map +1 -0
  77. package/dist/transition/specs-changelog.js +3 -2
  78. package/dist/transition/specs-changelog.js.map +1 -0
  79. package/dist/transition/specs-index.js +7 -6
  80. package/dist/transition/specs-index.js.map +1 -0
  81. package/dist/transition/story-parsing.js +1 -0
  82. package/dist/transition/story-parsing.js.map +1 -0
  83. package/dist/transition/tech-stack.js +2 -1
  84. package/dist/transition/tech-stack.js.map +1 -0
  85. package/dist/transition/types.js +1 -0
  86. package/dist/transition/types.js.map +1 -0
  87. package/dist/utils/artifact-definitions.js +19 -0
  88. package/dist/utils/artifact-definitions.js.map +1 -0
  89. package/dist/utils/config.js +3 -2
  90. package/dist/utils/config.js.map +1 -0
  91. package/dist/utils/constants.js +12 -49
  92. package/dist/utils/constants.js.map +1 -0
  93. package/dist/utils/dryrun.js +1 -20
  94. package/dist/utils/dryrun.js.map +1 -0
  95. package/dist/utils/errors.js +1 -19
  96. package/dist/utils/errors.js.map +1 -0
  97. package/dist/utils/file-system.js +34 -3
  98. package/dist/utils/file-system.js.map +1 -0
  99. package/dist/utils/format-status.js +31 -0
  100. package/dist/utils/format-status.js.map +1 -0
  101. package/dist/utils/github.js +21 -8
  102. package/dist/utils/github.js.map +1 -0
  103. package/dist/utils/json.js +5 -1
  104. package/dist/utils/json.js.map +1 -0
  105. package/dist/utils/logger.js +1 -14
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/state.js +3 -2
  108. package/dist/utils/state.js.map +1 -0
  109. package/dist/utils/validate.js +18 -13
  110. package/dist/utils/validate.js.map +1 -0
  111. package/dist/watch/dashboard.js +23 -11
  112. package/dist/watch/dashboard.js.map +1 -0
  113. package/dist/watch/file-watcher.js +5 -2
  114. package/dist/watch/file-watcher.js.map +1 -0
  115. package/dist/watch/renderer.js +2 -15
  116. package/dist/watch/renderer.js.map +1 -0
  117. package/dist/watch/state-reader.js +19 -9
  118. package/dist/watch/state-reader.js.map +1 -0
  119. package/dist/watch/types.js +1 -0
  120. package/dist/watch/types.js.map +1 -0
  121. package/package.json +4 -6
  122. package/ralph/drivers/copilot.sh +89 -0
  123. package/ralph/drivers/cursor.sh +90 -0
  124. package/ralph/ralph_loop.sh +20 -13
  125. package/ralph/templates/ralphrc.template +1 -1
  126. package/slash-commands/bmalph-watch.md +2 -0
  127. package/dist/cli.d.ts +0 -1
  128. package/dist/commands/check-updates.d.ts +0 -5
  129. package/dist/commands/doctor.d.ts +0 -40
  130. package/dist/commands/implement.d.ts +0 -6
  131. package/dist/commands/init.d.ts +0 -9
  132. package/dist/commands/reset.d.ts +0 -7
  133. package/dist/commands/status.d.ts +0 -7
  134. package/dist/commands/upgrade.d.ts +0 -7
  135. package/dist/commands/watch.d.ts +0 -6
  136. package/dist/installer.d.ts +0 -33
  137. package/dist/platform/aider.d.ts +0 -2
  138. package/dist/platform/claude-code.d.ts +0 -2
  139. package/dist/platform/codex.d.ts +0 -2
  140. package/dist/platform/copilot.d.ts +0 -2
  141. package/dist/platform/cursor.d.ts +0 -2
  142. package/dist/platform/detect.d.ts +0 -7
  143. package/dist/platform/index.d.ts +0 -4
  144. package/dist/platform/index.js +0 -3
  145. package/dist/platform/registry.d.ts +0 -4
  146. package/dist/platform/resolve.d.ts +0 -8
  147. package/dist/platform/types.d.ts +0 -41
  148. package/dist/platform/windsurf.d.ts +0 -2
  149. package/dist/reset.d.ts +0 -18
  150. package/dist/transition/artifact-scan.d.ts +0 -27
  151. package/dist/transition/artifacts.d.ts +0 -1
  152. package/dist/transition/context.d.ts +0 -19
  153. package/dist/transition/fix-plan.d.ts +0 -21
  154. package/dist/transition/index.d.ts +0 -9
  155. package/dist/transition/orchestration.d.ts +0 -2
  156. package/dist/transition/preflight.d.ts +0 -6
  157. package/dist/transition/specs-changelog.d.ts +0 -3
  158. package/dist/transition/specs-index.d.ts +0 -22
  159. package/dist/transition/story-parsing.d.ts +0 -7
  160. package/dist/transition/tech-stack.d.ts +0 -3
  161. package/dist/transition/types.d.ts +0 -82
  162. package/dist/utils/config.d.ts +0 -13
  163. package/dist/utils/constants.d.ts +0 -70
  164. package/dist/utils/dryrun.d.ts +0 -7
  165. package/dist/utils/errors.d.ts +0 -63
  166. package/dist/utils/file-system.d.ts +0 -24
  167. package/dist/utils/github.d.ts +0 -83
  168. package/dist/utils/json.d.ts +0 -7
  169. package/dist/utils/logger.d.ts +0 -9
  170. package/dist/utils/state.d.ts +0 -24
  171. package/dist/utils/validate.d.ts +0 -44
  172. package/dist/watch/dashboard.d.ts +0 -4
  173. package/dist/watch/file-watcher.d.ts +0 -9
  174. package/dist/watch/renderer.d.ts +0 -16
  175. package/dist/watch/state-reader.d.ts +0 -9
  176. package/dist/watch/types.d.ts +0 -55
package/dist/installer.js CHANGED
@@ -1,27 +1,29 @@
1
- import { cp, mkdir, readFile, readdir, rm, chmod, rename } from "fs/promises";
2
- import { readFileSync } from "fs";
3
- import { join, basename, dirname } from "path";
4
- import { fileURLToPath } from "url";
1
+ import { cp, mkdir, readFile, readdir, rm, chmod, rename } from "node:fs/promises";
2
+ import { join, basename, dirname } from "node:path";
3
+ import { fileURLToPath } from "node:url";
5
4
  import { debug, warn } from "./utils/logger.js";
6
5
  import { formatError, isEnoent } from "./utils/errors.js";
7
- import { exists, atomicWriteFile } from "./utils/file-system.js";
8
- import { STATE_DIR, CONFIG_FILE } from "./utils/constants.js";
6
+ import { exists, atomicWriteFile, parseGitignoreLines, replaceSection, } from "./utils/file-system.js";
7
+ import { STATE_DIR, CONFIG_FILE, SKILLS_DIR, SKILLS_PREFIX } from "./utils/constants.js";
9
8
  const __filename = fileURLToPath(import.meta.url);
10
9
  const __dirname = dirname(__filename);
11
- export function getPackageVersion() {
10
+ export async function getPackageVersion() {
12
11
  const pkgPath = join(__dirname, "..", "package.json");
13
12
  try {
14
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
13
+ const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
15
14
  return pkg.version ?? "unknown";
16
15
  }
17
- catch {
16
+ catch (err) {
17
+ if (!isEnoent(err)) {
18
+ debug(`Failed to read package.json: ${formatError(err)}`);
19
+ }
18
20
  return "unknown";
19
21
  }
20
22
  }
21
- export function getBundledVersions() {
23
+ export async function getBundledVersions() {
22
24
  const versionsPath = join(__dirname, "..", "bundled-versions.json");
23
25
  try {
24
- const versions = JSON.parse(readFileSync(versionsPath, "utf-8"));
26
+ const versions = JSON.parse(await readFile(versionsPath, "utf-8"));
25
27
  if (!versions || typeof versions.bmadCommit !== "string") {
26
28
  throw new Error("Invalid bundled-versions.json structure: missing bmadCommit");
27
29
  }
@@ -75,71 +77,319 @@ async function getDefaultPlatform() {
75
77
  * Deliver slash commands based on the platform's command delivery strategy.
76
78
  *
77
79
  * - "directory": Copy command files to a directory (e.g., .claude/commands/)
78
- * - "inline": Merge command content as sections in the instructions file
79
- * - "none": Skip command delivery entirely
80
+ * - "skills": No-op commands are generated as skills by generateSkills()
81
+ * - "index": No-op commands are discoverable via _bmad/COMMANDS.md
80
82
  */
81
83
  async function deliverCommands(projectDir, platform, slashCommandsDir) {
82
84
  const delivery = platform.commandDelivery;
83
- if (delivery.kind === "none") {
85
+ if (delivery.kind !== "directory") {
84
86
  return [];
85
87
  }
86
88
  const slashFiles = await readdir(slashCommandsDir);
87
89
  const bundledCommandNames = new Set(slashFiles.filter((f) => f.endsWith(".md")));
88
- if (delivery.kind === "directory") {
89
- const commandsDir = join(projectDir, delivery.dir);
90
- await mkdir(commandsDir, { recursive: true });
91
- // Clean stale bmalph-owned commands before copying (preserve user-created commands)
92
- try {
93
- const existingCommands = await readdir(commandsDir);
94
- for (const file of existingCommands) {
95
- if (file.endsWith(".md") && bundledCommandNames.has(file)) {
96
- await rm(join(commandsDir, file), { force: true });
90
+ const commandsDir = join(projectDir, delivery.dir);
91
+ await mkdir(commandsDir, { recursive: true });
92
+ // Clean stale bmalph-owned commands before copying (preserve user-created commands)
93
+ try {
94
+ const existingCommands = await readdir(commandsDir);
95
+ for (const file of existingCommands) {
96
+ if (file.endsWith(".md") && bundledCommandNames.has(file)) {
97
+ await rm(join(commandsDir, file), { force: true });
98
+ }
99
+ }
100
+ }
101
+ catch (err) {
102
+ if (!isEnoent(err))
103
+ throw err;
104
+ }
105
+ for (const file of bundledCommandNames) {
106
+ await cp(join(slashCommandsDir, file), join(commandsDir, file), { dereference: false });
107
+ }
108
+ return [`${delivery.dir}/`];
109
+ }
110
+ /**
111
+ * Parse a CSV row handling double-quoted fields.
112
+ */
113
+ function parseCsvRow(row) {
114
+ const fields = [];
115
+ let current = "";
116
+ let inQuotes = false;
117
+ for (let i = 0; i < row.length; i++) {
118
+ const ch = row[i];
119
+ if (inQuotes) {
120
+ if (ch === '"') {
121
+ if (i + 1 < row.length && row[i + 1] === '"') {
122
+ current += '"';
123
+ i++;
97
124
  }
125
+ else {
126
+ inQuotes = false;
127
+ }
128
+ }
129
+ else {
130
+ current += ch;
98
131
  }
99
132
  }
100
- catch (err) {
101
- if (!isEnoent(err))
102
- throw err;
133
+ else if (ch === '"') {
134
+ inQuotes = true;
103
135
  }
104
- for (const file of bundledCommandNames) {
105
- await cp(join(slashCommandsDir, file), join(commandsDir, file), { dereference: false });
136
+ else if (ch === ",") {
137
+ fields.push(current);
138
+ current = "";
139
+ }
140
+ else {
141
+ current += ch;
106
142
  }
107
- return [`${delivery.dir}/`];
108
143
  }
109
- if (delivery.kind === "inline") {
110
- // Merge command content as sections in the instructions file
111
- const instructionsPath = join(projectDir, platform.instructionsFile);
112
- let existing = "";
113
- try {
114
- existing = await readFile(instructionsPath, "utf-8");
144
+ fields.push(current);
145
+ return fields;
146
+ }
147
+ const AGENT_DESCRIPTIONS = {
148
+ analyst: "Research, briefs, discovery",
149
+ architect: "Technical design, architecture",
150
+ pm: "PRDs, epics, stories",
151
+ sm: "Sprint planning, status, coordination",
152
+ dev: "Implementation, coding",
153
+ "ux-designer": "User experience, wireframes",
154
+ qa: "Test automation, quality assurance",
155
+ "tech-writer": "Documentation, technical writing",
156
+ "quick-flow-solo-dev": "Quick one-off tasks, small changes",
157
+ };
158
+ const BMALPH_COMMANDS = {
159
+ bmalph: {
160
+ description: "BMAD master agent — navigate phases",
161
+ howToRun: "Read and follow the master agent instructions in this file",
162
+ },
163
+ "bmalph-implement": {
164
+ description: "Transition planning artifacts to Ralph format",
165
+ howToRun: "Run `bmalph implement`",
166
+ },
167
+ "bmalph-status": {
168
+ description: "Show current phase, Ralph progress, version info",
169
+ howToRun: "Run `bmalph status`",
170
+ },
171
+ "bmalph-upgrade": {
172
+ description: "Update bundled assets to current version",
173
+ howToRun: "Run `bmalph upgrade`",
174
+ },
175
+ "bmalph-doctor": {
176
+ description: "Check project health and report issues",
177
+ howToRun: "Run `bmalph doctor`",
178
+ },
179
+ "bmalph-watch": {
180
+ description: "Launch Ralph live dashboard",
181
+ howToRun: "Run `bmalph run`",
182
+ },
183
+ };
184
+ const PHASE_SECTIONS = [
185
+ { key: "1-analysis", label: "Phase 1: Analysis" },
186
+ { key: "2-planning", label: "Phase 2: Planning" },
187
+ { key: "3-solutioning", label: "Phase 3: Solutioning" },
188
+ { key: "4-implementation", label: "Phase 4: Implementation" },
189
+ { key: "anytime", label: "Utilities" },
190
+ ];
191
+ // CSV column indices for bmad-help.csv
192
+ const CSV_COL_PHASE = 1;
193
+ const CSV_COL_NAME = 2;
194
+ const CSV_COL_WORKFLOW_FILE = 5;
195
+ const CSV_COL_DESCRIPTION = 10;
196
+ const FALLBACK_PHASE = "anytime";
197
+ /** CLI-pointer bmalph commands are all bmalph-* except the master "bmalph" command. */
198
+ function isCliPointer(cmd) {
199
+ return cmd.kind === "bmalph" && cmd.name !== "bmalph";
200
+ }
201
+ /**
202
+ * Classify all slash commands by reading CSV metadata and file contents.
203
+ * Shared by generateCommandIndex() and generateSkills().
204
+ */
205
+ export async function classifyCommands(projectDir, slashCmdsDir) {
206
+ const helpCsvPath = join(projectDir, "_bmad/_config/bmad-help.csv");
207
+ const helpCsv = await readFile(helpCsvPath, "utf-8");
208
+ // Parse CSV: build workflow-file → {phase, description} lookup
209
+ const csvLines = helpCsv.trimEnd().split(/\r?\n/);
210
+ const workflowLookup = new Map();
211
+ for (const line of csvLines.slice(1)) {
212
+ if (!line.trim())
213
+ continue;
214
+ const fields = parseCsvRow(line);
215
+ const workflowFile = fields[CSV_COL_WORKFLOW_FILE]?.trim();
216
+ if (workflowFile) {
217
+ workflowLookup.set(workflowFile, {
218
+ phase: fields[CSV_COL_PHASE]?.trim() ?? FALLBACK_PHASE,
219
+ description: fields[CSV_COL_DESCRIPTION]?.trim() ?? fields[CSV_COL_NAME]?.trim() ?? "",
220
+ });
115
221
  }
116
- catch (err) {
117
- if (!isEnoent(err))
118
- throw err;
119
- }
120
- const commandSections = [];
121
- for (const file of [...bundledCommandNames].sort()) {
122
- const commandName = file.replace(/\.md$/, "");
123
- const content = await readFile(join(slashCommandsDir, file), "utf-8");
124
- commandSections.push(`### Command: ${commandName}\n\n${content.trim()}`);
125
- }
126
- const inlineMarker = "## BMAD Commands";
127
- const commandsBlock = `\n${inlineMarker}\n\n${commandSections.join("\n\n---\n\n")}\n`;
128
- if (existing.includes(inlineMarker)) {
129
- // Replace existing commands section
130
- const sectionStart = existing.indexOf(inlineMarker);
131
- const before = existing.slice(0, sectionStart);
132
- const afterSection = existing.slice(sectionStart);
133
- const nextHeadingMatch = afterSection.match(/\n## (?!BMAD Commands)/);
134
- const after = nextHeadingMatch ? afterSection.slice(nextHeadingMatch.index) : "";
135
- await atomicWriteFile(instructionsPath, before.trimEnd() + commandsBlock + after);
222
+ }
223
+ // Read slash command files
224
+ const slashFiles = (await readdir(slashCmdsDir)).filter((f) => f.endsWith(".md")).sort();
225
+ const results = [];
226
+ for (const file of slashFiles) {
227
+ const name = file.replace(/\.md$/, "");
228
+ const body = (await readFile(join(slashCmdsDir, file), "utf-8")).trim();
229
+ const firstLine = body.split("\n")[0].trim();
230
+ // Extract _bmad/ file references from content
231
+ const fileRefs = [...body.matchAll(/`(_bmad\/[^`]+)`/g)].map((m) => m[1]);
232
+ const agentRef = fileRefs.find((ref) => ref.includes("/agents/"));
233
+ const workflowRef = fileRefs.find((ref) => ref.includes("/workflows/") || ref.includes("/tasks/"));
234
+ // Classify: bmalph CLI commands
235
+ if (name.startsWith("bmalph")) {
236
+ const known = BMALPH_COMMANDS[name];
237
+ const desc = known?.description ?? name.replace(/-/g, " ");
238
+ const howToRun = known?.howToRun ?? `Run \`bmalph ${name.replace("bmalph-", "")}\``;
239
+ results.push({
240
+ name,
241
+ description: desc,
242
+ invocation: firstLine,
243
+ body,
244
+ kind: "bmalph",
245
+ howToRun,
246
+ });
247
+ continue;
248
+ }
249
+ // Classify: workflow/task commands (matched via CSV)
250
+ if (workflowRef && workflowLookup.has(workflowRef)) {
251
+ const csv = workflowLookup.get(workflowRef);
252
+ results.push({
253
+ name,
254
+ description: csv.description,
255
+ invocation: firstLine,
256
+ body,
257
+ kind: "workflow",
258
+ phase: csv.phase,
259
+ });
260
+ continue;
261
+ }
262
+ // Classify: pure agent commands
263
+ if (agentRef && !workflowRef) {
264
+ results.push({
265
+ name,
266
+ description: AGENT_DESCRIPTIONS[name] ?? name,
267
+ invocation: firstLine,
268
+ body,
269
+ kind: "agent",
270
+ });
271
+ continue;
272
+ }
273
+ // Fallback: unmatched commands go to utilities
274
+ results.push({
275
+ name,
276
+ description: name.replace(/-/g, " "),
277
+ invocation: firstLine,
278
+ body,
279
+ kind: "utility",
280
+ phase: FALLBACK_PHASE,
281
+ });
282
+ }
283
+ return results;
284
+ }
285
+ /**
286
+ * Generate _bmad/COMMANDS.md from pre-classified slash commands.
287
+ * Provides command discoverability for platforms without native slash command support.
288
+ */
289
+ export async function generateCommandIndex(projectDir, classified) {
290
+ const agents = [];
291
+ const phaseGroups = {};
292
+ const bmalpEntries = [];
293
+ for (const cmd of classified) {
294
+ if (cmd.kind === "bmalph") {
295
+ bmalpEntries.push({
296
+ name: cmd.name,
297
+ description: cmd.description,
298
+ howToRun: cmd.howToRun,
299
+ });
300
+ }
301
+ else if (cmd.kind === "agent") {
302
+ agents.push({ name: cmd.name, description: cmd.description, invocation: cmd.invocation });
303
+ }
304
+ else if (cmd.kind === "workflow") {
305
+ const phase = cmd.phase;
306
+ if (!phaseGroups[phase])
307
+ phaseGroups[phase] = [];
308
+ phaseGroups[phase].push({
309
+ name: cmd.name,
310
+ description: cmd.description,
311
+ invocation: cmd.invocation,
312
+ });
136
313
  }
137
314
  else {
138
- await atomicWriteFile(instructionsPath, existing + commandsBlock);
315
+ const phase = cmd.phase ?? FALLBACK_PHASE;
316
+ if (!phaseGroups[phase])
317
+ phaseGroups[phase] = [];
318
+ phaseGroups[phase].push({
319
+ name: cmd.name,
320
+ description: cmd.description,
321
+ invocation: cmd.invocation,
322
+ });
323
+ }
324
+ }
325
+ // Build markdown
326
+ const sections = ["# BMAD Commands\n\n> Auto-generated by bmalph. Do not edit.\n"];
327
+ if (agents.length > 0) {
328
+ sections.push(formatCommandTable("Agents", agents));
329
+ }
330
+ for (const { key, label } of PHASE_SECTIONS) {
331
+ const entries = phaseGroups[key];
332
+ if (entries && entries.length > 0) {
333
+ sections.push(formatCommandTable(label, entries));
334
+ }
335
+ }
336
+ if (bmalpEntries.length > 0) {
337
+ sections.push(formatCommandTable("bmalph CLI", bmalpEntries.map((b) => ({
338
+ name: b.name,
339
+ description: b.description,
340
+ invocation: b.howToRun,
341
+ })), "How to run"));
342
+ }
343
+ await atomicWriteFile(join(projectDir, "_bmad/COMMANDS.md"), sections.join("\n"));
344
+ }
345
+ /**
346
+ * Generate Codex Skills from pre-classified slash commands.
347
+ * Creates .agents/skills/bmad-<name>/SKILL.md for each non-CLI-pointer command.
348
+ */
349
+ export async function generateSkills(projectDir, classified) {
350
+ const skillsBaseDir = join(projectDir, SKILLS_DIR);
351
+ // Cleanup: remove existing bmad-* skill directories
352
+ try {
353
+ const existingDirs = await readdir(skillsBaseDir);
354
+ for (const dir of existingDirs) {
355
+ if (dir.startsWith(SKILLS_PREFIX)) {
356
+ await rm(join(skillsBaseDir, dir), { recursive: true, force: true });
357
+ }
139
358
  }
140
- return [platform.instructionsFile];
141
359
  }
142
- return [];
360
+ catch (err) {
361
+ if (!isEnoent(err))
362
+ throw err;
363
+ }
364
+ // Generate skills for non-CLI-pointer commands
365
+ for (const cmd of classified) {
366
+ if (isCliPointer(cmd))
367
+ continue;
368
+ const skillDir = join(skillsBaseDir, `${SKILLS_PREFIX}${cmd.name}`);
369
+ await mkdir(skillDir, { recursive: true });
370
+ const skillContent = `---
371
+ name: ${cmd.name}
372
+ description: >
373
+ ${cmd.description}. Use when the user asks about ${cmd.name.replace(/-/g, " ")}.
374
+ metadata:
375
+ managed-by: bmalph
376
+ ---
377
+
378
+ ${cmd.body}
379
+ `;
380
+ await atomicWriteFile(join(skillDir, "SKILL.md"), skillContent);
381
+ }
382
+ }
383
+ function formatCommandTable(heading, entries, thirdCol = "Invocation") {
384
+ const lines = [
385
+ `## ${heading}\n`,
386
+ `| Command | Description | ${thirdCol} |`,
387
+ "|---------|-------------|------------|",
388
+ ];
389
+ for (const e of entries) {
390
+ lines.push(`| ${e.name} | ${e.description} | ${e.invocation} |`);
391
+ }
392
+ return lines.join("\n") + "\n";
143
393
  }
144
394
  export async function copyBundledAssets(projectDir, platform) {
145
395
  const p = platform ?? (await getDefaultPlatform());
@@ -195,6 +445,14 @@ export async function copyBundledAssets(projectDir, platform) {
195
445
  await rm(bmadOld, { recursive: true, force: true });
196
446
  // Generate combined manifest from module-help.csv files
197
447
  await generateManifests(projectDir);
448
+ // Classify commands once, reuse for both COMMANDS.md and skills generation
449
+ const classified = await classifyCommands(projectDir, slashCommandsDir);
450
+ // Generate _bmad/COMMANDS.md for command discoverability
451
+ await generateCommandIndex(projectDir, classified);
452
+ // Generate Codex Skills for skills-based platforms
453
+ if (p.commandDelivery.kind === "skills") {
454
+ await generateSkills(projectDir, classified);
455
+ }
198
456
  // Generate _bmad/config.yaml with platform-specific value
199
457
  const projectName = await deriveProjectName(projectDir);
200
458
  const escapedName = projectName.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
@@ -242,7 +500,7 @@ modules:
242
500
  // Copy Ralph loop and lib → .ralph/
243
501
  // Add version marker to ralph_loop.sh
244
502
  const loopContent = await readFile(join(ralphDir, "ralph_loop.sh"), "utf-8");
245
- const markerLine = `# bmalph-version: ${getPackageVersion()}`;
503
+ const markerLine = `# bmalph-version: ${await getPackageVersion()}`;
246
504
  // Use .* to handle empty version (edge case) and EOF without newline
247
505
  const markedContent = loopContent.includes("# bmalph-version:")
248
506
  ? loopContent.replace(/# bmalph-version:.*/, markerLine)
@@ -278,8 +536,8 @@ modules:
278
536
  }
279
537
  }
280
538
  }
281
- catch {
282
- // Non-fatal if chmod fails
539
+ catch (err) {
540
+ debug(`chmod on driver scripts failed (non-fatal): ${formatError(err)}`);
283
541
  }
284
542
  }
285
543
  // Deliver slash commands based on platform strategy
@@ -377,11 +635,7 @@ async function updateGitignore(projectDir) {
377
635
  if (!isEnoent(err))
378
636
  throw err;
379
637
  }
380
- // Split into lines for exact comparison (avoid substring matching issues)
381
- const existingLines = new Set(existing
382
- .split(/\r?\n/)
383
- .map((line) => line.trim())
384
- .filter(Boolean));
638
+ const existingLines = parseGitignoreLines(existing);
385
639
  const entries = [".ralph/logs/", "_bmad-output/"];
386
640
  const newEntries = entries.filter((e) => !existingLines.has(e));
387
641
  if (newEntries.length === 0)
@@ -411,15 +665,7 @@ export async function mergeInstructionsFile(projectDir, platform) {
411
665
  throw err;
412
666
  }
413
667
  if (existing.includes(marker)) {
414
- // Replace stale section with current content, preserving content after it
415
- const sectionStart = existing.indexOf(marker);
416
- const before = existing.slice(0, sectionStart);
417
- const afterSection = existing.slice(sectionStart);
418
- // Find the next level-2 heading after the section start
419
- const markerEscaped = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
420
- const nextHeadingMatch = afterSection.match(new RegExp(`\\n## (?!${markerEscaped.slice(3)})`));
421
- const after = nextHeadingMatch ? afterSection.slice(nextHeadingMatch.index) : "";
422
- await atomicWriteFile(instructionsPath, before.trimEnd() + "\n" + snippet + after);
668
+ await atomicWriteFile(instructionsPath, replaceSection(existing, marker, "\n" + snippet));
423
669
  return;
424
670
  }
425
671
  await atomicWriteFile(instructionsPath, existing + snippet);
@@ -440,14 +686,18 @@ export async function previewInstall(projectDir, platform) {
440
686
  ".ralph/docs/generated/",
441
687
  "_bmad/",
442
688
  ];
443
- // Add command directory only for directory-based delivery
689
+ // Add command directory based on delivery strategy
444
690
  if (p.commandDelivery.kind === "directory") {
445
691
  dirsToCreate.push(`${p.commandDelivery.dir}/`);
446
692
  }
693
+ else if (p.commandDelivery.kind === "skills") {
694
+ dirsToCreate.push(`${SKILLS_DIR}/`);
695
+ }
447
696
  for (const dir of dirsToCreate) {
448
697
  if (await exists(join(projectDir, dir))) {
449
698
  if (dir === "_bmad/" ||
450
- (p.commandDelivery.kind === "directory" && dir === `${p.commandDelivery.dir}/`)) {
699
+ (p.commandDelivery.kind === "directory" && dir === `${p.commandDelivery.dir}/`) ||
700
+ (p.commandDelivery.kind === "skills" && dir === `${SKILLS_DIR}/`)) {
451
701
  wouldModify.push(dir);
452
702
  }
453
703
  }
@@ -512,10 +762,13 @@ export async function previewUpgrade(projectDir, platform) {
512
762
  { path: ".ralph/RALPH-REFERENCE.md", isDir: false },
513
763
  { path: ".gitignore", isDir: false },
514
764
  ];
515
- // Add command directory only for directory-based delivery
765
+ // Add command directory based on delivery strategy
516
766
  if (p.commandDelivery.kind === "directory") {
517
767
  managedPaths.push({ path: `${p.commandDelivery.dir}/`, isDir: true });
518
768
  }
769
+ else if (p.commandDelivery.kind === "skills") {
770
+ managedPaths.push({ path: `${SKILLS_DIR}/`, isDir: true });
771
+ }
519
772
  const wouldUpdate = [];
520
773
  const wouldCreate = [];
521
774
  const wouldPreserve = [];
@@ -535,3 +788,4 @@ export async function previewUpgrade(projectDir, platform) {
535
788
  }
536
789
  return { wouldUpdate, wouldCreate, wouldPreserve };
537
790
  }
791
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -1,71 +1,15 @@
1
- import { readFile } from "fs/promises";
2
- import { join } from "path";
3
- import { isEnoent, formatError } from "../utils/errors.js";
1
+ import { buildPlatformDoctorChecks } from "./doctor-checks.js";
2
+ import { generateInstructionsOnlySnippet } from "./instructions-snippet.js";
4
3
  export const aiderPlatform = {
5
4
  id: "aider",
6
5
  displayName: "Aider",
7
6
  tier: "instructions-only",
8
7
  instructionsFile: "CONVENTIONS.md",
9
- commandDelivery: { kind: "none" },
8
+ commandDelivery: { kind: "index" },
10
9
  instructionsSectionMarker: "## BMAD-METHOD Integration",
11
- generateInstructionsSnippet: () => `
12
- ## BMAD-METHOD Integration
13
-
14
- Ask the BMAD master agent to navigate phases. Ask for help to discover all available agents and workflows.
15
-
16
- ### Phases
17
-
18
- | Phase | Focus | Key Agents |
19
- |-------|-------|-----------|
20
- | 1. Analysis | Understand the problem | Analyst agent |
21
- | 2. Planning | Define the solution | Product Manager agent |
22
- | 3. Solutioning | Design the architecture | Architect agent |
23
-
24
- ### Workflow
25
-
26
- Work through Phases 1-3 using BMAD agents and workflows interactively.
27
-
28
- > **Note:** Ralph (Phase 4 — autonomous implementation) is not supported on this platform.
29
-
30
- ### Available Agents
31
-
32
- | Agent | Role |
33
- |-------|------|
34
- | Analyst | Research, briefs, discovery |
35
- | Architect | Technical design, architecture |
36
- | Product Manager | PRDs, epics, stories |
37
- | Scrum Master | Sprint planning, status, coordination |
38
- | Developer | Implementation, coding |
39
- | UX Designer | User experience, wireframes |
40
- | QA Engineer | Test automation, quality assurance |
41
- `,
42
- getDoctorChecks: () => [
43
- {
44
- id: "instructions-file",
45
- label: "CONVENTIONS.md contains BMAD snippet",
46
- check: async (projectDir) => {
47
- try {
48
- const content = await readFile(join(projectDir, "CONVENTIONS.md"), "utf-8");
49
- if (content.includes("BMAD-METHOD Integration")) {
50
- return { passed: true };
51
- }
52
- return {
53
- passed: false,
54
- detail: "missing BMAD-METHOD Integration section",
55
- hint: "Run: bmalph init",
56
- };
57
- }
58
- catch (err) {
59
- if (isEnoent(err)) {
60
- return {
61
- passed: false,
62
- detail: "CONVENTIONS.md not found",
63
- hint: "Run: bmalph init",
64
- };
65
- }
66
- return { passed: false, detail: formatError(err), hint: "Check file permissions" };
67
- }
68
- },
69
- },
70
- ],
10
+ generateInstructionsSnippet: generateInstructionsOnlySnippet,
11
+ getDoctorChecks() {
12
+ return buildPlatformDoctorChecks(this);
13
+ },
71
14
  };
15
+ //# sourceMappingURL=aider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aider.js","sourceRoot":"","sources":["../../src/platform/aider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,EAAE,EAAE,OAAO;IACX,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,mBAAmB;IACzB,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAClC,yBAAyB,EAAE,4BAA4B;IACvD,2BAA2B,EAAE,+BAA+B;IAC5D,eAAe;QACb,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAC"}