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.
- package/LICENSE +21 -0
- package/README.md +327 -0
- package/bin/ghcralph.js +2 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +92 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +118 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +116 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/rollback.d.ts +8 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +238 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/run.d.ts +28 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +407 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +399 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/action-executor.d.ts +96 -0
- package/dist/core/action-executor.d.ts.map +1 -0
- package/dist/core/action-executor.js +289 -0
- package/dist/core/action-executor.js.map +1 -0
- package/dist/core/checkpoint-manager.d.ts +94 -0
- package/dist/core/checkpoint-manager.d.ts.map +1 -0
- package/dist/core/checkpoint-manager.js +236 -0
- package/dist/core/checkpoint-manager.js.map +1 -0
- package/dist/core/config-manager.d.ts +62 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +184 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/config-schema.d.ts +74 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +84 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/context-builder.d.ts +116 -0
- package/dist/core/context-builder.d.ts.map +1 -0
- package/dist/core/context-builder.js +388 -0
- package/dist/core/context-builder.js.map +1 -0
- package/dist/core/feedback-builder.d.ts +94 -0
- package/dist/core/feedback-builder.d.ts.map +1 -0
- package/dist/core/feedback-builder.js +226 -0
- package/dist/core/feedback-builder.js.map +1 -0
- package/dist/core/file-safeguard.d.ts +109 -0
- package/dist/core/file-safeguard.d.ts.map +1 -0
- package/dist/core/file-safeguard.js +200 -0
- package/dist/core/file-safeguard.js.map +1 -0
- package/dist/core/git-branch-manager.d.ts +122 -0
- package/dist/core/git-branch-manager.d.ts.map +1 -0
- package/dist/core/git-branch-manager.js +302 -0
- package/dist/core/git-branch-manager.js.map +1 -0
- package/dist/core/github-plan.d.ts +86 -0
- package/dist/core/github-plan.d.ts.map +1 -0
- package/dist/core/github-plan.js +333 -0
- package/dist/core/github-plan.js.map +1 -0
- package/dist/core/index.d.ts +43 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/local-markdown-plan.d.ts +65 -0
- package/dist/core/local-markdown-plan.d.ts.map +1 -0
- package/dist/core/local-markdown-plan.js +154 -0
- package/dist/core/local-markdown-plan.js.map +1 -0
- package/dist/core/loop-engine.d.ts +133 -0
- package/dist/core/loop-engine.d.ts.map +1 -0
- package/dist/core/loop-engine.js +420 -0
- package/dist/core/loop-engine.js.map +1 -0
- package/dist/core/loop-events.d.ts +48 -0
- package/dist/core/loop-events.d.ts.map +1 -0
- package/dist/core/loop-events.js +24 -0
- package/dist/core/loop-events.js.map +1 -0
- package/dist/core/loop-state.d.ts +51 -0
- package/dist/core/loop-state.d.ts.map +1 -0
- package/dist/core/loop-state.js +48 -0
- package/dist/core/loop-state.js.map +1 -0
- package/dist/core/markdown-parser.d.ts +51 -0
- package/dist/core/markdown-parser.d.ts.map +1 -0
- package/dist/core/markdown-parser.js +122 -0
- package/dist/core/markdown-parser.js.map +1 -0
- package/dist/core/plan-manager.d.ts +61 -0
- package/dist/core/plan-manager.d.ts.map +1 -0
- package/dist/core/plan-manager.js +7 -0
- package/dist/core/plan-manager.js.map +1 -0
- package/dist/core/progress-tracker.d.ts +74 -0
- package/dist/core/progress-tracker.d.ts.map +1 -0
- package/dist/core/progress-tracker.js +198 -0
- package/dist/core/progress-tracker.js.map +1 -0
- package/dist/core/prompt-examples.d.ts +52 -0
- package/dist/core/prompt-examples.d.ts.map +1 -0
- package/dist/core/prompt-examples.js +194 -0
- package/dist/core/prompt-examples.js.map +1 -0
- package/dist/core/response-parser.d.ts +90 -0
- package/dist/core/response-parser.d.ts.map +1 -0
- package/dist/core/response-parser.js +209 -0
- package/dist/core/response-parser.js.map +1 -0
- package/dist/core/verification-hooks.d.ts +103 -0
- package/dist/core/verification-hooks.d.ts.map +1 -0
- package/dist/core/verification-hooks.js +268 -0
- package/dist/core/verification-hooks.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/auth.d.ts +28 -0
- package/dist/integrations/auth.d.ts.map +1 -0
- package/dist/integrations/auth.js +76 -0
- package/dist/integrations/auth.js.map +1 -0
- package/dist/integrations/copilot-agent.d.ts +104 -0
- package/dist/integrations/copilot-agent.d.ts.map +1 -0
- package/dist/integrations/copilot-agent.js +235 -0
- package/dist/integrations/copilot-agent.js.map +1 -0
- package/dist/integrations/index.d.ts +18 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +14 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp-tools.d.ts +129 -0
- package/dist/integrations/mcp-tools.d.ts.map +1 -0
- package/dist/integrations/mcp-tools.js +272 -0
- package/dist/integrations/mcp-tools.js.map +1 -0
- package/dist/integrations/tokens.d.ts +45 -0
- package/dist/integrations/tokens.d.ts.map +1 -0
- package/dist/integrations/tokens.js +50 -0
- package/dist/integrations/tokens.js.map +1 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +23 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +37 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/output.d.ts +59 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +96 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/paths.d.ts +34 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +67 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +65 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validation.d.ts +27 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +43 -0
- package/dist/utils/validation.js.map +1 -0
- 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 @@
|
|
|
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"}
|