specweave 1.0.84 → 1.0.86
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/CLAUDE.md +24 -24
- 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 +40 -0
- package/dist/src/cli/commands/auto.d.ts.map +1 -0
- package/dist/src/cli/commands/auto.js +466 -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/dist/src/core/auto/types.d.ts +16 -0
- package/dist/src/core/auto/types.d.ts.map +1 -1
- package/dist/src/core/auto/types.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/commands/auto.md +230 -8
- package/plugins/specweave/commands/jobs.md +4 -2
- package/plugins/specweave/commands/progress.md +4 -2
- package/plugins/specweave/commands/status.md +4 -2
- package/plugins/specweave/hooks/validate-completion-conditions.sh +447 -0
package/CLAUDE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<!-- SW:META template="claude" version="1.0.
|
|
1
|
+
<!-- SW:META template="claude" version="1.0.85" sections="header,start,autodetect,metarule,rules,workflow,context,lsp,structure,taskformat,secrets,syncing,mapping,testing,api,limits,troubleshooting,principles,linking,mcp,autoexecute,auto,docs" -->
|
|
2
2
|
|
|
3
|
-
<!-- SW:SECTION:header version="1.0.
|
|
3
|
+
<!-- SW:SECTION:header version="1.0.85" -->
|
|
4
4
|
**Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
|
|
5
5
|
<!-- SW:END:header -->
|
|
6
6
|
|
|
7
|
-
<!-- SW:SECTION:start version="1.0.
|
|
7
|
+
<!-- SW:SECTION:start version="1.0.85" -->
|
|
8
8
|
## Getting Started
|
|
9
9
|
|
|
10
10
|
**Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
2. **Customize**: Edit spec.md and use for setup tasks
|
|
15
15
|
<!-- SW:END:start -->
|
|
16
16
|
|
|
17
|
-
<!-- SW:SECTION:autodetect version="1.0.
|
|
17
|
+
<!-- SW:SECTION:autodetect version="1.0.85" -->
|
|
18
18
|
## Auto-Detection
|
|
19
19
|
|
|
20
20
|
SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
@@ -24,7 +24,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
24
24
|
**Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
|
|
25
25
|
<!-- SW:END:autodetect -->
|
|
26
26
|
|
|
27
|
-
<!-- SW:SECTION:metarule version="1.0.
|
|
27
|
+
<!-- SW:SECTION:metarule version="1.0.85" -->
|
|
28
28
|
## Meta-Rule: Think-Before-Act
|
|
29
29
|
|
|
30
30
|
**Satisfy dependencies BEFORE dependent operations.**
|
|
@@ -35,7 +35,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
35
35
|
```
|
|
36
36
|
<!-- SW:END:metarule -->
|
|
37
37
|
|
|
38
|
-
<!-- SW:SECTION:rules version="1.0.
|
|
38
|
+
<!-- SW:SECTION:rules version="1.0.85" -->
|
|
39
39
|
## Rules
|
|
40
40
|
|
|
41
41
|
1. **Files** → `.specweave/increments/####-name/` (spec.md, plan.md, tasks.md at root; reports/, scripts/, logs/ subfolders)
|
|
@@ -46,7 +46,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
46
46
|
6. **⛔ Increment cleanliness**: ONLY 4 files at increment root (metadata.json, spec.md, plan.md, tasks.md). ALL other .md files → `reports/`, logs → `logs/`, scripts → `scripts/`
|
|
47
47
|
<!-- SW:END:rules -->
|
|
48
48
|
|
|
49
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
49
|
+
<!-- SW:SECTION:workflow version="1.0.85" -->
|
|
50
50
|
## Workflow
|
|
51
51
|
|
|
52
52
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -66,7 +66,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
66
66
|
**Natural language**: "Let's build X" → `/sw:increment` | "What's status?" → `/sw:progress` | "We're done" → `/sw:done` | "Ship while sleeping" → `/sw:auto`
|
|
67
67
|
<!-- SW:END:workflow -->
|
|
68
68
|
|
|
69
|
-
<!-- SW:SECTION:context version="1.0.
|
|
69
|
+
<!-- SW:SECTION:context version="1.0.85" -->
|
|
70
70
|
## Living Docs Context
|
|
71
71
|
|
|
72
72
|
**Before implementing features**: Check existing docs for patterns and decisions.
|
|
@@ -86,7 +86,7 @@ grep -ril "keyword" .specweave/docs/internal/
|
|
|
86
86
|
**Use `/sw:context <topic>`** to load relevant living docs into conversation.
|
|
87
87
|
<!-- SW:END:context -->
|
|
88
88
|
|
|
89
|
-
<!-- SW:SECTION:lsp version="1.0.
|
|
89
|
+
<!-- SW:SECTION:lsp version="1.0.85" -->
|
|
90
90
|
## LSP-Enhanced Exploration
|
|
91
91
|
|
|
92
92
|
**USE LSP ACTIVELY** for semantic code understanding (100x faster than grep).
|
|
@@ -103,7 +103,7 @@ go install golang.org/x/tools/gopls@latest # Go
|
|
|
103
103
|
**Best Practices**: ALWAYS use `findReferences` before refactoring | Use `goToDefinition` instead of grep | Combine with Explore agent
|
|
104
104
|
<!-- SW:END:lsp -->
|
|
105
105
|
|
|
106
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
106
|
+
<!-- SW:SECTION:structure version="1.0.85" -->
|
|
107
107
|
## Structure
|
|
108
108
|
|
|
109
109
|
```
|
|
@@ -173,7 +173,7 @@ my-project/
|
|
|
173
173
|
```
|
|
174
174
|
<!-- SW:END:structure -->
|
|
175
175
|
|
|
176
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
176
|
+
<!-- SW:SECTION:taskformat version="1.0.85" -->
|
|
177
177
|
## Task Format
|
|
178
178
|
|
|
179
179
|
```markdown
|
|
@@ -183,7 +183,7 @@ my-project/
|
|
|
183
183
|
```
|
|
184
184
|
<!-- SW:END:taskformat -->
|
|
185
185
|
|
|
186
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
186
|
+
<!-- SW:SECTION:secrets version="1.0.85" -->
|
|
187
187
|
## Secrets Check
|
|
188
188
|
|
|
189
189
|
**BEFORE CLI tools**: Check existing config first!
|
|
@@ -194,7 +194,7 @@ gh auth status
|
|
|
194
194
|
```
|
|
195
195
|
<!-- SW:END:secrets -->
|
|
196
196
|
|
|
197
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
197
|
+
<!-- SW:SECTION:syncing version="1.0.85" -->
|
|
198
198
|
## External Sync (GitHub/JIRA/ADO)
|
|
199
199
|
|
|
200
200
|
**After increment creation**: Run `/sw-github:sync {id}` to create issues!
|
|
@@ -222,7 +222,7 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
222
222
|
**Verify tokens**: `grep GITHUB_TOKEN .env` | `gh auth status`
|
|
223
223
|
<!-- SW:END:syncing -->
|
|
224
224
|
|
|
225
|
-
<!-- SW:SECTION:mapping version="1.0.
|
|
225
|
+
<!-- SW:SECTION:mapping version="1.0.85" -->
|
|
226
226
|
## GitHub Mapping
|
|
227
227
|
|
|
228
228
|
| SpecWeave | GitHub |
|
|
@@ -232,7 +232,7 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
232
232
|
| Task T-XXX | Checkbox |
|
|
233
233
|
<!-- SW:END:mapping -->
|
|
234
234
|
|
|
235
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
235
|
+
<!-- SW:SECTION:testing version="1.0.85" -->
|
|
236
236
|
## Testing
|
|
237
237
|
|
|
238
238
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest)
|
|
@@ -244,7 +244,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
244
244
|
```
|
|
245
245
|
<!-- SW:END:testing -->
|
|
246
246
|
|
|
247
|
-
<!-- SW:SECTION:api version="1.0.
|
|
247
|
+
<!-- SW:SECTION:api version="1.0.85" -->
|
|
248
248
|
## API Development (OpenAPI-First)
|
|
249
249
|
|
|
250
250
|
**For API projects only.** OpenAPI = source of truth → Postman derived from it.
|
|
@@ -263,13 +263,13 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
263
263
|
**Import**: Postman → Import collection + env → Fill secrets → Select env
|
|
264
264
|
<!-- SW:END:api -->
|
|
265
265
|
|
|
266
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
266
|
+
<!-- SW:SECTION:limits version="1.0.85" -->
|
|
267
267
|
## Limits
|
|
268
268
|
|
|
269
269
|
**Max 1500 lines/file** — extract before adding
|
|
270
270
|
<!-- SW:END:limits -->
|
|
271
271
|
|
|
272
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
272
|
+
<!-- SW:SECTION:troubleshooting version="1.0.85" -->
|
|
273
273
|
## Troubleshooting
|
|
274
274
|
|
|
275
275
|
| Issue | Fix |
|
|
@@ -288,7 +288,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
288
288
|
| Path patterns not working | `//path` = absolute, `/path` = relative to settings file, `additionalDirectories` for explicit working dirs |
|
|
289
289
|
<!-- SW:END:troubleshooting -->
|
|
290
290
|
|
|
291
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
291
|
+
<!-- SW:SECTION:principles version="1.0.85" -->
|
|
292
292
|
## Principles
|
|
293
293
|
|
|
294
294
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -298,7 +298,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
298
298
|
5. **Clean**: All files in increment folders
|
|
299
299
|
<!-- SW:END:principles -->
|
|
300
300
|
|
|
301
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
301
|
+
<!-- SW:SECTION:linking version="1.0.85" -->
|
|
302
302
|
## Bidirectional Linking
|
|
303
303
|
|
|
304
304
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -306,7 +306,7 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
306
306
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
307
307
|
<!-- SW:END:linking -->
|
|
308
308
|
|
|
309
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
309
|
+
<!-- SW:SECTION:mcp version="1.0.85" -->
|
|
310
310
|
## External Service Connection
|
|
311
311
|
|
|
312
312
|
**Priority**: MCP Server → REST API → CLI → Direct Connection
|
|
@@ -330,7 +330,7 @@ wrangler whoami 2>/dev/null
|
|
|
330
330
|
```
|
|
331
331
|
<!-- SW:END:mcp -->
|
|
332
332
|
|
|
333
|
-
<!-- SW:SECTION:autoexecute version="1.0.
|
|
333
|
+
<!-- SW:SECTION:autoexecute version="1.0.85" -->
|
|
334
334
|
## Auto-Execute Rule
|
|
335
335
|
|
|
336
336
|
**NEVER** output "Manual Step Required" when credentials exist. **EXECUTE DIRECTLY.**
|
|
@@ -344,7 +344,7 @@ wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
|
344
344
|
```
|
|
345
345
|
<!-- SW:END:autoexecute -->
|
|
346
346
|
|
|
347
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
347
|
+
<!-- SW:SECTION:auto version="1.0.85" -->
|
|
348
348
|
## Auto Mode (Autonomous Execution)
|
|
349
349
|
|
|
350
350
|
**Continuous execution until all tasks complete.**
|
|
@@ -417,7 +417,7 @@ wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
|
417
417
|
**Circuit Breaker**: External API fails 3x? Queue & continue
|
|
418
418
|
<!-- SW:END:auto -->
|
|
419
419
|
|
|
420
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
420
|
+
<!-- SW:SECTION:docs version="1.0.85" -->
|
|
421
421
|
## Docs
|
|
422
422
|
|
|
423
423
|
[spec-weave.com](https://spec-weave.com) | `.specweave/docs/internal/`
|
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,40 @@
|
|
|
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
|
+
build?: boolean;
|
|
31
|
+
tests?: boolean;
|
|
32
|
+
e2e?: boolean;
|
|
33
|
+
lint?: boolean;
|
|
34
|
+
types?: boolean;
|
|
35
|
+
cov?: string;
|
|
36
|
+
e2eCov?: string;
|
|
37
|
+
cmd?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function createAutoCommand(): Command;
|
|
40
|
+
//# 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;AAKpC,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;IAEjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAgD3C"}
|