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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,24 @@
1
1
  import chalk from "chalk";
2
- import { access } from "fs/promises";
3
- import { join } from "path";
2
+ import { join } from "node:path";
4
3
  import { runTransition } from "../transition/orchestration.js";
5
4
  import { withErrorHandling } from "../utils/errors.js";
5
+ import { exists } from "../utils/file-system.js";
6
6
  import { resolveProjectPlatform } from "../platform/resolve.js";
7
+ import { getFullTierPlatformNames } from "../platform/registry.js";
7
8
  export async function implementCommand(options) {
8
9
  await withErrorHandling(() => runImplement(options));
9
10
  }
10
11
  async function runImplement(options) {
11
12
  const { projectDir, force } = options;
12
13
  // Re-run protection: warn if implement was already run
13
- try {
14
- await access(join(projectDir, ".ralph/@fix_plan.md"));
15
- if (!force) {
16
- console.log(chalk.yellow("Warning: bmalph implement has already been run."));
17
- console.log("Re-running will overwrite PROMPT.md, PROJECT_CONTEXT.md, @AGENT.md, and SPECS_INDEX.md.");
18
- console.log("Fix plan progress will be preserved.\n");
19
- console.log(`Use ${chalk.bold("--force")} to proceed anyway.`);
20
- process.exitCode = 1;
21
- return;
22
- }
23
- }
24
- catch {
25
- // fix_plan doesn't exist — first run, proceed
14
+ const alreadyRun = await exists(join(projectDir, ".ralph/@fix_plan.md"));
15
+ if (alreadyRun && !force) {
16
+ console.log(chalk.yellow("Warning: bmalph implement has already been run."));
17
+ console.log("Re-running will overwrite PROMPT.md, PROJECT_CONTEXT.md, @AGENT.md, and SPECS_INDEX.md.");
18
+ console.log("Fix plan progress will be preserved.\n");
19
+ console.log(`Use ${chalk.bold("--force")} to proceed anyway.`);
20
+ process.exitCode = 1;
21
+ return;
26
22
  }
27
23
  const platform = await resolveProjectPlatform(projectDir);
28
24
  const result = await runTransition(projectDir, { force });
@@ -63,10 +59,10 @@ async function runImplement(options) {
63
59
  console.log("");
64
60
  if (platform.tier === "full") {
65
61
  console.log(`Start the Ralph loop:\n`);
66
- console.log(` bash .ralph/drivers/${platform.id}.sh`);
62
+ console.log(` bmalph run`);
67
63
  }
68
64
  else {
69
- console.log(`Ralph requires a full-tier platform (claude-code or codex). ` +
65
+ console.log(`Ralph requires a full-tier platform (${getFullTierPlatformNames()}). ` +
70
66
  `Current platform: ${platform.displayName}`);
71
67
  }
72
68
  }
@@ -80,3 +76,4 @@ function severityIcon(issue) {
80
76
  return chalk.dim("i");
81
77
  }
82
78
  }
79
+ //# sourceMappingURL=implement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/commands/implement.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import chalk from "chalk";
2
- import inquirer from "inquirer";
2
+ import { select, input } from "@inquirer/prompts";
3
3
  import { writeConfig } from "../utils/config.js";
4
4
  import { installProject, mergeInstructionsFile, isInitialized, previewInstall, getBundledVersions, } from "../installer.js";
5
5
  import { formatDryRunSummary } from "../utils/dryrun.js";
6
6
  import { validateProjectName } from "../utils/validate.js";
7
7
  import { withErrorHandling } from "../utils/errors.js";
8
8
  import { exists } from "../utils/file-system.js";
9
- import { join } from "path";
10
- import { isPlatformId, getPlatform } from "../platform/registry.js";
9
+ import { join } from "node:path";
10
+ import { isPlatformId, getPlatform, getAllPlatforms } from "../platform/registry.js";
11
11
  import { detectPlatform } from "../platform/detect.js";
12
12
  export async function initCommand(options) {
13
13
  await withErrorHandling(() => runInit(options));
@@ -35,23 +35,15 @@ async function resolvePlatform(projectDir, explicit) {
35
35
  }
36
36
  // 3. Interactive prompt if multiple candidates or none detected
37
37
  if (process.stdin.isTTY) {
38
- const choices = [
39
- { name: "Claude Code", value: "claude-code" },
40
- { name: "OpenAI Codex", value: "codex" },
41
- { name: "Cursor", value: "cursor" },
42
- { name: "Windsurf", value: "windsurf" },
43
- { name: "GitHub Copilot", value: "copilot" },
44
- { name: "Aider", value: "aider" },
45
- ];
46
- const { platformId } = await inquirer.prompt([
47
- {
48
- type: "list",
49
- name: "platformId",
50
- message: "Which platform are you using?",
51
- choices,
52
- default: detection.candidates[0] ?? "claude-code",
53
- },
54
- ]);
38
+ const choices = getAllPlatforms().map((p) => ({
39
+ name: p.experimental ? `${p.displayName} (experimental)` : p.displayName,
40
+ value: p.id,
41
+ }));
42
+ const platformId = await select({
43
+ message: "Which platform are you using?",
44
+ choices,
45
+ default: detection.candidates[0] ?? "claude-code",
46
+ });
55
47
  return getPlatform(platformId);
56
48
  }
57
49
  // 4. Non-interactive default
@@ -91,29 +83,12 @@ async function runInit(options) {
91
83
  // Derive default name from directory, with fallback for edge cases
92
84
  const dirName = projectDir.split(/[/\\]/).pop();
93
85
  const defaultName = dirName && dirName.trim() ? dirName : "my-project";
94
- const answers = await inquirer.prompt([
95
- ...(name
96
- ? []
97
- : [
98
- {
99
- type: "input",
100
- name: "name",
101
- message: "Project name:",
102
- default: defaultName,
103
- },
104
- ]),
105
- ...(description
106
- ? []
107
- : [
108
- {
109
- type: "input",
110
- name: "description",
111
- message: "Project description:",
112
- },
113
- ]),
114
- ]);
115
- name = name ?? answers.name;
116
- description = description ?? answers.description;
86
+ if (!name) {
87
+ name = await input({ message: "Project name:", default: defaultName });
88
+ }
89
+ if (!description) {
90
+ description = await input({ message: "Project description:" });
91
+ }
117
92
  }
118
93
  // Validate project name (filesystem safety, reserved names, etc.)
119
94
  if (!name) {
@@ -122,7 +97,7 @@ async function runInit(options) {
122
97
  const validatedName = validateProjectName(name);
123
98
  console.log(chalk.blue(`\nInstalling BMAD + Ralph for ${platform.displayName}...`));
124
99
  await installProject(projectDir, platform);
125
- const bundledVersions = getBundledVersions();
100
+ const bundledVersions = await getBundledVersions();
126
101
  const config = {
127
102
  name: validatedName,
128
103
  description: description ?? "",
@@ -140,7 +115,10 @@ async function runInit(options) {
140
115
  }
141
116
  console.log(chalk.green("\nbmalph initialized successfully!"));
142
117
  console.log(`\n Project: ${chalk.bold(config.name)}`);
143
- console.log(` Platform: ${chalk.bold(platform.displayName)}`);
118
+ const platformLabel = platform.experimental
119
+ ? `${platform.displayName} (experimental)`
120
+ : platform.displayName;
121
+ console.log(` Platform: ${chalk.bold(platformLabel)}`);
144
122
  console.log(`\nInstalled:`);
145
123
  console.log(` _bmad/ BMAD agents and workflows`);
146
124
  console.log(` .ralph/ Ralph loop and templates`);
@@ -153,10 +131,11 @@ async function runInit(options) {
153
131
  if (platform.id === "claude-code") {
154
132
  console.log(` Use ${chalk.cyan("/bmalph")} in Claude Code to see your current phase and commands.`);
155
133
  }
156
- else if (platform.id === "codex") {
157
- console.log(` Ask Codex to ${chalk.cyan("run the BMAD master agent")} to navigate phases.`);
134
+ else if (platform.tier === "full") {
135
+ console.log(` Ask ${platform.displayName} to ${chalk.cyan("run the BMAD master agent")} to navigate phases.`);
158
136
  }
159
137
  else {
160
138
  console.log(` Ask your AI assistant to ${chalk.cyan("use the BMAD agents")} defined in ${chalk.cyan(platform.instructionsFile)}.`);
161
139
  }
162
140
  }
141
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import inquirer from "inquirer";
2
+ import { confirm } from "@inquirer/prompts";
3
3
  import { isInitialized } from "../installer.js";
4
4
  import { buildResetPlan, executeResetPlan, planToDryRunActions } from "../reset.js";
5
5
  import { formatDryRunSummary } from "../utils/dryrun.js";
@@ -44,15 +44,11 @@ async function runReset(options) {
44
44
  if (!process.stdin.isTTY) {
45
45
  throw new Error("Non-interactive mode requires --force flag for reset");
46
46
  }
47
- const { confirm } = await inquirer.prompt([
48
- {
49
- type: "confirm",
50
- name: "confirm",
51
- message: "This will remove all bmalph files from the project. Continue?",
52
- default: false,
53
- },
54
- ]);
55
- if (!confirm) {
47
+ const confirmed = await confirm({
48
+ message: "This will remove all bmalph files from the project. Continue?",
49
+ default: false,
50
+ });
51
+ if (!confirmed) {
56
52
  console.log("Aborted.");
57
53
  return;
58
54
  }
@@ -79,3 +75,4 @@ async function runReset(options) {
79
75
  console.log(chalk.yellow(`\nNote: ${warning.path} ${warning.message}`));
80
76
  }
81
77
  }
78
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import chalk from "chalk";
2
+ import { readConfig } from "../utils/config.js";
3
+ import { withErrorHandling } from "../utils/errors.js";
4
+ import { isPlatformId, getPlatform, getFullTierPlatformNames } from "../platform/registry.js";
5
+ import { validateBashAvailable, validateRalphLoop, spawnRalphLoop } from "../run/ralph-process.js";
6
+ import { startRunDashboard } from "../run/run-dashboard.js";
7
+ import { parseInterval } from "../utils/validate.js";
8
+ export async function runCommand(options) {
9
+ await withErrorHandling(() => executeRun(options));
10
+ }
11
+ async function executeRun(options) {
12
+ const { projectDir, dashboard } = options;
13
+ const config = await readConfig(projectDir);
14
+ if (!config) {
15
+ throw new Error("Project not initialized. Run: bmalph init");
16
+ }
17
+ const platform = resolvePlatform(options.driver, config.platform);
18
+ if (platform.tier !== "full") {
19
+ throw new Error(`Ralph requires a full-tier platform (${getFullTierPlatformNames()}). ` +
20
+ `Current: ${platform.displayName}`);
21
+ }
22
+ if (platform.experimental) {
23
+ console.log(chalk.yellow(`Warning: ${platform.displayName} support is experimental`));
24
+ }
25
+ const interval = parseInterval(options.interval);
26
+ await Promise.all([validateBashAvailable(), validateRalphLoop(projectDir)]);
27
+ const ralph = spawnRalphLoop(projectDir, platform.id, {
28
+ inheritStdio: !dashboard,
29
+ });
30
+ if (dashboard) {
31
+ await startRunDashboard({ projectDir, interval, ralph });
32
+ }
33
+ else {
34
+ await new Promise((resolve) => {
35
+ ralph.onExit(() => resolve());
36
+ });
37
+ }
38
+ }
39
+ function resolvePlatform(driverOverride, configPlatform) {
40
+ const id = driverOverride ?? configPlatform ?? "claude-code";
41
+ if (!isPlatformId(id)) {
42
+ throw new Error(`Unknown platform: ${id}`);
43
+ }
44
+ return getPlatform(id);
45
+ }
46
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAUrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA0B;IAClD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,wCAAwC,wBAAwB,EAAE,KAAK;YACrE,YAAY,QAAQ,CAAC,WAAW,EAAE,CACrC,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,QAAQ,CAAC,WAAW,0BAA0B,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE;QACpD,YAAY,EAAE,CAAC,SAAS;KACzB,CAAC,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,iBAAiB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,cAAkC,EAClC,cAA2B;IAE3B,MAAM,EAAE,GAAG,cAAc,IAAI,cAAc,IAAI,aAAa,CAAC;IAC7D,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
@@ -2,7 +2,10 @@ import chalk from "chalk";
2
2
  import { readConfig } from "../utils/config.js";
3
3
  import { readState, readRalphStatus, getPhaseLabel, getPhaseInfo } from "../utils/state.js";
4
4
  import { withErrorHandling } from "../utils/errors.js";
5
+ import { formatStatus } from "../utils/format-status.js";
6
+ import { ARTIFACT_DEFINITIONS } from "../utils/artifact-definitions.js";
5
7
  import { resolveProjectPlatform } from "../platform/resolve.js";
8
+ import { getFullTierPlatformNames } from "../platform/registry.js";
6
9
  import { scanProjectArtifacts } from "../transition/artifact-scan.js";
7
10
  export async function statusCommand(options) {
8
11
  await withErrorHandling(() => runStatus(options));
@@ -96,7 +99,7 @@ export async function runStatus(options) {
96
99
  if (phase === 4 && ralphStatus) {
97
100
  console.log("");
98
101
  console.log(chalk.bold(" Ralph Loop"));
99
- console.log(` ${chalk.cyan("Status:")} ${formatRalphStatus(ralphStatus.status)}`);
102
+ console.log(` ${chalk.cyan("Status:")} ${formatStatus(ralphStatus.status)}`);
100
103
  console.log(` ${chalk.cyan("Loop count:")} ${ralphStatus.loopCount}`);
101
104
  console.log(` ${chalk.cyan("Tasks:")} ${ralphStatus.tasksCompleted}/${ralphStatus.tasksTotal}`);
102
105
  }
@@ -115,22 +118,6 @@ export async function runStatus(options) {
115
118
  console.log(` ${chalk.cyan("Next:")} ${nextAction}`);
116
119
  }
117
120
  }
118
- const ARTIFACT_DEFINITIONS = [
119
- { phase: 1, name: "Product Brief", required: false },
120
- { phase: 1, name: "Market Research", required: false },
121
- { phase: 1, name: "Domain Research", required: false },
122
- { phase: 1, name: "Technical Research", required: false },
123
- { phase: 2, name: "PRD", required: true },
124
- { phase: 2, name: "UX Design", required: false },
125
- { phase: 3, name: "Architecture", required: true },
126
- { phase: 3, name: "Epics & Stories", required: true },
127
- { phase: 3, name: "Readiness Report", required: true },
128
- ];
129
- const PHASE_LABELS = {
130
- 1: "Phase 1 - Analysis",
131
- 2: "Phase 2 - Planning",
132
- 3: "Phase 3 - Solutioning",
133
- };
134
121
  function printArtifactChecklist(scan) {
135
122
  const foundByName = new Map();
136
123
  for (const artifacts of [scan.phases[1], scan.phases[2], scan.phases[3]]) {
@@ -142,7 +129,7 @@ function printArtifactChecklist(scan) {
142
129
  for (const def of ARTIFACT_DEFINITIONS) {
143
130
  if (def.phase !== currentPhase) {
144
131
  currentPhase = def.phase;
145
- console.log(` ${PHASE_LABELS[currentPhase]}`);
132
+ console.log(` Phase ${currentPhase} - ${getPhaseLabel(currentPhase)}`);
146
133
  }
147
134
  const found = foundByName.get(def.name);
148
135
  if (found) {
@@ -154,32 +141,6 @@ function printArtifactChecklist(scan) {
154
141
  }
155
142
  }
156
143
  }
157
- function formatStatus(status) {
158
- switch (status) {
159
- case "planning":
160
- return chalk.blue("planning");
161
- case "implementing":
162
- return chalk.yellow("implementing");
163
- case "completed":
164
- return chalk.green("completed");
165
- default:
166
- return status;
167
- }
168
- }
169
- function formatRalphStatus(status) {
170
- switch (status) {
171
- case "running":
172
- return chalk.yellow("running");
173
- case "blocked":
174
- return chalk.red("blocked");
175
- case "completed":
176
- return chalk.green("completed");
177
- case "not_started":
178
- return chalk.dim("not started");
179
- default:
180
- return status;
181
- }
182
- }
183
144
  function getNextAction(phase, status, ralphStatus, platform) {
184
145
  if (status === "completed") {
185
146
  return null;
@@ -194,9 +155,9 @@ function getNextAction(phase, status, ralphStatus, platform) {
194
155
  case 4:
195
156
  if (!ralphStatus || ralphStatus.status === "not_started") {
196
157
  if (platform.tier === "full") {
197
- return `Start Ralph loop with: bash .ralph/drivers/${platform.id}.sh`;
158
+ return "Start Ralph loop with: bmalph run";
198
159
  }
199
- return "Ralph requires a full-tier platform (Claude Code or Codex)";
160
+ return `Ralph requires a full-tier platform (${getFullTierPlatformNames()})`;
200
161
  }
201
162
  if (ralphStatus.status === "blocked") {
202
163
  return "Review Ralph logs: bmalph doctor";
@@ -209,3 +170,4 @@ function getNextAction(phase, status, ralphStatus, platform) {
209
170
  return null;
210
171
  }
211
172
  }
173
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import inquirer from "inquirer";
2
+ import { confirm } from "@inquirer/prompts";
3
3
  import { isInitialized, copyBundledAssets, mergeInstructionsFile, previewUpgrade, getBundledVersions, } from "../installer.js";
4
4
  import { readConfig, writeConfig } from "../utils/config.js";
5
5
  import { formatDryRunSummary } from "../utils/dryrun.js";
@@ -31,15 +31,11 @@ async function runUpgrade(options) {
31
31
  if (!process.stdin.isTTY) {
32
32
  throw new Error("Non-interactive mode requires --force flag for upgrade");
33
33
  }
34
- const { confirm } = await inquirer.prompt([
35
- {
36
- type: "confirm",
37
- name: "confirm",
38
- message: "This will overwrite managed files. Continue?",
39
- default: false,
40
- },
41
- ]);
42
- if (!confirm) {
34
+ const confirmed = await confirm({
35
+ message: "This will overwrite managed files. Continue?",
36
+ default: false,
37
+ });
38
+ if (!confirmed) {
43
39
  console.log("Aborted.");
44
40
  return;
45
41
  }
@@ -50,7 +46,7 @@ async function runUpgrade(options) {
50
46
  // Update upstreamVersions in config to match bundled versions
51
47
  const config = await readConfig(projectDir);
52
48
  if (config) {
53
- config.upstreamVersions = getBundledVersions();
49
+ config.upstreamVersions = await getBundledVersions();
54
50
  await writeConfig(projectDir, config);
55
51
  }
56
52
  console.log(chalk.green("\nUpdated:"));
@@ -66,3 +62,4 @@ async function runUpgrade(options) {
66
62
  console.log(" .ralph/specs/");
67
63
  console.log(chalk.green("\nUpgrade complete."));
68
64
  }
65
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,19 @@
1
+ import chalk from "chalk";
1
2
  import { readConfig } from "../utils/config.js";
2
3
  import { withErrorHandling } from "../utils/errors.js";
4
+ import { parseInterval } from "../utils/validate.js";
3
5
  import { startDashboard } from "../watch/dashboard.js";
4
- const DEFAULT_INTERVAL_MS = 2000;
5
6
  export async function watchCommand(options) {
6
7
  await withErrorHandling(() => runWatch(options));
7
8
  }
8
9
  async function runWatch(options) {
10
+ console.error(chalk.yellow('Warning: "bmalph watch" is deprecated. Use "bmalph run" instead.'));
9
11
  const projectDir = options.projectDir;
10
12
  const config = await readConfig(projectDir);
11
13
  if (!config) {
12
14
  throw new Error("Project not initialized. Run: bmalph init");
13
15
  }
14
- const interval = options.interval ? parseInt(options.interval, 10) : DEFAULT_INTERVAL_MS;
15
- if (isNaN(interval) || interval < 500) {
16
- throw new Error("Interval must be a number >= 500 (milliseconds)");
17
- }
16
+ const interval = parseInterval(options.interval);
18
17
  await startDashboard({ projectDir, interval });
19
18
  }
19
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAA4B;IAClD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC,CAAC;IAEhG,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjD,CAAC"}