specweave 1.0.70 → 1.0.72
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 +36 -0
- package/dist/src/cli/helpers/init/language-selection.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/language-selection.js +11 -13
- package/dist/src/cli/helpers/init/language-selection.js.map +1 -1
- package/dist/src/core/auto/e2e-coverage.d.ts +248 -0
- package/dist/src/core/auto/e2e-coverage.d.ts.map +1 -0
- package/dist/src/core/auto/e2e-coverage.js +871 -0
- package/dist/src/core/auto/e2e-coverage.js.map +1 -0
- package/dist/src/core/auto/increment-planner.js +7 -1
- package/dist/src/core/auto/increment-planner.js.map +1 -1
- package/dist/src/core/auto/index.d.ts +4 -0
- package/dist/src/core/auto/index.d.ts.map +1 -1
- package/dist/src/core/auto/index.js +8 -0
- package/dist/src/core/auto/index.js.map +1 -1
- package/dist/src/core/auto/plan-approval.d.ts +104 -0
- package/dist/src/core/auto/plan-approval.d.ts.map +1 -0
- package/dist/src/core/auto/plan-approval.js +361 -0
- package/dist/src/core/auto/plan-approval.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/auto.md +86 -0
- package/plugins/specweave/hooks/lib/resolve-package.sh +126 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +47 -3
- package/plugins/specweave/hooks/stop-auto.sh +119 -0
- package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +8 -0
- package/plugins/specweave/hooks/v2/handlers/living-docs-handler.sh +10 -3
- package/plugins/specweave/hooks/v2/handlers/living-specs-handler.sh +18 -7
- package/plugins/specweave/hooks/v2/handlers/project-bridge-handler.sh +10 -3
- package/plugins/specweave/hooks/v2/session-end.sh +50 -2
- package/plugins/specweave/hooks/v2/session-start.sh +68 -4
- package/plugins/specweave/scripts/chunk-prompt.js +204 -0
- package/plugins/specweave/scripts/setup-auto.sh +66 -0
package/bin/specweave.js
CHANGED
|
@@ -157,6 +157,42 @@ const __dirname = dirname(__filename);
|
|
|
157
157
|
const require = createRequire(import.meta.url);
|
|
158
158
|
const packageJson = require('../package.json');
|
|
159
159
|
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// DEVELOPMENT GUARD: Check if dist/ is built (prevents silent hangs)
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// This only matters for developers running from source. NPM users always get
|
|
164
|
+
// a pre-built package via prepublishOnly hook.
|
|
165
|
+
// ============================================================================
|
|
166
|
+
import { existsSync } from 'fs';
|
|
167
|
+
import { join } from 'path';
|
|
168
|
+
|
|
169
|
+
const distCliPath = join(__dirname, '..', 'dist', 'src', 'cli', 'commands', 'init.js');
|
|
170
|
+
const isDevEnvironment = existsSync(join(__dirname, '..', 'tsconfig.json'));
|
|
171
|
+
|
|
172
|
+
if (isDevEnvironment && !existsSync(distCliPath)) {
|
|
173
|
+
const RED = '\x1b[31m';
|
|
174
|
+
const YELLOW = '\x1b[33m';
|
|
175
|
+
const CYAN = '\x1b[36m';
|
|
176
|
+
const BOLD = '\x1b[1m';
|
|
177
|
+
const RESET = '\x1b[0m';
|
|
178
|
+
const DIM = '\x1b[2m';
|
|
179
|
+
|
|
180
|
+
console.error('');
|
|
181
|
+
console.error(`${RED}${BOLD}╔══════════════════════════════════════════════════════════════════╗${RESET}`);
|
|
182
|
+
console.error(`${RED}${BOLD}║ SpecWeave is not built! Run: npm run rebuild ║${RESET}`);
|
|
183
|
+
console.error(`${RED}${BOLD}╚══════════════════════════════════════════════════════════════════╝${RESET}`);
|
|
184
|
+
console.error('');
|
|
185
|
+
console.error(`${YELLOW} Missing:${RESET} ${DIM}dist/src/cli/commands/init.js${RESET}`);
|
|
186
|
+
console.error('');
|
|
187
|
+
console.error(`${BOLD}Quick fix:${RESET}`);
|
|
188
|
+
console.error(` ${CYAN}npm run rebuild${RESET}`);
|
|
189
|
+
console.error('');
|
|
190
|
+
console.error(`${DIM} This happens when 'npm run clean' runs without 'npm run build'.${RESET}`);
|
|
191
|
+
console.error(`${DIM} NPM users never see this - packages are pre-built before publish.${RESET}`);
|
|
192
|
+
console.error('');
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
|
|
160
196
|
const program = new Command();
|
|
161
197
|
|
|
162
198
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-selection.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/language-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,sEAAsE;IACtE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,+CAA+C;IAC/C,oBAAoB,EAAE,OAAO,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"language-selection.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/language-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,sEAAsE;IACtE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,+CAA+C;IAC/C,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AA8LD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAarE;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,GAAE,OAAe,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAqFlC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,GAAE,iBAAwB,GAAG,uBAAuB,CAMvG"}
|
|
@@ -12,22 +12,20 @@ import { getLocaleManager, resetLocaleManager } from '../../../core/i18n/locale-
|
|
|
12
12
|
/**
|
|
13
13
|
* Get language display info with native names
|
|
14
14
|
*
|
|
15
|
-
* NOTE:
|
|
16
|
-
*
|
|
17
|
-
* especially on Windows, older Linux terminals, and some IDE integrated terminals.
|
|
18
|
-
* Text identifiers work consistently across all platforms.
|
|
15
|
+
* NOTE: Flag emojis render as 2-letter ISO country codes (GB, ES, etc.) on some terminals.
|
|
16
|
+
* This is acceptable - the codes are intuitive and provide visual distinction.
|
|
19
17
|
*/
|
|
20
18
|
function getLanguageChoices() {
|
|
21
19
|
return [
|
|
22
|
-
{ name: 'English', value: 'en' },
|
|
23
|
-
{ name: 'Español (Spanish)', value: 'es' },
|
|
24
|
-
{ name: '中文 (Chinese)', value: 'zh' },
|
|
25
|
-
{ name: 'Deutsch (German)', value: 'de' },
|
|
26
|
-
{ name: 'Русский (Russian)', value: 'ru' },
|
|
27
|
-
{ name: 'Français (French)', value: 'fr' },
|
|
28
|
-
{ name: '日本語 (Japanese)', value: 'ja' },
|
|
29
|
-
{ name: '한국어 (Korean)', value: 'ko' },
|
|
30
|
-
{ name: 'Português (Portuguese)', value: 'pt' },
|
|
20
|
+
{ name: '🇬🇧 English', value: 'en' },
|
|
21
|
+
{ name: '🇪🇸 Español (Spanish)', value: 'es' },
|
|
22
|
+
{ name: '🇨🇳 中文 (Chinese)', value: 'zh' },
|
|
23
|
+
{ name: '🇩🇪 Deutsch (German)', value: 'de' },
|
|
24
|
+
{ name: '🇷🇺 Русский (Russian)', value: 'ru' },
|
|
25
|
+
{ name: '🇫🇷 Français (French)', value: 'fr' },
|
|
26
|
+
{ name: '🇯🇵 日本語 (Japanese)', value: 'ja' },
|
|
27
|
+
{ name: '🇰🇷 한국어 (Korean)', value: 'ko' },
|
|
28
|
+
{ name: '🇧🇷 Português (Portuguese)', value: 'pt' },
|
|
31
29
|
];
|
|
32
30
|
}
|
|
33
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-selection.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/language-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAc5F
|
|
1
|
+
{"version":3,"file":"language-selection.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/language-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2E Coverage Manifest
|
|
3
|
+
*
|
|
4
|
+
* Tracks which routes, actions, and viewports have E2E test coverage.
|
|
5
|
+
* Auto-generates manifest from project routes (Next.js, React Router, etc.).
|
|
6
|
+
*
|
|
7
|
+
* @module e2e-coverage
|
|
8
|
+
*/
|
|
9
|
+
export interface RouteEntry {
|
|
10
|
+
path: string;
|
|
11
|
+
tested: boolean;
|
|
12
|
+
viewports: string[];
|
|
13
|
+
lastTested?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ActionEntry {
|
|
16
|
+
id: string;
|
|
17
|
+
description: string;
|
|
18
|
+
tested: boolean;
|
|
19
|
+
lastTested?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ViewportsCovered {
|
|
22
|
+
mobile: boolean;
|
|
23
|
+
tablet: boolean;
|
|
24
|
+
desktop: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface CoverageStats {
|
|
27
|
+
routes: number;
|
|
28
|
+
actions: number;
|
|
29
|
+
viewports: number;
|
|
30
|
+
}
|
|
31
|
+
export interface E2ECoverageManifest {
|
|
32
|
+
version: string;
|
|
33
|
+
generatedAt: string;
|
|
34
|
+
framework?: string;
|
|
35
|
+
routes: Record<string, RouteEntry>;
|
|
36
|
+
criticalActions: Record<string, ActionEntry>;
|
|
37
|
+
viewportsCovered: ViewportsCovered;
|
|
38
|
+
coverage: CoverageStats;
|
|
39
|
+
}
|
|
40
|
+
export type FrameworkType = 'nextjs-pages' | 'nextjs-app' | 'react-router' | 'vue-router' | 'svelte-kit' | 'remix' | 'unknown';
|
|
41
|
+
/**
|
|
42
|
+
* Default viewports for responsive testing
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_VIEWPORTS: {
|
|
45
|
+
mobile: {
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
};
|
|
49
|
+
tablet: {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
};
|
|
53
|
+
desktop: {
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Detect which frontend framework is being used
|
|
60
|
+
*
|
|
61
|
+
* @param projectPath - Project root path
|
|
62
|
+
* @returns Detected framework type
|
|
63
|
+
*/
|
|
64
|
+
export declare function detectFramework(projectPath: string): FrameworkType;
|
|
65
|
+
/**
|
|
66
|
+
* Extract routes from project based on detected framework
|
|
67
|
+
*
|
|
68
|
+
* @param projectPath - Project root path
|
|
69
|
+
* @param framework - Optional framework override
|
|
70
|
+
* @returns Array of route paths
|
|
71
|
+
*/
|
|
72
|
+
export declare function extractRoutes(projectPath: string, framework?: FrameworkType): string[];
|
|
73
|
+
/**
|
|
74
|
+
* Load manual routes override from routes.json
|
|
75
|
+
*/
|
|
76
|
+
export declare function loadManualRoutes(projectPath: string): string[] | null;
|
|
77
|
+
/**
|
|
78
|
+
* Generate E2E coverage manifest
|
|
79
|
+
*
|
|
80
|
+
* @param projectPath - Project root path
|
|
81
|
+
* @param options - Generation options
|
|
82
|
+
* @returns Generated manifest
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const manifest = generateCoverageManifest('/path/to/project');
|
|
87
|
+
* console.log(manifest.coverage.routes); // Coverage percentage
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function generateCoverageManifest(projectPath: string, options?: {
|
|
91
|
+
framework?: FrameworkType;
|
|
92
|
+
includeActions?: boolean;
|
|
93
|
+
}): E2ECoverageManifest;
|
|
94
|
+
/**
|
|
95
|
+
* Save manifest to state directory
|
|
96
|
+
*/
|
|
97
|
+
export declare function saveManifest(projectPath: string, manifest: E2ECoverageManifest): void;
|
|
98
|
+
/**
|
|
99
|
+
* Load existing manifest from state directory
|
|
100
|
+
*/
|
|
101
|
+
export declare function loadManifest(projectPath: string): E2ECoverageManifest | null;
|
|
102
|
+
/**
|
|
103
|
+
* Update route coverage in manifest
|
|
104
|
+
*/
|
|
105
|
+
export declare function updateRouteCoverage(manifest: E2ECoverageManifest, route: string, viewports?: string[]): E2ECoverageManifest;
|
|
106
|
+
/**
|
|
107
|
+
* Calculate coverage statistics
|
|
108
|
+
*/
|
|
109
|
+
export declare function calculateCoverage(manifest: E2ECoverageManifest): CoverageStats;
|
|
110
|
+
/**
|
|
111
|
+
* Get untested routes
|
|
112
|
+
*/
|
|
113
|
+
export declare function getUntestedRoutes(manifest: E2ECoverageManifest): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Get routes missing viewport coverage
|
|
116
|
+
*/
|
|
117
|
+
export declare function getRoutesWithMissingViewports(manifest: E2ECoverageManifest): {
|
|
118
|
+
route: string;
|
|
119
|
+
missingViewports: string[];
|
|
120
|
+
}[];
|
|
121
|
+
/**
|
|
122
|
+
* Route visit detected in test output
|
|
123
|
+
*/
|
|
124
|
+
export interface RouteVisit {
|
|
125
|
+
route: string;
|
|
126
|
+
viewport?: string;
|
|
127
|
+
timestamp?: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Result of parsing test output for route visits
|
|
131
|
+
*/
|
|
132
|
+
export interface RouteTrackingResult {
|
|
133
|
+
visits: RouteVisit[];
|
|
134
|
+
manifest: E2ECoverageManifest;
|
|
135
|
+
newlyTested: string[];
|
|
136
|
+
viewportUpdates: {
|
|
137
|
+
route: string;
|
|
138
|
+
viewport: string;
|
|
139
|
+
}[];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Parse Playwright test output to extract visited routes
|
|
143
|
+
*
|
|
144
|
+
* Looks for patterns like:
|
|
145
|
+
* - page.goto('http://localhost:3000/login')
|
|
146
|
+
* - await page.goto('/dashboard')
|
|
147
|
+
* - navigating to "http://localhost:3000/products"
|
|
148
|
+
* - → /api/users (XHR) - skip API routes
|
|
149
|
+
*
|
|
150
|
+
* @param output - Test output (stdout/stderr combined)
|
|
151
|
+
* @param baseUrl - Optional base URL to normalize routes
|
|
152
|
+
* @returns Array of route visits
|
|
153
|
+
*/
|
|
154
|
+
export declare function parseRouteVisits(output: string, baseUrl?: string): RouteVisit[];
|
|
155
|
+
/**
|
|
156
|
+
* Match a visited route against manifest routes (handling dynamic segments)
|
|
157
|
+
*
|
|
158
|
+
* @param visitedRoute - The actual route visited (e.g., "/products/123")
|
|
159
|
+
* @param manifestRoutes - Routes in manifest (may include :params like "/products/:id")
|
|
160
|
+
* @returns Matched manifest route or null
|
|
161
|
+
*/
|
|
162
|
+
export declare function matchRouteToManifest(visitedRoute: string, manifestRoutes: string[]): string | null;
|
|
163
|
+
/**
|
|
164
|
+
* Track route coverage from test output
|
|
165
|
+
*
|
|
166
|
+
* Parses test output, extracts route visits, and updates manifest.
|
|
167
|
+
*
|
|
168
|
+
* @param projectPath - Project root path
|
|
169
|
+
* @param testOutput - Raw test output
|
|
170
|
+
* @param options - Tracking options
|
|
171
|
+
* @returns Tracking result with updated manifest
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const result = trackRouteCoverage('/path/to/project', testOutput);
|
|
176
|
+
* console.log(`Tested ${result.newlyTested.length} new routes`);
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export declare function trackRouteCoverage(projectPath: string, testOutput: string, options?: {
|
|
180
|
+
baseUrl?: string;
|
|
181
|
+
viewport?: string;
|
|
182
|
+
}): RouteTrackingResult;
|
|
183
|
+
/**
|
|
184
|
+
* Parse viewport from Playwright project name
|
|
185
|
+
*
|
|
186
|
+
* @param projectName - Playwright project name from config or output
|
|
187
|
+
* @returns Normalized viewport name
|
|
188
|
+
*/
|
|
189
|
+
export declare function parseViewportFromProject(projectName: string): string;
|
|
190
|
+
/**
|
|
191
|
+
* Generate coverage report from manifest
|
|
192
|
+
*
|
|
193
|
+
* @param manifest - E2E coverage manifest
|
|
194
|
+
* @returns Formatted coverage report
|
|
195
|
+
*/
|
|
196
|
+
/**
|
|
197
|
+
* Playwright project/viewport configuration
|
|
198
|
+
*/
|
|
199
|
+
export interface PlaywrightViewportConfig {
|
|
200
|
+
projects: PlaywrightProject[];
|
|
201
|
+
viewports: {
|
|
202
|
+
mobile: boolean;
|
|
203
|
+
tablet: boolean;
|
|
204
|
+
desktop: boolean;
|
|
205
|
+
};
|
|
206
|
+
configPath?: string;
|
|
207
|
+
}
|
|
208
|
+
export interface PlaywrightProject {
|
|
209
|
+
name: string;
|
|
210
|
+
viewport: string;
|
|
211
|
+
width?: number;
|
|
212
|
+
height?: number;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Parse Playwright config to extract viewport/project configuration
|
|
216
|
+
*
|
|
217
|
+
* @param projectPath - Project root path
|
|
218
|
+
* @returns Parsed viewport configuration
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* const config = parsePlaywrightConfig('/path/to/project');
|
|
223
|
+
* console.log(config.viewports.mobile); // true if mobile viewport configured
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
export declare function parsePlaywrightConfig(projectPath: string): PlaywrightViewportConfig;
|
|
227
|
+
/**
|
|
228
|
+
* Get required viewports from config or defaults
|
|
229
|
+
*
|
|
230
|
+
* @param projectPath - Project root path
|
|
231
|
+
* @returns Array of required viewport names
|
|
232
|
+
*/
|
|
233
|
+
export declare function getRequiredViewports(projectPath: string): string[];
|
|
234
|
+
/**
|
|
235
|
+
* Check if viewport coverage meets requirements
|
|
236
|
+
*
|
|
237
|
+
* @param manifest - E2E coverage manifest
|
|
238
|
+
* @param projectPath - Project root path
|
|
239
|
+
* @returns Coverage check result
|
|
240
|
+
*/
|
|
241
|
+
export declare function checkViewportCoverage(manifest: E2ECoverageManifest, projectPath: string): {
|
|
242
|
+
complete: boolean;
|
|
243
|
+
required: string[];
|
|
244
|
+
covered: string[];
|
|
245
|
+
missing: string[];
|
|
246
|
+
};
|
|
247
|
+
export declare function generateCoverageReport(manifest: E2ECoverageManifest): string;
|
|
248
|
+
//# sourceMappingURL=e2e-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-coverage.d.ts","sourceRoot":"","sources":["../../../../src/core/auto/e2e-coverage.ts"],"names":[],"mappings":"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"}
|