ralph-teams 0.1.1 → 0.1.2

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 CHANGED
@@ -71,7 +71,6 @@ flowchart TB
71
71
  ## Requirements
72
72
 
73
73
  - Node.js 18+
74
- - `jq` in `PATH`
75
74
  - Git available if you want Ralph to switch/create the target branch
76
75
 
77
76
  Backend-specific requirements:
@@ -82,12 +81,6 @@ Backend-specific requirements:
82
81
  - `gh` CLI in `PATH`
83
82
  - GitHub Copilot CLI available through `gh copilot`
84
83
 
85
- Install `jq` on macOS:
86
-
87
- ```bash
88
- brew install jq
89
- ```
90
-
91
84
  ## Install
92
85
 
93
86
  Install globally:
@@ -108,6 +101,7 @@ Then verify:
108
101
 
109
102
  ```bash
110
103
  ralph-teams --help
104
+ rjq --help
111
105
  ```
112
106
 
113
107
  ## Quick Start
@@ -143,11 +137,12 @@ ralph-teams run
143
137
  ralph-teams logs
144
138
  ```
145
139
 
146
- Run `ralph.sh` directly when you want to choose a backend:
140
+ Run `ralph.sh` directly when you want shell-level flags:
147
141
 
148
142
  ```bash
149
143
  ./ralph.sh prd.json --backend claude
150
144
  ./ralph.sh prd.json --backend copilot
145
+ ./ralph.sh prd.json --parallel 2
151
146
  ./ralph.sh prd.json --backend copilot --max-epics 1
152
147
  ```
153
148
 
@@ -186,19 +181,22 @@ Runs Ralph against a PRD file. Default path is `./prd.json`.
186
181
  ```bash
187
182
  ralph-teams run
188
183
  ralph-teams run ./my-prd.json
184
+ ralph-teams run --backend copilot
185
+ ralph-teams run --parallel 2
189
186
  ```
190
187
 
191
188
  Behavior:
192
189
 
193
- - validates that the default backend dependencies, `jq`, and the PRD are available
190
+ - validates that the selected backend dependencies, `rjq`, and the PRD are available
194
191
  - locates bundled `ralph.sh`
195
192
  - streams Ralph output directly to the terminal
196
193
  - exits with Ralph's exit code
197
194
 
198
195
  Notes:
199
196
 
200
- - the CLI currently runs `ralph.sh` with its default backend
201
- - if you want to force `claude` or `copilot`, run `ralph.sh` directly with `--backend`
197
+ - `--backend` is forwarded to `ralph.sh`
198
+ - runs sequentially by default
199
+ - `--parallel <n>` enables the experimental parallel wave runner
202
200
 
203
201
  ### `ralph-teams status [path]`
204
202
 
@@ -218,6 +216,8 @@ ralph-teams logs
218
216
  ralph-teams logs --tail 20
219
217
  ```
220
218
 
219
+ `--tail` shows the last `N` wave blocks from `progress.txt`.
220
+
221
221
  ### `ralph-teams reset <epicId> [path]`
222
222
 
223
223
  Resets one epic to `pending` and sets all of its stories back to `passes: false`.
@@ -254,6 +254,7 @@ Checks include:
254
254
  - valid epic status values
255
255
  - duplicate epic IDs
256
256
  - duplicate story IDs
257
+ - invalid `dependsOn` values
257
258
  - unknown `dependsOn` references
258
259
  - circular epic dependencies
259
260
 
@@ -343,7 +344,7 @@ Example:
343
344
 
344
345
  Important fields:
345
346
 
346
- - `epics[].status`: `pending` | `completed` | `partial` | `failed`
347
+ - `epics[].status`: `pending` | `completed` | `partial` | `failed` | `merge-failed`
347
348
  - `epics[].dependsOn`: epic IDs that must be completed first
348
349
  - `userStories[].passes`: whether the story is currently marked as passing
349
350
 
@@ -373,11 +374,14 @@ The current execution contract is:
373
374
 
374
375
  - Ralph loops through epics in PRD order
375
376
  - blocked epics are skipped until dependencies are complete
377
+ - runs sequentially by default
378
+ - experimental wave parallelism is enabled only with `--parallel <n>`
376
379
  - the backend team processes one epic per session
