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 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.84",
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",