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
@@ -2,10 +2,14 @@
2
2
  * State management module
3
3
  * Provides high-level API for managing project state
4
4
  */
5
+ import { promises as fs } from 'node:fs';
6
+ import path from 'node:path';
5
7
  import { v4 as uuidv4 } from 'uuid';
6
8
  import { loadState, saveState, stateExists, deleteState, backupState, } from './persistence.js';
9
+ import { registerProject, unregisterProject } from './registry.js';
7
10
  // Re-export persistence utilities
8
11
  export * from './persistence.js';
12
+ export * from './registry.js';
9
13
  /**
10
14
  * Create a new project state
11
15
  *
@@ -35,6 +39,8 @@ export async function createProject(spec, projectDir) {
35
39
  updatedAt: now,
36
40
  };
37
41
  await saveState(projectDir, state);
42
+ // Register project in global registry
43
+ await registerProject(projectDir);
38
44
  return state;
39
45
  }
40
46
  /**
@@ -75,6 +81,10 @@ export async function updateState(projectDir, updates) {
75
81
  updatedAt: new Date().toISOString(),
76
82
  };
77
83
  await saveState(projectDir, updated);
84
+ // Update registry (async, don't wait)
85
+ registerProject(projectDir).catch(() => {
86
+ // Silently ignore registry update failures
87
+ });
78
88
  return updated;
79
89
  }
80
90
  /**
@@ -96,10 +106,23 @@ export async function setPhase(projectDir, phase) {
96
106
  */