377
380
  - stories run sequentially inside that epic
378
381
  - already-passed stories are skipped
379
382
  - each story gets at most two build/validate cycles
380
383
  - the validator checks output independently from the builder's reasoning
384
+ - after writing `results/result-EPIC-xxx.txt`, the team lead must print the same result and exit the session immediately
381
385
 
382
386
  ## Troubleshooting
383
387
 
@@ -395,6 +399,8 @@ Or from this repo:
395
399
  npm link
396
400
  ```
397
401
 
402
+ The package also installs `rjq`, which `ralph.sh` uses internally.
403
+
398
404
  ### `Error: 'claude' CLI not found`
399
405
 
400
406
  Install Claude Code and ensure `claude` is on your `PATH`.
@@ -425,12 +431,12 @@ If that still does not stream, the issue is likely in the local `gh copilot` env
425
431
 
426
432
  Install Claude Code and ensure `claude` is on your `PATH`.
427
433
 
428
- ### `Error: 'jq' not found`
434
+ ### `Error: 'rjq' not found`
429
435
 
430
- Install `jq`:
436
+ Install or relink the package so the bundled JSON CLI is on your `PATH`:
431
437
 
432
438
  ```bash
433
- brew install jq
439
+ npm install -g ralph-teams
434
440
  ```
435
441
 
436
442
  ### Ralph cannot switch branches
@@ -444,7 +450,13 @@ Useful commands in this repo:
444
450
  ```bash
445
451
  npm run build
446
452
  npm run typecheck
453
+ npm test
447
454
  npm link
