ghcralph 0.1.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 (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/bin/ghcralph.js +2 -0
  4. package/dist/cli.d.ts +12 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +92 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/config.d.ts +8 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +118 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/index.d.ts +11 -0
  13. package/dist/commands/index.d.ts.map +1 -0
  14. package/dist/commands/index.js +11 -0
  15. package/dist/commands/index.js.map +1 -0
  16. package/dist/commands/init.d.ts +15 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +116 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/rollback.d.ts +8 -0
  21. package/dist/commands/rollback.d.ts.map +1 -0
  22. package/dist/commands/rollback.js +238 -0
  23. package/dist/commands/rollback.js.map +1 -0
  24. package/dist/commands/run.d.ts +28 -0
  25. package/dist/commands/run.d.ts.map +1 -0
  26. package/dist/commands/run.js +407 -0
  27. package/dist/commands/run.js.map +1 -0
  28. package/dist/commands/status.d.ts +8 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +399 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/core/action-executor.d.ts +96 -0
  33. package/dist/core/action-executor.d.ts.map +1 -0
  34. package/dist/core/action-executor.js +289 -0
  35. package/dist/core/action-executor.js.map +1 -0
  36. package/dist/core/checkpoint-manager.d.ts +94 -0
  37. package/dist/core/checkpoint-manager.d.ts.map +1 -0
  38. package/dist/core/checkpoint-manager.js +236 -0
  39. package/dist/core/checkpoint-manager.js.map +1 -0
  40. package/dist/core/config-manager.d.ts +62 -0
  41. package/dist/core/config-manager.d.ts.map +1 -0
  42. package/dist/core/config-manager.js +184 -0
  43. package/dist/core/config-manager.js.map +1 -0
  44. package/dist/core/config-schema.d.ts +74 -0
  45. package/dist/core/config-schema.d.ts.map +1 -0
  46. package/dist/core/config-schema.js +84 -0
  47. package/dist/core/config-schema.js.map +1 -0
  48. package/dist/core/context-builder.d.ts +116 -0
  49. package/dist/core/context-builder.d.ts.map +1 -0
  50. package/dist/core/context-builder.js +388 -0
  51. package/dist/core/context-builder.js.map +1 -0
  52. package/dist/core/feedback-builder.d.ts +94 -0
  53. package/dist/core/feedback-builder.d.ts.map +1 -0
  54. package/dist/core/feedback-builder.js +226 -0
  55. package/dist/core/feedback-builder.js.map +1 -0
  56. package/dist/core/file-safeguard.d.ts +109 -0
  57. package/dist/core/file-safeguard.d.ts.map +1 -0
  58. package/dist/core/file-safeguard.js +200 -0
  59. package/dist/core/file-safeguard.js.map +1 -0
  60. package/dist/core/git-branch-manager.d.ts +122 -0
  61. package/dist/core/git-branch-manager.d.ts.map +1 -0
  62. package/dist/core/git-branch-manager.js +302 -0
  63. package/dist/core/git-branch-manager.js.map +1 -0
  64. package/dist/core/github-plan.d.ts +86 -0
  65. package/dist/core/github-plan.d.ts.map +1 -0
  66. package/dist/core/github-plan.js +333 -0
  67. package/dist/core/github-plan.js.map +1 -0
  68. package/dist/core/index.d.ts +43 -0
  69. package/dist/core/index.d.ts.map +1 -0
  70. package/dist/core/index.js +26 -0
  71. package/dist/core/index.js.map +1 -0
  72. package/dist/core/local-markdown-plan.d.ts +65 -0
  73. package/dist/core/local-markdown-plan.d.ts.map +1 -0
  74. package/dist/core/local-markdown-plan.js +154 -0
  75. package/dist/core/local-markdown-plan.js.map +1 -0
  76. package/dist/core/loop-engine.d.ts +133 -0
  77. package/dist/core/loop-engine.d.ts.map +1 -0
  78. package/dist/core/loop-engine.js +420 -0
  79. package/dist/core/loop-engine.js.map +1 -0
  80. package/dist/core/loop-events.d.ts +48 -0
  81. package/dist/core/loop-events.d.ts.map +1 -0
  82. package/dist/core/loop-events.js +24 -0
  83. package/dist/core/loop-events.js.map +1 -0
  84. package/dist/core/loop-state.d.ts +51 -0
  85. package/dist/core/loop-state.d.ts.map +1 -0
  86. package/dist/core/loop-state.js +48 -0
  87. package/dist/core/loop-state.js.map +1 -0
  88. package/dist/core/markdown-parser.d.ts +51 -0
  89. package/dist/core/markdown-parser.d.ts.map +1 -0
  90. package/dist/core/markdown-parser.js +122 -0
  91. package/dist/core/markdown-parser.js.map +1 -0
  92. package/dist/core/plan-manager.d.ts +61 -0
  93. package/dist/core/plan-manager.d.ts.map +1 -0
  94. package/dist/core/plan-manager.js +7 -0
  95. package/dist/core/plan-manager.js.map +1 -0
  96. package/dist/core/progress-tracker.d.ts +74 -0
  97. package/dist/core/progress-tracker.d.ts.map +1 -0
  98. package/dist/core/progress-tracker.js +198 -0
  99. package/dist/core/progress-tracker.js.map +1 -0
  100. package/dist/core/prompt-examples.d.ts +52 -0
  101. package/dist/core/prompt-examples.d.ts.map +1 -0
  102. package/dist/core/prompt-examples.js +194 -0
  103. package/dist/core/prompt-examples.js.map +1 -0
  104. package/dist/core/response-parser.d.ts +90 -0
  105. package/dist/core/response-parser.d.ts.map +1 -0
  106. package/dist/core/response-parser.js +209 -0
  107. package/dist/core/response-parser.js.map +1 -0
  108. package/dist/core/verification-hooks.d.ts +103 -0
  109. package/dist/core/verification-hooks.d.ts.map +1 -0
  110. package/dist/core/verification-hooks.js +268 -0
  111. package/dist/core/verification-hooks.js.map +1 -0
  112. package/dist/index.d.ts +13 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +17 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/integrations/auth.d.ts +28 -0
  117. package/dist/integrations/auth.d.ts.map +1 -0
  118. package/dist/integrations/auth.js +76 -0
  119. package/dist/integrations/auth.js.map +1 -0
  120. package/dist/integrations/copilot-agent.d.ts +104 -0
  121. package/dist/integrations/copilot-agent.d.ts.map +1 -0
  122. package/dist/integrations/copilot-agent.js +235 -0
  123. package/dist/integrations/copilot-agent.js.map +1 -0
  124. package/dist/integrations/index.d.ts +18 -0
  125. package/dist/integrations/index.d.ts.map +1 -0
  126. package/dist/integrations/index.js +14 -0
  127. package/dist/integrations/index.js.map +1 -0
  128. package/dist/integrations/mcp-tools.d.ts +129 -0
  129. package/dist/integrations/mcp-tools.d.ts.map +1 -0
  130. package/dist/integrations/mcp-tools.js +272 -0
  131. package/dist/integrations/mcp-tools.js.map +1 -0
  132. package/dist/integrations/tokens.d.ts +45 -0
  133. package/dist/integrations/tokens.d.ts.map +1 -0
  134. package/dist/integrations/tokens.js +50 -0
  135. package/dist/integrations/tokens.js.map +1 -0
  136. package/dist/types/index.d.ts +53 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +7 -0
  139. package/dist/types/index.js.map +1 -0
  140. package/dist/utils/index.d.ts +23 -0
  141. package/dist/utils/index.d.ts.map +1 -0
  142. package/dist/utils/index.js +37 -0
  143. package/dist/utils/index.js.map +1 -0
  144. package/dist/utils/output.d.ts +59 -0
  145. package/dist/utils/output.d.ts.map +1 -0
  146. package/dist/utils/output.js +96 -0
  147. package/dist/utils/output.js.map +1 -0
  148. package/dist/utils/paths.d.ts +34 -0
  149. package/dist/utils/paths.d.ts.map +1 -0
  150. package/dist/utils/paths.js +67 -0
  151. package/dist/utils/paths.js.map +1 -0
  152. package/dist/utils/shell.d.ts +26 -0
  153. package/dist/utils/shell.d.ts.map +1 -0
  154. package/dist/utils/shell.js +65 -0
  155. package/dist/utils/shell.js.map +1 -0
  156. package/dist/utils/validation.d.ts +27 -0
  157. package/dist/utils/validation.d.ts.map +1 -0
  158. package/dist/utils/validation.js +43 -0
  159. package/dist/utils/validation.js.map +1 -0
  160. package/package.json +86 -0
@@ -0,0 +1,407 @@
1
+ /**
2
+ * Run Command
3
+ *
4
+ * Execute an agentic coding loop
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import { info, success, error, warn, debug, spinner, heading, code, dim, parsePositiveInt, parseNonNegativeInt } from '../utils/index.js';
8
+ import { CopilotAgent } from '../integrations/index.js';
9
+ import { LoopEngine, LocalMarkdownPlan, GitHubPlan, ProgressTracker, GitBranchManager, CheckpointManager, FileSafeguardManager, } from '../core/index.js';
10
+ /**
11
+ * Format elapsed time as human-readable string
12
+ */
13
+ function formatElapsedTime(startTime) {
14
+ const elapsed = Date.now() - startTime.getTime();
15
+ const seconds = Math.floor(elapsed / 1000);
16
+ const minutes = Math.floor(seconds / 60);
17
+ if (minutes > 0) {
18
+ return `${minutes}m ${seconds % 60}s`;
19
+ }
20
+ return `${seconds}s`;
21
+ }
22
+ /**
23
+ * Read task content from a file
24
+ */
25
+ async function readTaskFromFile(filePath) {
26
+ try {
27
+ const content = await fs.readFile(filePath, 'utf-8');
28
+ return content.trim();
29
+ }
30
+ catch {
31
+ throw new Error(`Failed to read task file: ${filePath}`);
32
+ }
33
+ }
34
+ /**
35
+ * Create a task object from options
36
+ */
37
+ async function createTask(options) {
38
+ let content;
39
+ let title;
40
+ if (options.file) {
41
+ content = await readTaskFromFile(options.file);
42
+ title = options.file;
43
+ }
44
+ else if (options.task) {
45
+ content = options.task;
46
+ title = options.task.substring(0, 50) + (options.task.length > 50 ? '...' : '');
47
+ }
48
+ else {
49
+ throw new Error('No task provided');
50
+ }
51
+ return {
52
+ id: `task-${Date.now()}`,
53
+ title,
54
+ content,
55
+ status: 'pending',
56
+ source: options.file ? 'local' : 'local',
57
+ };
58
+ }
59
+ /**
60
+ * Handle graceful shutdown on Ctrl+C
61
+ */
62
+ function setupSignalHandlers(engine) {
63
+ let shutdownRequested = false;
64
+ const handler = () => {
65
+ if (shutdownRequested) {
66
+ warn('Force quit - exiting immediately');
67
+ process.exit(1);
68
+ }
69
+ shutdownRequested = true;
70
+ warn('Shutdown requested - completing current iteration...');
71
+ engine.stop();
72
+ };
73
+ process.on('SIGINT', handler);
74
+ process.on('SIGTERM', handler);
75
+ }
76
+ export function registerRunCommand(program) {
77
+ program
78
+ .command('run')
79
+ .description('Execute an agentic coding loop')
80
+ .option('-t, --task <description>', 'Task to execute (inline)')
81
+ .option('-f, --file <path>', 'Read task from file')
82
+ .option('-p, --plan <path>', 'Read tasks from a Markdown plan file')
83
+ .option('-g, --github <owner/repo>', 'Use GitHub Issues as plan source')
84
+ .option('-l, --label <label>', 'Filter GitHub issues by label')
85
+ .option('--milestone <name>', 'Filter GitHub issues by milestone')
86
+ .option('--assignee <user>', 'Filter GitHub issues by assignee')
87
+ .option('-c, --context <glob...>', 'Include files matching glob patterns in context')
88
+ .option('-b, --branch <name>', 'Use or create a specific branch name')
89
+ .option('--force', 'Skip branch confirmation prompts')
90
+ .option('--no-commit', 'Disable automatic checkpoint commits')
91
+ .option('--unlimited', 'Allow more than 50 iterations')
92
+ .option('--timeout <minutes>', 'Maximum duration in minutes')
93
+ .option('--allow-delete', 'Allow deletion of pre-existing files')
94
+ .option('-n, --max-iterations <number>', 'Maximum loop iterations', '10')
95
+ .option('--max-tokens <number>', 'Maximum token budget', '100000')
96
+ .option('-m, --model <model>', 'Copilot model to use', 'gpt-4')
97
+ .option('--dry-run', 'Show what would happen without executing')
98
+ .addHelpText('after', `
99
+ Examples:
100
+ $ ghcralph run --task "Add input validation to the login form"
101
+ $ ghcralph run --file tasks/refactor.md --max-iterations 5
102
+ $ ghcralph run --plan TODO.md
103
+ $ ghcralph run --github owner/repo --label "ralph-ready"
104
+ $ ghcralph run --task "Fix bug" --context "src/**/*.ts" --branch fix/login-bug
105
+ $ ghcralph run --task "Large refactor" --unlimited --timeout 60
106
+
107
+ See also:
108
+ ghcralph status View current session progress
109
+ ghcralph rollback Undo recent changes
110
+ ghcralph init Initialize Ralph in your project
111
+ `)
112
+ .action(async (options) => {
113
+ if (!options.task && !options.file && !options.plan && !options.github) {
114
+ error('Please provide a task with --task, --file, --plan, or --github');
115
+ process.exit(1);
116
+ }
117
+ // Validate numeric inputs
118
+ const maxIterationsResult = parsePositiveInt(options.maxIterations, 'max-iterations');
119
+ if (!maxIterationsResult.valid) {
120
+ error(maxIterationsResult.error ?? 'Invalid max-iterations value');
121
+ process.exit(1);
122
+ }
123
+ if (maxIterationsResult.value === undefined) {
124
+ error(maxIterationsResult.error ?? 'Invalid max-iterations value');
125
+ process.exit(1);
126
+ }
127
+ const maxIterations = maxIterationsResult.value;
128
+ let maxTokens = 100000;
129
+ if (options.maxTokens) {
130
+ const maxTokensResult = parsePositiveInt(options.maxTokens, 'max-tokens');
131
+ if (!maxTokensResult.valid) {
132
+ error(maxTokensResult.error ?? 'Invalid max-tokens value');
133
+ process.exit(1);
134
+ }
135
+ if (maxTokensResult.value === undefined) {
136
+ error(maxTokensResult.error ?? 'Invalid max-tokens value');
137
+ process.exit(1);
138
+ }
139
+ maxTokens = maxTokensResult.value;
140
+ }
141
+ let maxDurationMinutes = 0;
142
+ if (options.timeout) {
143
+ const timeoutResult = parseNonNegativeInt(options.timeout, 'timeout');
144
+ if (!timeoutResult.valid) {
145
+ error(timeoutResult.error ?? 'Invalid timeout value');
146
+ process.exit(1);
147
+ }
148
+ if (timeoutResult.value === undefined) {
149
+ error(timeoutResult.error ?? 'Invalid timeout value');
150
+ process.exit(1);
151
+ }
152
+ maxDurationMinutes = timeoutResult.value;
153
+ }
154
+ // Validate iteration limit
155
+ if (maxIterations > 50 && !options.unlimited) {
156
+ error('More than 50 iterations requires --unlimited flag');
157
+ process.exit(1);
158
+ }
159
+ // Create task - either from options or from plan source
160
+ let task;
161
+ let planManager = null;
162
+ try {
163
+ if (options.github) {
164
+ // Parse owner/repo
165
+ const parts = options.github.split('/');
166
+ if (parts.length !== 2) {
167
+ error('GitHub repository must be in format: owner/repo');
168
+ process.exit(1);
169
+ }
170
+ const [owner, repo] = parts;
171
+ if (!owner || !repo) {
172
+ error('GitHub repository must be in format: owner/repo');
173
+ process.exit(1);
174
+ }
175
+ // Load task from GitHub Issues
176
+ const ghConfig = {
177
+ owner,
178
+ repo,
179
+ };
180
+ if (options.label)
181
+ ghConfig.label = options.label;
182
+ if (options.milestone)
183
+ ghConfig.milestone = options.milestone;
184
+ if (options.assignee)
185
+ ghConfig.assignee = options.assignee;
186
+ planManager = new GitHubPlan(ghConfig);
187
+ await planManager.initialize();
188
+ const nextTask = await planManager.getNextTask();
189
+ if (!nextTask) {
190
+ success('No pending issues found!');
191
+ return;
192
+ }
193
+ task = nextTask;
194
+ await planManager.startTask(task.id);
195
+ info(`Selected issue from GitHub: ${task.title}`);
196
+ }
197
+ else if (options.plan) {
198
+ // Load task from Markdown plan file
199
+ planManager = new LocalMarkdownPlan(options.plan);
200
+ await planManager.initialize();
201
+ const nextTask = await planManager.getNextTask();
202
+ if (!nextTask) {
203
+ success('All tasks in the plan are complete!');
204
+ return;
205
+ }
206
+ task = nextTask;
207
+ info(`Selected task from plan: ${task.title}`);
208
+ }
209
+ else {
210
+ task = await createTask(options);
211
+ }
212
+ }
213
+ catch (err) {
214
+ error(err instanceof Error ? err.message : String(err));
215
+ process.exit(1);
216
+ }
217
+ // Show configuration
218
+ console.log('');
219
+ console.log(heading('🤖 GitHub Copilot Ralph - Run'));
220
+ console.log('');
221
+ if (options.github) {
222
+ console.log(` ${dim('Source:')} GitHub Issues (${code(options.github)})`);
223
+ if (options.label) {
224
+ console.log(` ${dim('Label filter:')} ${code(options.label)}`);
225
+ }
226
+ }
227
+ else if (options.plan) {
228
+ console.log(` ${dim('Plan:')} ${code(options.plan)}`);
229
+ }
230
+ console.log(` ${dim('Task:')} ${task.title}`);
231
+ console.log(` ${dim('Model:')} ${code(options.model ?? 'gpt-4')}`);
232
+ console.log(` ${dim('Max iterations:')} ${maxIterations}`);
233
+ console.log(` ${dim('Max tokens:')} ${maxTokens.toLocaleString()}`);
234
+ if (options.dryRun) {
235
+ console.log('');
236
+ warn('Dry run mode - no changes will be made');
237
+ console.log('');
238
+ console.log(dim('Task content:'));
239
+ console.log(task.content);
240
+ console.log('');
241
+ success('Dry run complete - no actions taken');
242
+ return;
243
+ }
244
+ console.log('');
245
+ // Setup git branch isolation
246
+ const gitManager = new GitBranchManager();
247
+ const isGitRepo = await gitManager.isGitRepository();
248
+ let branchInfo = null;
249
+ if (isGitRepo) {
250
+ // Check working directory status
251
+ const workingDirStatus = await gitManager.getWorkingDirStatus();
252
+ if (!workingDirStatus.isClean && !options.force) {
253
+ warn(`Working directory has ${workingDirStatus.modifiedFiles} modified files and ${workingDirStatus.untrackedFiles} untracked files`);
254
+ info('Use --force to proceed anyway, or commit/stash your changes first');
255
+ // Offer to stash changes
256
+ if (!options.dryRun) {
257
+ const stashed = await gitManager.stashChanges();
258
+ if (stashed) {
259
+ info('Changes stashed automatically');
260
+ }
261
+ }
262
+ }
263
+ // Prepare branch for operation
264
+ const currentBranch = await gitManager.getCurrentBranch();
265
+ if (currentBranch.isMain) {
266
+ // On main/master - auto-create a new Ralph branch
267
+ const branchOptions = {};
268
+ if (options.branch)
269
+ branchOptions.branch = options.branch;
270
+ if (options.force)
271
+ branchOptions.force = options.force;
272
+ branchInfo = await gitManager.prepareForOperation(task.title, task.id, branchOptions);
273
+ if (branchInfo.created) {
274
+ success(`Created and switched to branch '${branchInfo.branchName}'`);
275
+ }
276
+ else {
277
+ info(`Using existing branch '${branchInfo.branchName}'`);
278
+ }
279
+ }
280
+ else if (!currentBranch.isRalphBranch && !options.force) {
281
+ // On a non-main, non-Ralph branch - warn but proceed
282
+ warn(`You're on branch '${currentBranch.name}' (not main/master)`);
283
+ info(`Use --force to skip this warning, or --branch to specify a branch`);
284
+ branchInfo = { branchName: currentBranch.name, created: false, originalBranch: currentBranch.name };
285
+ }
286
+ else {
287
+ branchInfo = { branchName: currentBranch.name, created: false, originalBranch: currentBranch.name };
288
+ debug(`Using current branch: ${currentBranch.name}`);
289
+ }
290
+ console.log(` ${dim('Branch:')} ${code(branchInfo.branchName)}`);
291
+ }
292
+ // Create agent and engine with context configuration
293
+ const agent = new CopilotAgent({
294
+ model: options.model ?? 'gpt-4',
295
+ maxTokensPerRequest: 4096,
296
+ });
297
+ // Build context config, only including contextGlobs if provided
298
+ const contextConfig = {
299
+ includeGitDiff: true,
300
+ includeGitHistory: true,
301
+ includeProjectStructure: true,
302
+ };
303
+ if (options.context) {
304
+ contextConfig.contextGlobs = options.context;
305
+ }
306
+ const engine = new LoopEngine(agent, {
307
+ maxIterations,
308
+ maxTokens,
309
+ maxDurationMinutes,
310
+ allowUnlimited: options.unlimited === true,
311
+ contextConfig,
312
+ });
313
+ // Create progress tracker
314
+ const progressTracker = new ProgressTracker(undefined, maxIterations);
315
+ // Create checkpoint manager for auto-commits
316
+ const checkpointManager = new CheckpointManager({
317
+ autoCommit: options.noCommit !== true,
318
+ });
319
+ // Create file safeguard manager
320
+ const fileSafeguard = new FileSafeguardManager({
321
+ allowDeleteExisting: options.allowDelete === true,
322
+ });
323
+ await fileSafeguard.initialize();
324
+ // Setup signal handlers for graceful shutdown
325
+ setupSignalHandlers(engine);
326
+ // Setup event listeners
327
+ const events = engine.getEvents();
328
+ const startTime = new Date();
329
+ events.on('iterationStart', (iteration, state) => {
330
+ debug(`Iteration ${iteration}/${maxIterations} - Tokens: ${state.tokensUsed.toLocaleString()}`);
331
+ });
332
+ events.on('iterationEnd', (record, state) => {
333
+ const status = record.success ? '✓' : '✗';
334
+ info(`Iteration ${record.iteration}: ${status} (${record.tokensUsed.toLocaleString()} tokens)`);
335
+ if (record.summary) {
336
+ console.log(` ${dim(record.summary)}`);
337
+ }
338
+ // Create checkpoint commit after successful iterations
339
+ if (record.success && checkpointManager.isAutoCommitEnabled()) {
340
+ checkpointManager
341
+ .createCheckpoint(record.iteration, record.summary ?? 'iteration complete', record.tokensUsed)
342
+ .then((checkpoint) => {
343
+ if (checkpoint) {
344
+ debug(`Checkpoint created: ${checkpoint.commitHash.substring(0, 7)}`);
345
+ // Update progress with commit hash
346
+ state.lastCheckpoint = checkpoint.commitHash;
347
+ }
348
+ })
349
+ .catch(() => {
350
+ // Ignore checkpoint errors
351
+ });
352
+ }
353
+ // Save progress after each iteration
354
+ progressTracker.save(state).catch(() => {
355
+ // Ignore save errors
356
+ });
357
+ });
358
+ events.on('error', (err) => {
359
+ error(`Loop error: ${err.message}`);
360
+ });
361
+ events.on('warning', (type, message) => {
362
+ warn(`Warning: ${message}`);
363
+ });
364
+ // Run the loop
365
+ const loopSpinner = spinner('Running agentic loop...');
366
+ loopSpinner.start();
367
+ try {
368
+ const finalState = await engine.start(task);
369
+ loopSpinner.stop();
370
+ console.log('');
371
+ // Print summary
372
+ console.log(heading('📊 Summary'));
373
+ console.log('');
374
+ console.log(` ${dim('Status:')} ${finalState.status}`);
375
+ console.log(` ${dim('Iterations:')} ${finalState.iteration}/${maxIterations}`);
376
+ console.log(` ${dim('Tokens used:')} ${finalState.tokensUsed.toLocaleString()}`);
377
+ console.log(` ${dim('Elapsed time:')} ${formatElapsedTime(startTime)}`);
378
+ const successfulIterations = finalState.iterations.filter((i) => i.success).length;
379
+ console.log(` ${dim('Successful iterations:')} ${successfulIterations}`);
380
+ console.log('');
381
+ if (finalState.status === 'completed') {
382
+ // Mark task as complete in plan file if using a plan
383
+ if (planManager) {
384
+ await planManager.completeTask(task.id);
385
+ info(`Task marked as complete in plan file`);
386
+ }
387
+ success('Loop completed successfully');
388
+ }
389
+ else if (finalState.status === 'stopped') {
390
+ warn('Loop was stopped by user');
391
+ }
392
+ else if (finalState.status === 'failed') {
393
+ if (planManager) {
394
+ await planManager.failTask(task.id);
395
+ }
396
+ error('Loop failed');
397
+ process.exit(1);
398
+ }
399
+ }
400
+ catch (err) {
401
+ loopSpinner.fail('Loop failed');
402
+ error(err instanceof Error ? err.message : String(err));
403
+ process.exit(1);
404
+ }
405
+ });
406
+ }
407
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Status Command
3
+ *
4
+ * Check the current loop status with rich session information
5
+ */
6
+ import type { Command } from 'commander';
7
+ export declare function registerStatusCommand(program: Command): void;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsB5D"}