ghcralph 0.1.1 β†’ 0.1.3

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 (59) hide show
  1. package/README.md +35 -17
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +38 -8
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/run.d.ts +1 -0
  6. package/dist/commands/run.d.ts.map +1 -1
  7. package/dist/commands/run.js +214 -87
  8. package/dist/commands/run.js.map +1 -1
  9. package/dist/core/action-executor.d.ts +25 -0
  10. package/dist/core/action-executor.d.ts.map +1 -1
  11. package/dist/core/action-executor.js +68 -2
  12. package/dist/core/action-executor.js.map +1 -1
  13. package/dist/core/checkpoint-manager.d.ts +55 -8
  14. package/dist/core/checkpoint-manager.d.ts.map +1 -1
  15. package/dist/core/checkpoint-manager.js +282 -94
  16. package/dist/core/checkpoint-manager.js.map +1 -1
  17. package/dist/core/config-schema.d.ts +13 -1
  18. package/dist/core/config-schema.d.ts.map +1 -1
  19. package/dist/core/config-schema.js +27 -1
  20. package/dist/core/config-schema.js.map +1 -1
  21. package/dist/core/context-builder.d.ts.map +1 -1
  22. package/dist/core/context-builder.js +39 -1
  23. package/dist/core/context-builder.js.map +1 -1
  24. package/dist/core/git-branch-manager.d.ts +8 -0
  25. package/dist/core/git-branch-manager.d.ts.map +1 -1
  26. package/dist/core/git-branch-manager.js +28 -0
  27. package/dist/core/git-branch-manager.js.map +1 -1
  28. package/dist/core/index.d.ts +4 -4
  29. package/dist/core/index.d.ts.map +1 -1
  30. package/dist/core/index.js +1 -1
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/core/loop-state.d.ts +8 -0
  33. package/dist/core/loop-state.d.ts.map +1 -1
  34. package/dist/core/loop-state.js.map +1 -1
  35. package/dist/core/plan-manager.d.ts +4 -0
  36. package/dist/core/plan-manager.d.ts.map +1 -1
  37. package/dist/core/progress-tracker.d.ts +86 -3
  38. package/dist/core/progress-tracker.d.ts.map +1 -1
  39. package/dist/core/progress-tracker.js +257 -2
  40. package/dist/core/progress-tracker.js.map +1 -1
  41. package/dist/core/prompt-examples.d.ts +7 -3
  42. package/dist/core/prompt-examples.d.ts.map +1 -1
  43. package/dist/core/prompt-examples.js +30 -5
  44. package/dist/core/prompt-examples.js.map +1 -1
  45. package/dist/core/response-parser.d.ts +19 -2
  46. package/dist/core/response-parser.d.ts.map +1 -1
  47. package/dist/core/response-parser.js +47 -1
  48. package/dist/core/response-parser.js.map +1 -1
  49. package/dist/integrations/copilot-agent.d.ts +11 -0
  50. package/dist/integrations/copilot-agent.d.ts.map +1 -1
  51. package/dist/integrations/copilot-agent.js +55 -0
  52. package/dist/integrations/copilot-agent.js.map +1 -1
  53. package/dist/integrations/index.d.ts +1 -1
  54. package/dist/integrations/index.d.ts.map +1 -1
  55. package/dist/utils/shell.d.ts +5 -0
  56. package/dist/utils/shell.d.ts.map +1 -1
  57. package/dist/utils/shell.js +22 -0
  58. package/dist/utils/shell.js.map +1 -1
  59. package/package.json +2 -1
package/README.md CHANGED
@@ -11,6 +11,7 @@ Run **autonomous, checkpointed coding loops** with GitHub Copilotβ€”designed to
11
11
 
12
12
  - 🌿 **Branch isolation**: works on a `ghcralph/*` branch (never modifies `main`/`master` directly)
13
13
  - πŸ’Ύ **Automatic checkpoints**: commits after each iteration for easy rollback