97
107
  export async function addMilestones(projectDir, milestones) {
98
108
  const current = await loadProject(projectDir);
99
- const newMilestones = milestones.map((m, index) => ({
100
- ...m,
101
- id: `milestone-${current.milestones.length + index + 1}`,
102
- }));
109
+ const newMilestones = milestones.map((m, index) => {
110
+ const milestoneId = `milestone-${current.milestones.length + index + 1}`;
111
+ // Ensure all tasks have proper IDs and status
112
+ const tasksWithIds = (m.tasks || []).map((t, taskIndex) => ({
113
+ ...t,
114
+ id: t.id || `${milestoneId}-task-${taskIndex + 1}`,
115
+ status: t.status || 'pending',
116
+ name: t.name || `Task ${taskIndex + 1}`,
117
+ description: t.description || t.name || `Task ${taskIndex + 1}`,
118
+ }));
119
+ return {
120
+ ...m,
121
+ id: milestoneId,
122
+ tasks: tasksWithIds,
123
+ status: m.status || 'pending',
124
+ };
125
+ });
103
126
  return updateState(projectDir, {
104
127
  milestones: [...current.milestones, ...newMilestones],
105
128
  });
@@ -333,6 +356,530 @@ export async function resetToPhase(projectDir, phase) {
333
356
  * @returns True if project was deleted
334
357
  */
335
358
  export async function deleteProject(projectDir) {
359
+ // Unregister from global registry
360
+ await unregisterProject(projectDir);
336
361
  return deleteState(projectDir);
337
362
  }
363
+ /**
364
+ * Parse plan file to count expected tasks and milestones
365
+ * Uses multiple strategies to identify actionable tasks
366
+ *
367
+ * @param planContent - The plan markdown content
368
+ * @returns Parsed task and milestone counts with task names
369
+ */
370
+ function parsePlanForTaskCount(planContent) {
371
+ const taskNames = [];
372
+ // Strategy 1: Look for explicit "Task N:" or "### Task" patterns
373
+ const explicitTaskPattern = /^#{2,4}\s*Task\s+(?:[\d.]+)?[:\s]+(.+)$/gim;
374
+ let match;
375
+ while ((match = explicitTaskPattern.exec(planContent)) !== null) {
376
+ const name = match[1].trim().replace(/^\*\*(.+)\*\*$/, '$1').slice(0, 100);
377
+ if (name.length >= 5 && !taskNames.includes(name)) {
378
+ taskNames.push(name);
379
+ }
380
+ }
381
+ // Strategy 2: Look for actionable bullet points (Implement, Create, Build, etc.)
382
+ const actionVerbs = [
383
+ 'implement', 'create', 'build', 'develop', 'write', 'add', 'set up', 'setup',
384
+ 'configure', 'install', 'integrate', 'design', 'define', 'establish',
385
+ 'generate', 'construct', 'deploy', 'test', 'validate', 'fix', 'update',
386
+ 'refactor', 'optimize', 'extend', 'enhance', 'modify', 'initialize',
387
+ ];
388
+ const bulletPattern = /^[-*+]\s+(.+)$/gm;
389
+ while ((match = bulletPattern.exec(planContent)) !== null) {
390
+ const text = match[1].trim().replace(/^\*\*(.+?)\*\*:?\s*/, '$1: ');
391
+ const textLower = text.toLowerCase();
392
+ const startsWithAction = actionVerbs.some(verb => textLower.startsWith(verb + ' ') || textLower.startsWith(verb + ':'));
393
+ if (startsWithAction && text.length >= 10 && text.length <= 200 && !taskNames.includes(text)) {
394
+ taskNames.push(text.slice(0, 100));
395
+ }
396
+ }
397
+ // Strategy 3: Look for numbered items with actionable verbs
398
+ const numberedPattern = /^\d+[.)]\s+(.+)$/gm;
399
+ while ((match = numberedPattern.exec(planContent)) !== null) {
400
+ const text = match[1].trim().replace(/^\*\*(.+?)\*\*:?\s*/, '$1: ');
401
+ const textLower = text.toLowerCase();
402
+ const startsWithAction = actionVerbs.some(verb => textLower.startsWith(verb + ' ') || textLower.startsWith(verb + ':'));
403
+ if (startsWithAction && text.length >= 10 && text.length <= 200 && !taskNames.includes(text)) {
404
+ taskNames.push(text.slice(0, 100));
405
+ }
406
+ }
407
+ // Count milestones
408
+ const milestonePattern = /^#{1,3}\s*(?:Milestone|Phase|Sprint|Stage)\s*[\d.]*[:\s]+/gim;
409
+ const milestoneMatches = planContent.match(milestonePattern) || [];
410
+ const milestoneCount = milestoneMatches.length || 1;
411
+ return {
412
+ milestoneCount,
413
+ taskCount: taskNames.length,
414
+ taskNames,
415
+ };
416
+ }
417
+ /**
418
+ * Read and parse the plan file from docs/PLAN.md
419
+ *
420
+ * @param projectDir - The project root directory
421
+ * @returns Plan analysis or error
422
+ */
423
+ async function readPlanFile(projectDir) {
424
+ const planPaths = [
425
+ path.join(projectDir, 'docs', 'PLAN.md'),
426
+ path.join(projectDir, 'docs', 'PLAN-DRAFT.md'),
427
+ ];
428
+ for (const planPath of planPaths) {
429
+ try {
430
+ const content = await fs.readFile(planPath, 'utf-8');
431
+ const parsed = parsePlanForTaskCount(content);
432
+ return {
433
+ success: true,
434
+ ...parsed,
435
+ };
436
+ }
437
+ catch {
438
+ // Try next path
439
+ }
440
+ }
441
+ return {
442
+ success: false,
443
+ milestoneCount: 0,
444
+ taskCount: 0,
445
+ taskNames: [],
446
+ error: 'No plan file found in docs/',
447
+ };
448
+ }
449
+ /**
450
+ * Analyze project progress in detail
451
+ * Compares actual task/milestone completion against the plan file
452
+ *
453
+ * @param projectDir - The project root directory
454
+ * @returns Detailed progress analysis
455
+ */
456
+ export async function analyzeProjectProgress(projectDir) {
457
+ const state = await loadProject(projectDir);
458
+ // Count milestone statuses from state
459
+ const totalMilestones = state.milestones.length;
460
+ const completedMilestones = state.milestones.filter(m => m.status === 'complete').length;
461
+ const inProgressMilestones = state.milestones.filter(m => m.status === 'in-progress').length;
462
+ const pendingMilestones = state.milestones.filter(m => m.status === 'pending').length;
463
+ // Collect all tasks from state and count statuses
464
+ const allTasks = state.milestones.flatMap(m => m.tasks.map(t => ({ ...t, milestoneName: m.name, milestoneId: m.id })));
465
+ const totalTasks = allTasks.length;
466
+ const completedTasks = allTasks.filter(t => t.status === 'complete').length;
467
+ const inProgressTasks = allTasks.filter(t => t.status === 'in-progress').length;
468
+ const pendingTasks = allTasks.filter(t => t.status === 'pending').length;
469
+ const failedTasks = allTasks.filter(t => t.status === 'failed').length;
470
+ // Read and parse the plan file for comparison
471
+ const planAnalysis = await readPlanFile(projectDir);
472
+ const planTaskCount = planAnalysis.taskCount;
473
+ const planMilestoneCount = planAnalysis.milestoneCount;
474
+ const planParseError = planAnalysis.error;
475
+ // Find tasks in plan that are not in state
476
+ const stateTaskNames = allTasks.map(t => t.name.toLowerCase());
477
+ const missingFromState = planAnalysis.taskNames.filter(planTask => {
478
+ const planTaskLower = planTask.toLowerCase();
479
+ // Check if any state task is similar (contains or is contained)
480
+ return !stateTaskNames.some(stateTask => stateTask.includes(planTaskLower.slice(0, 20)) ||
481
+ planTaskLower.includes(stateTask.slice(0, 20)));
482
+ });
483
+ // Check for plan mismatch - plan has significantly more tasks than state
484
+ const planMismatch = planTaskCount > 0 && planTaskCount > totalTasks * 1.5;
485
+ // Calculate percentage - use plan task count if we have more tasks in plan
486
+ const effectiveTotal = planMismatch ? planTaskCount : totalTasks;
487
+ const percentComplete = effectiveTotal > 0
488
+ ? Math.round((completedTasks / effectiveTotal) * 100)
489
+ : 0;
490
+ // Determine if actually complete - must match plan if plan has more tasks
491
+ const isActuallyComplete = totalMilestones > 0 &&
492
+ completedMilestones === totalMilestones &&
493
+ completedTasks === totalTasks &&
494
+ !planMismatch; // Can't be complete if plan has more tasks
495
+ // Check for status mismatch
496
+ const statusMismatch = (state.status === 'complete' || state.phase === 'complete') &&
497
+ (!isActuallyComplete || planMismatch);
498
+ // Find next items to work on
499
+ let nextMilestone;
500
+ let nextTask;
501
+ for (const milestone of state.milestones) {
502
+ if (milestone.status === 'complete')
503
+ continue;
504
+ if (!nextMilestone) {
505
+ nextMilestone = { id: milestone.id, name: milestone.name };
506
+ }
507
+ for (const task of milestone.tasks) {
508
+ if (task.status === 'pending' || task.status === 'in-progress' || task.status === 'failed') {
509
+ if (!nextTask) {
510
+ nextTask = { id: task.id, name: task.name, milestone: milestone.name };
511
+ }
512
+ break;
513
+ }
514
+ }
515
+ if (nextTask)
516
+ break;
517
+ }
518
+ // Collect incomplete items
519
+ const incompleteMilestones = state.milestones
520
+ .filter(m => m.status !== 'complete')
521
+ .map(m => ({
522
+ id: m.id,
523
+ name: m.name,
524
+ tasksRemaining: m.tasks.filter(t => t.status !== 'complete').length,
525
+ }));
526
+ const incompleteTasks = allTasks
527
+ .filter(t => t.status !== 'complete')
528
+ .slice(0, 20)
529
+ .map(t => ({
530
+ id: t.id,
531
+ name: t.name,
532
+ milestone: t.milestoneName,
533
+ status: t.status,
534
+ }));
535
+ // Build progress summary
536
+ let progressSummary;
537
+ if (planMismatch) {
538
+ progressSummary = `PLAN MISMATCH: State has ${completedTasks}/${totalTasks} tasks but plan has ${planTaskCount} tasks. ` +
539
+ `Only ${percentComplete}% of plan completed.`;
540
+ }
541
+ else if (isActuallyComplete) {
542
+ progressSummary = `All ${totalTasks} tasks complete across ${totalMilestones} milestones`;
543
+ }
544
+ else if (statusMismatch) {
545
+ progressSummary = `WARNING: Status shows 'complete' but only ${completedTasks}/${effectiveTotal} tasks done (${percentComplete}%)`;
546
+ }
547
+ else {
548
+ progressSummary = `${completedTasks}/${effectiveTotal} tasks complete (${percentComplete}%), ${completedMilestones}/${totalMilestones} milestones`;
549
+ }
550
+ return {
551
+ isActuallyComplete,
552
+ statusMismatch,
553
+ planMismatch,
554
+ totalMilestones,
555
+ completedMilestones,
556
+ inProgressMilestones,
557
+ pendingMilestones,
558
+ totalTasks,
559
+ completedTasks,
560
+ inProgressTasks,
561
+ pendingTasks,
562
+ failedTasks,
563
+ planTaskCount,
564
+ planMilestoneCount,
565
+ planParseError,
566
+ missingFromState,
567
+ percentComplete,
568
+ nextMilestone,
569
+ nextTask,
570
+ progressSummary,
571
+ incompleteMilestones,
572
+ incompleteTasks,
573
+ };
574
+ }
575
+ /**
576
+ * Verify if a project is actually complete
577
+ * Returns true only if ALL milestones and ALL tasks are marked complete,
578
+ * AND the plan file doesn't have more tasks than the state
579
+ *
580
+ * @param projectDir - The project root directory
581
+ * @returns True if project is genuinely complete
582
+ */
583
+ export async function verifyProjectCompletion(projectDir) {
584
+ const progress = await analyzeProjectProgress(projectDir);
585
+ // Not complete if plan has more tasks than state
586
+ if (progress.planMismatch) {
587
+ return {
588
+ isComplete: false,
589
+ reason: `Plan mismatch: plan has ${progress.planTaskCount} tasks but state only has ${progress.totalTasks}. ` +
590
+ `${progress.missingFromState.length} tasks from plan are missing.`,
591
+ progress,
592
+ };
593
+ }
594
+ if (progress.isActuallyComplete) {
595
+ return {
596
+ isComplete: true,
597
+ progress,
598
+ };
599
+ }
600
+ // Build reason for incompleteness
601
+ let reason;
602
+ if (progress.totalTasks === 0) {
603
+ reason = 'No tasks defined in the project';
604
+ }
605
+ else if (progress.statusMismatch) {
606
+ reason = `Status mismatch: ${progress.completedTasks}/${progress.totalTasks} tasks actually complete`;
607
+ }
608
+ else {
609
+ reason = `${progress.pendingTasks + progress.inProgressTasks + progress.failedTasks} tasks remaining`;
610
+ }
611
+ return {
612
+ isComplete: false,
613
+ reason,
614
+ progress,
615
+ };
616
+ }
617
+ /**
618
+ * Reset a falsely-completed project to allow resume
619
+ * Used when status='complete' but work is incomplete
620
+ *
621
+ * @param projectDir - The project root directory
622
+ * @returns Updated state
623
+ */
624
+ export async function resetIncompleteProject(projectDir) {
625
+ const verification = await verifyProjectCompletion(projectDir);
626
+ if (verification.isComplete) {
627
+ // Actually complete, no reset needed
628
+ return loadProject(projectDir);
629
+ }
630
+ const progress = verification.progress;
631
+ // Determine the correct phase
632
+ let newPhase = 'execution';
633
+ let newStatus = 'in-progress';
634
+ if (progress.totalTasks === 0) {
635
+ // No tasks - go back to plan phase
636
+ newPhase = 'plan';
637
+ newStatus = 'pending';
638
+ }
639
+ else if (progress.completedTasks > 0) {
640
+ // Some work done - continue execution
641
+ newPhase = 'execution';
642
+ newStatus = 'in-progress';
643
+ }
644
+ else {
645
+ // No work done yet
646
+ newPhase = 'execution';
647
+ newStatus = 'pending';
648
+ }
649
+ // Reset any failed tasks to pending for retry
650
+ const current = await loadProject(projectDir);
651
+ const updatedMilestones = current.milestones.map(m => ({
652
+ ...m,
653
+ // Reset milestone status if it was incorrectly marked complete
654
+ status: m.tasks.every(t => t.status === 'complete')
655
+ ? 'complete'
656
+ : m.tasks.some(t => t.status === 'complete' || t.status === 'in-progress')
657
+ ? 'in-progress'
658
+ : 'pending',
659
+ tasks: m.tasks.map(t => t.status === 'failed'
660
+ ? { ...t, status: 'pending', error: undefined }
661
+ : t),
662
+ }));
663
+ return updateState(projectDir, {
664
+ phase: newPhase,
665
+ status: newStatus,
666
+ milestones: updatedMilestones,
667
+ error: undefined,
668
+ });
669
+ }
670
+ /**
671
+ * Verify that a project has actual, substantive code implementation
672
+ * Not just scaffolding or "Hello World"
673
+ *
674
+ * @param projectDir - The project root directory
675
+ * @returns Code quality verification result
676
+ */
677
+ export async function verifyCodeImplementation(projectDir) {
678
+ const warnings = [];
679
+ const issues = [];
680
+ let totalSourceFiles = 0;
681
+ let totalLinesOfCode = 0;
682
+ let hasMainEntryPoint = false;
683
+ let mainEntryPointLines = 0;
684
+ let hasTests = false;
685
+ let testFileCount = 0;
686
+ let hasSubstantiveCode = false;
687
+ // Load project to get language
688
+ const state = await loadProject(projectDir);
689
+ const language = state.language;
690
+ // Define file extensions for the language
691
+ const sourceExtensions = language === 'python'
692
+ ? ['.py']
693
+ : ['.ts', '.tsx', '.js', '.jsx'];
694
+ const testPatterns = language === 'python'
695
+ ? ['test_', '_test.py', 'tests.py']
696
+ : ['.test.ts', '.test.tsx', '.spec.ts', '.spec.tsx', '.test.js', '.test.jsx'];
697
+ // Main entry point names
698
+ const mainEntryNames = language === 'python'
699
+ ? ['main.py', '__main__.py', 'app.py', 'index.py']
700
+ : ['index.ts', 'index.tsx', 'main.ts', 'app.ts', 'index.js', 'main.js'];
701
+ // Directories to check for source code
702
+ const srcDirs = ['src', 'lib', 'app', '.'];
703
+ try {
704
+ // Count source files and lines
705
+ for (const srcDir of srcDirs) {
706
+ const dirPath = path.join(projectDir, srcDir);
707
+ try {
708
+ await fs.access(dirPath);
709
+ }
710
+ catch {
711
+ continue; // Directory doesn't exist
712
+ }
713
+ // Recursively find source files
714
+ const files = await findSourceFiles(dirPath, sourceExtensions);
715
+ for (const file of files) {
716
+ const relativePath = path.relative(projectDir, file);
717
+ // Skip test files when counting source code
718
+ const isTestFile = testPatterns.some(pattern => path.basename(file).includes(pattern) ||
719
+ relativePath.includes('/test/') ||
720
+ relativePath.includes('/tests/'));
721
+ if (isTestFile) {
722
+ testFileCount++;
723
+ hasTests = true;
724
+ continue;
725
+ }
726
+ totalSourceFiles++;
727
+ // Read file and count lines
728
+ const content = await fs.readFile(file, 'utf-8');
729
+ const lines = content.split('\n').filter(line => line.trim() && !line.trim().startsWith('#') && !line.trim().startsWith('//'));
730
+ totalLinesOfCode += lines.length;
731
+ // Check if this is a main entry point
732
+ const basename = path.basename(file);
733
+ if (mainEntryNames.includes(basename)) {
734
+ hasMainEntryPoint = true;
735
+ mainEntryPointLines = lines.length;
736
+ // Check if main entry point has substantive code
737
+ if (lines.length < 10) {
738
+ issues.push(`Main entry point (${basename}) has only ${lines.length} lines - too minimal`);
739
+ }
740
+ else if (lines.length < 30) {
741
+ warnings.push(`Main entry point (${basename}) has only ${lines.length} lines - may be incomplete`);
742
+ }
743
+ // Check for "hello world" only implementations
744
+ const contentLower = content.toLowerCase();
745
+ if (contentLower.includes('hello') &&
746
+ (contentLower.includes('world') || contentLower.includes('from')) &&
747
+ lines.length < 20) {
748
+ issues.push(`Main entry point appears to be just a "Hello World" placeholder`);
749
+ }
750
+ }
751
+ }
752
+ }
753
+ // Determine if code is substantive
754
+ hasSubstantiveCode = totalLinesOfCode >= 50 && totalSourceFiles >= 2;
755
+ // Add warnings/issues based on findings
756
+ if (totalSourceFiles === 0) {
757
+ issues.push('No source files found');
758
+ }
759
+ else if (totalSourceFiles === 1) {
760
+ warnings.push('Only 1 source file found - project may be incomplete');
761
+ }
762
+ if (totalLinesOfCode < 30) {
763
+ issues.push(`Only ${totalLinesOfCode} lines of code - project appears to be scaffolding only`);
764
+ }
765
+ else if (totalLinesOfCode < 100) {
766
+ warnings.push(`Only ${totalLinesOfCode} lines of code - project may be minimal`);
767
+ }
768
+ if (!hasMainEntryPoint) {
769
+ warnings.push('No main entry point file found');
770
+ }
771
+ if (!hasTests) {
772
+ warnings.push('No test files found');
773
+ }
774
+ // Check if project has expected structure based on plan
775
+ if (state.plan) {
776
+ // Look for expected files mentioned in plan
777
+ const planLower = state.plan.toLowerCase();
778
+ const expectedPatterns = [
779
+ { pattern: /api|endpoint|route/i, type: 'API endpoints' },
780
+ { pattern: /database|model|schema/i, type: 'database models' },
781
+ { pattern: /component|view|template/i, type: 'UI components' },
782
+ { pattern: /service|controller|handler/i, type: 'business logic' },
783
+ ];
784
+ for (const { pattern, type } of expectedPatterns) {
785
+ if (pattern.test(planLower) && totalSourceFiles < 3) {
786
+ warnings.push(`Plan mentions ${type} but only ${totalSourceFiles} source files found`);
787
+ }
788
+ }
789
+ }
790
+ const passed = issues.length === 0 && hasSubstantiveCode;
791
+ return {
792
+ passed,
793
+ totalSourceFiles,
794
+ totalLinesOfCode,
795
+ hasMainEntryPoint,
796
+ mainEntryPointLines,
797
+ hasTests,
798
+ testFileCount,
799
+ hasSubstantiveCode,
800
+ warnings,
801
+ issues,
802
+ };
803
+ }
804
+ catch (error) {
805
+ return {
806
+ passed: false,
807
+ totalSourceFiles: 0,
808
+ totalLinesOfCode: 0,
809
+ hasMainEntryPoint: false,
810
+ mainEntryPointLines: 0,
811
+ hasTests: false,
812
+ testFileCount: 0,
813
+ hasSubstantiveCode: false,
814
+ warnings,
815
+ issues: [`Error verifying code: ${error instanceof Error ? error.message : 'Unknown error'}`],
816
+ };
817
+ }
818
+ }
819
+ /**
820
+ * Recursively find source files with given extensions
821
+ */
822
+ async function findSourceFiles(dir, extensions) {
823
+ const files = [];
824
+ try {
825
+ const entries = await fs.readdir(dir, { withFileTypes: true });
826
+ for (const entry of entries) {
827
+ const fullPath = path.join(dir, entry.name);
828
+ // Skip node_modules, __pycache__, .git, etc.
829
+ if (entry.isDirectory()) {
830
+ if (['node_modules', '__pycache__', '.git', '.venv', 'venv', 'dist', 'build'].includes(entry.name)) {
831
+ continue;
832
+ }
833
+ const subFiles = await findSourceFiles(fullPath, extensions);
834
+ files.push(...subFiles);
835
+ }
836
+ else if (entry.isFile()) {
837
+ if (extensions.some(ext => entry.name.endsWith(ext))) {
838
+ files.push(fullPath);
839
+ }
840
+ }
841
+ }
842
+ }
843
+ catch {
844
+ // Directory access error - ignore
845
+ }
846
+ return files;
847
+ }
848
+ /**
849
+ * Comprehensive project verification that checks both task completion AND code quality
850
+ *
851
+ * @param projectDir - The project root directory
852
+ * @returns Full verification result
853
+ */
854
+ export async function comprehensiveProjectVerification(projectDir) {
855
+ const taskVerification = await verifyProjectCompletion(projectDir);
856
+ const codeVerification = await verifyCodeImplementation(projectDir);
857
+ const isGenuinelyComplete = taskVerification.isComplete && codeVerification.passed;
858
+ // Build summary
859
+ const summaryLines = [];
860
+ summaryLines.push(`Task Status: ${taskVerification.isComplete ? 'COMPLETE' : 'INCOMPLETE'}`);
861
+ summaryLines.push(` - ${taskVerification.progress.completedTasks}/${taskVerification.progress.totalTasks} tasks complete`);
862
+ summaryLines.push(`Code Quality: ${codeVerification.passed ? 'PASSED' : 'FAILED'}`);
863
+ summaryLines.push(` - ${codeVerification.totalSourceFiles} source files, ${codeVerification.totalLinesOfCode} lines of code`);
864
+ summaryLines.push(` - Tests: ${codeVerification.hasTests ? `${codeVerification.testFileCount} test files` : 'None'}`);
865
+ if (codeVerification.issues.length > 0) {
866
+ summaryLines.push('Issues:');
867
+ for (const issue of codeVerification.issues) {
868
+ summaryLines.push(` - ${issue}`);
869
+ }
870
+ }
871
+ if (codeVerification.warnings.length > 0) {
872
+ summaryLines.push('Warnings:');
873
+ for (const warning of codeVerification.warnings) {
874
+ summaryLines.push(` - ${warning}`);
875
+ }
876
+ }
877
+ summaryLines.push(`Overall: ${isGenuinelyComplete ? 'PROJECT GENUINELY COMPLETE' : 'PROJECT INCOMPLETE'}`);
878
+ return {
879
+ isGenuinelyComplete,
880
+ taskVerification,
881
+ codeVerification,
882
+ summary: summaryLines.join('\n'),
883
+ };
884
+ }
338
885
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"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"}