popeye-cli 1.0.1 → 1.1.0

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.
Files changed (166) hide show
  1. package/README.md +521 -125
  2. package/dist/adapters/claude.d.ts +16 -4
  3. package/dist/adapters/claude.d.ts.map +1 -1
  4. package/dist/adapters/claude.js +679 -33
  5. package/dist/adapters/claude.js.map +1 -1
  6. package/dist/adapters/gemini.d.ts +55 -0
  7. package/dist/adapters/gemini.d.ts.map +1 -0
  8. package/dist/adapters/gemini.js +318 -0
  9. package/dist/adapters/gemini.js.map +1 -0
  10. package/dist/adapters/openai.d.ts.map +1 -1
  11. package/dist/adapters/openai.js +41 -7
  12. package/dist/adapters/openai.js.map +1 -1
  13. package/dist/auth/claude.d.ts +11 -9
  14. package/dist/auth/claude.d.ts.map +1 -1
  15. package/dist/auth/claude.js +107 -71
  16. package/dist/auth/claude.js.map +1 -1
  17. package/dist/auth/gemini.d.ts +58 -0
  18. package/dist/auth/gemini.d.ts.map +1 -0
  19. package/dist/auth/gemini.js +172 -0
  20. package/dist/auth/gemini.js.map +1 -0
  21. package/dist/auth/index.d.ts +11 -7
  22. package/dist/auth/index.d.ts.map +1 -1
  23. package/dist/auth/index.js +23 -5
  24. package/dist/auth/index.js.map +1 -1
  25. package/dist/auth/keychain.d.ts +20 -7
  26. package/dist/auth/keychain.d.ts.map +1 -1
  27. package/dist/auth/keychain.js +85 -29
  28. package/dist/auth/keychain.js.map +1 -1
  29. package/dist/auth/openai.d.ts +2 -2
  30. package/dist/auth/openai.d.ts.map +1 -1
  31. package/dist/auth/openai.js +30 -32
  32. package/dist/auth/openai.js.map +1 -1
  33. package/dist/cli/interactive.d.ts.map +1 -1
  34. package/dist/cli/interactive.js +1151 -110
  35. package/dist/cli/interactive.js.map +1 -1
  36. package/dist/config/defaults.d.ts +6 -1
  37. package/dist/config/defaults.d.ts.map +1 -1
  38. package/dist/config/defaults.js +10 -2
  39. package/dist/config/defaults.js.map +1 -1
  40. package/dist/config/index.d.ts +10 -0
  41. package/dist/config/index.d.ts.map +1 -1
  42. package/dist/config/index.js +19 -0
  43. package/dist/config/index.js.map +1 -1
  44. package/dist/config/schema.d.ts +20 -0
  45. package/dist/config/schema.d.ts.map +1 -1
  46. package/dist/config/schema.js +7 -0
  47. package/dist/config/schema.js.map +1 -1
  48. package/dist/generators/python.d.ts.map +1 -1
  49. package/dist/generators/python.js +1 -0
  50. package/dist/generators/python.js.map +1 -1
  51. package/dist/generators/typescript.d.ts.map +1 -1
  52. package/dist/generators/typescript.js +1 -0
  53. package/dist/generators/typescript.js.map +1 -1
  54. package/dist/state/index.d.ts +108 -0
  55. package/dist/state/index.d.ts.map +1 -1
  56. package/dist/state/index.js +551 -4
  57. package/dist/state/index.js.map +1 -1
  58. package/dist/state/registry.d.ts +52 -0
  59. package/dist/state/registry.d.ts.map +1 -0
  60. package/dist/state/registry.js +215 -0
  61. package/dist/state/registry.js.map +1 -0
  62. package/dist/types/cli.d.ts +4 -0
  63. package/dist/types/cli.d.ts.map +1 -1
  64. package/dist/types/cli.js.map +1 -1
  65. package/dist/types/consensus.d.ts +69 -4
  66. package/dist/types/consensus.d.ts.map +1 -1
  67. package/dist/types/consensus.js +24 -3
  68. package/dist/types/consensus.js.map +1 -1
  69. package/dist/types/workflow.d.ts +55 -0
  70. package/dist/types/workflow.d.ts.map +1 -1
  71. package/dist/types/workflow.js +16 -0
  72. package/dist/types/workflow.js.map +1 -1
  73. package/dist/workflow/auto-fix.d.ts +45 -0
  74. package/dist/workflow/auto-fix.d.ts.map +1 -0
  75. package/dist/workflow/auto-fix.js +274 -0
  76. package/dist/workflow/auto-fix.js.map +1 -0
  77. package/dist/workflow/consensus.d.ts +44 -2
  78. package/dist/workflow/consensus.d.ts.map +1 -1
  79. package/dist/workflow/consensus.js +565 -17
  80. package/dist/workflow/consensus.js.map +1 -1
  81. package/dist/workflow/execution-mode.d.ts +10 -4
  82. package/dist/workflow/execution-mode.d.ts.map +1 -1
  83. package/dist/workflow/execution-mode.js +547 -58
  84. package/dist/workflow/execution-mode.js.map +1 -1
  85. package/dist/workflow/index.d.ts +14 -2
  86. package/dist/workflow/index.d.ts.map +1 -1
  87. package/dist/workflow/index.js +69 -6
  88. package/dist/workflow/index.js.map +1 -1
  89. package/dist/workflow/milestone-workflow.d.ts +34 -0
  90. package/dist/workflow/milestone-workflow.d.ts.map +1 -0
  91. package/dist/workflow/milestone-workflow.js +414 -0
  92. package/dist/workflow/milestone-workflow.js.map +1 -0
  93. package/dist/workflow/plan-mode.d.ts +14 -1
  94. package/dist/workflow/plan-mode.d.ts.map +1 -1
  95. package/dist/workflow/plan-mode.js +589 -47
  96. package/dist/workflow/plan-mode.js.map +1 -1
  97. package/dist/workflow/plan-storage.d.ts +142 -0
  98. package/dist/workflow/plan-storage.d.ts.map +1 -0
  99. package/dist/workflow/plan-storage.js +331 -0
  100. package/dist/workflow/plan-storage.js.map +1 -0
  101. package/dist/workflow/project-verification.d.ts +37 -0
  102. package/dist/workflow/project-verification.d.ts.map +1 -0
  103. package/dist/workflow/project-verification.js +381 -0
  104. package/dist/workflow/project-verification.js.map +1 -0
  105. package/dist/workflow/task-workflow.d.ts +37 -0
  106. package/dist/workflow/task-workflow.d.ts.map +1 -0
  107. package/dist/workflow/task-workflow.js +383 -0
  108. package/dist/workflow/task-workflow.js.map +1 -0
  109. package/dist/workflow/test-runner.d.ts +1 -0
  110. package/dist/workflow/test-runner.d.ts.map +1 -1
  111. package/dist/workflow/test-runner.js +9 -5
  112. package/dist/workflow/test-runner.js.map +1 -1
  113. package/dist/workflow/ui-designer.d.ts +82 -0
  114. package/dist/workflow/ui-designer.d.ts.map +1 -0
  115. package/dist/workflow/ui-designer.js +234 -0
  116. package/dist/workflow/ui-designer.js.map +1 -0
  117. package/dist/workflow/ui-setup.d.ts +58 -0
  118. package/dist/workflow/ui-setup.d.ts.map +1 -0
  119. package/dist/workflow/ui-setup.js +685 -0
  120. package/dist/workflow/ui-setup.js.map +1 -0
  121. package/dist/workflow/ui-verification.d.ts +114 -0
  122. package/dist/workflow/ui-verification.d.ts.map +1 -0
  123. package/dist/workflow/ui-verification.js +258 -0
  124. package/dist/workflow/ui-verification.js.map +1 -0
  125. package/dist/workflow/workflow-logger.d.ts +110 -0
  126. package/dist/workflow/workflow-logger.d.ts.map +1 -0
  127. package/dist/workflow/workflow-logger.js +267 -0
  128. package/dist/workflow/workflow-logger.js.map +1 -0
  129. package/package.json +2 -2
  130. package/src/adapters/claude.ts +815 -34
  131. package/src/adapters/gemini.ts +373 -0
  132. package/src/adapters/openai.ts +40 -7
  133. package/src/auth/claude.ts +120 -78
  134. package/src/auth/gemini.ts +207 -0
  135. package/src/auth/index.ts +28 -8
  136. package/src/auth/keychain.ts +95 -28
  137. package/src/auth/openai.ts +29 -36
  138. package/src/cli/interactive.ts +1357 -115
  139. package/src/config/defaults.ts +10 -2
  140. package/src/config/index.ts +21 -0
  141. package/src/config/schema.ts +7 -0
  142. package/src/generators/python.ts +1 -0
  143. package/src/generators/typescript.ts +1 -0
  144. package/src/state/index.ts +713 -4
  145. package/src/state/registry.ts +278 -0
  146. package/src/types/cli.ts +4 -0
  147. package/src/types/consensus.ts +65 -6
  148. package/src/types/workflow.ts +35 -0
  149. package/src/workflow/auto-fix.ts +340 -0
  150. package/src/workflow/consensus.ts +750 -16
  151. package/src/workflow/execution-mode.ts +673 -74
  152. package/src/workflow/index.ts +95 -6
  153. package/src/workflow/milestone-workflow.ts +576 -0
  154. package/src/workflow/plan-mode.ts +696 -50
  155. package/src/workflow/plan-storage.ts +482 -0
  156. package/src/workflow/project-verification.ts +471 -0
  157. package/src/workflow/task-workflow.ts +525 -0
  158. package/src/workflow/test-runner.ts +10 -5
  159. package/src/workflow/ui-designer.ts +337 -0
  160. package/src/workflow/ui-setup.ts +797 -0
  161. package/src/workflow/ui-verification.ts +357 -0
  162. package/src/workflow/workflow-logger.ts +353 -0
  163. package/tests/config/config.test.ts +1 -1
  164. package/tests/types/consensus.test.ts +3 -3
  165. package/tests/workflow/plan-mode.test.ts +213 -0
  166. package/tests/workflow/test-runner.test.ts +5 -3
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Comprehensive Project Verification
3
+ * Ensures generated projects are actually complete and runnable
4
+ */
5
+ import { promises as fs } from 'node:fs';
6
+ import path from 'node:path';
7
+ import { exec } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ const execAsync = promisify(exec);
10
+ /**
11
+ * Check if a file exists
12
+ */
13
+ async function fileExists(filePath) {
14
+ try {
15
+ await fs.access(filePath);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ /**
23
+ * Read file content safely
24
+ */
25
+ async function readFile(filePath) {
26
+ try {
27
+ return await fs.readFile(filePath, 'utf-8');
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ /**
34
+ * Find files matching a pattern recursively
35
+ */
36
+ async function findFiles(dir, pattern, maxDepth = 5) {
37
+ const results = [];
38
+ async function search(currentDir, depth) {
39
+ if (depth > maxDepth)
40
+ return;
41
+ try {
42
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
43
+ for (const entry of entries) {
44
+ const fullPath = path.join(currentDir, entry.name);
45
+ if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules' && entry.name !== 'dist') {
46
+ await search(fullPath, depth + 1);
47
+ }
48
+ else if (entry.isFile() && pattern.test(entry.name)) {
49
+ results.push(fullPath);
50
+ }
51
+ }
52
+ }
53
+ catch {
54
+ // Directory not accessible
55
+ }
56
+ }
57
+ await search(dir, 0);
58
+ return results;
59
+ }
60
+ /**
61
+ * Check if content contains Tailwind classes
62
+ */
63
+ function hasTailwindClasses(content) {
64
+ const tailwindPatterns = [
65
+ /className=["'][^"']*(?:flex|grid|block|inline|hidden)/,
66
+ /className=["'][^"']*(?:bg-|text-|border-|rounded-|shadow-|p-|m-|w-|h-)/,
67
+ /className=["'][^"']*(?:hover:|focus:|active:|disabled:)/,
68
+ /className=["'][^"']*(?:sm:|md:|lg:|xl:|2xl:)/,
69
+ ];
70
+ return tailwindPatterns.some(pattern => pattern.test(content));
71
+ }
72
+ /**
73
+ * Check if content contains TODO placeholders
74
+ */
75
+ function findTodoPlaceholders(content) {
76
+ const patterns = [
77
+ /TODO:?\s*(.+)/gi,
78
+ /<div>.*TODO.*<\/div>/gi,
79
+ /\{\/\*\s*TODO.*\*\/\}/gi,
80
+ /placeholder.*TODO/gi,
81
+ ];
82
+ const todos = [];
83
+ for (const pattern of patterns) {
84
+ const matches = content.matchAll(pattern);
85
+ for (const match of matches) {
86
+ todos.push(match[0].trim());
87
+ }
88
+ }
89
+ return todos;
90
+ }
91
+ /**
92
+ * Verify CSS/Styling setup
93
+ */
94
+ async function verifyStylingSetup(projectDir) {
95
+ const results = [];
96
+ const frontendDir = path.join(projectDir, 'packages', 'frontend');
97
+ // Check if frontend uses Tailwind classes
98
+ const tsxFiles = await findFiles(path.join(frontendDir, 'src'), /\.tsx$/);
99
+ let usesTailwind = false;
100
+ for (const file of tsxFiles.slice(0, 20)) { // Check first 20 files
101
+ const content = await readFile(file);
102
+ if (content && hasTailwindClasses(content)) {
103
+ usesTailwind = true;
104
+ break;
105
+ }
106
+ }
107
+ if (usesTailwind) {
108
+ // Check Tailwind is in package.json
109
+ const pkgJson = await readFile(path.join(frontendDir, 'package.json'));
110
+ const hasTailwindDep = pkgJson?.includes('tailwindcss');
111
+ results.push({
112
+ passed: !!hasTailwindDep,
113
+ category: 'Styling',
114
+ check: 'Tailwind CSS dependency',
115
+ message: hasTailwindDep
116
+ ? 'Tailwind CSS is installed'
117
+ : 'Components use Tailwind classes but tailwindcss is not in package.json',
118
+ severity: hasTailwindDep ? 'info' : 'error',
119
+ autoFixable: true,
120
+ fix: hasTailwindDep ? undefined : async () => {
121
+ await execAsync('npm install -D tailwindcss @tailwindcss/postcss', { cwd: frontendDir });
122
+ },
123
+ });
124
+ // Check PostCSS config
125
+ const hasPostcssConfig = await fileExists(path.join(frontendDir, 'postcss.config.js')) ||
126
+ await fileExists(path.join(frontendDir, 'postcss.config.cjs'));
127
+ results.push({
128
+ passed: hasPostcssConfig,
129
+ category: 'Styling',
130
+ check: 'PostCSS configuration',
131
+ message: hasPostcssConfig
132
+ ? 'PostCSS is configured'
133
+ : 'Missing postcss.config.js for Tailwind CSS',
134
+ severity: hasPostcssConfig ? 'info' : 'error',
135
+ autoFixable: true,
136
+ });
137
+ // Check CSS file exists and is imported
138
+ const mainTsx = await readFile(path.join(frontendDir, 'src', 'main.tsx'));
139
+ const hasCssImport = mainTsx?.includes("import './index.css'") ||
140
+ mainTsx?.includes('import "./index.css"') ||
141
+ mainTsx?.includes("import '../index.css'");
142
+ results.push({
143
+ passed: !!hasCssImport,
144
+ category: 'Styling',
145
+ check: 'CSS import in main.tsx',
146
+ message: hasCssImport
147
+ ? 'CSS is imported in main entry point'
148
+ : 'No CSS import found in main.tsx - styles will not load',
149
+ severity: hasCssImport ? 'info' : 'error',
150
+ autoFixable: true,
151
+ });
152
+ // Check index.css exists
153
+ const hasIndexCss = await fileExists(path.join(frontendDir, 'src', 'index.css'));
154
+ results.push({
155
+ passed: hasIndexCss,
156
+ category: 'Styling',
157
+ check: 'Global CSS file',
158
+ message: hasIndexCss
159
+ ? 'Global CSS file exists'
160
+ : 'Missing src/index.css',
161
+ severity: hasIndexCss ? 'info' : 'error',
162
+ autoFixable: true,
163
+ });
164
+ }
165
+ return results;
166
+ }
167
+ /**
168
+ * Verify authentication setup
169
+ */
170
+ async function verifyAuthSetup(projectDir) {
171
+ const results = [];
172
+ const frontendDir = path.join(projectDir, 'packages', 'frontend');
173
+ // Check if project uses Auth0
174
+ const pkgJson = await readFile(path.join(frontendDir, 'package.json'));
175
+ const usesAuth0 = pkgJson?.includes('@auth0/auth0-react');
176
+ if (usesAuth0) {
177
+ // Check for dev mode bypass
178
+ const useAuthFile = await readFile(path.join(frontendDir, 'src', 'hooks', 'useAuth.ts'));
179
+ const hasDevBypass = useAuthFile?.includes('isAuth0Configured') ||
180
+ useAuthFile?.includes('DEV_MOCK_USER') ||
181
+ useAuthFile?.includes('development mode');
182
+ results.push({
183
+ passed: !!hasDevBypass,
184
+ category: 'Authentication',
185
+ check: 'Development mode bypass',
186
+ message: hasDevBypass
187
+ ? 'Auth has development mode bypass'
188
+ : 'Auth requires Auth0 configuration - app will not work without it',
189
+ severity: hasDevBypass ? 'info' : 'error',
190
+ autoFixable: false,
191
+ });
192
+ // Check Auth0 provider has fallback
193
+ const authProviderFile = await readFile(path.join(frontendDir, 'src', 'providers', 'Auth0ProviderWithNavigate.tsx'));
194
+ const hasFallback = authProviderFile?.includes('isAuth0Configured') &&
195
+ authProviderFile?.includes('return <>{children}</>');
196
+ results.push({
197
+ passed: !!hasFallback,
198
+ category: 'Authentication',
199
+ check: 'Auth0 provider fallback',
200
+ message: hasFallback
201
+ ? 'Auth0 provider has fallback for unconfigured state'
202
+ : 'Auth0 provider may hang if not configured',
203
+ severity: hasFallback ? 'info' : 'warning',
204
+ autoFixable: false,
205
+ });
206
+ }
207
+ return results;
208
+ }
209
+ /**
210
+ * Verify routes are complete (no TODO placeholders)
211
+ */
212
+ async function verifyRouteCompleteness(projectDir) {
213
+ const results = [];
214
+ const frontendDir = path.join(projectDir, 'packages', 'frontend');
215
+ // Check routes file
216
+ const routesFile = await readFile(path.join(frontendDir, 'src', 'routes', 'index.tsx'));
217
+ if (routesFile) {
218
+ const todos = findTodoPlaceholders(routesFile);
219
+ results.push({
220
+ passed: todos.length === 0,
221
+ category: 'Routes',
222
+ check: 'Route completeness',
223
+ message: todos.length === 0
224
+ ? 'All routes are implemented'
225
+ : `Found ${todos.length} TODO placeholder(s) in routes: ${todos.slice(0, 3).join(', ')}`,
226
+ severity: todos.length === 0 ? 'info' : 'warning',
227
+ autoFixable: false,
228
+ });
229
+ }
230
+ // Check all page components
231
+ const pageFiles = await findFiles(path.join(frontendDir, 'src', 'pages'), /\.tsx$/);
232
+ let incompletePages = [];
233
+ for (const file of pageFiles) {
234
+ const content = await readFile(file);
235
+ if (content) {
236
+ // Check if page is just a placeholder
237
+ const lineCount = content.split('\n').length;
238
+ if (lineCount < 15) {
239
+ incompletePages.push(path.basename(file));
240
+ }
241
+ // Check for TODO in page content
242
+ const todos = findTodoPlaceholders(content);
243
+ if (todos.length > 0) {
244
+ incompletePages.push(`${path.basename(file)} (TODOs)`);
245
+ }
246
+ }
247
+ }
248
+ results.push({
249
+ passed: incompletePages.length === 0,
250
+ category: 'Pages',
251
+ check: 'Page completeness',
252
+ message: incompletePages.length === 0
253
+ ? 'All pages are implemented'
254
+ : `Incomplete pages: ${incompletePages.slice(0, 5).join(', ')}`,
255
+ severity: incompletePages.length === 0 ? 'info' : 'warning',
256
+ autoFixable: false,
257
+ });
258
+ return results;
259
+ }
260
+ /**
261
+ * Verify database setup
262
+ */
263
+ async function verifyDatabaseSetup(projectDir) {
264
+ const results = [];
265
+ const backendDir = path.join(projectDir, 'packages', 'backend');
266
+ // Check .env.example has database config
267
+ const envExample = await readFile(path.join(projectDir, '.env.example')) ||
268
+ await readFile(path.join(backendDir, '.env.example'));
269
+ const hasDbConfig = envExample?.includes('DATABASE_URL') ||
270
+ envExample?.includes('DB_HOST');
271
+ results.push({
272
+ passed: !!hasDbConfig,
273
+ category: 'Database',
274
+ check: 'Database configuration documented',
275
+ message: hasDbConfig
276
+ ? 'Database configuration is documented in .env.example'
277
+ : 'Missing database configuration in .env.example',
278
+ severity: hasDbConfig ? 'info' : 'warning',
279
+ autoFixable: true,
280
+ });
281
+ // Check for docker-compose
282
+ const hasDocker = await fileExists(path.join(projectDir, 'docker-compose.yml')) ||
283
+ await fileExists(path.join(projectDir, 'docker-compose.yaml'));
284
+ results.push({
285
+ passed: hasDocker,
286
+ category: 'Database',
287
+ check: 'Docker Compose for local development',
288
+ message: hasDocker
289
+ ? 'Docker Compose file exists for local development'
290
+ : 'No docker-compose.yml - users need to set up database manually',
291
+ severity: hasDocker ? 'info' : 'warning',
292
+ autoFixable: true,
293
+ });
294
+ return results;
295
+ }
296
+ /**
297
+ * Verify the app actually starts
298
+ */
299
+ async function verifyAppStarts(projectDir) {
300
+ const results = [];
301
+ const frontendDir = path.join(projectDir, 'packages', 'frontend');
302
+ // Try to start frontend briefly
303
+ try {
304
+ await execAsync('npm run build', {
305
+ cwd: frontendDir,
306
+ timeout: 120000,
307
+ });
308
+ results.push({
309
+ passed: true,
310
+ category: 'Build',
311
+ check: 'Frontend builds successfully',
312
+ message: 'Frontend production build completed',
313
+ severity: 'info',
314
+ autoFixable: false,
315
+ });
316
+ }
317
+ catch (err) {
318
+ const error = err;
319
+ results.push({
320
+ passed: false,
321
+ category: 'Build',
322
+ check: 'Frontend builds successfully',
323
+ message: `Frontend build failed: ${error.stderr?.slice(0, 200) || error.message}`,
324
+ severity: 'error',
325
+ autoFixable: false,
326
+ });
327
+ }
328
+ return results;
329
+ }
330
+ /**
331
+ * Run comprehensive project verification
332
+ */
333
+ export async function runComprehensiveVerification(projectDir, onProgress) {
334
+ const allResults = [];
335
+ onProgress?.('Checking styling setup...');
336
+ allResults.push(...await verifyStylingSetup(projectDir));
337
+ onProgress?.('Checking authentication setup...');
338
+ allResults.push(...await verifyAuthSetup(projectDir));
339
+ onProgress?.('Checking route completeness...');
340
+ allResults.push(...await verifyRouteCompleteness(projectDir));
341
+ onProgress?.('Checking database setup...');
342
+ allResults.push(...await verifyDatabaseSetup(projectDir));
343
+ onProgress?.('Verifying app builds...');
344
+ allResults.push(...await verifyAppStarts(projectDir));
345
+ // Calculate summary
346
+ const passedChecks = allResults.filter(r => r.passed).length;
347
+ const failedChecks = allResults.filter(r => !r.passed && r.severity === 'error').length;
348
+ const warnings = allResults.filter(r => !r.passed && r.severity === 'warning').length;
349
+ const criticalIssues = allResults
350
+ .filter(r => !r.passed && r.severity === 'error')
351
+ .map(r => `[${r.category}] ${r.message}`);
352
+ return {
353
+ passed: failedChecks === 0,
354
+ totalChecks: allResults.length,
355
+ passedChecks,
356
+ failedChecks,
357
+ warnings,
358
+ results: allResults,
359
+ criticalIssues,
360
+ };
361
+ }
362
+ /**
363
+ * Auto-fix fixable issues
364
+ */
365
+ export async function autoFixIssues(report, onProgress) {
366
+ let fixed = 0;
367
+ for (const result of report.results) {
368
+ if (!result.passed && result.autoFixable && result.fix) {
369
+ try {
370
+ onProgress?.(`Fixing: ${result.check}...`);
371
+ await result.fix();
372
+ fixed++;
373
+ }
374
+ catch (err) {
375
+ onProgress?.(`Failed to fix ${result.check}: ${err instanceof Error ? err.message : 'Unknown error'}`);
376
+ }
377
+ }
378
+ }
379
+ return fixed;
380
+ }
381
+ //# sourceMappingURL=project-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-verification.js","sourceRoot":"","sources":["../../src/workflow/project-verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Task-level workflow
3
+ * Handles the per-task consensus cycle: Plan → Consensus → Implement → Test
4
+ */
5
+ import type { Task, Milestone } from '../types/workflow.js';
6
+ import type { ConsensusConfig } from '../types/consensus.js';
7
+ import { type ConsensusProcessResult } from './consensus.js';
8
+ import { type TestResult } from './test-runner.js';
9
+ /**
10
+ * Options for task workflow
11
+ */
12
+ export interface TaskWorkflowOptions {
13
+ projectDir: string;
14
+ consensusConfig?: Partial<ConsensusConfig>;
15
+ maxRetries?: number;
16
+ onProgress?: (phase: string, message: string) => void;
17
+ }
18
+ /**
19
+ * Result of task workflow
20
+ */
21
+ export interface TaskWorkflowResult {
22
+ success: boolean;
23
+ task: Task;
24
+ consensusResult?: ConsensusProcessResult;
25
+ testResult?: TestResult;
26
+ error?: string;
27
+ }
28
+ /**
29
+ * Run the complete task workflow: Plan → Consensus → Implement → Test
30
+ *
31
+ * @param milestone - The parent milestone
32
+ * @param task - The task to execute
33
+ * @param options - Workflow options
34
+ * @returns Task workflow result
35
+ */
36
+ export declare function runTaskWorkflow(milestone: Milestone, task: Task, options: TaskWorkflowOptions): Promise<TaskWorkflowResult>;
37
+ //# sourceMappingURL=task-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-workflow.d.ts","sourceRoot":"","sources":["../../src/workflow/task-workflow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAgB,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EAAuD,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAElH,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0LD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAiS7B"}