448
455
  ```
449
456
 
450
- The packaged CLI entrypoint is `dist/index.js`, and the runtime orchestrator is `ralph.sh`.
457
+ Packaged binaries:
458
+
459
+ - `ralph-teams`: main CLI entrypoint (`dist/index.js`)
460
+ - `rjq`: bundled JSON query/manipulation CLI used by `ralph.sh` (`dist/json-tool.js`)
461
+
462
+ The runtime orchestrator is `ralph.sh`.
@@ -1 +1 @@
1
- {"version":3,"file":"add-epic.d.ts","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FnE"}
1
+ {"version":3,"file":"add-epic.d.ts","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0GnE"}
@@ -38,13 +38,23 @@ async function addEpicCommand(prdPath) {
38
38
  // Show existing epics for dependency selection
39
39
  let dependsOn = [];
40
40
  if (prd.epics.length > 0) {
41
+ const validEpicIds = new Set(prd.epics.map((epic) => epic.id));
41
42
  console.log(chalk_1.default.dim('\nExisting epics:'));
42
43
  for (const e of prd.epics) {
43
44
  console.log(chalk_1.default.dim(` ${e.id}: ${e.title}`));
44
45
  }
45
- const depsInput = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('\nDependencies (comma-separated epic IDs, or Enter for none): '));
46
- if (depsInput.trim() !== '') {
47
- dependsOn = depsInput.split(',').map(d => d.trim()).filter(d => d !== '');
46
+ while (true) {
47
+ const depsInput = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('\nDependencies (comma-separated epic IDs, or Enter for none): '));
48
+ if (depsInput.trim() === '') {
49
+ break;
50
+ }
51
+ const candidateDeps = depsInput.split(',').map(d => d.trim()).filter(d => d !== '');
52
+ const unknownDeps = candidateDeps.filter((dep) => !validEpicIds.has(dep));
53
+ if (unknownDeps.length === 0) {
54
+ dependsOn = candidateDeps;
55
+ break;
56
+ }
57
+ console.log(chalk_1.default.red(`Unknown epic IDs: ${unknownDeps.join(', ')}`));
48
58
  }
49
59
  }
50
60
  // Collect user stories
@@ -1 +1 @@
1
- {"version":3,"file":"add-epic.js","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-epic.js","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  interface InitOptions {
2
2
  backend?: string;
3
3
  }
4
+ export declare function buildInitPrompt(prdExample: string, outputPath: string): string;
4
5
  export declare function initCommand(options?: InitOptions): Promise<void>;
5
6
  export {};
6
7
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8ED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD1E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkBD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA8D9E;AAiCD,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD1E"}
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.buildInitPrompt = buildInitPrompt;
39
40
  exports.initCommand = initCommand;
40
41
  const fs = __importStar(require("fs"));
41
42
  const path = __importStar(require("path"));
@@ -61,20 +62,55 @@ function buildInitPrompt(prdExample, outputPath) {
61
62
  'Do not ask the user to manually write epics or user stories from scratch unless they explicitly want to.',
62
63
  'Instead, interview the user, clarify the product requirements, and synthesize the PRD yourself.',
63
64
  '',
64
- 'Rules:',
65
+ '## Conversation Flow',
66
+ '',
67
+ '### Phase 1: Requirements Gathering',
65
68
  '- Start by asking the user to describe what they want to build, if they have not already.',
66
- '- Ask follow-up questions as needed to clarify scope, users, workflows, constraints, and priorities.',
69
+ '- Ask follow-up questions to clarify scope, users, workflows, constraints, and priorities.',
67
70
  '- Keep the discussion practical and product-oriented.',
68
- '- When requirements are clear enough, generate the full prd.json yourself.',
71
+ '',
72
+ '### Phase 2: Design & Dependency Discussion',
73
+ 'Before generating any epics, you MUST discuss these topics with the user:',
74
+ '',
75
+ '**Design Questions:**',
76
+ '- Identify 2-4 open architectural or implementation questions that affect how the work should be structured.',
77
+ '- Present them to the user and discuss before moving on.',
78
+ '- Examples: "Should X be a separate service?", "Do you want server-side or client-side rendering for Y?", "Should we use an existing library for Z or build custom?"',
79
+ '',
80
+ '**Epic Ordering & Dependencies:**',
81
+ '- Propose how you would break the work into epics (just titles and one-line descriptions at this stage).',
82
+ '- For each epic, explain what it depends on and why.',
83
+ '- Present the dependency graph explicitly, e.g.:',
84
+ ' "EPIC-001 (no deps) -> EPIC-002 (needs EPIC-001) -> EPIC-003 (needs EPIC-002)"',
85
+ ' "EPIC-001 (no deps) -> EPIC-004 (needs EPIC-001, can run parallel with EPIC-002)"',
86
+ '- Ask: "Does this ordering make sense? Would you change any dependencies?"',
87
+ '- Do NOT proceed until the user confirms the dependency structure.',
88
+ '',
89
+ '### Phase 3: PRD Structure Review',
90
+ '- Present the full epic structure: epic titles, story titles (no full descriptions yet), and dependency graph.',
91
+ '- Each epic should have 2-5 stories. Err on the side of fewer, larger stories.',
92
+ '- A story should represent a meaningful, testable increment — NOT a single function, config change, or file edit.',
93
+ '- Bad example: "Add migration for users table" (too granular)',
94
+ '- Good example: "User data model, API endpoints, and basic CRUD" (meaningful chunk)',
95
+ '- If the user thinks stories are too granular, consolidate aggressively.',
96
+ '- Only proceed to generation once the user approves.',
97
+ '',
98
+ '### Phase 4: Generation',
99
+ '- Generate the full prd.json and write it.',
100
+ '',
101
+ '## Rules',
69
102
  `- Write the final file to: ${outputPath}`,
70
103
  '- The file must be valid JSON.',
71
104
  '- Use the example below as the schema and style reference.',
72
105
  '- Include project, branchName, description, and epics.',
73
106
  '- Generate epics and user stories automatically based on the discussion.',
74
- '- Design the PRD so each epic has about 5 user stories when the scope reasonably allows it; only use fewer when the work is genuinely smaller or cannot be split cleanly.',
107
+ '- Each epic should have 2-5 consolidated user stories. Fewer meaty stories are better than many granular ones.',
75
108
  '- Use sequential IDs like EPIC-001 and US-001.',
76
109
  '- Set new epic status values to "pending".',
77
110
  '- Set all new story passes values to false.',
111
+ '- dependsOn MUST be set for every epic. Use [] for epics with no dependencies.',
112
+ '- The dependsOn values must exactly match the dependency graph agreed upon in Phase 2.',
113
+ '- If an epic can run in parallel with others (no real dependency), its dependsOn should be [] or only include true prerequisites.',
78
114
  '- Before writing the final file, summarize the proposed PRD structure and let the user correct anything important.',
79
115
  '- Only finish once the PRD has been written, or the user cancels.',
80
116
  '',
@@ -121,7 +157,8 @@ async function initCommand(options = {}) {
121
157
  const prompt = buildInitPrompt(prdExample, outputPath);
122
158
  console.log(chalk_1.default.bold('\nralph-teams init\n'));
123
159
  console.log(chalk_1.default.dim(`Starting interactive PRD creator with ${backend}...`));
124
- console.log(chalk_1.default.dim(`The agent will discuss requirements with you and write ${outputPath}\n`));
160
+ console.log(chalk_1.default.dim(`The agent will discuss requirements with you and write ${outputPath}`));
161
+ console.log(chalk_1.default.dim('The agent will discuss design decisions and dependencies before generating.\n'));
125
162
  ensureBackendAvailable(backend);
126
163
  let child;
127
164
  if (backend === 'claude') {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAWA,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2B5D"}
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAsDA,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyB5D"}
@@ -41,14 +41,53 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const chalk_1 = __importDefault(require("chalk"));
43
43
  function colorizeLine(line) {
44
+ // Wave boundaries (highest priority — check before PASS/FAIL substring matches)
45
+ if (/^===\s+Wave\s+\d+/.test(line))
46
+ return chalk_1.default.cyan.bold(line);
47
+ // Merge results
48
+ if (line.includes('MERGE FAILED'))
49
+ return chalk_1.default.red(line);
50
+ if (line.includes('MERGED'))
51
+ return chalk_1.default.blue(line);
52
+ // Pass/fail outcomes
44
53
  if (line.includes('PASS'))
45
54
  return chalk_1.default.green(line);
46
55
  if (line.includes('FAIL'))
47
56
  return chalk_1.default.red(line);
57
+ // Section headers
48
58
  if (line.startsWith('##'))
49
59
  return chalk_1.default.yellow(line);
50
60
  return line;
51
61
  }
62
+ function splitLogEntries(content) {
63
+ const lines = content.split('\n');
64
+ const waveEntries = [];
65
+ let currentWave = [];
66
+ for (const line of lines) {
67
+ if (/^===\s+Wave\s+\d+/.test(line)) {
68
+ if (currentWave.length > 0) {
69
+ waveEntries.push(currentWave.join('\n').trimEnd());
70
+ }
71
+ currentWave = [line];
72
+ continue;
73
+ }
74
+ if (currentWave.length > 0) {
75
+ currentWave.push(line);
76
+ }
77
+ }
78
+ if (currentWave.length > 0) {
79
+ waveEntries.push(currentWave.join('\n').trimEnd());
80
+ }
81
+ if (waveEntries.length > 0) {
82
+ return waveEntries;
83
+ }
84
+ const separator = '\n---\n';
85
+ if (content.includes(separator)) {
86
+ return content.split(separator).map((entry) => entry.trim()).filter((entry) => entry !== '');
87
+ }
88
+ const trimmed = content.trim();
89
+ return trimmed === '' ? [] : [trimmed];
90
+ }
52
91
  function logsCommand(options) {
53
92
  const logPath = path.resolve('./progress.txt');
54
93
  if (!fs.existsSync(logPath)) {
@@ -56,17 +95,16 @@ function logsCommand(options) {
56
95
  return;
57
96
  }
58
97
  const content = fs.readFileSync(logPath, 'utf-8');
59
- const separator = '\n---\n';
60
- let entries = content.split(separator);
98
+ let output = content;
61
99
  if (options.tail !== undefined) {
62
100
  const n = parseInt(options.tail, 10);
63
101
  if (isNaN(n) || n <= 0) {
64
102
  console.error(chalk_1.default.red('Error: --tail must be a positive integer'));
65
103
  process.exit(1);
66
104
  }
67
- entries = entries.slice(-n);
105
+ const entries = splitLogEntries(content);
106
+ output = entries.slice(-n).join('\n\n');
68
107
  }
69
- const output = entries.join(separator);
70
108
  const lines = output.split('\n');
71
109
  for (const line of lines) {
72
110
  console.log(colorizeLine(line));
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,kCA2BC;AAtCD,uCAAyB;AACzB,2CAA6B;AAC7B,kDAA0B;AAE1B,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,WAAW,CAAC,OAA0B;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ interface RunDeps {
9
9
  }
10
10
  export declare function runCommand(prdPath: string, options: {
11
11
  backend?: string;
12
+ parallel?: string;
12
13
  }, deps?: RunDeps): void;
13
14
  export {};
14
15
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,UAAU,OAAO;IACf,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAgCD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,OAAqB,GAAG,IAAI,CA8C5G"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,UAAU,OAAO;IACf,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACjC,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAwCD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,OAAqB,GAAG,IAAI,CAuE/H"}
@@ -67,9 +67,16 @@ function isCommandInstalled(cmd, deps) {
67
67
  const result = deps.spawnSync('command', ['-v', cmd], { shell: true });
68
68
  return result.status === 0;
69
69
  }
70
+ function parseParallel(parallel) {
71
+ if (!/^\d+$/.test(parallel)) {
72
+ return null;
73
+ }
74
+ return parseInt(parallel, 10);
75
+ }
70
76
  function runCommand(prdPath, options, deps = defaultDeps) {
71
77
  const resolved = path.resolve(prdPath);
72
78
  const backend = options.backend || 'claude';
79
+ const parallel = options.parallel;
73
80
  if (!deps.existsSync(resolved)) {
74
81
  console.error(chalk_1.default.red(`Error: prd.json not found at ${resolved}`));
75
82
  console.error(chalk_1.default.dim('Run `ralph-teams init` to create one.'));
@@ -99,8 +106,30 @@ function runCommand(prdPath, options, deps = defaultDeps) {
99
106
  }
100
107
  console.log(chalk_1.default.dim(`Using PRD: ${resolved}`));
101
108
  console.log(chalk_1.default.dim(`Using backend: ${backend}`));
102
- console.log(chalk_1.default.dim(`Using ralph.sh: ${ralphSh}\n`));
109
+ console.log(chalk_1.default.dim(`Using ralph.sh: ${ralphSh}`));
110
+ if (parallel !== undefined) {
111
+ const parallelCount = parseParallel(parallel);
112
+ if (parallelCount === null) {
113
+ console.error(chalk_1.default.red('Error: --parallel must be a whole number'));
114
+ deps.exit(1);
115
+ }
116
+ if (parallelCount <= 0) {
117
+ console.error(chalk_1.default.red('Error: --parallel must be greater than 0'));
118
+ deps.exit(1);
119
+ }
120
+ console.log(chalk_1.default.dim(`Parallel: ${parallelCount} epics per wave\n`));
121
+ }
122
+ else {
123
+ console.log(chalk_1.default.dim('Mode: sequential\n'));
124
+ }
103
125
  const args = [resolved, '--backend', backend];
126
+ if (parallel !== undefined) {
127
+ const parallelCount = parseParallel(parallel);
128
+ if (parallelCount === null || parallelCount <= 0) {
129
+ deps.exit(1);
130
+ }
131
+ args.push('--parallel', String(parallelCount));
132
+ }
104
133
  const result = deps.spawnSync(ralphSh, args, {
105
134
  stdio: 'inherit',
106
135
  shell: false,
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,22 @@
1
+ /** A single wave's worth of data parsed from progress.txt */
2
+ export interface WaveInfo {
3
+ waveNumber: number;
4
+ epicIds: string[];
5
+ results: Array<{
6
+ epicId: string;
7
+ outcome: string;
8
+ }>;
9
+ }
10
+ /**
11
+ * Parse wave boundaries and results from progress.txt.
12
+ * Returns an empty array if the file does not exist or contains no wave data.
13
+ *
14
+ * Expected progress.txt format (written by ralph.sh):
15
+ * === Wave N — <date> ===
16
+ * EPIC-XXX
17
+ * EPIC-YYY
18
+ * [EPIC-XXX] OUTCOME — <date>
19
+ */
20
+ export declare function parseWavesFromProgress(progressPath: string): WaveInfo[];
1
21
  export declare function summaryCommand(prdPath: string): void;
2
22
  //# sourceMappingURL=summary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiEpD"}
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"AAKA,6DAA6D;AAC7D,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,EAAE,CA6CvE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgFpD"}