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,9 +0,0 @@
1
- export declare function setVerbose(value: boolean): void;
2
- export declare function isVerbose(): boolean;
3
- export declare function setQuiet(value: boolean): void;
4
- export declare function isQuiet(): boolean;
5
- export declare function debug(message: string): void;
6
- export declare function info(message: string): void;
7
- export declare function warn(message: string): void;
8
- export declare function error(message: string): void;
9
- export declare function success(message: string): void;
@@ -1,24 +0,0 @@
1
- import type { RalphLoopStatus } from "./validate.js";
2
- export interface BmalphState {
3
- currentPhase: number;
4
- status: "planning" | "implementing" | "completed";
5
- startedAt: string;
6
- lastUpdated: string;
7
- }
8
- export interface PhaseCommand {
9
- code: string;
10
- name: string;
11
- agent: string;
12
- description: string;
13
- required: boolean;
14
- }
15
- export interface PhaseInfo {
16
- name: string;
17
- agent: string;
18
- commands: PhaseCommand[];
19
- }
20
- export declare function readState(projectDir: string): Promise<BmalphState | null>;
21
- export declare function writeState(projectDir: string, state: BmalphState): Promise<void>;
22
- export declare function getPhaseLabel(phase: number): string;
23
- export declare function getPhaseInfo(phase: number): PhaseInfo;
24
- export declare function readRalphStatus(projectDir: string): Promise<RalphLoopStatus>;
@@ -1,44 +0,0 @@
1
- import type { BmalphConfig } from "./config.js";
2
- import type { BmalphState } from "./state.js";
3
- export declare function validateConfig(data: unknown): BmalphConfig;
4
- export declare function validateState(data: unknown): BmalphState;
5
- export interface CircuitBreakerState {
6
- state: "CLOSED" | "HALF_OPEN" | "OPEN";
7
- consecutive_no_progress: number;
8
- reason?: string;
9
- }
10
- export declare function validateCircuitBreakerState(data: unknown): CircuitBreakerState;
11
- export interface RalphSession {
12
- session_id: string;
13
- created_at: string;
14
- last_used?: string;
15
- }
16
- export declare function validateRalphSession(data: unknown): RalphSession;
17
- export interface RalphApiStatus {
18
- calls_made_this_hour: number;
19
- max_calls_per_hour: number;
20
- status?: string;
21
- }
22
- export declare function validateRalphApiStatus(data: unknown): RalphApiStatus;
23
- export interface RalphLoopStatus {
24
- loopCount: number;
25
- status: "running" | "blocked" | "completed" | "not_started";
26
- tasksCompleted: number;
27
- tasksTotal: number;
28
- }
29
- export declare function validateRalphLoopStatus(data: unknown): RalphLoopStatus;
30
- export declare function normalizeRalphStatus(data: unknown): RalphLoopStatus;
31
- /**
32
- * Validates a project name for filesystem safety.
33
- * Checks for:
34
- * - Empty names
35
- * - Max length (100 characters)
36
- * - Invalid filesystem characters (< > : " / \ | ? *)
37
- * - Windows reserved names (CON, PRN, AUX, NUL, COM1-9, LPT1-9)
38
- * - Leading/trailing whitespace or dots
39
- *
40
- * @param name - The project name to validate
41
- * @returns The validated name (unchanged if valid)
42
- * @throws Error if the name is invalid
43
- */
44
- export declare function validateProjectName(name: string): string;
@@ -1,4 +0,0 @@
1
- import type { WatchOptions } from "./types.js";
2
- export declare function createRefreshCallback(projectDir: string, write: (s: string) => void): () => Promise<void>;
3
- export declare function setupTerminal(): () => void;
4
- export declare function startDashboard(options: WatchOptions): Promise<void>;
@@ -1,9 +0,0 @@
1
- export declare class FileWatcher {
2
- private intervalId;
3
- private readonly intervalMs;
4
- private readonly callback;
5
- constructor(callback: () => void | Promise<void>, intervalMs?: number);
6
- start(): void;
7
- stop(): void;
8
- private tick;
9
- }
@@ -1,16 +0,0 @@
1
- import type { DashboardState, LoopInfo, CircuitBreakerInfo, StoryProgress, AnalysisInfo, LogEntry, ExecutionProgress, SessionInfo } from "./types.js";
2
- export declare function padRight(str: string, len: number): string;
3
- export declare function progressBar(completed: number, total: number, width: number): string;
4
- export declare function formatSessionAge(createdAt: string): string;
5
- export declare function formatStatus(status: string): string;
6
- export declare function formatCBState(state: string): string;
7
- export declare function box(title: string, lines: string[], cols: number): string;
8
- export declare function renderHeader(cols: number): string;
9
- export declare function renderLoopPanel(loop: LoopInfo | null, execution: ExecutionProgress | null, session: SessionInfo | null, cols: number): string;
10
- export declare function renderCircuitBreakerPanel(cb: CircuitBreakerInfo | null, cols: number): string;
11
- export declare function renderStoriesPanel(stories: StoryProgress | null, cols: number): string;
12
- export declare function renderSideBySide(left: string, right: string, cols: number): string;
13
- export declare function renderAnalysisPanel(analysis: AnalysisInfo | null, cols: number): string;
14
- export declare function renderLogsPanel(logs: LogEntry[], cols: number): string;
15
- export declare function renderFooter(lastUpdated: Date, cols: number): string;
16
- export declare function renderDashboard(state: DashboardState, cols?: number): string;
@@ -1,9 +0,0 @@
1
- import type { DashboardState, LoopInfo, CircuitBreakerInfo, StoryProgress, AnalysisInfo, ExecutionProgress, SessionInfo, LogEntry } from "./types.js";
2
- export declare function readDashboardState(projectDir: string): Promise<DashboardState>;
3
- export declare function readLoopInfo(projectDir: string): Promise<LoopInfo | null>;
4
- export declare function readCircuitBreakerInfo(projectDir: string): Promise<CircuitBreakerInfo | null>;
5
- export declare function readStoryProgress(projectDir: string): Promise<StoryProgress | null>;
6
- export declare function readAnalysisInfo(projectDir: string): Promise<AnalysisInfo | null>;
7
- export declare function readExecutionProgress(projectDir: string): Promise<ExecutionProgress | null>;
8
- export declare function readSessionInfo(projectDir: string): Promise<SessionInfo | null>;
9
- export declare function readRecentLogs(projectDir: string, maxLines?: number): Promise<LogEntry[]>;
@@ -1,55 +0,0 @@
1
- export interface LoopInfo {
2
- loopCount: number;
3
- status: string;
4
- lastAction: string;
5
- callsMadeThisHour: number;
6
- maxCallsPerHour: number;
7
- }
8
- export interface CircuitBreakerInfo {
9
- state: "CLOSED" | "HALF_OPEN" | "OPEN";
10
- consecutiveNoProgress: number;
11
- totalOpens: number;
12
- reason?: string;
13
- }
14
- export interface StoryProgress {
15
- completed: number;
16
- total: number;
17
- nextStory: string | null;
18
- }
19
- export interface AnalysisInfo {
20
- filesModified: number;
21
- confidenceScore: number;
22
- isTestOnly: boolean;
23
- isStuck: boolean;
24
- exitSignal: boolean;
25
- hasPermissionDenials: boolean;
26
- permissionDenialCount: number;
27
- }
28
- export interface ExecutionProgress {
29
- status: "executing" | "idle";
30
- elapsedSeconds: number;
31
- }
32
- export interface SessionInfo {
33
- createdAt: string;
34
- lastUsed?: string;
35
- }
36
- export interface LogEntry {
37
- timestamp: string;
38
- level: string;
39
- message: string;
40
- }
41
- export interface DashboardState {
42
- loop: LoopInfo | null;
43
- circuitBreaker: CircuitBreakerInfo | null;
44
- stories: StoryProgress | null;
45
- analysis: AnalysisInfo | null;
46
- execution: ExecutionProgress | null;
47
- session: SessionInfo | null;
48
- recentLogs: LogEntry[];
49
- ralphCompleted: boolean;
50
- lastUpdated: Date;
51
- }
52
- export interface WatchOptions {
53
- interval: number;
54
- projectDir: string;
55
- }