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,414 @@
1
+ /**
2
+ * Milestone-level workflow
3
+ * Handles: Milestone Plan → Consensus → Execute Tasks → Milestone Review → Consensus
4
+ */
5
+ import { promises as fs } from 'node:fs';
6
+ import path from 'node:path';
7
+ import { createPlan as claudeCreatePlan, analyzeCodebase } from '../adapters/claude.js';
8
+ import { loadProject, updateState, } from '../state/index.js';
9
+ import { iterateUntilConsensus } from './consensus.js';
10
+ import { runTaskWorkflow } from './task-workflow.js';
11
+ import { parsePlanMilestones } from './plan-mode.js';
12
+ /**
13
+ * Update milestone in state
14
+ */
15
+ async function updateMilestoneInState(projectDir, milestoneId, updates) {
16
+ const state = await loadProject(projectDir);
17
+ const updatedMilestones = state.milestones.map(m => m.id === milestoneId ? { ...m, ...updates } : m);
18
+ return updateState(projectDir, { milestones: updatedMilestones });
19
+ }
20
+ /**
21
+ * Create a detailed plan for a milestone
22
+ */
23
+ async function createMilestonePlan(milestone, state, onProgress) {
24
+ onProgress?.('Creating detailed milestone plan...');
25
+ const context = `
26
+ ## Project Context
27
+ Project: ${state.name}
28
+ Language: ${state.language}
29
+
30
+ ## Project Specification
31
+ ${state.specification?.slice(0, 2000) || 'No specification available'}
32
+
33
+ ## Overall Project Plan
34
+ ${state.plan?.slice(0, 2000) || 'No overall plan available'}
35
+
36
+ ## Completed Milestones
37
+ ${state.milestones
38
+ .filter(m => m.status === 'complete')
39
+ .map(m => `- ${m.name}`)
40
+ .join('\n') || 'None yet'}
41
+ `.trim();
42
+ const prompt = `
43
+ Create a detailed implementation plan for the following milestone:
44
+
45
+ ## Milestone: ${milestone.name}
46
+ ${milestone.description}
47
+
48
+ ## Tasks in This Milestone
49
+ ${milestone.tasks.map((t, i) => `${i + 1}. ${t.name}: ${t.description}`).join('\n')}
50
+
51
+ Please provide a comprehensive plan that includes:
52
+
53
+ 1. **Milestone Overview**: Summary of what will be accomplished
54
+ 2. **Prerequisites**: What must be in place before starting
55
+ 3. **Implementation Order**: Optimal sequence for tasks
56
+ 4. **Integration Points**: How tasks connect to each other
57
+ 5. **Risk Assessment**: Potential issues and mitigations
58
+ 6. **Success Criteria**: How to verify milestone completion
59
+ 7. **Test Strategy**: Overall testing approach for the milestone
60
+
61
+ For each task, provide:
62
+ - Detailed implementation steps
63
+ - Files to create/modify
64
+ - Dependencies
65
+ - Acceptance criteria
66
+
67
+ This plan will be reviewed for consensus before any implementation begins.
68
+ `.trim();
69
+ const result = await claudeCreatePlan(prompt, context, onProgress);
70
+ if (!result.success) {
71
+ throw new Error(`Failed to create milestone plan: ${result.error}`);
72
+ }
73
+ return result.response;
74
+ }
75
+ /**
76
+ * Document milestone plan
77
+ */
78
+ async function documentMilestonePlan(projectDir, milestone, plan, consensusResult) {
79
+ const docsDir = path.join(projectDir, 'docs');
80
+ await fs.mkdir(docsDir, { recursive: true });
81
+ const milestoneNum = milestone.id.replace('milestone-', '');
82
+ const filename = `milestone_${milestoneNum}_plan.md`;
83
+ const docPath = path.join(docsDir, filename);
84
+ const content = `# Milestone Plan: ${milestone.name}
85
+
86
+ ## Metadata
87
+ - **Milestone ID**: ${milestone.id}
88
+ - **Consensus Score**: ${consensusResult.finalScore}%
89
+ - **Iterations**: ${consensusResult.totalIterations}
90
+ - **Status**: ${consensusResult.approved ? 'APPROVED' : 'NOT APPROVED'}
91
+ ${consensusResult.arbitrated ? '- **Arbitrated**: Yes' : ''}
92
+ - **Generated**: ${new Date().toISOString()}
93
+
94
+ ## Milestone Description
95
+ ${milestone.description}
96
+
97
+ ## Tasks
98
+ ${milestone.tasks.map((t, i) => `${i + 1}. **${t.name}**: ${t.description}`).join('\n')}
99
+
100
+ ## Implementation Plan
101
+ ${plan}
102
+
103
+ ## Consensus History
104
+ | Iteration | Score | Key Feedback |
105
+ |-----------|-------|--------------|
106
+ ${consensusResult.iterations.map(it => `| ${it.iteration} | ${it.result.score}% | ${it.result.concerns?.slice(0, 2).join('; ') || 'None'} |`).join('\n')}
107
+
108
+ ${consensusResult.finalConcerns.length > 0 ? `
109
+ ## Remaining Notes
110
+ ${consensusResult.finalConcerns.map(c => `- ${c}`).join('\n')}
111
+ ` : ''}
112
+ `;
113
+ await fs.writeFile(docPath, content, 'utf-8');
114
+ return `docs/${filename}`;
115
+ }
116
+ /**
117
+ * Create milestone completion review
118
+ */
119
+ async function createMilestoneReview(milestone, state, _taskResults, onProgress) {
120
+ onProgress?.('Creating milestone completion review...');
121
+ // Analyze the current codebase
122
+ const codebaseAnalysis = await analyzeCodebase(state.id, // projectDir stored in state context
123
+ onProgress);
124
+ const context = `
125
+ ## Project Context
126
+ Project: ${state.name}
127
+ Language: ${state.language}
128
+
129
+ ## Milestone: ${milestone.name}
130
+ ${milestone.description}
131
+
132
+ ## Codebase Analysis
133
+ ${codebaseAnalysis.success ? codebaseAnalysis.response?.slice(0, 2000) : 'Analysis not available'}
134
+ `.trim();
135
+ const prompt = `
136
+ Please perform a completion review for the following milestone:
137
+
138
+ ## Milestone: ${milestone.name}
139
+
140
+ ## Completed Tasks
141
+ ${milestone.tasks.map((t, i) => {
142
+ return `${i + 1}. **${t.name}**
143
+ - Status: ${t.status}
144
+ - Tests: ${t.testsPassed ? 'Passed' : 'N/A'}
145
+ - Consensus Score: ${t.consensusScore || 'N/A'}%`;
146
+ }).join('\n')}
147
+
148
+ Please provide:
149
+
150
+ 1. **Summary**: What was accomplished in this milestone
151
+ 2. **Code Review**: Assessment of code quality and architecture
152
+ 3. **Test Coverage**: Evaluation of test coverage and quality
153
+ 4. **Integration Check**: How well components work together
154
+ 5. **Technical Debt**: Any shortcuts or areas needing future attention
155
+ 6. **Documentation**: Status of documentation
156
+ 7. **Completion Verification**:
157
+ - Are all acceptance criteria met?
158
+ - Is the milestone truly complete?
159
+ - Any remaining work needed?
160
+
161
+ Provide a CONSENSUS SCORE (0-100%) indicating confidence that this milestone is complete.
162
+ `.trim();
163
+ const result = await claudeCreatePlan(prompt, context, onProgress);
164
+ if (!result.success) {
165
+ throw new Error(`Failed to create milestone review: ${result.error}`);
166
+ }
167
+ return result.response;
168
+ }
169
+ /**
170
+ * Document milestone completion
171
+ */
172
+ async function documentMilestoneCompletion(projectDir, milestone, review, consensusResult, _taskResults) {
173
+ const docsDir = path.join(projectDir, 'docs');
174
+ await fs.mkdir(docsDir, { recursive: true });
175
+ const milestoneNum = milestone.id.replace('milestone-', '');
176
+ const filename = `milestone_${milestoneNum}_complete.md`;
177
+ const docPath = path.join(docsDir, filename);
178
+ const content = `# Milestone Completion: ${milestone.name}
179
+
180
+ ## Metadata
181
+ - **Milestone ID**: ${milestone.id}
182
+ - **Completion Score**: ${consensusResult.finalScore}%
183
+ - **Review Iterations**: ${consensusResult.totalIterations}
184
+ - **Status**: ${consensusResult.approved ? 'COMPLETE' : 'NEEDS REVIEW'}
185
+ - **Completed**: ${new Date().toISOString()}
186
+
187
+ ## Task Summary
188
+ | Task | Status | Tests | Consensus |
189
+ |------|--------|-------|-----------|
190
+ ${milestone.tasks.map(t => {
191
+ return `| ${t.name} | ${t.status} | ${t.testsPassed ? 'Passed' : 'N/A'} | ${t.consensusScore || 'N/A'}% |`;
192
+ }).join('\n')}
193
+
194
+ ## Completion Review
195
+ ${review}
196
+
197
+ ## Final Assessment
198
+ - **All Tasks Complete**: ${milestone.tasks.every(t => t.status === 'complete') ? 'Yes' : 'No'}
199
+ - **All Tests Passing**: ${milestone.tasks.every(t => t.testsPassed !== false) ? 'Yes' : 'No'}
200
+ - **Milestone Approved**: ${consensusResult.approved ? 'Yes' : 'No'}
201
+ `;
202
+ await fs.writeFile(docPath, content, 'utf-8');
203
+ return `docs/${filename}`;
204
+ }
205
+ /**
206
+ * Run the complete milestone workflow
207
+ */
208
+ export async function runMilestoneWorkflow(milestone, options) {
209
+ const { projectDir, consensusConfig, onProgress, onTaskStart, onTaskComplete, } = options;
210
+ const taskResults = [];
211
+ try {
212
+ let state = await loadProject(projectDir);
213
+ // Reload milestone from state to get latest data (including any saved plan)
214
+ const currentMilestone = state.milestones.find(m => m.id === milestone.id);
215
+ if (currentMilestone) {
216
+ milestone = currentMilestone;
217
+ }
218
+ // Check if milestone plan was already approved (resuming scenario)
219
+ let planConsensus;
220
+ if (milestone.consensusApproved && milestone.plan) {
221
+ // Milestone plan already approved, skip planning phase
222
+ onProgress?.('milestone-plan', `Using existing approved plan for: ${milestone.name} (Score: ${milestone.consensusScore}%)`);
223
+ // Create a mock consensus result from saved data
224
+ planConsensus = {
225
+ approved: true,
226
+ finalPlan: milestone.plan,
227
+ finalScore: milestone.consensusScore || 95,
228
+ bestPlan: milestone.plan,
229
+ bestScore: milestone.consensusScore || 95,
230
+ bestIteration: milestone.consensusIterations || 1,
231
+ totalIterations: milestone.consensusIterations || 1,
232
+ iterations: [],
233
+ finalConcerns: [],
234
+ finalRecommendations: [],
235
+ arbitrated: false,
236
+ };
237
+ }
238
+ else {
239
+ // Mark milestone as in-progress
240
+ state = await updateMilestoneInState(projectDir, milestone.id, {
241
+ status: 'in-progress',
242
+ });
243
+ // ============================================
244
+ // PHASE 1: Create Milestone Plan
245
+ // ============================================
246
+ onProgress?.('milestone-plan', `Planning milestone: ${milestone.name}`);
247
+ const milestonePlan = await createMilestonePlan(milestone, state, (msg) => onProgress?.('milestone-plan', msg));
248
+ // ============================================
249
+ // PHASE 2: Get Consensus on Milestone Plan
250
+ // ============================================
251
+ onProgress?.('milestone-consensus', `Getting consensus for milestone: ${milestone.name}`);
252
+ const context = `
253
+ Project: ${state.name}
254
+ Language: ${state.language}
255
+ Milestone: ${milestone.name}
256
+ Tasks: ${milestone.tasks.length}
257
+ `.trim();
258
+ planConsensus = await iterateUntilConsensus(milestonePlan, context, {
259
+ projectDir,
260
+ config: consensusConfig,
261
+ onIteration: (iteration, result) => {
262
+ onProgress?.('milestone-consensus', `Iteration ${iteration}: ${result.score}%`);
263
+ },
264
+ onProgress,
265
+ });
266
+ // Document the milestone plan
267
+ const planDocPath = await documentMilestonePlan(projectDir, milestone, planConsensus.bestPlan, planConsensus);
268
+ // Update milestone with plan consensus
269
+ state = await updateMilestoneInState(projectDir, milestone.id, {
270
+ plan: planConsensus.bestPlan,
271
+ consensusScore: planConsensus.finalScore,
272
+ consensusIterations: planConsensus.totalIterations,
273
+ consensusApproved: planConsensus.approved,
274
+ planDoc: planDocPath,
275
+ });
276
+ // Check if consensus was achieved
277
+ if (!planConsensus.approved) {
278
+ onProgress?.('milestone-consensus', `Milestone plan not approved: ${planConsensus.finalScore}%`);
279
+ state = await updateMilestoneInState(projectDir, milestone.id, {
280
+ status: 'failed',
281
+ });
282
+ return {
283
+ success: false,
284
+ milestone: { ...milestone, status: 'failed' },
285
+ planConsensus,
286
+ taskResults: [],
287
+ error: `Milestone plan not approved. Score: ${planConsensus.finalScore}%`,
288
+ };
289
+ }
290
+ onProgress?.('milestone-consensus', `Milestone plan approved with ${planConsensus.finalScore}%`);
291
+ // Parse tasks from the approved plan (may have refined tasks)
292
+ const parsedMilestones = parsePlanMilestones(planConsensus.bestPlan);
293
+ if (parsedMilestones.length > 0 && parsedMilestones[0].tasks.length > 0) {
294
+ // Update tasks with more details from the approved plan
295
+ // Keep original task IDs but update descriptions
296
+ const updatedTasks = milestone.tasks.map((origTask, idx) => {
297
+ const parsedTask = parsedMilestones[0].tasks[idx];
298
+ if (parsedTask) {
299
+ return {
300
+ ...origTask,
301
+ description: parsedTask.description || origTask.description,
302
+ testPlan: parsedTask.testPlan || origTask.testPlan,
303
+ };
304
+ }
305
+ return origTask;
306
+ });
307
+ state = await updateMilestoneInState(projectDir, milestone.id, {
308
+ tasks: updatedTasks,
309
+ });
310
+ // Reload milestone with updated tasks
311
+ state = await loadProject(projectDir);
312
+ milestone = state.milestones.find(m => m.id === milestone.id) || milestone;
313
+ }
314
+ }
315
+ // ============================================
316
+ // PHASE 3: Execute Each Task (with per-task consensus)
317
+ // ============================================
318
+ onProgress?.('milestone-tasks', `Executing ${milestone.tasks.length} tasks...`);
319
+ for (const task of milestone.tasks) {
320
+ if (task.status === 'complete') {
321
+ onProgress?.('milestone-tasks', `Skipping completed task: ${task.name}`);
322
+ continue;
323
+ }
324
+ onTaskStart?.(task);
325
+ onProgress?.('milestone-tasks', `Starting task: ${task.name}`);
326
+ const taskResult = await runTaskWorkflow(milestone, task, {
327
+ projectDir,
328
+ consensusConfig,
329
+ onProgress,
330
+ });
331
+ taskResults.push(taskResult);
332
+ onTaskComplete?.(task, taskResult.success);
333
+ if (!taskResult.success) {
334
+ onProgress?.('milestone-tasks', `Task failed: ${task.name}`);
335
+ // Update milestone status
336
+ state = await updateMilestoneInState(projectDir, milestone.id, {
337
+ status: 'failed',
338
+ });
339
+ return {
340
+ success: false,
341
+ milestone: { ...milestone, status: 'failed' },
342
+ planConsensus,
343
+ taskResults,
344
+ error: `Task "${task.name}" failed: ${taskResult.error}`,
345
+ };
346
+ }
347
+ onProgress?.('milestone-tasks', `Task complete: ${task.name}`);
348
+ }
349
+ // ============================================
350
+ // PHASE 4: Milestone Completion Review
351
+ // ============================================
352
+ onProgress?.('milestone-review', `Reviewing milestone completion: ${milestone.name}`);
353
+ // Reload state to get latest task statuses
354
+ state = await loadProject(projectDir);
355
+ milestone = state.milestones.find(m => m.id === milestone.id) || milestone;
356
+ const completionReview = await createMilestoneReview(milestone, state, taskResults, (msg) => onProgress?.('milestone-review', msg));
357
+ // ============================================
358
+ // PHASE 5: Get Consensus on Completion
359
+ // ============================================
360
+ onProgress?.('milestone-completion', `Getting completion consensus for: ${milestone.name}`);
361
+ const completionConsensus = await iterateUntilConsensus(completionReview, `Milestone completion review for: ${milestone.name}`, {
362
+ projectDir,
363
+ config: consensusConfig,
364
+ onIteration: (iteration, result) => {
365
+ onProgress?.('milestone-completion', `Completion review iteration ${iteration}: ${result.score}%`);
366
+ },
367
+ onProgress,
368
+ });
369
+ // Document milestone completion
370
+ const completionDocPath = await documentMilestoneCompletion(projectDir, milestone, completionConsensus.bestPlan, completionConsensus, taskResults);
371
+ // Update milestone with completion consensus
372
+ const finalStatus = completionConsensus.approved ? 'complete' : 'in-progress';
373
+ state = await updateMilestoneInState(projectDir, milestone.id, {
374
+ status: finalStatus,
375
+ completionReview: completionConsensus.bestPlan,
376
+ completionScore: completionConsensus.finalScore,
377
+ completionApproved: completionConsensus.approved,
378
+ completionDoc: completionDocPath,
379
+ });
380
+ if (!completionConsensus.approved) {
381
+ onProgress?.('milestone-completion', `Milestone completion not approved: ${completionConsensus.finalScore}%`);
382
+ return {
383
+ success: false,
384
+ milestone: { ...milestone, status: 'in-progress' },
385
+ planConsensus,
386
+ completionConsensus,
387
+ taskResults,
388
+ error: `Milestone completion not approved. Score: ${completionConsensus.finalScore}%`,
389
+ };
390
+ }
391
+ onProgress?.('milestone-complete', `Milestone complete: ${milestone.name}`);
392
+ return {
393
+ success: true,
394
+ milestone: { ...milestone, status: 'complete' },
395
+ planConsensus,
396
+ completionConsensus,
397
+ taskResults,
398
+ };
399
+ }
400
+ catch (error) {
401
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
402
+ onProgress?.('milestone-error', errorMessage);
403
+ await updateMilestoneInState(projectDir, milestone.id, {
404
+ status: 'failed',
405
+ });
406
+ return {
407
+ success: false,
408
+ milestone: { ...milestone, status: 'failed' },
409
+ taskResults,
410
+ error: errorMessage,
411
+ };
412
+ }
413
+ }
414
+ //# sourceMappingURL=milestone-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestone-workflow.js","sourceRoot":"","sources":["../../src/workflow/milestone-workflow.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { type ConsensusProcessResult } from './consensus.js';
12
12
  export interface PlanModeOptions {
13
13
  projectDir: string;
14
14
  consensusConfig?: Partial<ConsensusConfig>;
15
+ additionalContext?: string;
15
16
  onProgress?: (phase: string, message: string) => void;
16
17
  }