14
+ - πŸ”„ **Multi-task processing**: processes ALL tasks in plan files automatically
14
15
  - πŸ›‘οΈ **Guardrails**: iteration limits, token budgets, timeouts, circuit breaker on repeated failures
15
16
  - πŸ“‹ **Flexible plan sources**: GitHub Issues or local Markdown task lists
16
17
  - πŸ’» **Cross-platform**: Windows, macOS, Linux
@@ -76,14 +77,15 @@ This approach prioritizes **safety** (automatic checkpoints, git isolation) and
76
77
 
77
78
  ## Key Features
78
79
 
79
- - πŸ”„ **Autonomous Loop**: Repeatedly invokes AI agent until task completion
80
+ - πŸ”„ **Multi-Task Loop**: Processes ALL tasks in a plan file automatically with fresh AI agent per task
80
81
  - πŸ“‹ **Flexible Plan Sources**: GitHub Issues or local Markdown task lists
81
82
  - πŸ›‘οΈ **Safety First**: Git branch isolation, file deletion safeguards
82
- - πŸ’Ύ **Automatic Checkpoints**: Git commits after each iteration for easy rollback
83
+ - πŸ’Ύ **Automatic Checkpoints**: Git commits after each task completion for easy rollback
83
84
  - πŸ“Š **Progress Tracking**: Real-time status, token usage, and session logs
84
- - ⚑ **Guardrails**: Iteration limits, token budgets, timeout controls
85
+ - ⚑ **Guardrails**: Iteration limits, token budgets, timeout controls, task-level retries
85
86
  - πŸ”§ **Highly Configurable**: Customize behavior via CLI, env vars, or config files
86
87
  - πŸ’» **Cross-Platform**: Works on Windows, macOS, and Linux
88
+ - πŸ€– **Dynamic Model Discovery**: Fetches available models from Copilot SDK
87
89
 
88
90
  ## Commands
89
91
 
@@ -157,6 +159,9 @@ ghcralph run --github
157
159
  # Control iterations, tokens, and model via configuration
158
160
  # (set maxIterations / maxTokens / defaultModel in .ghcralph/config.json)
159
161
 
162
+ # Pause between tasks for human review (strict Ralph mode)
163
+ ghcralph run --file PLAN.md --pause-between-tasks
164
+
160
165
  # Specify context files
161
166
  ghcralph run --task "Fix tests" --context "src/**/*.test.ts"
162
167
 
@@ -184,19 +189,23 @@ GitHub Copilot Ralph uses a hierarchical configuration system:
184
189
 
185
190
  ### Configuration Options
186
191
 
187
- | Option | Default | Description |
188
- | --------------- | ----------- | ----------------------------------------------------- |
189
- | `planSource` | `local` | Plan source: `github` or `local` |
190
- | `maxIterations` | `10` | Maximum loop iterations |
191
- | `maxTokens` | `100000` | Token budget |
192
- | `defaultModel` | `gpt-4.1` | Copilot model to use |
193
- | `autoCommit` | `true` | Auto-commit after iterations |
194
- | `branchPrefix` | `ghcralph/` | Prefix for GitHub Copilot Ralph branches |
195
- | `githubRepo` | - | GitHub repository (owner/repo) for GitHub plan source |
196
- | `githubLabel` | - | Default GitHub issue label filter for GitHub plan |
197
- | `githubMilestone` | - | Default GitHub issue milestone filter for GitHub plan |
198
- | `githubAssignee` | - | Default GitHub issue assignee filter for GitHub plan |
199
- | `localPlanFile` | - | Path to local plan file |
192
+ | Option | Default | Description |
193
+ | ------------------- | ----------- | ------------------------------------------------------------------------------- |
194
+ | `planSource` | `local` | Plan source: `github` or `local` |
195
+ | `maxIterations` | `10` | Maximum loop iterations per task |
196
+ | `maxTokens` | `100000` | Token budget per task |
197
+ | `defaultModel` | `gpt-4.1` | Copilot model to use (dynamically fetched from SDK) |
198
+ | `autoCommit` | `true` | Auto-commit after iterations |
199
+ | `branchPrefix` | `ghcralph/` | Prefix for GitHub Copilot Ralph branches |
200
+ | `maxRetriesPerTask` | `2` | Retries per task before marking as failed |
201
+ | `autoPush` | `false` | Auto-push to remote after task completion |
202
+ | `pushStrategy` | `per-task` | When to push: `per-task`, `per-run`, or `manual` |
203
+ | `progressVerbosity` | `standard` | Progress file detail level: `minimal`, `standard`, or `full` |
204
+ | `githubRepo` | - | GitHub repository (owner/repo) for GitHub plan source |
205
+ | `githubLabel` | - | Default GitHub issue label filter for GitHub plan |
206
+ | `githubMilestone` | - | Default GitHub issue milestone filter for GitHub plan |
207
+ | `githubAssignee` | - | Default GitHub issue assignee filter for GitHub plan |
208
+ | `localPlanFile` | - | Path to local plan file |
200
209
 
