specweave 1.0.84 → 1.0.85
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/bin/specweave.js +65 -0
- package/dist/src/cli/commands/auto-status.d.ts +17 -0
- package/dist/src/cli/commands/auto-status.d.ts.map +1 -0
- package/dist/src/cli/commands/auto-status.js +220 -0
- package/dist/src/cli/commands/auto-status.js.map +1 -0
- package/dist/src/cli/commands/auto.d.ts +32 -0
- package/dist/src/cli/commands/auto.d.ts.map +1 -0
- package/dist/src/cli/commands/auto.js +349 -0
- package/dist/src/cli/commands/auto.js.map +1 -0
- package/dist/src/cli/commands/cancel-auto.d.ts +15 -0
- package/dist/src/cli/commands/cancel-auto.d.ts.map +1 -0
- package/dist/src/cli/commands/cancel-auto.js +209 -0
- package/dist/src/cli/commands/cancel-auto.js.map +1 -0
- package/package.json +1 -1
package/bin/specweave.js
CHANGED
|
@@ -407,6 +407,71 @@ program
|
|
|
407
407
|
console.log(statusLine);
|
|
408
408
|
});
|
|
409
409
|
|
|
410
|
+
// Auto mode commands - Autonomous execution with Ralph Wiggum pattern
|
|
411
|
+
program
|
|
412
|
+
.command('auto [incrementIds...]')
|
|
413
|
+
.description('Start autonomous execution session (Ralph Wiggum pattern + stop hooks)')
|
|
414
|
+
.option('--max-iterations <n>', 'Maximum iterations (safety net)', '2500')
|
|
415
|
+
.option('--max-hours <n>', 'Maximum hours to run', '600')
|
|
416
|
+
.option('--simple', 'Pure Ralph mode (minimal context)')
|
|
417
|
+
.option('--dry-run', 'Preview without starting')
|
|
418
|
+
.option('--increments <ids>', 'Comma-separated increment IDs')
|
|
419
|
+
.option('--all-backlog', 'Process all backlog items')
|
|
420
|
+
.option('--skip-gates <gates>', 'Pre-approve specific gates (comma-separated)')
|
|
421
|
+
.option('--no-increment', 'Skip auto-creation (require existing increments)')
|
|
422
|
+
.option('--no-inc', 'Alias for --no-increment')
|
|
423
|
+
.option('--prompt <text>', 'Analyze prompt and create increments (intelligent chunking)')
|
|
424
|
+
.option('--yes', 'Auto-approve increment plan (skip user approval)')
|
|
425
|
+
.option('-y', 'Alias for --yes')
|
|
426
|
+
.option('--tdd', 'Enable TDD strict mode - ALL tests must pass')
|
|
427
|
+
.option('--strict', 'Alias for --tdd')
|
|
428
|
+
.action(async (incrementIds, options) => {
|
|
429
|
+
const { createAutoCommand } = await import('../dist/src/cli/commands/auto.js');
|
|
430
|
+
const autoCmd = createAutoCommand();
|
|
431
|
+
// Re-parse with increment IDs
|
|
432
|
+
const args = ['node', 'auto', ...incrementIds];
|
|
433
|
+
// Add options
|
|
434
|
+
if (options.maxIterations) args.push('--max-iterations', options.maxIterations);
|
|
435
|
+
if (options.maxHours) args.push('--max-hours', options.maxHours);
|
|
436
|
+
if (options.simple) args.push('--simple');
|
|
437
|
+
if (options.dryRun) args.push('--dry-run');
|
|
438
|
+
if (options.increments) args.push('--increments', options.increments);
|
|
439
|
+
if (options.allBacklog) args.push('--all-backlog');
|
|
440
|
+
if (options.skipGates) args.push('--skip-gates', options.skipGates);
|
|
441
|
+
if (options.noIncrement) args.push('--no-increment');
|
|
442
|
+
if (options.noInc) args.push('--no-inc');
|
|
443
|
+
if (options.prompt) args.push('--prompt', options.prompt);
|
|
444
|
+
if (options.yes || options.y) args.push('--yes');
|
|
445
|
+
if (options.tdd || options.strict) args.push('--tdd');
|
|
446
|
+
await autoCmd.parseAsync(args, { from: 'user' });
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
program
|
|
450
|
+
.command('auto-status')
|
|
451
|
+
.description('Check auto session status and progress')
|
|
452
|
+
.option('--verbose', 'Show detailed information')
|
|
453
|
+
.option('--json', 'Output as JSON')
|
|
454
|
+
.action(async (options) => {
|
|
455
|
+
const { createAutoStatusCommand } = await import('../dist/src/cli/commands/auto-status.js');
|
|
456
|
+
const statusCmd = createAutoStatusCommand();
|
|
457
|
+
const args = ['node', 'auto-status'];
|
|
458
|
+
if (options.verbose) args.push('--verbose');
|
|
459
|
+
if (options.json) args.push('--json');
|
|
460
|
+
await statusCmd.parseAsync(args, { from: 'user' });
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
program
|
|
464
|
+
.command('cancel-auto')
|
|
465
|
+
.description('Cancel running auto session')
|
|
466
|
+
.option('--force', 'Force cancel without confirmation')
|
|
467
|
+
.action(async (options) => {
|
|
468
|
+
const { createCancelAutoCommand } = await import('../dist/src/cli/commands/cancel-auto.js');
|
|
469
|
+
const cancelCmd = createCancelAutoCommand();
|
|
470
|
+
const args = ['node', 'cancel-auto'];
|
|
471
|
+
if (options.force) args.push('--force');
|
|
472
|
+
await cancelCmd.parseAsync(args, { from: 'user' });
|
|
473
|
+
});
|
|
474
|
+
|
|
410
475
|
// Update instructions command - Smart merge CLAUDE.md/AGENTS.md
|
|
411
476
|
program
|
|
412
477
|
.command('update-instructions')
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Status CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Check current auto session status, progress, and pending gates.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave auto-status
|
|
8
|
+
* specweave auto-status --verbose
|
|
9
|
+
* specweave auto-status --json
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
export interface AutoStatusOptions {
|
|
13
|
+
verbose?: boolean;
|
|
14
|
+
json?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function createAutoStatusCommand(): Command;
|
|
17
|
+
//# sourceMappingURL=auto-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CA0BjD"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Status CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Check current auto session status, progress, and pending gates.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave auto-status
|
|
8
|
+
* specweave auto-status --verbose
|
|
9
|
+
* specweave auto-status --json
|
|
10
|
+
*/
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
import { SessionStateManager } from '../../core/auto/session-state.js';
|
|
16
|
+
export function createAutoStatusCommand() {
|
|
17
|
+
const cmd = new Command('auto-status')
|
|
18
|
+
.description('Check auto session status and progress')
|
|
19
|
+
.option('--verbose', 'Show detailed information')
|
|
20
|
+
.option('--json', 'Output as JSON')
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
const projectPath = process.cwd();
|
|
23
|
+
// Check if SpecWeave is initialized
|
|
24
|
+
const specweavePath = path.join(projectPath, '.specweave');
|
|
25
|
+
if (!fs.existsSync(specweavePath)) {
|
|
26
|
+
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
27
|
+
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
await handleAutoStatus(projectPath, options);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
35
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return cmd;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Handle auto-status command
|
|
43
|
+
*/
|
|
44
|
+
async function handleAutoStatus(projectPath, options) {
|
|
45
|
+
const sessionManager = new SessionStateManager(projectPath);
|
|
46
|
+
const session = sessionManager.load();
|
|
47
|
+
if (!session) {
|
|
48
|
+
console.log(chalk.yellow('No auto session found'));
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log('Start a new session with: ' + chalk.cyan('specweave auto [INCREMENT_IDS...]'));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// JSON output
|
|
54
|
+
if (options.json) {
|
|
55
|
+
console.log(JSON.stringify(session, null, 2));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Calculate duration
|
|
59
|
+
const startTime = new Date(session.startTime);
|
|
60
|
+
const endTime = session.endTime ? new Date(session.endTime) : new Date();
|
|
61
|
+
const durationMs = endTime.getTime() - startTime.getTime();
|
|
62
|
+
const durationHours = Math.floor(durationMs / (1000 * 60 * 60));
|
|
63
|
+
const durationMinutes = Math.floor((durationMs % (1000 * 60 * 60)) / (1000 * 60));
|
|
64
|
+
// Status color
|
|
65
|
+
const statusColor = getStatusColor(session.status);
|
|
66
|
+
const statusIcon = getStatusIcon(session.status);
|
|
67
|
+
// Print status
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
70
|
+
console.log(chalk.bold('AUTO SESSION STATUS'));
|
|
71
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
72
|
+
console.log('');
|
|
73
|
+
console.log('Session ID: ' + chalk.cyan(session.sessionId));
|
|
74
|
+
console.log(`Status: ${statusIcon} ${statusColor(session.status)}`);
|
|
75
|
+
console.log('Started: ' + chalk.gray(session.startTime));
|
|
76
|
+
if (session.endTime) {
|
|
77
|
+
console.log('Ended: ' + chalk.gray(session.endTime));
|
|
78
|
+
}
|
|
79
|
+
console.log(`Duration: ${durationHours}h ${durationMinutes}m`);
|
|
80
|
+
console.log(`Iteration: ${chalk.yellow(session.iteration.toString())}/${chalk.yellow(session.maxIterations.toString())}`);
|
|
81
|
+
if (session.maxHours) {
|
|
82
|
+
const hoursRemaining = session.maxHours - durationHours;
|
|
83
|
+
console.log(`Hours Limit: ${hoursRemaining}h remaining (max: ${session.maxHours}h)`);
|
|
84
|
+
}
|
|
85
|
+
console.log('');
|
|
86
|
+
console.log(chalk.bold('PROGRESS'));
|
|
87
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
88
|
+
console.log('');
|
|
89
|
+
if (session.currentIncrement) {
|
|
90
|
+
console.log('Current: ' + chalk.green(session.currentIncrement));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log('Current: ' + chalk.gray('(none)'));
|
|
94
|
+
}
|
|
95
|
+
console.log(`Queue: ${session.incrementQueue.length} remaining`);
|
|
96
|
+
console.log(`Completed: ${chalk.green(session.completedIncrements.length.toString())}`);
|
|
97
|
+
console.log(`Failed: ${chalk.red(session.failedIncrements.length.toString())}`);
|
|
98
|
+
if (options.verbose) {
|
|
99
|
+
if (session.incrementQueue.length > 0) {
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(chalk.bold('QUEUE'));
|
|
102
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
103
|
+
for (const incId of session.incrementQueue) {
|
|
104
|
+
console.log(' • ' + chalk.cyan(incId));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (session.completedIncrements.length > 0) {
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log(chalk.bold('COMPLETED'));
|
|
110
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
111
|
+
for (const incId of session.completedIncrements) {
|
|
112
|
+
console.log(' ✅ ' + chalk.green(incId));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (session.failedIncrements.length > 0) {
|
|
116
|
+
console.log('');
|
|
117
|
+
console.log(chalk.bold('FAILED'));
|
|
118
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
119
|
+
for (const incId of session.failedIncrements) {
|
|
120
|
+
console.log(' ❌ ' + chalk.red(incId));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Human gates
|
|
125
|
+
if (session.humanGates.pending) {
|
|
126
|
+
console.log('');
|
|
127
|
+
console.log(chalk.bold('PENDING GATE'));
|
|
128
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log('Operation: ' + chalk.yellow(session.humanGates.pending.operation));
|
|
131
|
+
console.log('Pattern: ' + chalk.gray(session.humanGates.pending.pattern));
|
|
132
|
+
console.log('Requested: ' + chalk.gray(session.humanGates.pending.requestedAt));
|
|
133
|
+
}
|
|
134
|
+
if (options.verbose && session.humanGates.approved.length > 0) {
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(chalk.bold('APPROVED GATES'));
|
|
137
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
138
|
+
for (const gate of session.humanGates.approved) {
|
|
139
|
+
console.log(' ✓ ' + chalk.green(gate));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Circuit breakers
|
|
143
|
+
const openBreakers = Object.entries(session.circuitBreakers).filter(([_, status]) => status.state === 'open');
|
|
144
|
+
if (openBreakers.length > 0) {
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(chalk.bold('CIRCUIT BREAKERS'));
|
|
147
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
148
|
+
console.log('');
|
|
149
|
+
for (const [service, status] of openBreakers) {
|
|
150
|
+
console.log(`${service}:`.padEnd(15) + chalk.red('OPEN'));
|
|
151
|
+
console.log(' Failures: ' + chalk.yellow(status.failures.toString()));
|
|
152
|
+
if (status.lastFailure) {
|
|
153
|
+
console.log(' Last: ' + chalk.gray(status.lastFailure));
|
|
154
|
+
}
|
|
155
|
+
if (status.nextRetry) {
|
|
156
|
+
console.log(' Next Retry: ' + chalk.gray(status.nextRetry));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// End reason
|
|
161
|
+
if (session.endReason) {
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(chalk.bold('END REASON'));
|
|
164
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
165
|
+
console.log(session.endReason);
|
|
166
|
+
}
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(chalk.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
169
|
+
console.log('');
|
|
170
|
+
// Commands
|
|
171
|
+
if (session.status === 'running') {
|
|
172
|
+
console.log('Commands:');
|
|
173
|
+
console.log(' • Cancel: ' + chalk.cyan('specweave cancel-auto'));
|
|
174
|
+
console.log(' • Resume: ' + chalk.cyan('/sw:do'));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
console.log('Session has ended.');
|
|
178
|
+
console.log('Start a new session: ' + chalk.cyan('specweave auto [INCREMENT_IDS...]'));
|
|
179
|
+
}
|
|
180
|
+
console.log('');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get status color function
|
|
184
|
+
*/
|
|
185
|
+
function getStatusColor(status) {
|
|
186
|
+
switch (status) {
|
|
187
|
+
case 'running':
|
|
188
|
+
return chalk.green;
|
|
189
|
+
case 'completed':
|
|
190
|
+
return chalk.blue;
|
|
191
|
+
case 'paused':
|
|
192
|
+
return chalk.yellow;
|
|
193
|
+
case 'failed':
|
|
194
|
+
return chalk.red;
|
|
195
|
+
case 'cancelled':
|
|
196
|
+
return chalk.gray;
|
|
197
|
+
default:
|
|
198
|
+
return chalk.white;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get status icon
|
|
203
|
+
*/
|
|
204
|
+
function getStatusIcon(status) {
|
|
205
|
+
switch (status) {
|
|
206
|
+
case 'running':
|
|
207
|
+
return '🔄';
|
|
208
|
+
case 'completed':
|
|
209
|
+
return '✅';
|
|
210
|
+
case 'paused':
|
|
211
|
+
return '⏸️';
|
|
212
|
+
case 'failed':
|
|
213
|
+
return '❌';
|
|
214
|
+
case 'cancelled':
|
|
215
|
+
return '🚫';
|
|
216
|
+
default:
|
|
217
|
+
return '❓';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=auto-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-status.js","sourceRoot":"","sources":["../../../../src/cli/commands/auto-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Mode CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Start autonomous execution session with stop hook integration.
|
|
5
|
+
* Works until all tasks complete or max iterations reached.
|
|
6
|
+
* Uses Ralph Wiggum pattern with SpecWeave workflow integration.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* specweave auto [INCREMENT_IDS...] [OPTIONS]
|
|
10
|
+
* specweave auto 0001 --max-iterations 100
|
|
11
|
+
* specweave auto --all-backlog --tdd
|
|
12
|
+
* specweave auto --prompt "Build auth system" --yes
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
export interface AutoCommandOptions {
|
|
16
|
+
maxIterations?: string | number;
|
|
17
|
+
maxHours?: string | number;
|
|
18
|
+
simple?: boolean;
|
|
19
|
+
dryRun?: boolean;
|
|
20
|
+
increments?: string;
|
|
21
|
+
allBacklog?: boolean;
|
|
22
|
+
skipGates?: string;
|
|
23
|
+
noIncrement?: boolean;
|
|
24
|
+
noInc?: boolean;
|
|
25
|
+
prompt?: string;
|
|
26
|
+
yes?: boolean;
|
|
27
|
+
y?: boolean;
|
|
28
|
+
tdd?: boolean;
|
|
29
|
+
strict?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function createAutoCommand(): Command;
|
|
32
|
+
//# sourceMappingURL=auto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,CAAC,CAAC,EAAE,OAAO,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAuC3C"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Mode CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Start autonomous execution session with stop hook integration.
|
|
5
|
+
* Works until all tasks complete or max iterations reached.
|
|
6
|
+
* Uses Ralph Wiggum pattern with SpecWeave workflow integration.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* specweave auto [INCREMENT_IDS...] [OPTIONS]
|
|
10
|
+
* specweave auto 0001 --max-iterations 100
|
|
11
|
+
* specweave auto --all-backlog --tdd
|
|
12
|
+
* specweave auto --prompt "Build auth system" --yes
|
|
13
|
+
*/
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import * as fs from 'fs';
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import { Command } from 'commander';
|
|
18
|
+
import { SessionStateManager } from '../../core/auto/session-state.js';
|
|
19
|
+
export function createAutoCommand() {
|
|
20
|
+
const cmd = new Command('auto')
|
|
21
|
+
.description('Start autonomous execution session (Ralph Wiggum pattern + stop hooks)')
|
|
22
|
+
.argument('[incrementIds...]', 'Increment IDs to process (e.g., 0001, 0001-feature)')
|
|
23
|
+
.option('--max-iterations <n>', 'Maximum iterations (safety net)', '2500')
|
|
24
|
+
.option('--max-hours <n>', 'Maximum hours to run', '600')
|
|
25
|
+
.option('--simple', 'Pure Ralph mode (minimal context)')
|
|
26
|
+
.option('--dry-run', 'Preview without starting')
|
|
27
|
+
.option('--increments <ids>', 'Comma-separated increment IDs')
|
|
28
|
+
.option('--all-backlog', 'Process all backlog items')
|
|
29
|
+
.option('--skip-gates <gates>', 'Pre-approve specific gates (comma-separated)')
|
|
30
|
+
.option('--no-increment', 'Skip auto-creation (require existing increments)')
|
|
31
|
+
.option('--no-inc', 'Alias for --no-increment')
|
|
32
|
+
.option('--prompt <text>', 'Analyze prompt and create increments (intelligent chunking)')
|
|
33
|
+
.option('--yes', 'Auto-approve increment plan (skip user approval)')
|
|
34
|
+
.option('-y', 'Alias for --yes')
|
|
35
|
+
.option('--tdd', 'Enable TDD strict mode - ALL tests must pass')
|
|
36
|
+
.option('--strict', 'Alias for --tdd')
|
|
37
|
+
.action(async (incrementIds, options) => {
|
|
38
|
+
const projectPath = process.cwd();
|
|
39
|
+
// Check if SpecWeave is initialized
|
|
40
|
+
const specweavePath = path.join(projectPath, '.specweave');
|
|
41
|
+
if (!fs.existsSync(specweavePath)) {
|
|
42
|
+
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
43
|
+
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
await handleAutoCommand(projectPath, incrementIds, options);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
51
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return cmd;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Main auto command handler
|
|
59
|
+
*/
|
|
60
|
+
async function handleAutoCommand(projectPath, incrementIds, options) {
|
|
61
|
+
const sessionManager = new SessionStateManager(projectPath);
|
|
62
|
+
const stateDir = path.join(projectPath, '.specweave/state');
|
|
63
|
+
const incrementsDir = path.join(projectPath, '.specweave/increments');
|
|
64
|
+
const logsDir = path.join(projectPath, '.specweave/logs');
|
|
65
|
+
// Ensure directories exist
|
|
66
|
+
if (!fs.existsSync(stateDir)) {
|
|
67
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
if (!fs.existsSync(logsDir)) {
|
|
70
|
+
fs.mkdirSync(logsDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
// Parse options
|
|
73
|
+
const maxIterations = parseInt(options.maxIterations?.toString() || '2500', 10);
|
|
74
|
+
const maxHours = options.maxHours ? parseInt(options.maxHours.toString(), 10) : 600;
|
|
75
|
+
const simpleMode = options.simple || false;
|
|
76
|
+
const dryRun = options.dryRun || false;
|
|
77
|
+
const allBacklog = options.allBacklog || false;
|
|
78
|
+
const skipGates = options.skipGates ? options.skipGates.split(',').map(g => g.trim()) : [];
|
|
79
|
+
const noIncrement = options.noIncrement || options.noInc || false;
|
|
80
|
+
const prompt = options.prompt;
|
|
81
|
+
const autoApprove = options.yes || options.y || false;
|
|
82
|
+
const tddMode = options.tdd || options.strict || false;
|
|
83
|
+
// Parse increment IDs from args or --increments option
|
|
84
|
+
let finalIncrementIds = [...incrementIds];
|
|
85
|
+
if (options.increments) {
|
|
86
|
+
finalIncrementIds = [...finalIncrementIds, ...options.increments.split(',').map(id => id.trim())];
|
|
87
|
+
}
|
|
88
|
+
// Check for existing active session
|
|
89
|
+
if (sessionManager.hasActiveSession()) {
|
|
90
|
+
const activeSession = sessionManager.getActiveSession();
|
|
91
|
+
console.log(chalk.red(`❌ Auto session already active: ${activeSession?.sessionId}`));
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log('Options:');
|
|
94
|
+
console.log(' 1. Cancel it: ' + chalk.cyan('specweave cancel-auto'));
|
|
95
|
+
console.log(' 2. Check status: ' + chalk.cyan('specweave auto-status'));
|
|
96
|
+
console.log(' 3. Let it continue (close this tab)');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
// Handle --prompt (intelligent chunking)
|
|
100
|
+
if (prompt) {
|
|
101
|
+
await handlePromptChunking(projectPath, prompt, autoApprove, stateDir);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Build increment queue
|
|
105
|
+
if (allBacklog) {
|
|
106
|
+
finalIncrementIds = await findBacklogIncrements(incrementsDir);
|
|
107
|
+
if (finalIncrementIds.length === 0) {
|
|
108
|
+
console.log(chalk.yellow('⚠️ No backlog or planned increments found'));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// If no increments specified, find current in-progress increment
|
|
113
|
+
if (finalIncrementIds.length === 0) {
|
|
114
|
+
finalIncrementIds = await findActiveIncrements(incrementsDir);
|
|
115
|
+
}
|
|
116
|
+
// If still no increments found
|
|
117
|
+
if (finalIncrementIds.length === 0) {
|
|
118
|
+
if (noIncrement) {
|
|
119
|
+
console.log(chalk.red('❌ No increments specified and no active increment found'));
|
|
120
|
+
console.log('');
|
|
121
|
+
console.log('Usage: specweave auto [INCREMENT_IDS...]');
|
|
122
|
+
console.log(' specweave auto --all-backlog');
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// Signal to Claude that increment creation is needed
|
|
127
|
+
console.log(chalk.blue('🤔 No increments found. Auto mode will analyze context and create increments as needed.'));
|
|
128
|
+
console.log('');
|
|
129
|
+
console.log('💡 The LLM will:');
|
|
130
|
+
console.log(' 1. Analyze user prompt and project context');
|
|
131
|
+
console.log(' 2. Match existing increments OR create new ones');
|
|
132
|
+
console.log(' 3. Start autonomous execution');
|
|
133
|
+
console.log('');
|
|
134
|
+
console.log('To skip auto-creation and require existing increments: use --no-increment');
|
|
135
|
+
console.log('');
|
|
136
|
+
// Create a marker file to signal increment creation needed
|
|
137
|
+
const markerPath = path.join(stateDir, 'auto-needs-increment.json');
|
|
138
|
+
const marker = {
|
|
139
|
+
needsIncrementCreation: true,
|
|
140
|
+
timestamp: new Date().toISOString(),
|
|
141
|
+
};
|
|
142
|
+
fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2), 'utf-8');
|
|
143
|
+
// Exit with special code to signal LLM should create increment
|
|
144
|
+
process.exit(2);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Validate increments exist
|
|
148
|
+
for (const incId of finalIncrementIds) {
|
|
149
|
+
const incDir = path.join(incrementsDir, incId);
|
|
150
|
+
if (!fs.existsSync(incDir)) {
|
|
151
|
+
// Try to find by prefix
|
|
152
|
+
const found = findIncrementByPrefix(incrementsDir, incId);
|
|
153
|
+
if (!found) {
|
|
154
|
+
console.log(chalk.red(`❌ Increment not found: ${incId}`));
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Dry run output
|
|
160
|
+
if (dryRun) {
|
|
161
|
+
printDryRunPreview(finalIncrementIds, maxIterations, maxHours, simpleMode);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Create session
|
|
165
|
+
const session = sessionManager.createSession({
|
|
166
|
+
incrementQueue: finalIncrementIds,
|
|
167
|
+
maxIterations,
|
|
168
|
+
maxHours,
|
|
169
|
+
simple: simpleMode,
|
|
170
|
+
});
|
|
171
|
+
// Add TDD mode to session if enabled
|
|
172
|
+
if (tddMode) {
|
|
173
|
+
session.tddMode = true;
|
|
174
|
+
}
|
|
175
|
+
// Add skip gates if provided
|
|
176
|
+
if (skipGates.length > 0) {
|
|
177
|
+
session.humanGates.approved = skipGates;
|
|
178
|
+
}
|
|
179
|
+
// Save session
|
|
180
|
+
if (!sessionManager.save(session)) {
|
|
181
|
+
console.log(chalk.red('❌ Failed to create session'));
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
// Acquire lock
|
|
185
|
+
if (!sessionManager.acquireLock()) {
|
|
186
|
+
console.log(chalk.red('❌ Failed to acquire session lock'));
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
// Log session start
|
|
190
|
+
const logEntry = {
|
|
191
|
+
timestamp: new Date().toISOString(),
|
|
192
|
+
event: 'session_start',
|
|
193
|
+
sessionId: session.sessionId,
|
|
194
|
+
increments: finalIncrementIds.length,
|
|
195
|
+
};
|
|
196
|
+
const logPath = path.join(logsDir, 'auto-sessions.log');
|
|
197
|
+
fs.appendFileSync(logPath, JSON.stringify(logEntry) + '\n', 'utf-8');
|
|
198
|
+
// Output success
|
|
199
|
+
console.log(chalk.green('🚀 Auto Session Started'));
|
|
200
|
+
console.log('');
|
|
201
|
+
console.log('Session ID: ' + chalk.cyan(session.sessionId));
|
|
202
|
+
console.log('Max Iterations: ' + chalk.yellow(maxIterations.toString()));
|
|
203
|
+
if (maxHours) {
|
|
204
|
+
console.log('Max Hours: ' + chalk.yellow(maxHours.toString()));
|
|
205
|
+
}
|
|
206
|
+
console.log('Simple Mode: ' + chalk.yellow(simpleMode.toString()));
|
|
207
|
+
if (tddMode) {
|
|
208
|
+
console.log('');
|
|
209
|
+
console.log(chalk.red('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
210
|
+
console.log(chalk.red('🔴 TDD STRICT MODE: ENABLED'));
|
|
211
|
+
console.log(chalk.red(' ALL tests MUST pass before auto mode can complete'));
|
|
212
|
+
console.log(chalk.red('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
213
|
+
}
|
|
214
|
+
console.log('');
|
|
215
|
+
console.log(`Increment Queue (${finalIncrementIds.length}):`);
|
|
216
|
+
for (const incId of finalIncrementIds) {
|
|
217
|
+
console.log(' • ' + chalk.cyan(incId));
|
|
218
|
+
}
|
|
219
|
+
console.log('');
|
|
220
|
+
console.log('Current: ' + chalk.green(finalIncrementIds[0]));
|
|
221
|
+
console.log('');
|
|
222
|
+
console.log('The session will continue until:');
|
|
223
|
+
console.log(' • All tasks complete AND tests pass');
|
|
224
|
+
if (tddMode) {
|
|
225
|
+
console.log(chalk.red(' • (TDD MODE: 100% tests GREEN required)'));
|
|
226
|
+
}
|
|
227
|
+
console.log(` • Max iterations (${maxIterations}) reached`);
|
|
228
|
+
if (maxHours) {
|
|
229
|
+
console.log(` • Max hours (${maxHours}) exceeded`);
|
|
230
|
+
}
|
|
231
|
+
console.log(' • You run ' + chalk.cyan('specweave cancel-auto'));
|
|
232
|
+
console.log(' • A human gate requires approval');
|
|
233
|
+
console.log('');
|
|
234
|
+
console.log(chalk.gray('💡 Tip: Close this tab anytime to pause. Resume with /sw:do'));
|
|
235
|
+
console.log('');
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Handle --prompt option (intelligent chunking)
|
|
239
|
+
*/
|
|
240
|
+
async function handlePromptChunking(projectPath, prompt, autoApprove, stateDir) {
|
|
241
|
+
console.log(chalk.blue('🧠 Analyzing prompt for intelligent chunking...'));
|
|
242
|
+
console.log('');
|
|
243
|
+
// TODO: Implement chunking logic (call chunk-prompt.js or port to TypeScript)
|
|
244
|
+
// For now, create marker and exit with code 2
|
|
245
|
+
const marker = {
|
|
246
|
+
needsIncrementCreation: true,
|
|
247
|
+
fromChunking: true,
|
|
248
|
+
autoApproved: autoApprove,
|
|
249
|
+
prompt,
|
|
250
|
+
timestamp: new Date().toISOString(),
|
|
251
|
+
};
|
|
252
|
+
const markerPath = path.join(stateDir, 'auto-needs-increment.json');
|
|
253
|
+
fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2), 'utf-8');
|
|
254
|
+
console.log(chalk.yellow('📋 Prompt analysis required - LLM will handle chunking'));
|
|
255
|
+
console.log('');
|
|
256
|
+
if (autoApprove) {
|
|
257
|
+
console.log(chalk.green('✅ Plan will be auto-approved'));
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
console.log('💡 Review the plan and approve before execution');
|
|
261
|
+
}
|
|
262
|
+
process.exit(2);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Find backlog or planned increments
|
|
266
|
+
*/
|
|
267
|
+
async function findBacklogIncrements(incrementsDir) {
|
|
268
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
269
|
+
return [];
|
|
270
|
+
}
|
|
271
|
+
const increments = [];
|
|
272
|
+
const entries = fs.readdirSync(incrementsDir);
|
|
273
|
+
for (const entry of entries) {
|
|
274
|
+
if (!/^[0-9]{4}-/.test(entry))
|
|
275
|
+
continue;
|
|
276
|
+
const incDir = path.join(incrementsDir, entry);
|
|
277
|
+
const metaPath = path.join(incDir, 'metadata.json');
|
|
278
|
+
if (fs.existsSync(metaPath)) {
|
|
279
|
+
const metaContent = fs.readFileSync(metaPath, 'utf-8');
|
|
280
|
+
const metadata = JSON.parse(metaContent);
|
|
281
|
+
if (metadata.status === 'backlog' || metadata.status === 'planned') {
|
|
282
|
+
increments.push(entry);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return increments;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Find active or in-progress increments
|
|
290
|
+
*/
|
|
291
|
+
async function findActiveIncrements(incrementsDir) {
|
|
292
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
const increments = [];
|
|
296
|
+
const entries = fs.readdirSync(incrementsDir);
|
|
297
|
+
for (const entry of entries) {
|
|
298
|
+
if (!/^[0-9]{4}-/.test(entry))
|
|
299
|
+
continue;
|
|
300
|
+
const incDir = path.join(incrementsDir, entry);
|
|
301
|
+
const metaPath = path.join(incDir, 'metadata.json');
|
|
302
|
+
if (fs.existsSync(metaPath)) {
|
|
303
|
+
const metaContent = fs.readFileSync(metaPath, 'utf-8');
|
|
304
|
+
const metadata = JSON.parse(metaContent);
|
|
305
|
+
if (metadata.status === 'active' || metadata.status === 'in-progress') {
|
|
306
|
+
increments.push(entry);
|
|
307
|
+
break; // Only return first active increment
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return increments;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Find increment by prefix
|
|
315
|
+
*/
|
|
316
|
+
function findIncrementByPrefix(incrementsDir, prefix) {
|
|
317
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
const entries = fs.readdirSync(incrementsDir);
|
|
321
|
+
for (const entry of entries) {
|
|
322
|
+
if (entry.startsWith(prefix)) {
|
|
323
|
+
return entry;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Print dry run preview
|
|
330
|
+
*/
|
|
331
|
+
function printDryRunPreview(incrementIds, maxIterations, maxHours, simpleMode) {
|
|
332
|
+
const sessionId = SessionStateManager.generateSessionId();
|
|
333
|
+
console.log(chalk.blue('🔍 Dry Run - Session Preview'));
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log('Session ID: ' + chalk.cyan(sessionId));
|
|
336
|
+
console.log('Max Iterations: ' + chalk.yellow(maxIterations.toString()));
|
|
337
|
+
if (maxHours) {
|
|
338
|
+
console.log('Max Hours: ' + chalk.yellow(maxHours.toString()));
|
|
339
|
+
}
|
|
340
|
+
console.log('Simple Mode: ' + chalk.yellow(simpleMode.toString()));
|
|
341
|
+
console.log('');
|
|
342
|
+
console.log('Increment Queue:');
|
|
343
|
+
for (const incId of incrementIds) {
|
|
344
|
+
console.log(' • ' + chalk.cyan(incId));
|
|
345
|
+
}
|
|
346
|
+
console.log('');
|
|
347
|
+
console.log(chalk.gray('Run without --dry-run to create session.'));
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=auto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.js","sourceRoot":"","sources":["../../../../src/cli/commands/auto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancel Auto CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Cancel running auto session and generate summary report.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave cancel-auto
|
|
8
|
+
* specweave cancel-auto --force
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
export interface CancelAutoOptions {
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function createCancelAutoCommand(): Command;
|
|
15
|
+
//# sourceMappingURL=cancel-auto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-auto.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cancel-auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAyBjD"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancel Auto CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Cancel running auto session and generate summary report.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave cancel-auto
|
|
8
|
+
* specweave cancel-auto --force
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
import { SessionStateManager } from '../../core/auto/session-state.js';
|
|
15
|
+
export function createCancelAutoCommand() {
|
|
16
|
+
const cmd = new Command('cancel-auto')
|
|
17
|
+
.description('Cancel running auto session')
|
|
18
|
+
.option('--force', 'Force cancel without confirmation')
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
const projectPath = process.cwd();
|
|
21
|
+
// Check if SpecWeave is initialized
|
|
22
|
+
const specweavePath = path.join(projectPath, '.specweave');
|
|
23
|
+
if (!fs.existsSync(specweavePath)) {
|
|
24
|
+
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
25
|
+
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
await handleCancelAuto(projectPath, options);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
33
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return cmd;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handle cancel-auto command
|
|
41
|
+
*/
|
|
42
|
+
async function handleCancelAuto(projectPath, options) {
|
|
43
|
+
const sessionManager = new SessionStateManager(projectPath);
|
|
44
|
+
const session = sessionManager.load();
|
|
45
|
+
if (!session) {
|
|
46
|
+
console.log(chalk.yellow('No auto session found'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (session.status !== 'running') {
|
|
50
|
+
console.log(chalk.yellow(`Session is not running (status: ${session.status})`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Ask for confirmation unless --force
|
|
54
|
+
if (!options.force) {
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(chalk.yellow('⚠️ Cancel Auto Session'));
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log('Session ID: ' + chalk.cyan(session.sessionId));
|
|
59
|
+
console.log('Current: ' + chalk.green(session.currentIncrement || '(none)'));
|
|
60
|
+
console.log(`Progress: ${session.completedIncrements.length} completed, ${session.incrementQueue.length} remaining`);
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('Are you sure you want to cancel? (y/N)');
|
|
63
|
+
// Wait for user input
|
|
64
|
+
const answer = await getUserInput();
|
|
65
|
+
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
66
|
+
console.log(chalk.gray('Cancelled'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Calculate duration
|
|
71
|
+
const startTime = new Date(session.startTime);
|
|
72
|
+
const endTime = new Date();
|
|
73
|
+
const durationMs = endTime.getTime() - startTime.getTime();
|
|
74
|
+
const durationHours = Math.floor(durationMs / (1000 * 60 * 60));
|
|
75
|
+
const durationMinutes = Math.floor((durationMs % (1000 * 60 * 60)) / (1000 * 60));
|
|
76
|
+
// Update session status
|
|
77
|
+
const success = sessionManager.updateStatus('cancelled', 'User requested cancellation');
|
|
78
|
+
if (!success) {
|
|
79
|
+
console.log(chalk.red('❌ Failed to cancel session'));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Release lock
|
|
83
|
+
sessionManager.releaseLock();
|
|
84
|
+
// Generate summary report
|
|
85
|
+
const logsDir = path.join(projectPath, '.specweave/logs');
|
|
86
|
+
if (!fs.existsSync(logsDir)) {
|
|
87
|
+
fs.mkdirSync(logsDir, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
const summaryPath = path.join(logsDir, `${session.sessionId}-summary.md`);
|
|
90
|
+
const summary = generateSummaryReport(session, durationHours, durationMinutes, 'cancelled');
|
|
91
|
+
fs.writeFileSync(summaryPath, summary, 'utf-8');
|
|
92
|
+
// Log session end
|
|
93
|
+
const logEntry = {
|
|
94
|
+
timestamp: new Date().toISOString(),
|
|
95
|
+
event: 'session_cancel',
|
|
96
|
+
sessionId: session.sessionId,
|
|
97
|
+
duration: `${durationHours}h ${durationMinutes}m`,
|
|
98
|
+
iterations: session.iteration,
|
|
99
|
+
completed: session.completedIncrements.length,
|
|
100
|
+
failed: session.failedIncrements.length,
|
|
101
|
+
};
|
|
102
|
+
const logPath = path.join(logsDir, 'auto-sessions.log');
|
|
103
|
+
fs.appendFileSync(logPath, JSON.stringify(logEntry) + '\n', 'utf-8');
|
|
104
|
+
// Output
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log(chalk.yellow('🚫 Auto Session Cancelled'));
|
|
107
|
+
console.log('');
|
|
108
|
+
console.log('Session ID: ' + chalk.cyan(session.sessionId));
|
|
109
|
+
console.log(`Duration: ${durationHours}h ${durationMinutes}m`);
|
|
110
|
+
console.log(`Iterations: ${session.iteration}/${session.maxIterations}`);
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log('RESULTS:');
|
|
113
|
+
console.log(' Completed: ' + chalk.green(session.completedIncrements.length.toString()));
|
|
114
|
+
console.log(' Failed: ' + chalk.red(session.failedIncrements.length.toString()));
|
|
115
|
+
console.log(' Remaining: ' + chalk.yellow(session.incrementQueue.length.toString()));
|
|
116
|
+
console.log('');
|
|
117
|
+
console.log('Summary saved to: ' + chalk.cyan(summaryPath));
|
|
118
|
+
console.log('');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get user input from stdin
|
|
122
|
+
* Cross-platform safe (handles Windows, macOS, Linux, WSL, CI environments)
|
|
123
|
+
*/
|
|
124
|
+
function getUserInput() {
|
|
125
|
+
return new Promise((resolve) => {
|
|
126
|
+
const stdin = process.stdin;
|
|
127
|
+
stdin.setEncoding('utf8');
|
|
128
|
+
// Only set raw mode if stdin is a TTY (prevents Windows errors)
|
|
129
|
+
if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
|
|
130
|
+
stdin.setRawMode(false);
|
|
131
|
+
}
|
|
132
|
+
stdin.once('data', (data) => {
|
|
133
|
+
resolve(data.toString().trim());
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Generate summary report
|
|
139
|
+
*/
|
|
140
|
+
function generateSummaryReport(session, durationHours, durationMinutes, status) {
|
|
141
|
+
const lines = [];
|
|
142
|
+
lines.push(`# Auto Session Summary`);
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push(`**Session ID**: \`${session.sessionId}\``);
|
|
145
|
+
lines.push(`**Status**: ${status}`);
|
|
146
|
+
lines.push(`**Started**: ${session.startTime}`);
|
|
147
|
+
lines.push(`**Ended**: ${new Date().toISOString()}`);
|
|
148
|
+
lines.push(`**Duration**: ${durationHours}h ${durationMinutes}m`);
|
|
149
|
+
lines.push('');
|
|
150
|
+
lines.push(`## Progress`);
|
|
151
|
+
lines.push('');
|
|
152
|
+
lines.push(`- **Iterations**: ${session.iteration}/${session.maxIterations}`);
|
|
153
|
+
lines.push(`- **Completed**: ${session.completedIncrements.length}`);
|
|
154
|
+
lines.push(`- **Failed**: ${session.failedIncrements.length}`);
|
|
155
|
+
lines.push(`- **Remaining**: ${session.incrementQueue.length}`);
|
|
156
|
+
lines.push('');
|
|
157
|
+
if (session.completedIncrements.length > 0) {
|
|
158
|
+
lines.push(`## Completed Increments`);
|
|
159
|
+
lines.push('');
|
|
160
|
+
for (const incId of session.completedIncrements) {
|
|
161
|
+
lines.push(`- ✅ ${incId}`);
|
|
162
|
+
}
|
|
163
|
+
lines.push('');
|
|
164
|
+
}
|
|
165
|
+
if (session.failedIncrements.length > 0) {
|
|
166
|
+
lines.push(`## Failed Increments`);
|
|
167
|
+
lines.push('');
|
|
168
|
+
for (const incId of session.failedIncrements) {
|
|
169
|
+
lines.push(`- ❌ ${incId}`);
|
|
170
|
+
}
|
|
171
|
+
lines.push('');
|
|
172
|
+
}
|
|
173
|
+
if (session.incrementQueue.length > 0) {
|
|
174
|
+
lines.push(`## Remaining Queue`);
|
|
175
|
+
lines.push('');
|
|
176
|
+
for (const incId of session.incrementQueue) {
|
|
177
|
+
lines.push(`- ⏳ ${incId}`);
|
|
178
|
+
}
|
|
179
|
+
lines.push('');
|
|
180
|
+
}
|
|
181
|
+
if (session.humanGates.approved.length > 0) {
|
|
182
|
+
lines.push(`## Approved Gates`);
|
|
183
|
+
lines.push('');
|
|
184
|
+
for (const gate of session.humanGates.approved) {
|
|
185
|
+
lines.push(`- ✓ ${gate}`);
|
|
186
|
+
}
|
|
187
|
+
lines.push('');
|
|
188
|
+
}
|
|
189
|
+
const openBreakers = Object.entries(session.circuitBreakers).filter(([_, status]) => status.state === 'open');
|
|
190
|
+
if (openBreakers.length > 0) {
|
|
191
|
+
lines.push(`## Circuit Breakers`);
|
|
192
|
+
lines.push('');
|
|
193
|
+
for (const [service, status] of openBreakers) {
|
|
194
|
+
lines.push(`- **${service}**: OPEN (${status.failures} failures)`);
|
|
195
|
+
}
|
|
196
|
+
lines.push('');
|
|
197
|
+
}
|
|
198
|
+
if (session.endReason) {
|
|
199
|
+
lines.push(`## End Reason`);
|
|
200
|
+
lines.push('');
|
|
201
|
+
lines.push(session.endReason);
|
|
202
|
+
lines.push('');
|
|
203
|
+
}
|
|
204
|
+
lines.push('---');
|
|
205
|
+
lines.push('');
|
|
206
|
+
lines.push('_Generated by SpecWeave Auto Mode_');
|
|
207
|
+
return lines.join('\n');
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=cancel-auto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-auto.js","sourceRoot":"","sources":["../../../../src/cli/commands/cancel-auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAMvE,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;SACnC,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,OAA0B;IAE1B,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,mBAAmB,CAAC,MAAM,eAAe,OAAO,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,CAAC;QACzH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAEtD,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAElF,wBAAwB;IACxB,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;IAExF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,eAAe;IACf,cAAc,CAAC,WAAW,EAAE,CAAC;IAE7B,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,aAAa,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;IAE5F,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhD,kBAAkB;IAClB,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,GAAG,aAAa,KAAK,eAAe,GAAG;QACjD,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,SAAS,EAAE,OAAO,CAAC,mBAAmB,CAAC,MAAM;QAC7C,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;KACxC,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACxD,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAErE,SAAS;IACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,KAAK,eAAe,GAAG,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,gEAAgE;QAChE,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC1D,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,OAAY,EACZ,aAAqB,EACrB,eAAuB,EACvB,MAAc;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,iBAAiB,aAAa,KAAK,eAAe,GAAG,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,OAAO,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CACjE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CACxD,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,aAAc,MAAc,CAAC,QAAQ,YAAY,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.85",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|