17
18
  /**
@@ -50,15 +51,27 @@ export declare function createPlan(specification: string, context?: string, onPr
50
51
  */
51
52
  export declare function getProjectContext(projectDir: string, onProgress?: (message: string) => void): Promise<string>;
52
53
  /**
53
- * Save the plan to a markdown file
54
+ * Save the plan to a markdown file in docs folder
54
55
  *
55
56
  * @param projectDir - The project directory
56
57
  * @param plan - The plan content
57
58
  * @param filename - The filename (default: PLAN.md)
58
59
  */
59
60
  export declare function documentPlan(projectDir: string, plan: string, filename?: string): Promise<string>;
61
+ /**
62
+ * Detect if a plan is actually Claude's thinking/conversation instead of a real plan
63
+ * This happens when Claude outputs its reasoning instead of the plan content
64
+ *
65
+ * @param plan - The plan content
66
+ * @returns Object indicating if garbage and why
67
+ */
68
+ export declare function detectGarbagePlan(plan: string): {
69
+ isGarbage: boolean;
70
+ reason?: string;
71
+ };
60
72
  /**
61
73
  * Parse milestones and tasks from a plan
74
+ * Extracts only actionable implementation tasks, not plan metadata
62
75
  *
63
76
  * @param plan - The plan content
64
77
  * @returns Parsed milestones with tasks
@@ -1 +1 @@
1
- {"version":3,"file":"plan-mode.d.ts","sourceRoot":"","sources":["../../src/workflow/plan-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAQ,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAW7D,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,YAAY,EACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAsDzE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA0GzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAC3C,OAAO,CAAC,cAAc,CAAC,CAezB"}
1
+ {"version":3,"file":"plan-mode.d.ts","sourceRoot":"","sources":["../../src/workflow/plan-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAQ,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAW7D,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAIpF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,YAAY,EACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,MAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AA6FD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAuDvF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAsRzE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAkWzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAC3C,OAAO,CAAC,cAAc,CAAC,CAezB"}