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
@@ -1,7 +1,4 @@
1
- import { readFile } from "fs/promises";
2
- import { join } from "path";
3
- import { exists } from "../utils/file-system.js";
4
- import { isEnoent, formatError } from "../utils/errors.js";
1
+ import { buildPlatformDoctorChecks } from "./doctor-checks.js";
5
2
  export const claudeCodePlatform = {
6
3
  id: "claude-code",
7
4
  displayName: "Claude Code",
@@ -12,7 +9,7 @@ export const claudeCodePlatform = {
12
9
  generateInstructionsSnippet: () => `
13
10
  ## BMAD-METHOD Integration
14
11
 
15
- Use \`/bmalph\` to navigate phases. Use \`/bmad-help\` to discover all commands. Use \`/bmalph-status\` for a quick overview.
12
+ Use \`/bmalph\` to navigate phases. Use \`/bmad-help\` to discover all commands. Use \`/bmalph-status\` for a quick overview. See \`_bmad/COMMANDS.md\` for a full command reference.
16
13
 
17
14
  ### Phases
18
15
 
@@ -49,39 +46,8 @@ Use \`/bmalph\` to navigate phases. Use \`/bmad-help\` to discover all commands.
49
46
  | \`/ux-designer\` | UX Designer | User experience, wireframes |
50
47
  | \`/qa\` | QA Engineer | Test automation, quality assurance |
51
48
  `,
52
- getDoctorChecks: () => [
53
- {
54
- id: "slash-command",
55
- label: ".claude/commands/bmalph.md present",
56
- check: async (projectDir) => {
57
- if (await exists(join(projectDir, ".claude/commands/bmalph.md"))) {
58
- return { passed: true };
59
- }
60
- return { passed: false, detail: "not found", hint: "Run: bmalph init" };
61
- },
62
- },
63
- {
64
- id: "instructions-file",
65
- label: "CLAUDE.md contains BMAD snippet",
66
- check: async (projectDir) => {
67
- try {
68
- const content = await readFile(join(projectDir, "CLAUDE.md"), "utf-8");
69
- if (content.includes("BMAD-METHOD Integration")) {
70
- return { passed: true };
71
- }
72
- return {
73
- passed: false,
74
- detail: "missing BMAD-METHOD Integration section",
75
- hint: "Run: bmalph init",
76
- };
77
- }
78
- catch (err) {
79
- if (isEnoent(err)) {
80
- return { passed: false, detail: "CLAUDE.md not found", hint: "Run: bmalph init" };
81
- }
82
- return { passed: false, detail: formatError(err), hint: "Check file permissions" };
83
- }
84
- },
85
- },
86
- ],
49
+ getDoctorChecks() {
50
+ return buildPlatformDoctorChecks(this);
51
+ },
87
52
  };
53
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/platform/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAa;IAC1C,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,kBAAkB,EAAE;IAC/D,yBAAyB,EAAE,4BAA4B;IACvD,2BAA2B,EAAE,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCpC;IACC,eAAe;QACb,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAC"}
@@ -1,67 +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 { generateSkillsTierSnippet } from "./instructions-snippet.js";
4
3
  export const codexPlatform = {
5
4
  id: "codex",
6
5
  displayName: "OpenAI Codex",
7
6
  tier: "full",
8
7
  instructionsFile: "AGENTS.md",
9
- commandDelivery: { kind: "inline" },
8
+ commandDelivery: { kind: "skills" },
10
9
  instructionsSectionMarker: "## BMAD-METHOD Integration",
11
- generateInstructionsSnippet: () => `
12
- ## BMAD-METHOD Integration
13
-
14
- Run 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
- | 4. Implementation | Build it | Developer agent, then Ralph autonomous loop |
24
-
25
- ### Workflow
26
-
27
- 1. Work through Phases 1-3 using BMAD agents and workflows
28
- 2. Use the bmalph-implement transition to prepare Ralph format, then start Ralph
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: "AGENTS.md contains BMAD snippet",
46
- check: async (projectDir) => {
47
- try {
48
- const content = await readFile(join(projectDir, "AGENTS.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 { passed: false, detail: "AGENTS.md not found", hint: "Run: bmalph init" };
61
- }
62
- return { passed: false, detail: formatError(err), hint: "Check file permissions" };
63
- }
64
- },
65
- },
66
- ],
10
+ generateInstructionsSnippet: () => generateSkillsTierSnippet(),
11
+ getDoctorChecks() {
12
+ return buildPlatformDoctorChecks(this);
13
+ },
67
14
  };
15
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/platform/codex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,EAAE,EAAE,OAAO;IACX,WAAW,EAAE,cAAc;IAC3B,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACnC,yBAAyB,EAAE,4BAA4B;IACvD,2BAA2B,EAAE,GAAG,EAAE,CAAC,yBAAyB,EAAE;IAC9D,eAAe;QACb,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAC"}
@@ -1,71 +1,16 @@
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 { generateFullTierSnippet } from "./instructions-snippet.js";
4
3
  export const copilotPlatform = {
5
4
  id: "copilot",
6
- displayName: "GitHub Copilot",
7
- tier: "instructions-only",
5
+ displayName: "GitHub Copilot CLI",
6
+ tier: "full",
7
+ experimental: true,
8
8
  instructionsFile: ".github/copilot-instructions.md",
9
- commandDelivery: { kind: "none" },
9
+ commandDelivery: { kind: "index" },
10
10
  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: ".github/copilot-instructions.md contains BMAD snippet",
46
- check: async (projectDir) => {
47
- try {
48
- const content = await readFile(join(projectDir, ".github/copilot-instructions.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: ".github/copilot-instructions.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
- ],
11
+ generateInstructionsSnippet: () => generateFullTierSnippet("Ask"),
12
+ getDoctorChecks() {
13
+ return buildPlatformDoctorChecks(this);
14
+ },
71
15
  };
16
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/platform/copilot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,EAAE,EAAE,SAAS;IACb,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,iCAAiC;IACnD,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAClC,yBAAyB,EAAE,4BAA4B;IACvD,2BAA2B,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACjE,eAAe;QACb,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAC"}
@@ -1,71 +1,16 @@
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 { generateFullTierSnippet } from "./instructions-snippet.js";
4
3
  export const cursorPlatform = {
5
4
  id: "cursor",
6
5
  displayName: "Cursor",
7
- tier: "instructions-only",
6
+ tier: "full",
7
+ experimental: true,
8
8
  instructionsFile: ".cursor/rules/bmad.mdc",
9
- commandDelivery: { kind: "none" },
9
+ commandDelivery: { kind: "index" },
10
10
  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: ".cursor/rules/bmad.mdc contains BMAD snippet",
46
- check: async (projectDir) => {
47
- try {
48
- const content = await readFile(join(projectDir, ".cursor/rules/bmad.mdc"), "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: ".cursor/rules/bmad.mdc not found",
63
- hint: "Run: bmalph init",
64
- };
65
- }
66
- return { passed: false, detail: formatError(err), hint: "Check file permissions" };
67
- }
68
- },
69
- },
70
- ],
11
+ generateInstructionsSnippet: () => generateFullTierSnippet("Ask"),
12
+ getDoctorChecks() {
13
+ return buildPlatformDoctorChecks(this);
14
+ },
71
15
  };
16
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/platform/cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,wBAAwB;IAC1C,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAClC,yBAAyB,EAAE,4BAA4B;IACvD,2BAA2B,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACjE,eAAe;QACb,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { exists } from "../utils/file-system.js";
2
- import { join } from "path";
2
+ import { join } from "node:path";
3
3
  const DETECTION_MARKERS = [
4
4
  { platform: "claude-code", markers: [".claude"] },
5
5
  { platform: "codex", markers: ["AGENTS.md"] },
@@ -21,3 +21,4 @@ export async function detectPlatform(projectDir) {
21
21
  const detected = candidates.length === 1 ? (candidates[0] ?? null) : null;
22
22
  return { detected, candidates };
23
23
  }
24
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/platform/detect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,iBAAiB,GAAuD;IAC5E,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE;IACjD,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;IAC7C,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5C,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;IAChD,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,iCAAiC,CAAC,EAAE;IACrE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE;CACpD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,UAAU,GAAiB,EAAE,CAAC;IAEpC,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACtD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC3C,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { exists } from "../utils/file-system.js";
4
+ import { SKILLS_DIR, SKILLS_PREFIX } from "../utils/constants.js";
5
+ import { isEnoent, formatError } from "../utils/errors.js";
6
+ /**
7
+ * Creates the standard instructions-file doctor check for a platform.
8
+ */
9
+ export function createInstructionsFileCheck(platform) {
10
+ const file = platform.instructionsFile;
11
+ return {
12
+ id: "instructions-file",
13
+ label: `${file} contains BMAD snippet`,
14
+ check: async (projectDir) => {
15
+ try {
16
+ const content = await readFile(join(projectDir, file), "utf-8");
17
+ if (content.includes(platform.instructionsSectionMarker)) {
18
+ return { passed: true };
19
+ }
20
+ return {
21
+ passed: false,
22
+ detail: `missing ${platform.instructionsSectionMarker} section`,
23
+ hint: "Run: bmalph init",
24
+ };
25
+ }
26
+ catch (err) {
27
+ if (isEnoent(err)) {
28
+ return { passed: false, detail: `${file} not found`, hint: "Run: bmalph init" };
29
+ }
30
+ return { passed: false, detail: formatError(err), hint: "Check file permissions" };
31
+ }
32
+ },
33
+ };
34
+ }
35
+ /**
36
+ * Creates a doctor check that verifies a file exists at the given path.
37
+ */
38
+ function createFileExistsCheck(id, relativePath, hint) {
39
+ return {
40
+ id,
41
+ label: `${relativePath} present`,
42
+ check: async (projectDir) => {
43
+ if (await exists(join(projectDir, relativePath))) {
44
+ return { passed: true };
45
+ }
46
+ return { passed: false, detail: "not found", hint };
47
+ },
48
+ };
49
+ }
50
+ /**
51
+ * Builds the standard set of doctor checks for any platform.
52
+ * Derives checks from the platform's properties.
53
+ */
54
+ export function buildPlatformDoctorChecks(platform) {
55
+ const checks = [];
56
+ if (platform.commandDelivery.kind === "directory") {
57
+ const dir = platform.commandDelivery.dir;
58
+ checks.push(createFileExistsCheck("slash-command", `${dir}/bmalph.md`, "Run: bmalph init"));
59
+ }
60
+ if (platform.commandDelivery.kind === "index" || platform.commandDelivery.kind === "skills") {
61
+ checks.push(createFileExistsCheck("command-index", "_bmad/COMMANDS.md", "Run: bmalph upgrade"));
62
+ }
63
+ if (platform.commandDelivery.kind === "skills") {
64
+ checks.push(createFileExistsCheck("skills", `${SKILLS_DIR}/${SKILLS_PREFIX}analyst/SKILL.md`, "Run: bmalph upgrade"));
65
+ }
66
+ checks.push(createFileExistsCheck("lite-workflow", "_bmad/lite/create-prd.md", "Run: bmalph upgrade"));
67
+ checks.push(createInstructionsFileCheck(platform));
68
+ return checks;
69
+ }
70
+ //# sourceMappingURL=doctor-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-checks.js","sourceRoot":"","sources":["../../src/platform/doctor-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ const FULL_TIER_PHASES = `### Phases
2
+
3
+ | Phase | Focus | Key Agents |
4
+ |-------|-------|-----------|
5
+ | 1. Analysis | Understand the problem | Analyst agent |
6
+ | 2. Planning | Define the solution | Product Manager agent |
7
+ | 3. Solutioning | Design the architecture | Architect agent |
8
+ | 4. Implementation | Build it | Developer agent, then Ralph autonomous loop |
9
+
10
+ ### Workflow
11
+
12
+ 1. Work through Phases 1-3 using BMAD agents and workflows
13
+ 2. For PRD creation, use \`_bmad/lite/create-prd.md\` for single-turn generation
14
+ 3. Use the bmalph-implement transition to prepare Ralph format, then start Ralph`;
15
+ const COMMAND_REFERENCE = `### Command Reference
16
+
17
+ When the user asks for a BMAD command, look it up in \`_bmad/COMMANDS.md\` and follow the invocation instructions.`;
18
+ /**
19
+ * Shared instructions snippet for non-directory full-tier platforms.
20
+ * @param verb - Opening verb for the first line ("Run" or "Ask").
21
+ */
22
+ export function generateFullTierSnippet(verb) {
23
+ return `
24
+ ## BMAD-METHOD Integration
25
+
26
+ ${verb} the BMAD master agent to navigate phases. Read \`_bmad/COMMANDS.md\` for all available agents, workflows, and commands.
27
+
28
+ ${FULL_TIER_PHASES}
29
+
30
+ ${COMMAND_REFERENCE}
31
+ `;
32
+ }
33
+ /**
34
+ * Instructions snippet for skills-based platforms.
35
+ * Commands are available as native skills with \`$command-name\` invocation.
36
+ */
37
+ export function generateSkillsTierSnippet() {
38
+ return `
39
+ ## BMAD-METHOD Integration
40
+
41
+ BMAD commands are available as Codex Skills. Use \`$command-name\` to invoke them
42
+ (e.g., \`$create-prd\`, \`$analyst\`). See \`_bmad/COMMANDS.md\` for a full reference.
43
+
44
+ ${FULL_TIER_PHASES}
45
+ `;
46
+ }
47
+ /**
48
+ * Shared instructions snippet for instructions-only platforms.
49
+ * Used by: windsurf, aider.
50
+ */
51
+ export function generateInstructionsOnlySnippet() {
52
+ return `
53
+ ## BMAD-METHOD Integration
54
+
55
+ Ask the BMAD master agent to navigate phases. Read \`_bmad/COMMANDS.md\` for all available agents, workflows, and commands.
56
+
57
+ ### Phases
58
+
59
+ | Phase | Focus | Key Agents |
60
+ |-------|-------|-----------|
61
+ | 1. Analysis | Understand the problem | Analyst agent |
62
+ | 2. Planning | Define the solution | Product Manager agent |
63
+ | 3. Solutioning | Design the architecture | Architect agent |
64
+
65
+ ### Workflow
66
+
67
+ Work through Phases 1-3 using BMAD agents and workflows interactively. For PRD creation, use \`_bmad/lite/create-prd.md\` for single-turn generation.
68
+
69
+ > **Note:** Ralph (Phase 4 — autonomous implementation) is not supported on this platform.
70
+
71
+ ${COMMAND_REFERENCE}
72
+ `;
73
+ }
74
+ //# sourceMappingURL=instructions-snippet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions-snippet.js","sourceRoot":"","sources":["../../src/platform/instructions-snippet.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;iFAawD,CAAC;AAElF,MAAM,iBAAiB,GAAG;;mHAEyF,CAAC;AAEpH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO;;;EAGP,IAAI;;EAEJ,gBAAgB;;EAEhB,iBAAiB;CAClB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;EAMP,gBAAgB;CACjB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;EAmBP,iBAAiB;CAClB,CAAC;AACF,CAAC"}
@@ -25,3 +25,10 @@ export function getAllPlatforms() {
25
25
  export function isPlatformId(value) {
26
26
  return PLATFORMS.has(value);
27
27
  }
28
+ export function getFullTierPlatformNames() {
29
+ return getAllPlatforms()
30
+ .filter((p) => p.tier === "full")
31
+ .map((p) => p.displayName)
32
+ .join(", ");
33
+ }
34
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/platform/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,SAAS,GAAsC,IAAI,GAAG,CAAC;IAC3D,CAAC,aAAa,EAAE,kBAAkB,CAAC;IACnC,CAAC,OAAO,EAAE,aAAa,CAAC;IACxB,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC9B,CAAC,SAAS,EAAE,eAAe,CAAC;IAC5B,CAAC,OAAO,EAAE,aAAa,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,EAAc;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,SAAS,CAAC,GAAG,CAAC,KAAmB,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,eAAe,EAAE;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;SACzB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -22,3 +22,4 @@ export async function resolveProjectPlatform(projectDir) {
22
22
  }
23
23
  return getPlatform("claude-code");
24
24
  }
25
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/platform/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAAkB;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,OAAO,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,kCAAkC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC;AACpC,CAAC"}
@@ -4,4 +4,13 @@
4
4
  * Controls how `bmalph init/upgrade/doctor` install instruction files,
5
5
  * deliver slash commands, and run health checks per platform.
6
6
  */
7
- export {};
7
+ /** Supported platform identifiers. */
8
+ export const PLATFORM_IDS = [
9
+ "claude-code",
10
+ "codex",
11
+ "cursor",
12
+ "windsurf",
13
+ "copilot",
14
+ "aider",
15
+ ];
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa;IACb,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,OAAO;CACC,CAAC"}
@@ -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 windsurfPlatform = {
5
4
  id: "windsurf",
6
5
  displayName: "Windsurf",
7
6
  tier: "instructions-only",
8
7
  instructionsFile: ".windsurf/rules/bmad.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: ".windsurf/rules/bmad.md contains BMAD snippet",
46
- check: async (projectDir) => {
47
- try {
48
- const content = await readFile(join(projectDir, ".windsurf/rules/bmad.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: ".windsurf/rules/bmad.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=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/platform/windsurf.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,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,WAAW,EAAE,UAAU;IACvB,IAAI,EAAE,mBAAmB;IACzB,gBAAgB,EAAE,yBAAyB;IAC3C,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"}