specweave 1.0.108 → 1.0.109
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 +25 -25
- package/bin/specweave.js +72 -0
- package/dist/src/cli/commands/cancel-go.d.ts +8 -0
- package/dist/src/cli/commands/cancel-go.d.ts.map +1 -0
- package/dist/src/cli/commands/cancel-go.js +57 -0
- package/dist/src/cli/commands/cancel-go.js.map +1 -0
- package/dist/src/cli/commands/go-status.d.ts +9 -0
- package/dist/src/cli/commands/go-status.d.ts.map +1 -0
- package/dist/src/cli/commands/go-status.js +96 -0
- package/dist/src/cli/commands/go-status.js.map +1 -0
- package/dist/src/cli/commands/go.d.ts +20 -0
- package/dist/src/cli/commands/go.d.ts.map +1 -0
- package/dist/src/cli/commands/go.js +64 -0
- package/dist/src/cli/commands/go.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/auto.md +7 -7
- package/plugins/specweave/commands/cancel-go.md +108 -0
- package/plugins/specweave/commands/go-status.md +119 -0
- package/plugins/specweave/commands/go.md +504 -0
- package/plugins/specweave/hooks/stop-go.sh +251 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +30 -20
- package/plugins/specweave/scripts/setup-auto.sh +16 -3
- package/plugins/specweave/scripts/setup-go.sh +290 -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.108" sections="header,start,autodetect,metarule,rules,workflow,reflect,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.108" -->
|
|
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.108" -->
|
|
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.108" -->
|
|
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.108" -->
|
|
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.108" -->
|
|
39
39
|
## Rules
|
|
40
40
|
|
|
41
41
|
1. **Files** → `.specweave/increments/####-name/` (spec.md, plan.md, tasks.md at root; reports/, scripts/, logs/ subfolders)
|
|
@@ -48,7 +48,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
48
48
|
8. **⛔ Marketplace refresh**: ALWAYS use `specweave refresh-marketplace` CLI command. NEVER suggest `scripts/refresh-marketplace.sh` - end users don't have the scripts folder (npm global install).
|
|
49
49
|
<!-- SW:END:rules -->
|
|
50
50
|
|
|
51
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
51
|
+
<!-- SW:SECTION:workflow version="1.0.108" -->
|
|
52
52
|
## Workflow
|
|
53
53
|
|
|
54
54
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -68,7 +68,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
68
68
|
**Natural language**: "Let's build X" → `/sw:increment` | "What's status?" → `/sw:progress` | "We're done" → `/sw:done` | "Ship while sleeping" → `/sw:auto`
|
|
69
69
|
<!-- SW:END:workflow -->
|
|
70
70
|
|
|
71
|
-
<!-- SW:SECTION:reflect version="1.0.
|
|
71
|
+
<!-- SW:SECTION:reflect version="1.0.108" -->
|
|
72
72
|
## Self-Improving Skills (Reflect)
|
|
73
73
|
|
|
74
74
|
**Learn once, never repeat.** Claude learns from corrections and patterns across sessions.
|
|
@@ -112,7 +112,7 @@ ls ~/.specweave/memory/*.md 2>/dev/null
|
|
|
112
112
|
**Enable auto-learning**: `/sw:reflect-on` → Stop hook analyzes sessions automatically
|
|
113
113
|
<!-- SW:END:reflect -->
|
|
114
114
|
|
|
115
|
-
<!-- SW:SECTION:context version="1.0.
|
|
115
|
+
<!-- SW:SECTION:context version="1.0.108" -->
|
|
116
116
|
## Living Docs Context
|
|
117
117
|
|
|
118
118
|
**Before implementing features**: Check existing docs for patterns and decisions.
|
|
@@ -132,7 +132,7 @@ grep -ril "keyword" .specweave/docs/internal/
|
|
|
132
132
|
**Use `/sw:context <topic>`** to load relevant living docs into conversation.
|
|
133
133
|
<!-- SW:END:context -->
|
|
134
134
|
|
|
135
|
-
<!-- SW:SECTION:lsp version="1.0.
|
|
135
|
+
<!-- SW:SECTION:lsp version="1.0.108" -->
|
|
136
136
|
## LSP-Enhanced Exploration
|
|
137
137
|
|
|
138
138
|
**USE LSP ACTIVELY** for semantic code understanding (100x faster than grep).
|
|
@@ -149,7 +149,7 @@ go install golang.org/x/tools/gopls@latest # Go
|
|
|
149
149
|
**Best Practices**: ALWAYS use `findReferences` before refactoring | Use `goToDefinition` instead of grep | Combine with Explore agent
|
|
150
150
|
<!-- SW:END:lsp -->
|
|
151
151
|
|
|
152
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
152
|
+
<!-- SW:SECTION:structure version="1.0.108" -->
|
|
153
153
|
## Structure
|
|
154
154
|
|
|
155
155
|
```
|
|
@@ -219,7 +219,7 @@ my-project/
|
|
|
219
219
|
```
|
|
220
220
|
<!-- SW:END:structure -->
|
|
221
221
|
|
|
222
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
222
|
+
<!-- SW:SECTION:taskformat version="1.0.108" -->
|
|
223
223
|
## Task Format
|
|
224
224
|
|
|
225
225
|
```markdown
|
|
@@ -229,7 +229,7 @@ my-project/
|
|
|
229
229
|
```
|
|
230
230
|
<!-- SW:END:taskformat -->
|
|
231
231
|
|
|
232
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
232
|
+
<!-- SW:SECTION:secrets version="1.0.108" -->
|
|
233
233
|
## Secrets Check
|
|
234
234
|
|
|
235
235
|
**BEFORE CLI tools**: Check existing config first!
|
|
@@ -240,7 +240,7 @@ gh auth status
|
|
|
240
240
|
```
|
|
241
241
|
<!-- SW:END:secrets -->
|
|
242
242
|
|
|
243
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
243
|
+
<!-- SW:SECTION:syncing version="1.0.108" -->
|
|
244
244
|
## External Sync (GitHub/JIRA/ADO)
|
|
245
245
|
|
|
246
246
|
**After increment creation**: Run `/sw-github:sync {id}` to create issues!
|
|
@@ -268,7 +268,7 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
268
268
|
**Verify tokens**: `grep GITHUB_TOKEN .env` | `gh auth status`
|
|
269
269
|
<!-- SW:END:syncing -->
|
|
270
270
|
|
|
271
|
-
<!-- SW:SECTION:mapping version="1.0.
|
|
271
|
+
<!-- SW:SECTION:mapping version="1.0.108" -->
|
|
272
272
|
## GitHub Mapping
|
|
273
273
|
|
|
274
274
|
| SpecWeave | GitHub |
|
|
@@ -278,7 +278,7 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
278
278
|
| Task T-XXX | Checkbox |
|
|
279
279
|
<!-- SW:END:mapping -->
|
|
280
280
|
|
|
281
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
281
|
+
<!-- SW:SECTION:testing version="1.0.108" -->
|
|
282
282
|
## Testing
|
|
283
283
|
|
|
284
284
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest)
|
|
@@ -290,7 +290,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
290
290
|
```
|
|
291
291
|
<!-- SW:END:testing -->
|
|
292
292
|
|
|
293
|
-
<!-- SW:SECTION:api version="1.0.
|
|
293
|
+
<!-- SW:SECTION:api version="1.0.108" -->
|
|
294
294
|
## API Development (OpenAPI-First)
|
|
295
295
|
|
|
296
296
|
**For API projects only.** OpenAPI = source of truth → Postman derived from it.
|
|
@@ -309,13 +309,13 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
309
309
|
**Import**: Postman → Import collection + env → Fill secrets → Select env
|
|
310
310
|
<!-- SW:END:api -->
|
|
311
311
|
|
|
312
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
312
|
+
<!-- SW:SECTION:limits version="1.0.108" -->
|
|
313
313
|
## Limits
|
|
314
314
|
|
|
315
315
|
**Max 1500 lines/file** — extract before adding
|
|
316
316
|
<!-- SW:END:limits -->
|
|
317
317
|
|
|
318
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
318
|
+
<!-- SW:SECTION:troubleshooting version="1.0.108" -->
|
|
319
319
|
## Troubleshooting
|
|
320
320
|
|
|
321
321
|
| Issue | Fix |
|
|
@@ -335,7 +335,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
335
335
|
| Path patterns not working | `//path` = absolute, `/path` = relative to settings file, `additionalDirectories` for explicit working dirs |
|
|
336
336
|
<!-- SW:END:troubleshooting -->
|
|
337
337
|
|
|
338
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
338
|
+
<!-- SW:SECTION:principles version="1.0.108" -->
|
|
339
339
|
## Principles
|
|
340
340
|
|
|
341
341
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -345,7 +345,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
345
345
|
5. **Clean**: All files in increment folders
|
|
346
346
|
<!-- SW:END:principles -->
|
|
347
347
|
|
|
348
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
348
|
+
<!-- SW:SECTION:linking version="1.0.108" -->
|
|
349
349
|
## Bidirectional Linking
|
|
350
350
|
|
|
351
351
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -353,7 +353,7 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
353
353
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
354
354
|
<!-- SW:END:linking -->
|
|
355
355
|
|
|
356
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
356
|
+
<!-- SW:SECTION:mcp version="1.0.108" -->
|
|
357
357
|
## External Service Connection
|
|
358
358
|
|
|
359
359
|
**Priority**: MCP Server → REST API → CLI → Direct Connection
|
|
@@ -377,7 +377,7 @@ wrangler whoami 2>/dev/null
|
|
|
377
377
|
```
|
|
378
378
|
<!-- SW:END:mcp -->
|
|
379
379
|
|
|
380
|
-
<!-- SW:SECTION:autoexecute version="1.0.
|
|
380
|
+
<!-- SW:SECTION:autoexecute version="1.0.108" -->
|
|
381
381
|
## Auto-Execute Rule
|
|
382
382
|
|
|
383
383
|
**NEVER** output "Manual Step Required" when credentials exist. **EXECUTE DIRECTLY.**
|
|
@@ -391,7 +391,7 @@ wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
|
391
391
|
```
|
|
392
392
|
<!-- SW:END:autoexecute -->
|
|
393
393
|
|
|
394
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
394
|
+
<!-- SW:SECTION:auto version="1.0.108" -->
|
|
395
395
|
## Auto Mode (Autonomous Execution)
|
|
396
396
|
|
|
397
397
|
**Continuous execution until all tasks complete.**
|
|
@@ -468,7 +468,7 @@ wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
|
468
468
|
**Circuit Breaker**: External API fails 3x? Queue & continue
|
|
469
469
|
<!-- SW:END:auto -->
|
|
470
470
|
|
|
471
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
471
|
+
<!-- SW:SECTION:docs version="1.0.108" -->
|
|
472
472
|
## Docs
|
|
473
473
|
|
|
474
474
|
[spec-weave.com](https://spec-weave.com) | `.specweave/docs/internal/`
|
package/bin/specweave.js
CHANGED
|
@@ -485,6 +485,78 @@ program
|
|
|
485
485
|
await cancelCmd.parseAsync(args, { from: 'user' });
|
|
486
486
|
});
|
|
487
487
|
|
|
488
|
+
// Go mode commands - Pure Ralph Wiggum pattern (simpler than auto mode)
|
|
489
|
+
program
|
|
490
|
+
.command('go <prompt>')
|
|
491
|
+
.description('Start go session (Ralph Wiggum pattern) - simple autonomous iteration')
|
|
492
|
+
.option('--max-iterations <n>', 'Maximum iterations (safety net)', '100')
|
|
493
|
+
.option('--completion-promise <text>', 'Exact phrase that signals completion')
|
|
494
|
+
.option('--build', 'Build must pass before completion')
|
|
495
|
+
.option('--tests', 'Tests must pass before completion')
|
|
496
|
+
.option('--e2e', 'E2E tests must pass before completion')
|
|
497
|
+
.option('--lint', 'Linting must pass before completion')
|
|
498
|
+
.option('--types', 'Type-checking must pass before completion')
|
|
499
|
+
.option('--dry-run', 'Preview without starting')
|
|
500
|
+
.action(async (prompt, options) => {
|
|
501
|
+
const path = await import('path');
|
|
502
|
+
const fs = await import('fs');
|
|
503
|
+
const projectPath = process.cwd();
|
|
504
|
+
|
|
505
|
+
// Check if SpecWeave is initialized
|
|
506
|
+
const specweavePath = path.join(projectPath, '.specweave');
|
|
507
|
+
if (!fs.existsSync(specweavePath)) {
|
|
508
|
+
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
509
|
+
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
try {
|
|
514
|
+
const { handleGoCommand } = await import('../dist/src/cli/commands/go.js');
|
|
515
|
+
await handleGoCommand(projectPath, prompt, options);
|
|
516
|
+
} catch (error) {
|
|
517
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
518
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
519
|
+
process.exit(1);
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
program
|
|
524
|
+
.command('go-status')
|
|
525
|
+
.description('Check go session status')
|
|
526
|
+
.option('--verbose', 'Show detailed information')
|
|
527
|
+
.option('--json', 'Output as JSON')
|
|
528
|
+
.action(async (options) => {
|
|
529
|
+
const path = await import('path');
|
|
530
|
+
const projectPath = process.cwd();
|
|
531
|
+
|
|
532
|
+
try {
|
|
533
|
+
const { handleGoStatusCommand } = await import('../dist/src/cli/commands/go-status.js');
|
|
534
|
+
await handleGoStatusCommand(projectPath, options);
|
|
535
|
+
} catch (error) {
|
|
536
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
537
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
538
|
+
process.exit(1);
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
program
|
|
543
|
+
.command('cancel-go')
|
|
544
|
+
.description('Cancel running go session')
|
|
545
|
+
.option('--force', 'Force cancel without confirmation')
|
|
546
|
+
.action(async (options) => {
|
|
547
|
+
const path = await import('path');
|
|
548
|
+
const projectPath = process.cwd();
|
|
549
|
+
|
|
550
|
+
try {
|
|
551
|
+
const { handleCancelGoCommand } = await import('../dist/src/cli/commands/cancel-go.js');
|
|
552
|
+
await handleCancelGoCommand(projectPath, options);
|
|
553
|
+
} catch (error) {
|
|
554
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
555
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
556
|
+
process.exit(1);
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
|
|
488
560
|
// Update instructions command - Smart merge CLAUDE.md/AGENTS.md
|
|
489
561
|
program
|
|
490
562
|
.command('update-instructions')
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancel Go Command - Stop active go session
|
|
3
|
+
*/
|
|
4
|
+
export interface CancelGoOptions {
|
|
5
|
+
force?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleCancelGoCommand(projectPath: string, options: CancelGoOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=cancel-go.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-go.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cancel-go.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAuBD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancel Go Command - Stop active go session
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import readline from 'readline';
|
|
8
|
+
async function askConfirmation() {
|
|
9
|
+
const rl = readline.createInterface({
|
|
10
|
+
input: process.stdin,
|
|
11
|
+
output: process.stdout,
|
|
12
|
+
});
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
rl.question('Continue? (y/n) ', (answer) => {
|
|
15
|
+
rl.close();
|
|
16
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export async function handleCancelGoCommand(projectPath, options) {
|
|
21
|
+
const sessionFile = path.join(projectPath, '.specweave', 'state', 'go-session.json');
|
|
22
|
+
// Check if session exists
|
|
23
|
+
if (!fs.existsSync(sessionFile)) {
|
|
24
|
+
console.log(chalk.yellow('No active go session found.'));
|
|
25
|
+
console.log(chalk.gray('Nothing to cancel.'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Read session state
|
|
29
|
+
const sessionData = JSON.parse(fs.readFileSync(sessionFile, 'utf-8'));
|
|
30
|
+
// Calculate runtime
|
|
31
|
+
const createdTime = new Date(sessionData.createdAt);
|
|
32
|
+
const now = new Date();
|
|
33
|
+
const runtimeMs = now.getTime() - createdTime.getTime();
|
|
34
|
+
const runtimeMinutes = Math.floor(runtimeMs / 60000);
|
|
35
|
+
const runtimeSeconds = Math.floor((runtimeMs % 60000) / 1000);
|
|
36
|
+
const runtime = `${runtimeMinutes}m ${runtimeSeconds}s`;
|
|
37
|
+
// Confirmation (unless force)
|
|
38
|
+
if (!options.force) {
|
|
39
|
+
console.log(chalk.yellow(`Cancel go session: ${sessionData.sessionId}?`));
|
|
40
|
+
console.log(`This will stop the loop after ${sessionData.iteration} iterations (max: ${sessionData.maxIterations}).`);
|
|
41
|
+
console.log('');
|
|
42
|
+
const confirmed = await askConfirmation();
|
|
43
|
+
if (!confirmed) {
|
|
44
|
+
console.log('Cancelled.');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Delete session file
|
|
49
|
+
fs.unlinkSync(sessionFile);
|
|
50
|
+
// Success message
|
|
51
|
+
console.log(chalk.green(`✅ Go session cancelled: ${sessionData.sessionId}`));
|
|
52
|
+
console.log(` Iterations completed: ${sessionData.iteration} / ${sessionData.maxIterations}`);
|
|
53
|
+
console.log(` Runtime: ${runtime}`);
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(' Logs saved to:', chalk.gray('.specweave/logs/go-iterations.log'));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=cancel-go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-go.js","sourceRoot":"","sources":["../../../../src/cli/commands/cancel-go.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Status Command - Check go session status
|
|
3
|
+
*/
|
|
4
|
+
export interface GoStatusOptions {
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function handleGoStatusCommand(projectPath: string, options: GoStatusOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=go-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/go-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAoBD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Status Command - Check go session status
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
export async function handleGoStatusCommand(projectPath, options) {
|
|
8
|
+
const sessionFile = path.join(projectPath, '.specweave', 'state', 'go-session.json');
|
|
9
|
+
// Check if session exists
|
|
10
|
+
if (!fs.existsSync(sessionFile)) {
|
|
11
|
+
console.log(chalk.yellow('No active go session found.'));
|
|
12
|
+
console.log(chalk.gray('Run /sw:go "PROMPT" to start a session.'));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// Read session state
|
|
16
|
+
const sessionData = JSON.parse(fs.readFileSync(sessionFile, 'utf-8'));
|
|
17
|
+
// Calculate runtime
|
|
18
|
+
const createdTime = new Date(sessionData.createdAt);
|
|
19
|
+
const now = new Date();
|
|
20
|
+
const runtimeMs = now.getTime() - createdTime.getTime();
|
|
21
|
+
const runtimeMinutes = Math.floor(runtimeMs / 60000);
|
|
22
|
+
const runtimeSeconds = Math.floor((runtimeMs % 60000) / 1000);
|
|
23
|
+
const runtime = `${runtimeMinutes}m ${runtimeSeconds}s`;
|
|
24
|
+
// JSON output
|
|
25
|
+
if (options.json) {
|
|
26
|
+
const output = {
|
|
27
|
+
sessionId: sessionData.sessionId,
|
|
28
|
+
status: sessionData.status,
|
|
29
|
+
iteration: sessionData.iteration,
|
|
30
|
+
maxIterations: sessionData.maxIterations,
|
|
31
|
+
completionPromise: sessionData.completionPromise || null,
|
|
32
|
+
conditions: sessionData.conditions,
|
|
33
|
+
createdAt: sessionData.createdAt,
|
|
34
|
+
completedAt: sessionData.completedAt || null,
|
|
35
|
+
runtime,
|
|
36
|
+
};
|
|
37
|
+
console.log(JSON.stringify(output, null, 2));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Pretty output
|
|
41
|
+
console.log('━'.repeat(70));
|
|
42
|
+
console.log(chalk.bold(' Go Session Status'));
|
|
43
|
+
console.log('━'.repeat(70));
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(`Session ID: ${chalk.cyan(sessionData.sessionId)}`);
|
|
46
|
+
// Status with color
|
|
47
|
+
let statusColor = chalk.yellow;
|
|
48
|
+
if (sessionData.status === 'completed')
|
|
49
|
+
statusColor = chalk.green;
|
|
50
|
+
else if (sessionData.status === 'max_iterations_reached')
|
|
51
|
+
statusColor = chalk.red;
|
|
52
|
+
console.log(`Status: ${statusColor(sessionData.status)}`);
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log(`Iteration: ${chalk.bold(sessionData.iteration.toString())} / ${sessionData.maxIterations}`);
|
|
55
|
+
console.log(`Runtime: ${runtime}`);
|
|
56
|
+
console.log('');
|
|
57
|
+
if (sessionData.completionPromise) {
|
|
58
|
+
console.log(`Completion Promise: ${chalk.green(`"${sessionData.completionPromise}"`)}`);
|
|
59
|
+
}
|
|
60
|
+
// Quality gates
|
|
61
|
+
const gates = [];
|
|
62
|
+
if (sessionData.conditions.build)
|
|
63
|
+
gates.push('Build');
|
|
64
|
+
if (sessionData.conditions.tests)
|
|
65
|
+
gates.push('Tests');
|
|
66
|
+
if (sessionData.conditions.e2e)
|
|
67
|
+
gates.push('E2E');
|
|
68
|
+
if (sessionData.conditions.lint)
|
|
69
|
+
gates.push('Lint');
|
|
70
|
+
if (sessionData.conditions.types)
|
|
71
|
+
gates.push('Types');
|
|
72
|
+
if (gates.length > 0) {
|
|
73
|
+
console.log(`Quality Gates: ${chalk.cyan(gates.join(', '))}`);
|
|
74
|
+
}
|
|
75
|
+
console.log('');
|
|
76
|
+
// Verbose output
|
|
77
|
+
if (options.verbose) {
|
|
78
|
+
console.log('━'.repeat(70));
|
|
79
|
+
console.log(chalk.bold(' Details'));
|
|
80
|
+
console.log('━'.repeat(70));
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log('Prompt:');
|
|
83
|
+
console.log(` ${sessionData.prompt}`);
|
|
84
|
+
console.log('');
|
|
85
|
+
console.log(`Created: ${sessionData.createdAt}`);
|
|
86
|
+
if (sessionData.completedAt) {
|
|
87
|
+
console.log(`Completed: ${sessionData.completedAt}`);
|
|
88
|
+
}
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log('Log file:');
|
|
91
|
+
console.log(` ${path.join(projectPath, '.specweave', 'logs', 'go-iterations.log')}`);
|
|
92
|
+
console.log('');
|
|
93
|
+
}
|
|
94
|
+
console.log('━'.repeat(70));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=go-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-status.js","sourceRoot":"","sources":["../../../../src/cli/commands/go-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Command - Ralph Wiggum pattern for autonomous iteration
|
|
3
|
+
*
|
|
4
|
+
* Pure loop execution:
|
|
5
|
+
* - Same prompt every iteration
|
|
6
|
+
* - Claude sees previous work (files, tests, git history)
|
|
7
|
+
* - Loop until completion promise OR max iterations
|
|
8
|
+
*/
|
|
9
|
+
export interface GoOptions {
|
|
10
|
+
maxIterations?: number;
|
|
11
|
+
completionPromise?: string;
|
|
12
|
+
build?: boolean;
|
|
13
|
+
tests?: boolean;
|
|
14
|
+
e2e?: boolean;
|
|
15
|
+
lint?: boolean;
|
|
16
|
+
types?: boolean;
|
|
17
|
+
dryRun?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function handleGoCommand(projectPath: string, prompt: string, options: GoOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=go.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/go.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,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,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Command - Ralph Wiggum pattern for autonomous iteration
|
|
3
|
+
*
|
|
4
|
+
* Pure loop execution:
|
|
5
|
+
* - Same prompt every iteration
|
|
6
|
+
* - Claude sees previous work (files, tests, git history)
|
|
7
|
+
* - Loop until completion promise OR max iterations
|
|
8
|
+
*/
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { exec } from 'child_process';
|
|
12
|
+
import { promisify } from 'util';
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
const execAsync = promisify(exec);
|
|
16
|
+
export async function handleGoCommand(projectPath, prompt, options) {
|
|
17
|
+
// Build arguments for setup-go.sh
|
|
18
|
+
const args = [];
|
|
19
|
+
// Add prompt (quoted)
|
|
20
|
+
args.push(`"${prompt.replace(/"/g, '\\"')}"`);
|
|
21
|
+
// Add options
|
|
22
|
+
if (options.maxIterations) {
|
|
23
|
+
args.push('--max-iterations', options.maxIterations.toString());
|
|
24
|
+
}
|
|
25
|
+
if (options.completionPromise) {
|
|
26
|
+
args.push('--completion-promise', `"${options.completionPromise.replace(/"/g, '\\"')}"`);
|
|
27
|
+
}
|
|
28
|
+
if (options.build)
|
|
29
|
+
args.push('--build');
|
|
30
|
+
if (options.tests)
|
|
31
|
+
args.push('--tests');
|
|
32
|
+
if (options.e2e)
|
|
33
|
+
args.push('--e2e');
|
|
34
|
+
if (options.lint)
|
|
35
|
+
args.push('--lint');
|
|
36
|
+
if (options.types)
|
|
37
|
+
args.push('--types');
|
|
38
|
+
if (options.dryRun)
|
|
39
|
+
args.push('--dry-run');
|
|
40
|
+
// Find setup-go.sh script
|
|
41
|
+
// __dirname is in dist/src/cli/commands, script is in plugins/specweave/scripts
|
|
42
|
+
const scriptPath = path.join(__dirname, '../../../../plugins/specweave/scripts/setup-go.sh');
|
|
43
|
+
// Execute setup script
|
|
44
|
+
const command = `bash "${scriptPath}" ${args.join(' ')}`;
|
|
45
|
+
try {
|
|
46
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
47
|
+
cwd: projectPath,
|
|
48
|
+
env: { ...process.env, PROJECT_ROOT: projectPath },
|
|
49
|
+
});
|
|
50
|
+
if (stdout)
|
|
51
|
+
console.log(stdout);
|
|
52
|
+
if (stderr)
|
|
53
|
+
console.error(stderr);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Script exited with non-zero code
|
|
57
|
+
if (error.stdout)
|
|
58
|
+
console.log(error.stdout);
|
|
59
|
+
if (error.stderr)
|
|
60
|
+
console.error(error.stderr);
|
|
61
|
+
throw new Error(`Go session failed to start: ${error.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../src/cli/commands/go.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAalC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,MAAc,EACd,OAAkB;IAElB,kCAAkC;IAClC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,sBAAsB;IACtB,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,cAAc;IACd,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,GAAG;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,gFAAgF;IAChF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;IAE7F,uBAAuB;IACvB,MAAM,OAAO,GAAG,SAAS,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE;YAClD,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;SACnD,CAAC,CAAC;QAEH,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,mCAAmC;QACnC,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.109",
|
|
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",
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
name: sw:auto
|
|
3
3
|
description: Start autonomous execution session with stop hook integration. Works until all tasks complete or max iterations reached. Uses Ralph Wiggum pattern with SpecWeave workflow integration. Activates for: auto, autonomous, auto mode, ship while sleeping.
|
|
4
4
|
argument-hint: "[INCREMENT_IDS...] [OPTIONS]"
|
|
5
|
-
allowed-tools: ["Bash(
|
|
5
|
+
allowed-tools: ["Bash(specweave auto *)"]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Auto Command
|
|
9
9
|
|
|
10
10
|
**Start autonomous execution session using Claude Code's Stop Hook.**
|
|
11
11
|
|
|
12
|
-
Execute the
|
|
12
|
+
Execute the auto command to initialize auto mode:
|
|
13
13
|
|
|
14
14
|
```!
|
|
15
|
-
|
|
15
|
+
specweave auto $ARGUMENTS
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Now work on the increment tasks. When you try to exit, the stop hook will check completion conditions and feed the next task back to you. Continue until all tasks are complete and quality gates pass.
|
|
@@ -432,7 +432,7 @@ Analyze & Show Plan
|
|
|
432
432
|
1. User runs /sw:auto (with or without IDs)
|
|
433
433
|
│
|
|
434
434
|
▼
|
|
435
|
-
2.
|
|
435
|
+
2. specweave auto command creates session state
|
|
436
436
|
└─ .specweave/state/auto-session.json
|
|
437
437
|
│
|
|
438
438
|
▼
|
|
@@ -1384,7 +1384,7 @@ All tests pass locally. Where should I deploy?
|
|
|
1384
1384
|
|
|
1385
1385
|
When this command is invoked:
|
|
1386
1386
|
|
|
1387
|
-
### Step 1: MANDATORY - Run
|
|
1387
|
+
### Step 1: MANDATORY - Run specweave auto (DO THIS FIRST!)
|
|
1388
1388
|
|
|
1389
1389
|
**Execute this IMMEDIATELY when /sw:auto is invoked:**
|
|
1390
1390
|
|
|
@@ -1401,9 +1401,9 @@ Pass any arguments from the user (increment IDs, completion conditions, --max-it
|
|
|
1401
1401
|
- `1`: Error (no increments found with --no-increment/--no-inc) → STOP
|
|
1402
1402
|
- `2`: **Increment creation needed** → proceed to Step 2
|
|
1403
1403
|
|
|
1404
|
-
### Step 2: INTELLIGENT INCREMENT CREATION (if
|
|
1404
|
+
### Step 2: INTELLIGENT INCREMENT CREATION (if specweave auto exits with code 2)
|
|
1405
1405
|
|
|
1406
|
-
**When
|
|
1406
|
+
**When specweave auto signals increment creation needed:**
|
|
1407
1407
|
|
|
1408
1408
|
1. **Check marker file:**
|
|
1409
1409
|
```bash
|