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.
- package/README.md +50 -36
- package/bmad/lite/create-prd.md +145 -0
- package/dist/cli.js +13 -4
- package/dist/cli.js.map +1 -0
- package/dist/commands/check-updates.js +3 -18
- package/dist/commands/check-updates.js.map +1 -0
- package/dist/commands/doctor-checks.js +103 -0
- package/dist/commands/doctor-checks.js.map +1 -0
- package/dist/commands/doctor-health-checks.js +101 -0
- package/dist/commands/doctor-health-checks.js.map +1 -0
- package/dist/commands/doctor-runtime-checks.js +143 -0
- package/dist/commands/doctor-runtime-checks.js.map +1 -0
- package/dist/commands/doctor.js +6 -372
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/implement.js +14 -17
- package/dist/commands/implement.js.map +1 -0
- package/dist/commands/init.js +26 -47
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/reset.js +7 -10
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/run.js +46 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.js +8 -46
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/upgrade.js +8 -11
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/watch.js +5 -5
- package/dist/commands/watch.js.map +1 -0
- package/dist/installer.js +332 -78
- package/dist/installer.js.map +1 -0
- package/dist/platform/aider.js +8 -64
- package/dist/platform/aider.js.map +1 -0
- package/dist/platform/claude-code.js +6 -40
- package/dist/platform/claude-code.js.map +1 -0
- package/dist/platform/codex.js +8 -60
- package/dist/platform/codex.js.map +1 -0
- package/dist/platform/copilot.js +11 -66
- package/dist/platform/copilot.js.map +1 -0
- package/dist/platform/cursor.js +10 -65
- package/dist/platform/cursor.js.map +1 -0
- package/dist/platform/detect.js +2 -1
- package/dist/platform/detect.js.map +1 -0
- package/dist/platform/doctor-checks.js +70 -0
- package/dist/platform/doctor-checks.js.map +1 -0
- package/dist/platform/instructions-snippet.js +74 -0
- package/dist/platform/instructions-snippet.js.map +1 -0
- package/dist/platform/registry.js +7 -0
- package/dist/platform/registry.js.map +1 -0
- package/dist/platform/resolve.js +1 -0
- package/dist/platform/resolve.js.map +1 -0
- package/dist/platform/types.js +10 -1
- package/dist/platform/types.js.map +1 -0
- package/dist/platform/windsurf.js +8 -64
- package/dist/platform/windsurf.js.map +1 -0
- package/dist/reset.js +24 -27
- package/dist/reset.js.map +1 -0
- package/dist/run/ralph-process.js +95 -0
- package/dist/run/ralph-process.js.map +1 -0
- package/dist/run/run-dashboard.js +104 -0
- package/dist/run/run-dashboard.js.map +1 -0
- package/dist/run/types.js +2 -0
- package/dist/run/types.js.map +1 -0
- package/dist/transition/artifact-scan.js +6 -15
- package/dist/transition/artifact-scan.js.map +1 -0
- package/dist/transition/artifacts.js +2 -1
- package/dist/transition/artifacts.js.map +1 -0
- package/dist/transition/context.js +1 -0
- package/dist/transition/context.js.map +1 -0
- package/dist/transition/fix-plan.js +1 -0
- package/dist/transition/fix-plan.js.map +1 -0
- package/dist/transition/index.js +1 -0
- package/dist/transition/index.js.map +1 -0
- package/dist/transition/orchestration.js +19 -28
- package/dist/transition/orchestration.js.map +1 -0
- package/dist/transition/preflight.js +1 -0
- package/dist/transition/preflight.js.map +1 -0
- package/dist/transition/specs-changelog.js +3 -2
- package/dist/transition/specs-changelog.js.map +1 -0
- package/dist/transition/specs-index.js +7 -6
- package/dist/transition/specs-index.js.map +1 -0
- package/dist/transition/story-parsing.js +1 -0
- package/dist/transition/story-parsing.js.map +1 -0
- package/dist/transition/tech-stack.js +2 -1
- package/dist/transition/tech-stack.js.map +1 -0
- package/dist/transition/types.js +1 -0
- package/dist/transition/types.js.map +1 -0
- package/dist/utils/artifact-definitions.js +19 -0
- package/dist/utils/artifact-definitions.js.map +1 -0
- package/dist/utils/config.js +3 -2
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/constants.js +12 -49
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/dryrun.js +1 -20
- package/dist/utils/dryrun.js.map +1 -0
- package/dist/utils/errors.js +1 -19
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-system.js +34 -3
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/format-status.js +31 -0
- package/dist/utils/format-status.js.map +1 -0
- package/dist/utils/github.js +21 -8
- package/dist/utils/github.js.map +1 -0
- package/dist/utils/json.js +5 -1
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.js +1 -14
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/state.js +3 -2
- package/dist/utils/state.js.map +1 -0
- package/dist/utils/validate.js +18 -13
- package/dist/utils/validate.js.map +1 -0
- package/dist/watch/dashboard.js +23 -11
- package/dist/watch/dashboard.js.map +1 -0
- package/dist/watch/file-watcher.js +5 -2
- package/dist/watch/file-watcher.js.map +1 -0
- package/dist/watch/renderer.js +2 -15
- package/dist/watch/renderer.js.map +1 -0
- package/dist/watch/state-reader.js +19 -9
- package/dist/watch/state-reader.js.map +1 -0
- package/dist/watch/types.js +1 -0
- package/dist/watch/types.js.map +1 -0
- package/package.json +4 -6
- package/ralph/drivers/copilot.sh +89 -0
- package/ralph/drivers/cursor.sh +90 -0
- package/ralph/ralph_loop.sh +20 -13
- package/ralph/templates/ralphrc.template +1 -1
- package/slash-commands/bmalph-watch.md +2 -0
- package/dist/cli.d.ts +0 -1
- package/dist/commands/check-updates.d.ts +0 -5
- package/dist/commands/doctor.d.ts +0 -40
- package/dist/commands/implement.d.ts +0 -6
- package/dist/commands/init.d.ts +0 -9
- package/dist/commands/reset.d.ts +0 -7
- package/dist/commands/status.d.ts +0 -7
- package/dist/commands/upgrade.d.ts +0 -7
- package/dist/commands/watch.d.ts +0 -6
- package/dist/installer.d.ts +0 -33
- package/dist/platform/aider.d.ts +0 -2
- package/dist/platform/claude-code.d.ts +0 -2
- package/dist/platform/codex.d.ts +0 -2
- package/dist/platform/copilot.d.ts +0 -2
- package/dist/platform/cursor.d.ts +0 -2
- package/dist/platform/detect.d.ts +0 -7
- package/dist/platform/index.d.ts +0 -4
- package/dist/platform/index.js +0 -3
- package/dist/platform/registry.d.ts +0 -4
- package/dist/platform/resolve.d.ts +0 -8
- package/dist/platform/types.d.ts +0 -41
- package/dist/platform/windsurf.d.ts +0 -2
- package/dist/reset.d.ts +0 -18
- package/dist/transition/artifact-scan.d.ts +0 -27
- package/dist/transition/artifacts.d.ts +0 -1
- package/dist/transition/context.d.ts +0 -19
- package/dist/transition/fix-plan.d.ts +0 -21
- package/dist/transition/index.d.ts +0 -9
- package/dist/transition/orchestration.d.ts +0 -2
- package/dist/transition/preflight.d.ts +0 -6
- package/dist/transition/specs-changelog.d.ts +0 -3
- package/dist/transition/specs-index.d.ts +0 -22
- package/dist/transition/story-parsing.d.ts +0 -7
- package/dist/transition/tech-stack.d.ts +0 -3
- package/dist/transition/types.d.ts +0 -82
- package/dist/utils/config.d.ts +0 -13
- package/dist/utils/constants.d.ts +0 -70
- package/dist/utils/dryrun.d.ts +0 -7
- package/dist/utils/errors.d.ts +0 -63
- package/dist/utils/file-system.d.ts +0 -24
- package/dist/utils/github.d.ts +0 -83
- package/dist/utils/json.d.ts +0 -7
- package/dist/utils/logger.d.ts +0 -9
- package/dist/utils/state.d.ts +0 -24
- package/dist/utils/validate.d.ts +0 -44
- package/dist/watch/dashboard.d.ts +0 -4
- package/dist/watch/file-watcher.d.ts +0 -9
- package/dist/watch/renderer.d.ts +0 -16
- package/dist/watch/state-reader.d.ts +0 -9
- package/dist/watch/types.d.ts +0 -55
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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"}
|
package/dist/platform/codex.js
CHANGED
|
@@ -1,67 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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: "
|
|
8
|
+
commandDelivery: { kind: "skills" },
|
|
10
9
|
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
11
|
-
generateInstructionsSnippet: () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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"}
|
package/dist/platform/copilot.js
CHANGED
|
@@ -1,71 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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: "
|
|
5
|
+
displayName: "GitHub Copilot CLI",
|
|
6
|
+
tier: "full",
|
|
7
|
+
experimental: true,
|
|
8
8
|
instructionsFile: ".github/copilot-instructions.md",
|
|
9
|
-
commandDelivery: { kind: "
|
|
9
|
+
commandDelivery: { kind: "index" },
|
|
10
10
|
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
11
|
-
generateInstructionsSnippet: () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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"}
|
package/dist/platform/cursor.js
CHANGED
|
@@ -1,71 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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: "
|
|
6
|
+
tier: "full",
|
|
7
|
+
experimental: true,
|
|
8
8
|
instructionsFile: ".cursor/rules/bmad.mdc",
|
|
9
|
-
commandDelivery: { kind: "
|
|
9
|
+
commandDelivery: { kind: "index" },
|
|
10
10
|
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
11
|
-
generateInstructionsSnippet: () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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"}
|
package/dist/platform/detect.js
CHANGED
|
@@ -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"}
|
package/dist/platform/resolve.js
CHANGED
|
@@ -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"}
|
package/dist/platform/types.js
CHANGED
|
@@ -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
|
-
|
|
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 {
|
|
2
|
-
import {
|
|
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: "
|
|
8
|
+
commandDelivery: { kind: "index" },
|
|
10
9
|
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
11
|
-
generateInstructionsSnippet:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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"}
|