201
210
  ### Environment Variables
202
211
 
@@ -208,6 +217,10 @@ export GHCRALPH_MAX_TOKENS=50000
208
217
  export GHCRALPH_DEFAULT_MODEL=gpt-4.1
209
218
  export GHCRALPH_AUTO_COMMIT=true
210
219
  export GHCRALPH_BRANCH_PREFIX=ghcralph/
220
+ export GHCRALPH_MAX_RETRIES_PER_TASK=3
221
+ export GHCRALPH_AUTO_PUSH=true
222
+ export GHCRALPH_PUSH_STRATEGY=per-run
223
+ export GHCRALPH_PROGRESS_VERBOSITY=full
211
224
  export GHCRALPH_PLAN_SOURCE=local
212
225
  export GHCRALPH_GITHUB_REPO=owner/repo
213
226
  export GHCRALPH_GITHUB_LABEL=ralph-ready
@@ -225,6 +238,10 @@ export GHCRALPH_GITHUB_ASSIGNEE=octocat
225
238
  "defaultModel": "gpt-4.1",
226
239
  "autoCommit": true,
227
240
  "branchPrefix": "ghcralph/",
241
+ "maxRetriesPerTask": 2,
242
+ "autoPush": false,
243
+ "pushStrategy": "per-task",
244
+ "progressVerbosity": "standard",
228
245
  "githubRepo": "owner/repo",
229
246
  "githubLabel": "ralph-ready",
230
247
  "githubMilestone": "v1.0",
@@ -241,7 +258,8 @@ export GHCRALPH_GITHUB_ASSIGNEE=octocat
241
258
 
242
259
  ### πŸ’Ύ Automatic Checkpoints
243
260
  - Commits after each successful iteration
244
- - Message format: `ghcralph: iteration N - summary`
261
+ - Message format: `ghcralph: task X/Y iter N - summary` (with plan context)
262
+ - Task completion: `ghcralph: task X/Y complete - task title`
245
263
  - Easy rollback with `ghcralph rollback`
246
264
 
247
265
  ### πŸ›‘οΈ File Deletion Safeguards
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAyH3D,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4Q1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAiK3D,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsQ1D"}
@@ -7,6 +7,14 @@ import { execSync } from 'node:child_process';
7
7
  import { createInterface } from 'node:readline/promises';
8
8
  import { info, success, error, warn, debug, heading, code, dim } from '../utils/index.js';
9
9
  import { ConfigManager } from '../core/config-manager.js';
10
+ import { CopilotAgent } from '../integrations/copilot-agent.js';
11
+ // Fallback models if SDK fetch fails
12
+ const FALLBACK_MODELS = [
13
+ 'gpt-4.1',
14
+ 'claude-sonnet-4.5',
15
+ 'gpt-5',
16
+ 'gpt-5.2-codex',
17
+ ];
10
18
  /**
11
19
  * Check if we're in a git repository
12
20
  */
@@ -108,6 +116,34 @@ async function promptSelect(rl, message, options, defaultValue) {
108
116
  console.log(dim('Please enter a valid option number.'));
109
117
  }
