popeye-cli 1.4.1 → 1.4.2
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/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +6 -0
- package/dist/adapters/claude.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +82 -5
- package/dist/cli/interactive.js.map +1 -1
- package/dist/types/workflow.d.ts +12 -0
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/types/workflow.js +4 -0
- package/dist/types/workflow.js.map +1 -1
- package/dist/workflow/auto-fix.d.ts +17 -1
- package/dist/workflow/auto-fix.d.ts.map +1 -1
- package/dist/workflow/auto-fix.js +97 -16
- package/dist/workflow/auto-fix.js.map +1 -1
- package/dist/workflow/execution-mode.d.ts +24 -0
- package/dist/workflow/execution-mode.d.ts.map +1 -1
- package/dist/workflow/execution-mode.js +292 -19
- package/dist/workflow/execution-mode.js.map +1 -1
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/milestone-workflow.d.ts.map +1 -1
- package/dist/workflow/milestone-workflow.js +63 -3
- package/dist/workflow/milestone-workflow.js.map +1 -1
- package/dist/workflow/project-structure.d.ts +29 -0
- package/dist/workflow/project-structure.d.ts.map +1 -0
- package/dist/workflow/project-structure.js +193 -0
- package/dist/workflow/project-structure.js.map +1 -0
- package/dist/workflow/project-verification.d.ts +24 -1
- package/dist/workflow/project-verification.d.ts.map +1 -1
- package/dist/workflow/project-verification.js +105 -22
- package/dist/workflow/project-verification.js.map +1 -1
- package/dist/workflow/remediation.d.ts +124 -0
- package/dist/workflow/remediation.d.ts.map +1 -0
- package/dist/workflow/remediation.js +510 -0
- package/dist/workflow/remediation.js.map +1 -0
- package/dist/workflow/task-workflow.d.ts.map +1 -1
- package/dist/workflow/task-workflow.js +202 -4
- package/dist/workflow/task-workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/claude.ts +6 -0
- package/src/cli/interactive.ts +85 -5
- package/src/types/workflow.ts +9 -0
- package/src/workflow/auto-fix.ts +123 -18
- package/src/workflow/execution-mode.ts +364 -20
- package/src/workflow/index.ts +1 -0
- package/src/workflow/milestone-workflow.ts +80 -3
- package/src/workflow/project-structure.ts +233 -0
- package/src/workflow/project-verification.ts +128 -21
- package/src/workflow/remediation.ts +711 -0
- package/src/workflow/task-workflow.ts +237 -4
- package/tests/workflow/auto-fix-enhanced.test.ts +351 -0
- package/tests/workflow/project-structure.test.ts +131 -0
- package/tests/workflow/project-verification.test.ts +130 -0
- package/tests/workflow/remediation.test.ts +238 -0
|
@@ -9,6 +9,7 @@ import { loadProject, updateState, } from '../state/index.js';
|
|
|
9
9
|
import { iterateUntilConsensus } from './consensus.js';
|
|
10
10
|
import { runTaskWorkflow } from './task-workflow.js';
|
|
11
11
|
import { parsePlanMilestones } from './plan-mode.js';
|
|
12
|
+
import { attemptRemediation, MAX_REMEDIATION_ATTEMPTS } from './remediation.js';
|
|
12
13
|
/**
|
|
13
14
|
* Update milestone in state
|
|
14
15
|
*/
|
|
@@ -347,9 +348,68 @@ Tasks: ${milestone.tasks.length}
|
|
|
347
348
|
error: `Task "${task.name}" paused due to rate limit. Run /resume to continue.`,
|
|
348
349
|
};
|
|
349
350
|
}
|
|
350
|
-
// Actual failure
|
|
351
|
-
|
|
352
|
-
|
|
351
|
+
// Actual failure - check if it's a rate limit masquerading as a failure
|
|
352
|
+
const isRateLimitFailure = taskResult.error &&
|
|
353
|
+
/rate.limit|rate_limit|too many requests|quota exceeded/i.test(taskResult.error);
|
|
354
|
+
if (isRateLimitFailure) {
|
|
355
|
+
onProgress?.('milestone-tasks', `Task failed due to rate limit: ${task.name} - pausing instead of remediating`);
|
|
356
|
+
state = await updateMilestoneInState(projectDir, milestone.id, {
|
|
357
|
+
status: 'paused',
|
|
358
|
+
});
|
|
359
|
+
return {
|
|
360
|
+
success: false,
|
|
361
|
+
milestone: { ...milestone, status: 'paused' },
|
|
362
|
+
planConsensus,
|
|
363
|
+
taskResults,
|
|
364
|
+
rateLimitPaused: true,
|
|
365
|
+
error: `Task "${task.name}" hit rate limit. Run /resume to continue.`,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
// Attempt remediation before giving up
|
|
369
|
+
// Reload task from state to get current remediationAttempts
|
|
370
|
+
const latestState = await loadProject(projectDir);
|
|
371
|
+
const latestMilestone = latestState.milestones.find(m => m.id === milestone.id);
|
|
372
|
+
const latestTask = latestMilestone?.tasks.find(t => t.id === task.id);
|
|
373
|
+
const remediationAttempts = latestTask?.remediationAttempts || 0;
|
|
374
|
+
if (remediationAttempts < MAX_REMEDIATION_ATTEMPTS) {
|
|
375
|
+
onProgress?.('milestone-tasks', `Task failed: ${task.name} - attempting remediation (${remediationAttempts + 1}/${MAX_REMEDIATION_ATTEMPTS})`);
|
|
376
|
+
const remediationResult = await attemptRemediation(milestone, task, taskResult, {
|
|
377
|
+
projectDir,
|
|
378
|
+
consensusConfig,
|
|
379
|
+
onProgress,
|
|
380
|
+
});
|
|
381
|
+
// Handle rate limit pause during remediation
|
|
382
|
+
if (remediationResult.rateLimitPaused) {
|
|
383
|
+
onProgress?.('milestone-tasks', `Remediation paused (rate limit): ${task.name}`);
|
|
384
|
+
state = await updateMilestoneInState(projectDir, milestone.id, {
|
|
385
|
+
status: 'paused',
|
|
386
|
+
});
|
|
387
|
+
return {
|
|
388
|
+
success: false,
|
|
389
|
+
milestone: { ...milestone, status: 'paused' },
|
|
390
|
+
planConsensus,
|
|
391
|
+
taskResults,
|
|
392
|
+
rateLimitPaused: true,
|
|
393
|
+
error: `Remediation for "${task.name}" paused due to rate limit. Run /resume to continue.`,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
// If remediation succeeded, replace the failed result and continue
|
|
397
|
+
if (remediationResult.success && remediationResult.taskResult) {
|
|
398
|
+
onProgress?.('milestone-tasks', `Remediation successful for: ${task.name}`);
|
|
399
|
+
// Replace the failed result with the successful one
|
|
400
|
+
taskResults[taskResults.length - 1] = remediationResult.taskResult;
|
|
401
|
+
onTaskComplete?.(task, true);
|
|
402
|
+
// Continue to next task
|
|
403
|
+
onProgress?.('milestone-tasks', `Task complete (after remediation): ${task.name}`);
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
// Remediation failed - fall through to milestone failure
|
|
407
|
+
onProgress?.('milestone-tasks', `Remediation failed for: ${task.name} - ${remediationResult.error}`);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
onProgress?.('milestone-tasks', `Task failed: ${task.name} - max remediation attempts (${MAX_REMEDIATION_ATTEMPTS}) already reached`);
|
|
411
|
+
}
|
|
412
|
+
// Mark milestone as failed
|
|
353
413
|
state = await updateMilestoneInState(projectDir, milestone.id, {
|
|
354
414
|
status: 'failed',
|
|
355
415
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"milestone-workflow.js","sourceRoot":"","sources":["../../src/workflow/milestone-workflow.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"milestone-workflow.js","sourceRoot":"","sources":["../../src/workflow/milestone-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project structure scanner for build verification context enrichment
|
|
3
|
+
* Scans project directory and returns a concise summary for embedding in AI prompts
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Summary of a project's directory structure
|
|
7
|
+
*/
|
|
8
|
+
export interface ProjectStructureSummary {
|
|
9
|
+
tree: string;
|
|
10
|
+
fileCounts: Record<string, number>;
|
|
11
|
+
appFileCounts?: Record<string, Record<string, number>>;
|
|
12
|
+
workspaceApps: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
path: string;
|
|
15
|
+
exists: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
totalSourceFiles: number;
|
|
18
|
+
tsconfigInfo?: string;
|
|
19
|
+
formatted: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Scan a project directory and return a concise summary for embedding in AI prompts
|
|
23
|
+
*
|
|
24
|
+
* @param projectDir - Root directory of the project
|
|
25
|
+
* @param language - Project language type
|
|
26
|
+
* @returns Project structure summary with tree, counts, and formatted string
|
|
27
|
+
*/
|
|
28
|
+
export declare function getProjectStructureSummary(projectDir: string, language: string): Promise<ProjectStructureSummary>;
|
|
29
|
+
//# sourceMappingURL=project-structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-structure.d.ts","sourceRoot":"","sources":["../../src/workflow/project-structure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAmHD;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC,CAuFlC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project structure scanner for build verification context enrichment
|
|
3
|
+
* Scans project directory and returns a concise summary for embedding in AI prompts
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { isWorkspace, languageToApps } from '../types/project.js';
|
|
8
|
+
/** Directories to skip during scanning */
|
|
9
|
+
const SKIP_DIRS = new Set([
|
|
10
|
+
'node_modules', 'dist', 'build', '.git', '__pycache__', '.venv', 'venv',
|
|
11
|
+
'.next', '.turbo', '.cache', 'coverage', 'out', '.vercel',
|
|
12
|
+
]);
|
|
13
|
+
/** Source file extensions to count */
|
|
14
|
+
const SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py']);
|
|
15
|
+
/** Maximum tree entries before truncation */
|
|
16
|
+
const MAX_TREE_ENTRIES = 30;
|
|
17
|
+
/**
|
|
18
|
+
* Recursively scan a directory up to a given depth, building a tree and counting files
|
|
19
|
+
*
|
|
20
|
+
* @param dir - Directory to scan
|
|
21
|
+
* @param depth - Current recursion depth
|
|
22
|
+
* @param maxDepth - Maximum depth to recurse
|
|
23
|
+
* @returns Tree lines and file counts by extension
|
|
24
|
+
*/
|
|
25
|
+
async function scanDirectory(dir, depth, maxDepth) {
|
|
26
|
+
const lines = [];
|
|
27
|
+
const counts = {};
|
|
28
|
+
if (depth > maxDepth)
|
|
29
|
+
return { lines, counts };
|
|
30
|
+
try {
|
|
31
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
32
|
+
const sorted = entries.sort((a, b) => {
|
|
33
|
+
// Directories first, then files
|
|
34
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
35
|
+
return -1;
|
|
36
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
37
|
+
return 1;
|
|
38
|
+
return a.name.localeCompare(b.name);
|
|
39
|
+
});
|
|
40
|
+
for (const entry of sorted) {
|
|
41
|
+
if (SKIP_DIRS.has(entry.name))
|
|
42
|
+
continue;
|
|
43
|
+
const indent = ' '.repeat(depth);
|
|
44
|
+
if (entry.isDirectory()) {
|
|
45
|
+
lines.push(`${indent}${entry.name}/`);
|
|
46
|
+
const sub = await scanDirectory(path.join(dir, entry.name), depth + 1, maxDepth);
|
|
47
|
+
lines.push(...sub.lines);
|
|
48
|
+
for (const [ext, count] of Object.entries(sub.counts)) {
|
|
49
|
+
counts[ext] = (counts[ext] || 0) + count;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (entry.isFile()) {
|
|
53
|
+
const ext = path.extname(entry.name);
|
|
54
|
+
if (SOURCE_EXTENSIONS.has(ext)) {
|
|
55
|
+
counts[ext] = (counts[ext] || 0) + 1;
|
|
56
|
+
}
|
|
57
|
+
lines.push(`${indent}${entry.name}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Directory access error - ignore
|
|
63
|
+
}
|
|
64
|
+
return { lines, counts };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Count source files within a specific directory (shallow recursion, max 5 levels)
|
|
68
|
+
*
|
|
69
|
+
* @param dir - Directory to count files in
|
|
70
|
+
* @returns File counts by extension
|
|
71
|
+
*/
|
|
72
|
+
async function countSourceFiles(dir) {
|
|
73
|
+
const result = await scanDirectory(dir, 0, 5);
|
|
74
|
+
return result.counts;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Read and summarize tsconfig.json if present
|
|
78
|
+
*
|
|
79
|
+
* @param projectDir - Project root directory
|
|
80
|
+
* @returns Brief tsconfig summary string or undefined
|
|
81
|
+
*/
|
|
82
|
+
async function summarizeTsconfig(projectDir) {
|
|
83
|
+
try {
|
|
84
|
+
const tsconfigPath = path.join(projectDir, 'tsconfig.json');
|
|
85
|
+
const content = await fs.readFile(tsconfigPath, 'utf-8');
|
|
86
|
+
const tsconfig = JSON.parse(content);
|
|
87
|
+
const parts = ['tsconfig: exists'];
|
|
88
|
+
if (tsconfig.references) {
|
|
89
|
+
parts.push(`references=${tsconfig.references.length}`);
|
|
90
|
+
}
|
|
91
|
+
if (tsconfig.include) {
|
|
92
|
+
const includeStr = JSON.stringify(tsconfig.include);
|
|
93
|
+
parts.push(`include=${includeStr.length > 60 ? includeStr.slice(0, 57) + '...' : includeStr}`);
|
|
94
|
+
}
|
|
95
|
+
if (tsconfig.exclude) {
|
|
96
|
+
parts.push(`exclude=${tsconfig.exclude.length} entries`);
|
|
97
|
+
}
|
|
98
|
+
if (tsconfig.compilerOptions?.baseUrl) {
|
|
99
|
+
parts.push(`baseUrl="${tsconfig.compilerOptions.baseUrl}"`);
|
|
100
|
+
}
|
|
101
|
+
if (tsconfig.compilerOptions?.paths) {
|
|
102
|
+
parts.push('paths=true');
|
|
103
|
+
}
|
|
104
|
+
return parts.join(', ');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Scan a project directory and return a concise summary for embedding in AI prompts
|
|
112
|
+
*
|
|
113
|
+
* @param projectDir - Root directory of the project
|
|
114
|
+
* @param language - Project language type
|
|
115
|
+
* @returns Project structure summary with tree, counts, and formatted string
|
|
116
|
+
*/
|
|
117
|
+
export async function getProjectStructureSummary(projectDir, language) {
|
|
118
|
+
// Scan directory tree (max 3 levels deep)
|
|
119
|
+
const { lines: treeLines, counts: fileCounts } = await scanDirectory(projectDir, 0, 3);
|
|
120
|
+
// Truncate tree if too large
|
|
121
|
+
let tree;
|
|
122
|
+
if (treeLines.length > MAX_TREE_ENTRIES) {
|
|
123
|
+
const extra = treeLines.length - MAX_TREE_ENTRIES;
|
|
124
|
+
tree = treeLines.slice(0, MAX_TREE_ENTRIES).join('\n') + `\n... (+${extra} more)`;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
tree = treeLines.join('\n');
|
|
128
|
+
}
|
|
129
|
+
const totalSourceFiles = Object.values(fileCounts).reduce((sum, c) => sum + c, 0);
|
|
130
|
+
// Workspace app detection
|
|
131
|
+
const workspaceApps = [];
|
|
132
|
+
let appFileCounts;
|
|
133
|
+
if (isWorkspace(language)) {
|
|
134
|
+
const apps = languageToApps(language);
|
|
135
|
+
appFileCounts = {};
|
|
136
|
+
for (const appType of apps) {
|
|
137
|
+
const appPath = path.join('apps', appType);
|
|
138
|
+
const absolutePath = path.join(projectDir, appPath);
|
|
139
|
+
let exists = false;
|
|
140
|
+
try {
|
|
141
|
+
await fs.access(absolutePath);
|
|
142
|
+
exists = true;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// App directory doesn't exist
|
|
146
|
+
}
|
|
147
|
+
workspaceApps.push({ name: appType, path: appPath, exists });
|
|
148
|
+
if (exists) {
|
|
149
|
+
appFileCounts[appType] = await countSourceFiles(absolutePath);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// tsconfig awareness
|
|
154
|
+
const tsconfigInfo = await summarizeTsconfig(projectDir);
|
|
155
|
+
// Assemble formatted summary
|
|
156
|
+
const formattedParts = [];
|
|
157
|
+
formattedParts.push(`Source files: ${totalSourceFiles} total`);
|
|
158
|
+
const countEntries = Object.entries(fileCounts).filter(([, c]) => c > 0);
|
|
159
|
+
if (countEntries.length > 0) {
|
|
160
|
+
formattedParts.push(`Extensions: ${countEntries.map(([ext, c]) => `${ext}=${c}`).join(', ')}`);
|
|
161
|
+
}
|
|
162
|
+
if (workspaceApps.length > 0) {
|
|
163
|
+
const appSummary = workspaceApps
|
|
164
|
+
.map(a => `${a.name}: ${a.exists ? 'exists' : 'MISSING'}`)
|
|
165
|
+
.join(', ');
|
|
166
|
+
formattedParts.push(`Workspace apps: ${appSummary}`);
|
|
167
|
+
if (appFileCounts) {
|
|
168
|
+
for (const [appName, counts] of Object.entries(appFileCounts)) {
|
|
169
|
+
const appCountStr = Object.entries(counts)
|
|
170
|
+
.filter(([, c]) => c > 0)
|
|
171
|
+
.map(([ext, c]) => `${ext}=${c}`)
|
|
172
|
+
.join(', ');
|
|
173
|
+
if (appCountStr) {
|
|
174
|
+
formattedParts.push(` ${appName}: ${appCountStr}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (tsconfigInfo) {
|
|
180
|
+
formattedParts.push(tsconfigInfo);
|
|
181
|
+
}
|
|
182
|
+
const formatted = formattedParts.join('\n');
|
|
183
|
+
return {
|
|
184
|
+
tree,
|
|
185
|
+
fileCounts,
|
|
186
|
+
appFileCounts,
|
|
187
|
+
workspaceApps,
|
|
188
|
+
totalSourceFiles,
|
|
189
|
+
tsconfigInfo,
|
|
190
|
+
formatted,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=project-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-structure.js","sourceRoot":"","sources":["../../src/workflow/project-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,10 +26,33 @@ export interface VerificationReport {
|
|
|
26
26
|
results: VerificationResult[];
|
|
27
27
|
criticalIssues: string[];
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolved project paths for frontend and backend directories
|
|
31
|
+
*/
|
|
32
|
+
export interface ProjectPaths {
|
|
33
|
+
frontendDir: string | null;
|
|
34
|
+
backendDir: string | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the correct frontend/backend paths based on language and what exists on disk.
|
|
38
|
+
*
|
|
39
|
+
* Workspace projects (fullstack, all) use apps/ or packages/ subdirectories.
|
|
40
|
+
* Single-language projects use the project root as their frontend or backend dir.
|
|
41
|
+
*
|
|
42
|
+
* @param projectDir - The project root directory
|
|
43
|
+
* @param language - The project language/type
|
|
44
|
+
* @returns Resolved frontend and backend directory paths (null if not applicable)
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveProjectPaths(projectDir: string, language: string): Promise<ProjectPaths>;
|
|
29
47
|
/**
|
|
30
48
|
* Run comprehensive project verification
|
|
49
|
+
*
|
|
50
|
+
* @param projectDir - The project root directory
|
|
51
|
+
* @param language - The project language/type (e.g. 'fullstack', 'typescript', 'python')
|
|
52
|
+
* @param onProgress - Optional progress callback
|
|
53
|
+
* @returns Verification report
|
|
31
54
|
*/
|
|
32
|
-
export declare function runComprehensiveVerification(projectDir: string, onProgress?: (message: string) => void): Promise<VerificationReport>;
|
|
55
|
+
export declare function runComprehensiveVerification(projectDir: string, language: string, onProgress?: (message: string) => void): Promise<VerificationReport>;
|
|
33
56
|
/**
|
|
34
57
|
* Auto-fix fixable issues
|
|
35
58
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-verification.d.ts","sourceRoot":"","sources":["../../src/workflow/project-verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"project-verification.d.ts","sourceRoot":"","sources":["../../src/workflow/project-verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA2FD;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8BrG;AAuUD;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAuC7B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -88,14 +88,57 @@ function findTodoPlaceholders(content) {
|
|
|
88
88
|
}
|
|
89
89
|
return todos;
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the correct frontend/backend paths based on language and what exists on disk.
|
|
93
|
+
*
|
|
94
|
+
* Workspace projects (fullstack, all) use apps/ or packages/ subdirectories.
|
|
95
|
+
* Single-language projects use the project root as their frontend or backend dir.
|
|
96
|
+
*
|
|
97
|
+
* @param projectDir - The project root directory
|
|
98
|
+
* @param language - The project language/type
|
|
99
|
+
* @returns Resolved frontend and backend directory paths (null if not applicable)
|
|
100
|
+
*/
|
|
101
|
+
export async function resolveProjectPaths(projectDir, language) {
|
|
102
|
+
// Workspace projects (fullstack, all): check apps/ first, then packages/
|
|
103
|
+
if (language === 'fullstack' || language === 'all') {
|
|
104
|
+
const appsF = path.join(projectDir, 'apps', 'frontend');
|
|
105
|
+
const pkgsF = path.join(projectDir, 'packages', 'frontend');
|
|
106
|
+
const appsB = path.join(projectDir, 'apps', 'backend');
|
|
107
|
+
const pkgsB = path.join(projectDir, 'packages', 'backend');
|
|
108
|
+
return {
|
|
109
|
+
frontendDir: await fileExists(appsF) ? appsF : await fileExists(pkgsF) ? pkgsF : null,
|
|
110
|
+
backendDir: await fileExists(appsB) ? appsB : await fileExists(pkgsB) ? pkgsB : null,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Website: root IS the frontend
|
|
114
|
+
if (language === 'website') {
|
|
115
|
+
return { frontendDir: projectDir, backendDir: null };
|
|
116
|
+
}
|
|
117
|
+
// TypeScript/JavaScript: root IS the frontend
|
|
118
|
+
if (language === 'typescript' || language === 'javascript') {
|
|
119
|
+
return { frontendDir: projectDir, backendDir: null };
|
|
120
|
+
}
|
|
121
|
+
// Python: root IS the backend
|
|
122
|
+
if (language === 'python') {
|
|
123
|
+
return { frontendDir: null, backendDir: projectDir };
|
|
124
|
+
}
|
|
125
|
+
return { frontendDir: null, backendDir: null };
|
|
126
|
+
}
|
|
91
127
|
/**
|
|
92
128
|
* Verify CSS/Styling setup
|
|
93
129
|
*/
|
|
94
|
-
async function verifyStylingSetup(
|
|
130
|
+
async function verifyStylingSetup(paths) {
|
|
95
131
|
const results = [];
|
|
96
|
-
const frontendDir =
|
|
132
|
+
const frontendDir = paths.frontendDir;
|
|
133
|
+
if (!frontendDir) {
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
97
136
|
// Check if frontend uses Tailwind classes
|
|
98
|
-
const
|
|
137
|
+
const srcDir = path.join(frontendDir, 'src');
|
|
138
|
+
if (!await fileExists(srcDir)) {
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
const tsxFiles = await findFiles(srcDir, /\.tsx$/);
|
|
99
142
|
let usesTailwind = false;
|
|
100
143
|
for (const file of tsxFiles.slice(0, 20)) { // Check first 20 files
|
|
101
144
|
const content = await readFile(file);
|
|
@@ -167,9 +210,12 @@ async function verifyStylingSetup(projectDir) {
|
|
|
167
210
|
/**
|
|
168
211
|
* Verify authentication setup
|
|
169
212
|
*/
|
|
170
|
-
async function verifyAuthSetup(
|
|
213
|
+
async function verifyAuthSetup(paths) {
|
|
171
214
|
const results = [];
|
|
172
|
-
const frontendDir =
|
|
215
|
+
const frontendDir = paths.frontendDir;
|
|
216
|
+
if (!frontendDir) {
|
|
217
|
+
return results;
|
|
218
|
+
}
|
|
173
219
|
// Check if project uses Auth0
|
|
174
220
|
const pkgJson = await readFile(path.join(frontendDir, 'package.json'));
|
|
175
221
|
const usesAuth0 = pkgJson?.includes('@auth0/auth0-react');
|
|
@@ -209,9 +255,12 @@ async function verifyAuthSetup(projectDir) {
|
|
|
209
255
|
/**
|
|
210
256
|
* Verify routes are complete (no TODO placeholders)
|
|
211
257
|
*/
|
|
212
|
-
async function verifyRouteCompleteness(
|
|
258
|
+
async function verifyRouteCompleteness(paths) {
|
|
213
259
|
const results = [];
|
|
214
|
-
const frontendDir =
|
|
260
|
+
const frontendDir = paths.frontendDir;
|
|
261
|
+
if (!frontendDir) {
|
|
262
|
+
return results;
|
|
263
|
+
}
|
|
215
264
|
// Check routes file
|
|
216
265
|
const routesFile = await readFile(path.join(frontendDir, 'src', 'routes', 'index.tsx'));
|
|
217
266
|
if (routesFile) {
|
|
@@ -228,7 +277,11 @@ async function verifyRouteCompleteness(projectDir) {
|
|
|
228
277
|
});
|
|
229
278
|
}
|
|
230
279
|
// Check all page components
|
|
231
|
-
const
|
|
280
|
+
const pagesDir = path.join(frontendDir, 'src', 'pages');
|
|
281
|
+
if (!await fileExists(pagesDir)) {
|
|
282
|
+
return results;
|
|
283
|
+
}
|
|
284
|
+
const pageFiles = await findFiles(pagesDir, /\.tsx$/);
|
|
232
285
|
const incompletePages = [];
|
|
233
286
|
for (const file of pageFiles) {
|
|
234
287
|
const content = await readFile(file);
|
|
@@ -260,12 +313,14 @@ async function verifyRouteCompleteness(projectDir) {
|
|
|
260
313
|
/**
|
|
261
314
|
* Verify database setup
|
|
262
315
|
*/
|
|
263
|
-
async function verifyDatabaseSetup(projectDir) {
|
|
316
|
+
async function verifyDatabaseSetup(projectDir, paths) {
|
|
264
317
|
const results = [];
|
|
265
|
-
const backendDir =
|
|
266
|
-
// Check .env.example has database config
|
|
267
|
-
|
|
268
|
-
|
|
318
|
+
const backendDir = paths.backendDir;
|
|
319
|
+
// Check .env.example has database config (check root and backend dir)
|
|
320
|
+
let envExample = await readFile(path.join(projectDir, '.env.example'));
|
|
321
|
+
if (!envExample && backendDir) {
|
|
322
|
+
envExample = await readFile(path.join(backendDir, '.env.example'));
|
|
323
|
+
}
|
|
269
324
|
const hasDbConfig = envExample?.includes('DATABASE_URL') ||
|
|
270
325
|
envExample?.includes('DB_HOST');
|
|
271
326
|
results.push({
|
|
@@ -296,10 +351,31 @@ async function verifyDatabaseSetup(projectDir) {
|
|
|
296
351
|
/**
|
|
297
352
|
* Verify the app actually starts
|
|
298
353
|
*/
|
|
299
|
-
async function verifyAppStarts(
|
|
354
|
+
async function verifyAppStarts(paths) {
|
|
300
355
|
const results = [];
|
|
301
|
-
const frontendDir =
|
|
302
|
-
|
|
356
|
+
const frontendDir = paths.frontendDir;
|
|
357
|
+
if (!frontendDir) {
|
|
358
|
+
return results;
|
|
359
|
+
}
|
|
360
|
+
// Verify directory exists before attempting build
|
|
361
|
+
if (!await fileExists(frontendDir)) {
|
|
362
|
+
return results;
|
|
363
|
+
}
|
|
364
|
+
// Check package.json exists and has a build script
|
|
365
|
+
const pkgJsonContent = await readFile(path.join(frontendDir, 'package.json'));
|
|
366
|
+
if (!pkgJsonContent) {
|
|
367
|
+
return results;
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
const pkgJson = JSON.parse(pkgJsonContent);
|
|
371
|
+
if (!pkgJson.scripts?.build) {
|
|
372
|
+
return results;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
return results;
|
|
377
|
+
}
|
|
378
|
+
// Try to build frontend
|
|
303
379
|
try {
|
|
304
380
|
await execAsync('npm run build', {
|
|
305
381
|
cwd: frontendDir,
|
|
@@ -329,19 +405,26 @@ async function verifyAppStarts(projectDir) {
|
|
|
329
405
|
}
|
|
330
406
|
/**
|
|
331
407
|
* Run comprehensive project verification
|
|
408
|
+
*
|
|
409
|
+
* @param projectDir - The project root directory
|
|
410
|
+
* @param language - The project language/type (e.g. 'fullstack', 'typescript', 'python')
|
|
411
|
+
* @param onProgress - Optional progress callback
|
|
412
|
+
* @returns Verification report
|
|
332
413
|
*/
|
|
333
|
-
export async function runComprehensiveVerification(projectDir, onProgress) {
|
|
414
|
+
export async function runComprehensiveVerification(projectDir, language, onProgress) {
|
|
334
415
|
const allResults = [];
|
|
416
|
+
// Resolve correct paths based on language and disk layout
|
|
417
|
+
const paths = await resolveProjectPaths(projectDir, language);
|
|
335
418
|
onProgress?.('Checking styling setup...');
|
|
336
|
-
allResults.push(...await verifyStylingSetup(
|
|
419
|
+
allResults.push(...await verifyStylingSetup(paths));
|
|
337
420
|
onProgress?.('Checking authentication setup...');
|
|
338
|
-
allResults.push(...await verifyAuthSetup(
|
|
421
|
+
allResults.push(...await verifyAuthSetup(paths));
|
|
339
422
|
onProgress?.('Checking route completeness...');
|
|
340
|
-
allResults.push(...await verifyRouteCompleteness(
|
|
423
|
+
allResults.push(...await verifyRouteCompleteness(paths));
|
|
341
424
|
onProgress?.('Checking database setup...');
|
|
342
|
-
allResults.push(...await verifyDatabaseSetup(projectDir));
|
|
425
|
+
allResults.push(...await verifyDatabaseSetup(projectDir, paths));
|
|
343
426
|
onProgress?.('Verifying app builds...');
|
|
344
|
-
allResults.push(...await verifyAppStarts(
|
|
427
|
+
allResults.push(...await verifyAppStarts(paths));
|
|
345
428
|
// Calculate summary
|
|
346
429
|
const passedChecks = allResults.filter(r => r.passed).length;
|
|
347
430
|
const failedChecks = allResults.filter(r => !r.passed && r.severity === 'error').length;
|