@specforge/mcp 2.6.0 → 3.0.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/README.md +73 -0
- package/bin/{specforge-mcp → specforge} +0 -5
- package/dist/ai-provider/circuit-breaker.d.ts +63 -0
- package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
- package/dist/ai-provider/circuit-breaker.js +160 -0
- package/dist/ai-provider/circuit-breaker.js.map +1 -0
- package/dist/ai-provider/cli-version.d.ts +50 -0
- package/dist/ai-provider/cli-version.d.ts.map +1 -0
- package/dist/ai-provider/cli-version.js +141 -0
- package/dist/ai-provider/cli-version.js.map +1 -0
- package/dist/ai-provider/config-loader.d.ts +45 -0
- package/dist/ai-provider/config-loader.d.ts.map +1 -0
- package/dist/ai-provider/config-loader.js +106 -0
- package/dist/ai-provider/config-loader.js.map +1 -0
- package/dist/ai-provider/errors.d.ts +48 -0
- package/dist/ai-provider/errors.d.ts.map +1 -0
- package/dist/ai-provider/errors.js +102 -0
- package/dist/ai-provider/errors.js.map +1 -0
- package/dist/ai-provider/events.d.ts +73 -0
- package/dist/ai-provider/events.d.ts.map +1 -0
- package/dist/ai-provider/events.js +75 -0
- package/dist/ai-provider/events.js.map +1 -0
- package/dist/ai-provider/factory.d.ts +31 -0
- package/dist/ai-provider/factory.d.ts.map +1 -0
- package/dist/ai-provider/factory.js +100 -0
- package/dist/ai-provider/factory.js.map +1 -0
- package/dist/ai-provider/index.d.ts +24 -0
- package/dist/ai-provider/index.d.ts.map +1 -0
- package/dist/ai-provider/index.js +46 -0
- package/dist/ai-provider/index.js.map +1 -0
- package/dist/ai-provider/instance-coordinator.d.ts +54 -0
- package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
- package/dist/ai-provider/instance-coordinator.js +199 -0
- package/dist/ai-provider/instance-coordinator.js.map +1 -0
- package/dist/ai-provider/jsonl-parser.d.ts +43 -0
- package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
- package/dist/ai-provider/jsonl-parser.js +107 -0
- package/dist/ai-provider/jsonl-parser.js.map +1 -0
- package/dist/ai-provider/lifecycle.d.ts +50 -0
- package/dist/ai-provider/lifecycle.d.ts.map +1 -0
- package/dist/ai-provider/lifecycle.js +145 -0
- package/dist/ai-provider/lifecycle.js.map +1 -0
- package/dist/ai-provider/logger.d.ts +69 -0
- package/dist/ai-provider/logger.d.ts.map +1 -0
- package/dist/ai-provider/logger.js +161 -0
- package/dist/ai-provider/logger.js.map +1 -0
- package/dist/ai-provider/metrics.d.ts +91 -0
- package/dist/ai-provider/metrics.d.ts.map +1 -0
- package/dist/ai-provider/metrics.js +187 -0
- package/dist/ai-provider/metrics.js.map +1 -0
- package/dist/ai-provider/process-manager.d.ts +97 -0
- package/dist/ai-provider/process-manager.d.ts.map +1 -0
- package/dist/ai-provider/process-manager.js +477 -0
- package/dist/ai-provider/process-manager.js.map +1 -0
- package/dist/ai-provider/providers/claude-code.d.ts +64 -0
- package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
- package/dist/ai-provider/providers/claude-code.js +205 -0
- package/dist/ai-provider/providers/claude-code.js.map +1 -0
- package/dist/ai-provider/retry-executor.d.ts +52 -0
- package/dist/ai-provider/retry-executor.d.ts.map +1 -0
- package/dist/ai-provider/retry-executor.js +138 -0
- package/dist/ai-provider/retry-executor.js.map +1 -0
- package/dist/ai-provider/safe-args.d.ts +58 -0
- package/dist/ai-provider/safe-args.d.ts.map +1 -0
- package/dist/ai-provider/safe-args.js +176 -0
- package/dist/ai-provider/safe-args.js.map +1 -0
- package/dist/ai-provider/semaphore.d.ts +50 -0
- package/dist/ai-provider/semaphore.d.ts.map +1 -0
- package/dist/ai-provider/semaphore.js +97 -0
- package/dist/ai-provider/semaphore.js.map +1 -0
- package/dist/ai-provider/tracer.d.ts +67 -0
- package/dist/ai-provider/tracer.d.ts.map +1 -0
- package/dist/ai-provider/tracer.js +209 -0
- package/dist/ai-provider/tracer.js.map +1 -0
- package/dist/ai-provider/types.d.ts +181 -0
- package/dist/ai-provider/types.d.ts.map +1 -0
- package/dist/ai-provider/types.js +8 -0
- package/dist/ai-provider/types.js.map +1 -0
- package/dist/autopilot/agents/agent-runner.d.ts +109 -0
- package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-runner.js +731 -0
- package/dist/autopilot/agents/agent-runner.js.map +1 -0
- package/dist/autopilot/agents/agent-selector.d.ts +59 -0
- package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-selector.js +234 -0
- package/dist/autopilot/agents/agent-selector.js.map +1 -0
- package/dist/autopilot/agents/model-selector.d.ts +49 -0
- package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/model-selector.js +62 -0
- package/dist/autopilot/agents/model-selector.js.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.js +323 -0
- package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
- package/dist/autopilot/agents/profiles/types.d.ts +98 -0
- package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/types.js +17 -0
- package/dist/autopilot/agents/profiles/types.js.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.js +402 -0
- package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
- package/dist/autopilot/cli/abort.d.ts +20 -0
- package/dist/autopilot/cli/abort.d.ts.map +1 -0
- package/dist/autopilot/cli/abort.js +201 -0
- package/dist/autopilot/cli/abort.js.map +1 -0
- package/dist/autopilot/cli/display.d.ts +63 -0
- package/dist/autopilot/cli/display.d.ts.map +1 -0
- package/dist/autopilot/cli/display.js +260 -0
- package/dist/autopilot/cli/display.js.map +1 -0
- package/dist/autopilot/cli/index.d.ts +24 -0
- package/dist/autopilot/cli/index.d.ts.map +1 -0
- package/dist/autopilot/cli/index.js +79 -0
- package/dist/autopilot/cli/index.js.map +1 -0
- package/dist/autopilot/cli/pause.d.ts +18 -0
- package/dist/autopilot/cli/pause.d.ts.map +1 -0
- package/dist/autopilot/cli/pause.js +110 -0
- package/dist/autopilot/cli/pause.js.map +1 -0
- package/dist/autopilot/cli/resume.d.ts +22 -0
- package/dist/autopilot/cli/resume.d.ts.map +1 -0
- package/dist/autopilot/cli/resume.js +172 -0
- package/dist/autopilot/cli/resume.js.map +1 -0
- package/dist/autopilot/cli/run.d.ts +25 -0
- package/dist/autopilot/cli/run.d.ts.map +1 -0
- package/dist/autopilot/cli/run.js +220 -0
- package/dist/autopilot/cli/run.js.map +1 -0
- package/dist/autopilot/cli/status.d.ts +20 -0
- package/dist/autopilot/cli/status.d.ts.map +1 -0
- package/dist/autopilot/cli/status.js +217 -0
- package/dist/autopilot/cli/status.js.map +1 -0
- package/dist/autopilot/config.d.ts +45 -0
- package/dist/autopilot/config.d.ts.map +1 -0
- package/dist/autopilot/config.js +269 -0
- package/dist/autopilot/config.js.map +1 -0
- package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
- package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
- package/dist/autopilot/core/dependency-resolver.js +394 -0
- package/dist/autopilot/core/dependency-resolver.js.map +1 -0
- package/dist/autopilot/core/dispatcher.d.ts +215 -0
- package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
- package/dist/autopilot/core/dispatcher.js +594 -0
- package/dist/autopilot/core/dispatcher.js.map +1 -0
- package/dist/autopilot/core/failure-handler.d.ts +145 -0
- package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
- package/dist/autopilot/core/failure-handler.js +308 -0
- package/dist/autopilot/core/failure-handler.js.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.js +195 -0
- package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
- package/dist/autopilot/core/state-manager.d.ts +160 -0
- package/dist/autopilot/core/state-manager.d.ts.map +1 -0
- package/dist/autopilot/core/state-manager.js +393 -0
- package/dist/autopilot/core/state-manager.js.map +1 -0
- package/dist/autopilot/core/timeout-manager.d.ts +95 -0
- package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
- package/dist/autopilot/core/timeout-manager.js +188 -0
- package/dist/autopilot/core/timeout-manager.js.map +1 -0
- package/dist/autopilot/git/branch-manager.d.ts +117 -0
- package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
- package/dist/autopilot/git/branch-manager.js +238 -0
- package/dist/autopilot/git/branch-manager.js.map +1 -0
- package/dist/autopilot/git/index.d.ts +9 -0
- package/dist/autopilot/git/index.d.ts.map +1 -0
- package/dist/autopilot/git/index.js +9 -0
- package/dist/autopilot/git/index.js.map +1 -0
- package/dist/autopilot/git/merge-manager.d.ts +118 -0
- package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
- package/dist/autopilot/git/merge-manager.js +304 -0
- package/dist/autopilot/git/merge-manager.js.map +1 -0
- package/dist/autopilot/git/worktree-manager.d.ts +128 -0
- package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
- package/dist/autopilot/git/worktree-manager.js +298 -0
- package/dist/autopilot/git/worktree-manager.js.map +1 -0
- package/dist/autopilot/index.d.ts +30 -0
- package/dist/autopilot/index.d.ts.map +1 -0
- package/dist/autopilot/index.js +55 -0
- package/dist/autopilot/index.js.map +1 -0
- package/dist/autopilot/sync/index.d.ts +7 -0
- package/dist/autopilot/sync/index.d.ts.map +1 -0
- package/dist/autopilot/sync/index.js +7 -0
- package/dist/autopilot/sync/index.js.map +1 -0
- package/dist/autopilot/sync/sync-manager.d.ts +168 -0
- package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
- package/dist/autopilot/sync/sync-manager.js +303 -0
- package/dist/autopilot/sync/sync-manager.js.map +1 -0
- package/dist/autopilot/types.d.ts +454 -0
- package/dist/autopilot/types.d.ts.map +1 -0
- package/dist/autopilot/types.js +26 -0
- package/dist/autopilot/types.js.map +1 -0
- package/dist/autopilot/utils/audit-logger.d.ts +176 -0
- package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
- package/dist/autopilot/utils/audit-logger.js +308 -0
- package/dist/autopilot/utils/audit-logger.js.map +1 -0
- package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
- package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
- package/dist/autopilot/utils/cost-tracker.js +269 -0
- package/dist/autopilot/utils/cost-tracker.js.map +1 -0
- package/dist/autopilot/utils/index.d.ts +9 -0
- package/dist/autopilot/utils/index.d.ts.map +1 -0
- package/dist/autopilot/utils/index.js +9 -0
- package/dist/autopilot/utils/index.js.map +1 -0
- package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
- package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
- package/dist/autopilot/utils/progress-reporter.js +290 -0
- package/dist/autopilot/utils/progress-reporter.js.map +1 -0
- package/dist/autopilot/worker/worker-pool.d.ts +179 -0
- package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-pool.js +331 -0
- package/dist/autopilot/worker/worker-pool.js.map +1 -0
- package/dist/autopilot/worker/worker-session.d.ts +171 -0
- package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-session.js +295 -0
- package/dist/autopilot/worker/worker-session.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/core/epic.js +1 -1
- package/dist/tools/core/epic.js.map +1 -1
- package/dist/tools/core/lookup.d.ts.map +1 -1
- package/dist/tools/core/lookup.js +3 -2
- package/dist/tools/core/lookup.js.map +1 -1
- package/dist/tools/core/specification.js +1 -1
- package/dist/tools/core/specification.js.map +1 -1
- package/dist/tools/core/ticket.d.ts.map +1 -1
- package/dist/tools/core/ticket.js +4 -6
- package/dist/tools/core/ticket.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +60 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +4 -1
- package/dist/validation/index.js.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autopilot Resume Command
|
|
3
|
+
*
|
|
4
|
+
* Resumes a paused autopilot session.
|
|
5
|
+
*/
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { resolveConfig as resolveCliConfig } from '../../cli/config/loader.js';
|
|
10
|
+
import { withErrorHandler, CliError } from '../../cli/middleware/error-handler.js';
|
|
11
|
+
import { loadAutopilotConfig, mergeWithDefaults } from '../config.js';
|
|
12
|
+
import { createDispatcher } from '../core/dispatcher.js';
|
|
13
|
+
import { AutopilotApiClient } from '../api/autopilot-api-client.js';
|
|
14
|
+
import { STATE_FILE_NAME } from '../core/state-manager.js';
|
|
15
|
+
import { renderDashboard, renderCompactStatus, c } from './display.js';
|
|
16
|
+
/**
|
|
17
|
+
* Load state from file
|
|
18
|
+
*/
|
|
19
|
+
async function loadState(workingDirectory) {
|
|
20
|
+
const statePath = path.join(workingDirectory, '.specforge', STATE_FILE_NAME);
|
|
21
|
+
try {
|
|
22
|
+
const content = await fs.readFile(statePath, 'utf-8');
|
|
23
|
+
return JSON.parse(content);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resume command action
|
|
31
|
+
*/
|
|
32
|
+
async function resumeAction(options) {
|
|
33
|
+
const cliConfig = resolveCliConfig();
|
|
34
|
+
const workingDirectory = process.cwd();
|
|
35
|
+
// Check authentication
|
|
36
|
+
if (!cliConfig.apiKey) {
|
|
37
|
+
throw new CliError('Not authenticated', 1, 'Run `specforge login` to authenticate first');
|
|
38
|
+
}
|
|
39
|
+
const spinner = ora({
|
|
40
|
+
text: 'Loading autopilot state...',
|
|
41
|
+
color: 'cyan',
|
|
42
|
+
}).start();
|
|
43
|
+
try {
|
|
44
|
+
// Load saved state
|
|
45
|
+
const savedState = await loadState(workingDirectory);
|
|
46
|
+
if (!savedState) {
|
|
47
|
+
spinner.fail('No saved autopilot state found');
|
|
48
|
+
throw new CliError('No saved state', 1, 'No paused autopilot session found. Use `specforge autopilot run` to start a new session.');
|
|
49
|
+
}
|
|
50
|
+
// Check if already completed
|
|
51
|
+
if (savedState.status === 'completed') {
|
|
52
|
+
spinner.fail('Session already completed');
|
|
53
|
+
throw new CliError('Session completed', 1, 'This autopilot session is already completed. Use `specforge autopilot run` to start a new session.');
|
|
54
|
+
}
|
|
55
|
+
// Load config
|
|
56
|
+
const fileConfig = await loadAutopilotConfig(workingDirectory);
|
|
57
|
+
const autopilotConfig = mergeWithDefaults(fileConfig);
|
|
58
|
+
// Create API client
|
|
59
|
+
const apiClient = AutopilotApiClient.fromApiKey(cliConfig.apiKey, { apiUrl: cliConfig.apiUrl });
|
|
60
|
+
spinner.succeed('State loaded');
|
|
61
|
+
// Create dispatcher with state from saved session
|
|
62
|
+
const dispatcher = createDispatcher({
|
|
63
|
+
specificationId: savedState.specificationId,
|
|
64
|
+
projectId: savedState.projectId,
|
|
65
|
+
workingDirectory,
|
|
66
|
+
config: autopilotConfig,
|
|
67
|
+
apiClient,
|
|
68
|
+
});
|
|
69
|
+
// Apply options
|
|
70
|
+
if (options.skipFailed) {
|
|
71
|
+
console.log(c.yellow('Skipping previously failed tickets'));
|
|
72
|
+
}
|
|
73
|
+
if (options.retryFailed) {
|
|
74
|
+
console.log(c.blue('Retrying previously failed tickets'));
|
|
75
|
+
// Note: The dispatcher would need a method to handle this
|
|
76
|
+
// For now, this is a placeholder for the feature
|
|
77
|
+
}
|
|
78
|
+
// Set up event handlers
|
|
79
|
+
dispatcher.on('state:changed', (state) => {
|
|
80
|
+
if (options.watch && !options.json) {
|
|
81
|
+
if (process.stdout.isTTY) {
|
|
82
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
83
|
+
}
|
|
84
|
+
console.log(renderDashboard(state));
|
|
85
|
+
}
|
|
86
|
+
else if (options.verbose && !options.json) {
|
|
87
|
+
console.log(renderCompactStatus(state));
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
dispatcher.on('ticket:completed', (data) => {
|
|
91
|
+
if (!options.json && !options.watch) {
|
|
92
|
+
console.log(c.green(`✓ Completed: ${data.ticketId}`));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
dispatcher.on('ticket:failed', (data) => {
|
|
96
|
+
if (!options.json && !options.watch) {
|
|
97
|
+
console.log(c.red(`✗ Failed: ${data.ticketId} - ${data.error}`));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// Handle SIGINT
|
|
101
|
+
let shuttingDown = false;
|
|
102
|
+
process.on('SIGINT', async () => {
|
|
103
|
+
if (shuttingDown) {
|
|
104
|
+
console.log('\nForce quitting...');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
shuttingDown = true;
|
|
108
|
+
console.log('\nPausing autopilot...');
|
|
109
|
+
await dispatcher.pause('User interrupt');
|
|
110
|
+
console.log('Autopilot paused. Run `specforge autopilot resume` to continue.');
|
|
111
|
+
process.exit(0);
|
|
112
|
+
});
|
|
113
|
+
// Resume
|
|
114
|
+
console.log(c.blue('Resuming autopilot...'));
|
|
115
|
+
console.log(`Run ID: ${c.dim(savedState.runId)}`);
|
|
116
|
+
console.log(`Completed: ${c.green(String(savedState.completedTickets.length))} | Failed: ${c.red(String(savedState.failedTickets.length))}`);
|
|
117
|
+
console.log('');
|
|
118
|
+
const result = await dispatcher.start();
|
|
119
|
+
// Output result
|
|
120
|
+
if (options.json) {
|
|
121
|
+
console.log(JSON.stringify(result, null, 2));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(c.bold('═══ Autopilot Complete ═══'));
|
|
126
|
+
console.log('');
|
|
127
|
+
const statusColor = result.status === 'completed' ? c.green
|
|
128
|
+
: result.status === 'failed' ? c.red
|
|
129
|
+
: c.yellow;
|
|
130
|
+
console.log(`Status: ${statusColor(result.status)}`);
|
|
131
|
+
console.log(`Completed: ${c.green(String(result.completedTickets))} tickets`);
|
|
132
|
+
console.log(`Failed: ${c.red(String(result.failedTickets))} tickets`);
|
|
133
|
+
console.log(`Total Cost: ${c.yellow(`$${result.totalCostUsd.toFixed(4)}`)}`);
|
|
134
|
+
console.log('');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (!(error instanceof CliError)) {
|
|
139
|
+
spinner.fail('Failed to resume');
|
|
140
|
+
}
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Register resume command
|
|
146
|
+
*/
|
|
147
|
+
export function registerResumeCommand(program) {
|
|
148
|
+
program
|
|
149
|
+
.command('resume')
|
|
150
|
+
.description('Resume a paused autopilot session')
|
|
151
|
+
.option('-r, --run-id <id>', 'Resume specific run (defaults to latest)')
|
|
152
|
+
.option('--skip-failed', 'Skip previously failed tickets')
|
|
153
|
+
.option('--retry-failed', 'Retry previously failed tickets')
|
|
154
|
+
.option('-w, --watch', 'Watch mode with live dashboard')
|
|
155
|
+
.option('-v, --verbose', 'Show detailed progress')
|
|
156
|
+
.option('--json', 'Output as JSON')
|
|
157
|
+
.addHelpText('after', `
|
|
158
|
+
Examples:
|
|
159
|
+
$ specforge autopilot resume # Resume latest session
|
|
160
|
+
$ specforge autopilot resume --skip-failed # Skip failed tickets
|
|
161
|
+
$ specforge autopilot resume --retry-failed # Retry failed tickets
|
|
162
|
+
$ specforge autopilot resume --watch # Resume with live dashboard
|
|
163
|
+
|
|
164
|
+
Behavior:
|
|
165
|
+
- Resumes from saved state in .specforge/autopilot-state.json
|
|
166
|
+
- Previously completed tickets are not re-run
|
|
167
|
+
- Failed tickets can be retried with --retry-failed
|
|
168
|
+
- Cost and progress are preserved from the previous session
|
|
169
|
+
`)
|
|
170
|
+
.action(withErrorHandler(resumeAction));
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/autopilot/cli/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autopilot Run Command
|
|
3
|
+
*
|
|
4
|
+
* Starts an autopilot session to implement tickets autonomously.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Run command options
|
|
9
|
+
*/
|
|
10
|
+
export interface RunOptions {
|
|
11
|
+
spec?: string;
|
|
12
|
+
epic?: string;
|
|
13
|
+
parallel?: number;
|
|
14
|
+
maxCost?: number;
|
|
15
|
+
dryRun?: boolean;
|
|
16
|
+
watch?: boolean;
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
json?: boolean;
|
|
19
|
+
resume?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Register run command
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerRunCommand(program: Command): void;
|
|
25
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/autopilot/cli/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqOD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgCzD"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autopilot Run Command
|
|
3
|
+
*
|
|
4
|
+
* Starts an autopilot session to implement tickets autonomously.
|
|
5
|
+
*/
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { resolveConfig as resolveCliConfig } from '../../cli/config/loader.js';
|
|
8
|
+
import { withErrorHandler, CliError } from '../../cli/middleware/error-handler.js';
|
|
9
|
+
import { loadAutopilotConfig, mergeWithDefaults } from '../config.js';
|
|
10
|
+
import { createDispatcher } from '../core/dispatcher.js';
|
|
11
|
+
import { AutopilotApiClient } from '../api/autopilot-api-client.js';
|
|
12
|
+
import { renderDashboard, renderCompactStatus, c } from './display.js';
|
|
13
|
+
/**
|
|
14
|
+
* Validate run prerequisites
|
|
15
|
+
*/
|
|
16
|
+
async function validatePrerequisites(cliConfig, options) {
|
|
17
|
+
// Check authentication
|
|
18
|
+
if (!cliConfig.apiKey) {
|
|
19
|
+
throw new CliError('Not authenticated', 1, 'Run `specforge login` to authenticate first');
|
|
20
|
+
}
|
|
21
|
+
// Load autopilot config
|
|
22
|
+
const fileConfig = await loadAutopilotConfig(process.cwd());
|
|
23
|
+
const autopilotConfig = mergeWithDefaults(fileConfig);
|
|
24
|
+
// Apply option overrides
|
|
25
|
+
if (options.parallel !== undefined) {
|
|
26
|
+
autopilotConfig.maxParallelWorkers = options.parallel;
|
|
27
|
+
}
|
|
28
|
+
if (options.maxCost !== undefined) {
|
|
29
|
+
autopilotConfig.maxTotalCostUsd = options.maxCost;
|
|
30
|
+
}
|
|
31
|
+
// Determine specification ID
|
|
32
|
+
const specificationId = options.spec || cliConfig.specificationId;
|
|
33
|
+
if (!specificationId) {
|
|
34
|
+
throw new CliError('No specification selected', 1, 'Run `specforge switch <spec-id>` or use --spec option');
|
|
35
|
+
}
|
|
36
|
+
return { specificationId, autopilotConfig };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Display run plan (dry run)
|
|
40
|
+
*/
|
|
41
|
+
function displayRunPlan(specificationId, config, epicId) {
|
|
42
|
+
console.log('');
|
|
43
|
+
console.log(c.bold('═══ Autopilot Run Plan ═══'));
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(c.bold('Configuration:'));
|
|
46
|
+
console.log(` Specification: ${specificationId}`);
|
|
47
|
+
if (epicId) {
|
|
48
|
+
console.log(` Epic: ${epicId}`);
|
|
49
|
+
}
|
|
50
|
+
console.log(` Parallel Workers: ${config.maxParallelWorkers}`);
|
|
51
|
+
console.log(` Max Cost: $${config.maxTotalCostUsd}`);
|
|
52
|
+
console.log(` Auto Commit: ${config.autoCommit ? 'Yes' : 'No'}`);
|
|
53
|
+
console.log(` Auto Push: ${config.autoPush ? 'Yes' : 'No'}`);
|
|
54
|
+
console.log(` Branch Strategy: ${config.branchStrategy}`);
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(c.bold('AI Provider:'));
|
|
57
|
+
console.log(` Mode: ${config.aiProvider.mode}`);
|
|
58
|
+
console.log(` Max Parallel: ${config.aiProvider.maxParallelProcesses}`);
|
|
59
|
+
console.log(` Request Timeout: ${config.aiProvider.requestTimeoutSeconds}s`);
|
|
60
|
+
console.log(` Max Retries: ${config.aiProvider.maxRetries}`);
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(c.dim('This is a dry run. No changes will be made.'));
|
|
63
|
+
console.log(c.dim('Remove --dry-run to start the autopilot session.'));
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Run command action
|
|
68
|
+
*/
|
|
69
|
+
async function runAction(options) {
|
|
70
|
+
const cliConfig = resolveCliConfig();
|
|
71
|
+
// Validate prerequisites
|
|
72
|
+
const { specificationId, autopilotConfig } = await validatePrerequisites(cliConfig, options);
|
|
73
|
+
// Handle dry run
|
|
74
|
+
if (options.dryRun) {
|
|
75
|
+
displayRunPlan(specificationId, autopilotConfig, options.epic);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const spinner = ora({
|
|
79
|
+
text: 'Initializing autopilot...',
|
|
80
|
+
color: 'cyan',
|
|
81
|
+
}).start();
|
|
82
|
+
try {
|
|
83
|
+
// Create API client
|
|
84
|
+
const apiClient = AutopilotApiClient.fromApiKey(cliConfig.apiKey, { apiUrl: cliConfig.apiUrl });
|
|
85
|
+
// Get specification to find project ID
|
|
86
|
+
const specification = await apiClient.getSpecification(specificationId);
|
|
87
|
+
if (!specification) {
|
|
88
|
+
throw new CliError('Specification not found', 1, `Could not find specification with ID: ${specificationId}`);
|
|
89
|
+
}
|
|
90
|
+
spinner.text = 'Creating dispatcher...';
|
|
91
|
+
// Create dispatcher
|
|
92
|
+
const dispatcher = createDispatcher({
|
|
93
|
+
specificationId,
|
|
94
|
+
projectId: specification.projectId,
|
|
95
|
+
workingDirectory: process.cwd(),
|
|
96
|
+
config: autopilotConfig,
|
|
97
|
+
apiClient,
|
|
98
|
+
});
|
|
99
|
+
spinner.succeed('Autopilot initialized');
|
|
100
|
+
// Set up event handlers
|
|
101
|
+
dispatcher.on('state:changed', (state) => {
|
|
102
|
+
if (options.watch && !options.json) {
|
|
103
|
+
// Clear screen and redraw dashboard
|
|
104
|
+
if (process.stdout.isTTY) {
|
|
105
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
106
|
+
}
|
|
107
|
+
console.log(renderDashboard(state));
|
|
108
|
+
}
|
|
109
|
+
else if (options.verbose && !options.json) {
|
|
110
|
+
console.log(renderCompactStatus(state));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
dispatcher.on('ticket:completed', (data) => {
|
|
114
|
+
if (!options.json && !options.watch) {
|
|
115
|
+
console.log(c.green(`✓ Completed: ${data.ticketId}`));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
dispatcher.on('ticket:failed', (data) => {
|
|
119
|
+
if (!options.json && !options.watch) {
|
|
120
|
+
console.log(c.red(`✗ Failed: ${data.ticketId} - ${data.error}`));
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
dispatcher.on('rate_limit:paused', () => {
|
|
124
|
+
if (!options.json && !options.watch) {
|
|
125
|
+
console.log(c.yellow('⏸ Rate limited - pausing workers...'));
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
dispatcher.on('rate_limit:resumed', () => {
|
|
129
|
+
if (!options.json && !options.watch) {
|
|
130
|
+
console.log(c.green('▶ Rate limit cleared - resuming workers...'));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Handle SIGINT for graceful shutdown
|
|
134
|
+
let shuttingDown = false;
|
|
135
|
+
process.on('SIGINT', async () => {
|
|
136
|
+
if (shuttingDown) {
|
|
137
|
+
console.log('\nForce quitting...');
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
shuttingDown = true;
|
|
141
|
+
console.log('\nShutting down gracefully (press Ctrl+C again to force)...');
|
|
142
|
+
await dispatcher.pause('User interrupt');
|
|
143
|
+
// Note: Dispatcher doesn't have shutdown method, pause is sufficient
|
|
144
|
+
console.log('Autopilot stopped. Run `specforge autopilot resume` to continue.');
|
|
145
|
+
process.exit(0);
|
|
146
|
+
});
|
|
147
|
+
// Start the dispatcher
|
|
148
|
+
console.log(c.blue('Starting autopilot...'));
|
|
149
|
+
console.log('');
|
|
150
|
+
const result = await dispatcher.start();
|
|
151
|
+
// Output result
|
|
152
|
+
if (options.json) {
|
|
153
|
+
console.log(JSON.stringify(result, null, 2));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log('');
|
|
157
|
+
console.log(c.bold('═══ Autopilot Complete ═══'));
|
|
158
|
+
console.log('');
|
|
159
|
+
const statusColor = result.status === 'completed' ? c.green
|
|
160
|
+
: result.status === 'failed' ? c.red
|
|
161
|
+
: c.yellow;
|
|
162
|
+
console.log(`Status: ${statusColor(result.status)}`);
|
|
163
|
+
console.log(`Completed: ${c.green(String(result.completedTickets))} tickets`);
|
|
164
|
+
console.log(`Failed: ${c.red(String(result.failedTickets))} tickets`);
|
|
165
|
+
console.log(`Total Cost: ${c.yellow(`$${result.totalCostUsd.toFixed(4)}`)}`);
|
|
166
|
+
if (result.errors.length > 0) {
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(c.bold('Errors:'));
|
|
169
|
+
for (const error of result.errors.slice(0, 5)) {
|
|
170
|
+
console.log(` ${c.red('✗')} ${error}`);
|
|
171
|
+
}
|
|
172
|
+
if (result.errors.length > 5) {
|
|
173
|
+
console.log(c.dim(` ... and ${result.errors.length - 5} more`));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log('');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
spinner.fail('Autopilot failed');
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Register run command
|
|
186
|
+
*/
|
|
187
|
+
export function registerRunCommand(program) {
|
|
188
|
+
program
|
|
189
|
+
.command('run')
|
|
190
|
+
.description('Start autopilot to implement tickets autonomously')
|
|
191
|
+
.option('-s, --spec <id>', 'Specification ID to implement')
|
|
192
|
+
.option('-e, --epic <id>', 'Only implement tickets from this epic')
|
|
193
|
+
.option('-p, --parallel <n>', 'Number of parallel workers', parseInt)
|
|
194
|
+
.option('-c, --max-cost <usd>', 'Maximum cost in USD', parseFloat)
|
|
195
|
+
.option('-n, --dry-run', 'Show plan without executing')
|
|
196
|
+
.option('-w, --watch', 'Watch mode with live dashboard')
|
|
197
|
+
.option('-v, --verbose', 'Show detailed progress')
|
|
198
|
+
.option('--json', 'Output as JSON')
|
|
199
|
+
.option('-r, --resume <run-id>', 'Resume a previous run')
|
|
200
|
+
.addHelpText('after', `
|
|
201
|
+
Examples:
|
|
202
|
+
$ specforge autopilot run # Run with current spec
|
|
203
|
+
$ specforge autopilot run --spec <id> # Run with specific spec
|
|
204
|
+
$ specforge autopilot run --parallel 2 # Run with 2 workers
|
|
205
|
+
$ specforge autopilot run --max-cost 10 # Limit to $10
|
|
206
|
+
$ specforge autopilot run --dry-run # Preview without running
|
|
207
|
+
$ specforge autopilot run --watch # Live dashboard mode
|
|
208
|
+
$ specforge autopilot run --resume <run-id> # Resume previous run
|
|
209
|
+
|
|
210
|
+
Configuration:
|
|
211
|
+
Settings can be configured in .specforge.json under the "autopilot" key.
|
|
212
|
+
Command-line options override config file settings.
|
|
213
|
+
|
|
214
|
+
Keyboard:
|
|
215
|
+
Ctrl+C Pause and save state (can resume later)
|
|
216
|
+
Ctrl+C×2 Force quit (may lose progress)
|
|
217
|
+
`)
|
|
218
|
+
.action(withErrorHandler(runAction));
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/autopilot/cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autopilot Status Command
|
|
3
|
+
*
|
|
4
|
+
* Shows current autopilot session status.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Status command options
|
|
9
|
+
*/
|
|
10
|
+
export interface StatusOptions {
|
|
11
|
+
watch?: boolean;
|
|
12
|
+
verbose?: boolean;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
runId?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register status command
|
|
18
|
+
*/
|
|
19
|
+
export declare function registerStatusCommand(program: Command): void;
|
|
20
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/autopilot/cli/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmND;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuB5D"}
|