110
118
  }
119
+ /**
120
+ * Fetch available models from the Copilot SDK
121
+ * Falls back to hardcoded list if fetch fails
122
+ */
123
+ async function fetchModelOptions(_currentDefault) {
124
+ debug('Fetching available models from Copilot SDK...');
125
+ try {
126
+ const models = await CopilotAgent.fetchAvailableModels();
127
+ if (models.length > 0) {
128
+ debug(`Found ${models.length} models from SDK`);
129
+ const options = models.map((m) => ({
130
+ label: m.name || m.id,
131
+ value: m.id,
132
+ }));
133
+ // Add custom option at the end
134
+ options.push({ label: 'Custom (enter manually)', value: '__custom__' });
135
+ return options;
136
+ }
137
+ }
138
+ catch (err) {
139
+ debug(`Failed to fetch models: ${err instanceof Error ? err.message : String(err)}`);
140
+ }
141
+ // Fallback to hardcoded list
142
+ debug('Using fallback model list');
143
+ const fallbackOptions = FALLBACK_MODELS.map(m => ({ label: m, value: m }));
144
+ fallbackOptions.push({ label: 'Custom (enter manually)', value: '__custom__' });
145
+ return fallbackOptions;
146
+ }
111
147
  export function registerInitCommand(program) {
112
148
  program
113
149
  .command('init')
@@ -207,14 +243,8 @@ See also:
207
243
  configManager.set('maxIterations', maxIterations);
208
244
  const maxTokens = await promptNumber(rl, 'Max tokens', current.maxTokens);
209
245
  configManager.set('maxTokens', maxTokens);
210
- const modelOptions = [
211
- { label: 'gpt-4.1', value: 'gpt-4.1' },
212
- { label: 'gpt-4', value: 'gpt-4' },
213
- { label: 'gpt-5', value: 'gpt-5' },
214
- { label: 'gpt-5.2-codex', value: 'gpt-5.2-codex' },
215
- { label: 'claude-sonnet-4.5', value: 'claude-sonnet-4.5' },
216
- { label: 'Custom (enter manually)', value: '__custom__' },
217
- ];
246
+ // Fetch available models dynamically from SDK
247
+ const modelOptions = await fetchModelOptions(current.defaultModel);
218
248
  const selectedModel = await promptSelect(rl, 'Model', modelOptions, (modelOptions.some(o => o.value === current.defaultModel)
219
249
  ? current.defaultModel
220
250
  : '__custom__'));
@@ -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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"}
@@ -15,6 +15,7 @@ export interface RunOptions {
15
15
  timeout?: string;
16
16
  allowDelete?: boolean;
17
17
  dryRun?: boolean;
18
+ pauseBetweenTasks?: boolean;
18
19
  }
19
20
  export declare function registerRunCommand(program: Command): void;
20
21
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+FD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkZzD"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA+FD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4kBzD"}
@@ -7,6 +7,7 @@ import fs from 'node:fs/promises';
7
7
  import path from 'node:path';
8
8
  import { execSync } from 'node:child_process';
9
9
  import { info, success, error, warn, debug, spinner, heading, code, dim, parseNonNegativeInt } from '../utils/index.js';
10
+ import { waitForKeypress } from '../utils/shell.js';
10
11
  import { CopilotAgent } from '../integrations/index.js';
11
12
  import { LoopEngine, LocalMarkdownPlan, GitHubPlan, ProgressTracker, GitBranchManager, CheckpointManager, FileSafeguardManager, ConfigManager, } from '../core/index.js';
12
13
  /**
@@ -107,6 +108,7 @@ export function registerRunCommand(program) {
107
108
  .option('--timeout <minutes>', 'Maximum duration in minutes')
108
109
  .option('--allow-delete', 'Allow deletion of pre-existing files')
109
110
  .option('--dry-run', 'Show what would happen without executing')
111
+ .option('--pause-between-tasks', 'Pause for human review after each task (strict Ralph mode)')
110
112
  .addHelpText('after', `
111
113
  Config-backed settings (set via .ghcralph/config.json or GHCRALPH_* env vars):
112
114
  - maxIterations, maxTokens, defaultModel, autoCommit, branchPrefix
@@ -325,11 +327,6 @@ See also:
325
327
  }
326
328
  console.log(` ${dim('Branch:')} ${code(branchInfo.branchName)}`);
327
329
  }
328
- // Create agent and engine with context configuration
329
- const agent = new CopilotAgent({
330
- model,
331
- maxTokensPerRequest: 4096,
332
- });
333
330
  // Build context config, only including contextGlobs if provided
334
331
  const contextConfig = {
335
332
  includeGitDiff: true,
@@ -339,15 +336,9 @@ See also:
339
336
  if (options.context) {
340
337
  contextConfig.contextGlobs = options.context;
341
338
  }
342
- const engine = new LoopEngine(agent, {
343
- maxIterations,
344
- maxTokens,
345
- maxDurationMinutes,
346
- allowUnlimited: options.unlimited === true,
347
- contextConfig,
348
- });
349
- // Create progress tracker
350
- const progressTracker = new ProgressTracker(undefined, maxIterations);
339
+ // Create progress tracker with verbosity setting
340
+ const progressVerbosity = config.progressVerbosity ?? 'standard';
341
+ const progressTracker = new ProgressTracker(undefined, maxIterations, progressVerbosity);
351
342
  // Create checkpoint manager for auto-commits
352
343
  const checkpointManager = new CheckpointManager({
353
344
  autoCommit: config.autoCommit,
@@ -357,91 +348,227 @@ See also:
357
348
  allowDeleteExisting: options.allowDelete === true,
358
349
  });
359
350
  await fileSafeguard.initialize();
360
- // Setup signal handlers for graceful shutdown
361
- const cleanupSignalHandlers = setupSignalHandlers(engine);
362
- // Setup event listeners
363
- const events = engine.getEvents();
364
351
  const startTime = new Date();
365
- events.on('iterationStart', (iteration, state) => {
366
- debug(`Iteration ${iteration}/${maxIterations} - Tokens: ${state.tokensUsed.toLocaleString()}`);
367
- });
368
- events.on('iterationEnd', (record, state) => {
369
- const status = record.success ? 'βœ“' : 'βœ—';
370
- info(`Iteration ${record.iteration}: ${status} (${record.tokensUsed.toLocaleString()} tokens)`);
371
- if (record.summary) {
372
- console.log(` ${dim(record.summary)}`);
352
+ let exitCode = 0;
353
+ let totalTasksProcessed = 0;
354
+ let totalTasksCompleted = 0;
355
+ let totalTasksFailed = 0;
356
+ const maxRetriesPerTask = config.maxRetriesPerTask ?? 2;
357
+ const autoPush = config.autoPush ?? false;
358
+ const pushStrategy = config.pushStrategy ?? 'per-task';
359
+ // Compute total tasks count for commit message context (if available)
360
+ let totalTasksInPlan = 0;
361
+ if (planManager) {
362
+ try {
363
+ const allTasks = await planManager.getTasks();
364
+ totalTasksInPlan = allTasks.length;
365
+ }
366
+ catch {
367
+ // Fall back to unknown total if getTasks fails
368
+ totalTasksInPlan = 0;
373
369
  }
374
- // Create checkpoint commit after successful iterations
375
- if (record.success && checkpointManager.isAutoCommitEnabled()) {
376
- checkpointManager
377
- .createCheckpoint(record.iteration, record.summary ?? 'iteration complete', record.tokensUsed)
378
- .then((checkpoint) => {
379
- if (checkpoint) {
380
- debug(`Checkpoint created: ${checkpoint.commitHash.substring(0, 7)}`);
381
- // Update progress with commit hash
382
- state.lastCheckpoint = checkpoint.commitHash;
370
+ }
371
+ // ========== MULTI-TASK ITERATION LOOP ==========
372
+ // This is the core fix: process ALL tasks in the plan, not just the first one
373
+ let currentTask = task;
374
+ while (currentTask) {
375
+ // Capture task in a const for this iteration (helps TypeScript narrowing)
376
+ const activeTask = currentTask;
377
+ totalTasksProcessed++;
378
+ let taskAttempt = 0;
379
+ let taskCompleted = false;
380
+ let taskFailed = false;
381
+ info(`\nπŸ“‹ Task ${totalTasksProcessed}: ${activeTask.title}`);
382
+ // Retry loop for the current task (with fresh agent per attempt)
383
+ while (!taskCompleted && !taskFailed && taskAttempt < maxRetriesPerTask) {
384
+ taskAttempt++;
385
+ if (taskAttempt > 1) {
386
+ info(`\nπŸ”„ Retry ${taskAttempt}/${maxRetriesPerTask} for task: ${activeTask.title}`);
387
+ }
388
+ // Create FRESH agent instance for each attempt (Ralph pattern core principle)
389
+ const agent = new CopilotAgent({
390
+ model,
391
+ maxTokensPerRequest: 4096,
392
+ });
393
+ const engine = new LoopEngine(agent, {
394
+ maxIterations,
395
+ maxTokens,
396
+ maxDurationMinutes,
397
+ allowUnlimited: options.unlimited === true,
398
+ contextConfig,
399
+ });
400
+ // Setup signal handlers for graceful shutdown
401
+ const cleanupSignalHandlers = setupSignalHandlers(engine);
402
+ // Setup event listeners
403
+ const events = engine.getEvents();
404
+ events.on('iterationStart', (iteration, state) => {
405
+ debug(`Iteration ${iteration}/${maxIterations} - Tokens: ${state.tokensUsed.toLocaleString()}`);
406
+ });
407
+ events.on('iterationEnd', (record, state) => {
408
+ const status = record.success ? 'βœ“' : 'βœ—';
409
+ info(`Iteration ${record.iteration}: ${status} (${record.tokensUsed.toLocaleString()} tokens)`);
410
+ if (record.summary) {
411
+ console.log(` ${dim(record.summary)}`);
412
+ }
413
+ // Create checkpoint commit after successful iterations
414
+ if (record.success && checkpointManager.isAutoCommitEnabled()) {
415
+ // Build task context for commit message if we have plan info
416
+ const taskContext = totalTasksInPlan > 0
417
+ ? { taskNumber: totalTasksProcessed, totalTasks: totalTasksInPlan }
418
+ : undefined;
419
+ checkpointManager
420
+ .createCheckpoint(record.iteration, record.summary ?? 'iteration complete', record.tokensUsed, taskContext)
421
+ .then((checkpoint) => {
422
+ if (checkpoint) {
423
+ debug(`Checkpoint created: ${checkpoint.commitHash.substring(0, 7)}`);
424
+ // Update progress with commit hash
425
+ state.lastCheckpoint = checkpoint.commitHash;
426
+ }
427
+ })
428
+ .catch(() => {
429
+ // Ignore checkpoint errors
430
+ });
383
431
  }
384
- })
385
- .catch(() => {
386
- // Ignore checkpoint errors
432
+ // Save progress after each iteration
433
+ progressTracker.save(state).catch(() => {
434
+ // Ignore save errors
435
+ });
387
436
  });
388
- }
389
- // Save progress after each iteration
390
- progressTracker.save(state).catch(() => {
391
- // Ignore save errors
392
- });
393
- });
394
- events.on('error', (err) => {
395
- error(`Loop error: ${err.message}`);
396
- });
397
- events.on('warning', (type, message) => {
398
- warn(`Warning: ${message}`);
399
- });
400
- // Run the loop
401
- const loopSpinner = spinner('Running agentic loop...');
402
- loopSpinner.start();
403
- let exitCode = 0;
404
- try {
405
- const finalState = await engine.start(task);
406
- loopSpinner.stop();
407
- console.log('');
408
- // Print summary
409
- console.log(heading('πŸ“Š Summary'));
410
- console.log('');
411
- console.log(` ${dim('Status:')} ${finalState.status}`);
412
- console.log(` ${dim('Iterations:')} ${finalState.iteration}/${maxIterations}`);
413
- console.log(` ${dim('Tokens used:')} ${finalState.tokensUsed.toLocaleString()}`);
414
- console.log(` ${dim('Elapsed time:')} ${formatElapsedTime(startTime)}`);
415
- const successfulIterations = finalState.iterations.filter((i) => i.success).length;
416
- console.log(` ${dim('Successful iterations:')} ${successfulIterations}`);
417
- console.log('');
418
- if (finalState.status === 'completed') {
419
- // Mark task as complete in plan file if using a plan
420
- if (planManager) {
421
- await planManager.completeTask(task.id);
422
- info(`Task marked as complete in plan file`);
437
+ events.on('error', (err) => {
438
+ error(`Loop error: ${err.message}`);
439
+ });
440
+ events.on('warning', (type, message) => {
441
+ warn(`Warning: ${message}`);
442
+ });
443
+ // Run the loop for this task
444
+ const loopSpinner = spinner('Running agentic loop...');
445
+ loopSpinner.start();
446
+ try {
447
+ const finalState = await engine.start(activeTask);
448
+ loopSpinner.stop();
449
+ console.log('');
450
+ // Print iteration summary
451
+ console.log(` ${dim('Status:')} ${finalState.status}`);
452
+ console.log(` ${dim('Iterations:')} ${finalState.iteration}/${maxIterations}`);
453
+ console.log(` ${dim('Tokens used:')} ${finalState.tokensUsed.toLocaleString()}`);
454
+ const successfulIterations = finalState.iterations.filter((i) => i.success).length;
455
+ console.log(` ${dim('Successful iterations:')} ${successfulIterations}`);
456
+ console.log('');
457
+ if (finalState.status === 'completed') {
458
+ taskCompleted = true;
459
+ // Mark task as complete in plan file if using a plan
460
+ if (planManager) {
461
+ await planManager.completeTask(activeTask.id);
462
+ info(`Task marked as complete in plan file`);
463
+ }
464
+ // Document result in progress file
465
+ await progressTracker.appendTaskResult(activeTask, 'completed', taskAttempt, `Completed in ${finalState.iteration} iterations`);
466
+ // Build task context for commit message if we have plan info
467
+ const taskContext = totalTasksInPlan > 0
468
+ ? { taskNumber: totalTasksProcessed, totalTasks: totalTasksInPlan }
469
+ : undefined;
470
+ // Create a task-level checkpoint commit
471
+ await checkpointManager.createTaskCheckpoint(activeTask.title, activeTask.id, `Task completed in ${finalState.iteration} iterations`, taskContext);
472
+ // Push to remote if configured (per-task strategy)
473
+ if (autoPush && pushStrategy === 'per-task' && isGitRepo) {
474
+ info('Pushing changes to remote...');
475
+ const pushed = await gitManager.pushToRemote();
476
+ if (pushed) {
477
+ success('Changes pushed to remote');
478
+ }
479
+ else {
480
+ warn('Failed to push changes to remote');
481
+ }
482
+ }
483
+ success(`βœ“ Task completed: ${activeTask.title}`);
484
+ totalTasksCompleted++;
485
+ }
486
+ else if (finalState.status === 'stopped') {
487
+ // User requested stop - exit the entire run
488
+ warn('Loop was stopped by user');
489
+ // Document the stop
490
+ await progressTracker.appendTaskResult(activeTask, 'stuck', taskAttempt, 'Stopped by user');
491
+ // Exit the multi-task loop
492
+ currentTask = null;
493
+ continue;
494
+ }
495
+ else if (finalState.status === 'failed') {
496
+ warn(`βœ— Task attempt ${taskAttempt} failed: ${activeTask.title}`);
497
+ // Document failure for learning
498
+ await progressTracker.appendTaskResult(activeTask, 'failed', taskAttempt, 'Loop execution failed');
499
+ // Create failure checkpoint
500
+ await checkpointManager.createFailureCheckpoint(activeTask.title, activeTask.id, taskAttempt, 'Loop execution failed');
501
+ }
502
+ }
503
+ catch (err) {
504
+ loopSpinner.fail('Loop failed');
505
+ const errMsg = err instanceof Error ? err.message : String(err);
506
+ error(errMsg);
507
+ // Document failure
508
+ await progressTracker.appendTaskResult(activeTask, 'failed', taskAttempt, undefined, errMsg);
509
+ // Create failure checkpoint
510
+ await checkpointManager.createFailureCheckpoint(activeTask.title, activeTask.id, taskAttempt, errMsg);
511
+ }
512
+ finally {
513
+ cleanupSignalHandlers();
514
+ await agent.destroy();
423
515
  }
424
- success('Loop completed successfully');
425
- }
426
- else if (finalState.status === 'stopped') {
427
- warn('Loop was stopped by user');
428
516
  }
429
- else if (finalState.status === 'failed') {
517
+ // Check if all retries exhausted without completion
518
+ if (!taskCompleted && currentTask) {
519
+ taskFailed = true;
520
+ totalTasksFailed++;
430
521
  if (planManager) {
431
- await planManager.failTask(task.id);
522
+ await planManager.failTask(activeTask.id);
432
523
  }
433
- error('Loop failed');
524
+ error(`❌ Task failed after ${maxRetriesPerTask} attempts: ${activeTask.title}`);
434
525
  exitCode = 1;
435
526
  }
527
+ // Optional pause for human review (strict Ralph mode)
528
+ if (options.pauseBetweenTasks && planManager && !taskFailed) {
529
+ console.log('');
530
+ info('Press any key to continue to next task, or Ctrl+C to stop...');
531
+ await waitForKeypress();
532
+ }
533
+ // Get next task from the plan (if using a plan)
534
+ if (planManager) {
535
+ // Reload plan file to pick up any external changes
536
+ await planManager.reload?.();
537
+ currentTask = await planManager.getNextTask();
538
+ }
539
+ else {
540
+ // Single task mode (--task flag) - exit after one task
541
+ currentTask = null;
542
+ }
436
543
  }
437
- catch (err) {
438
- loopSpinner.fail('Loop failed');
439
- error(err instanceof Error ? err.message : String(err));
440
- exitCode = 1;
544
+ // ========== FINAL SUMMARY ==========
545
+ console.log('');
546
+ console.log(heading('πŸ“Š Final Summary'));
547
+ console.log('');
548
+ console.log(` ${dim('Total tasks processed:')} ${totalTasksProcessed}`);
549
+ console.log(` ${dim('Tasks completed:')} ${totalTasksCompleted}`);
550
+ console.log(` ${dim('Tasks failed:')} ${totalTasksFailed}`);
551
+ console.log(` ${dim('Elapsed time:')} ${formatElapsedTime(startTime)}`);
552
+ console.log('');
553
+ // Push to remote if configured (per-run strategy)
554
+ if (autoPush && pushStrategy === 'per-run' && isGitRepo && totalTasksCompleted > 0) {
555
+ info('Pushing all changes to remote...');
556
+ const pushed = await gitManager.pushToRemote();
557
+ if (pushed) {
558
+ success('All changes pushed to remote');
559
+ }
560
+ else {
561
+ warn('Failed to push changes to remote');
562
+ }
563
+ }
564
+ if (totalTasksFailed === 0 && totalTasksCompleted > 0) {
565
+ success(`πŸŽ‰ All ${totalTasksCompleted} tasks completed successfully!`);
566
+ }
567
+ else if (totalTasksCompleted > 0) {
568
+ warn(`Completed ${totalTasksCompleted} tasks, ${totalTasksFailed} failed`);
441
569
  }
442
- finally {
443
- cleanupSignalHandlers();
444
- await agent.destroy();
570
+ else if (totalTasksProcessed === 0) {
571
+ success('No pending tasks found - all tasks are complete!');
445
572
  }
446
573
  if (exitCode !== 0) {
447
574
  process.exit(exitCode);