popeye-cli 1.0.1 → 1.2.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.
- package/.env.example +24 -1
- package/CONTRIBUTING.md +275 -0
- package/OPEN_SOURCE_MANIFESTO.md +172 -0
- package/README.md +832 -123
- package/dist/adapters/claude.d.ts +19 -4
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +908 -42
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/gemini.d.ts +55 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +318 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/grok.d.ts +73 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +430 -0
- package/dist/adapters/grok.js.map +1 -0
- package/dist/adapters/openai.d.ts +1 -1
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +47 -8
- package/dist/adapters/openai.js.map +1 -1
- package/dist/auth/claude.d.ts +11 -9
- package/dist/auth/claude.d.ts.map +1 -1
- package/dist/auth/claude.js +107 -71
- package/dist/auth/claude.js.map +1 -1
- package/dist/auth/gemini.d.ts +58 -0
- package/dist/auth/gemini.d.ts.map +1 -0
- package/dist/auth/gemini.js +172 -0
- package/dist/auth/gemini.js.map +1 -0
- package/dist/auth/grok.d.ts +73 -0
- package/dist/auth/grok.d.ts.map +1 -0
- package/dist/auth/grok.js +211 -0
- package/dist/auth/grok.js.map +1 -0
- package/dist/auth/index.d.ts +14 -7
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +41 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +20 -7
- package/dist/auth/keychain.d.ts.map +1 -1
- package/dist/auth/keychain.js +85 -29
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/openai.d.ts +2 -2
- package/dist/auth/openai.d.ts.map +1 -1
- package/dist/auth/openai.js +30 -32
- package/dist/auth/openai.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +79 -8
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +15 -4
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +1494 -114
- package/dist/cli/interactive.js.map +1 -1
- package/dist/config/defaults.d.ts +9 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +19 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +19 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +33 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +47 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +29 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/generators/fullstack.d.ts +32 -0
- package/dist/generators/fullstack.d.ts.map +1 -0
- package/dist/generators/fullstack.js +497 -0
- package/dist/generators/fullstack.js.map +1 -0
- package/dist/generators/index.d.ts +4 -3
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +15 -1
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/python.d.ts +17 -1
- package/dist/generators/python.d.ts.map +1 -1
- package/dist/generators/python.js +34 -20
- package/dist/generators/python.js.map +1 -1
- package/dist/generators/templates/fullstack.d.ts +113 -0
- package/dist/generators/templates/fullstack.d.ts.map +1 -0
- package/dist/generators/templates/fullstack.js +1004 -0
- package/dist/generators/templates/fullstack.js.map +1 -0
- package/dist/generators/typescript.d.ts +19 -1
- package/dist/generators/typescript.d.ts.map +1 -1
- package/dist/generators/typescript.js +37 -20
- package/dist/generators/typescript.js.map +1 -1
- package/dist/state/index.d.ts +108 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +551 -4
- package/dist/state/index.js.map +1 -1
- package/dist/state/registry.d.ts +52 -0
- package/dist/state/registry.d.ts.map +1 -0
- package/dist/state/registry.js +215 -0
- package/dist/state/registry.js.map +1 -0
- package/dist/types/cli.d.ts +8 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/cli.js.map +1 -1
- package/dist/types/consensus.d.ts +186 -4
- package/dist/types/consensus.d.ts.map +1 -1
- package/dist/types/consensus.js +35 -3
- package/dist/types/consensus.js.map +1 -1
- package/dist/types/project.d.ts +76 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +1 -1
- package/dist/types/project.js.map +1 -1
- package/dist/types/workflow.d.ts +217 -16
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/types/workflow.js +40 -1
- package/dist/types/workflow.js.map +1 -1
- package/dist/workflow/auto-fix.d.ts +45 -0
- package/dist/workflow/auto-fix.d.ts.map +1 -0
- package/dist/workflow/auto-fix.js +274 -0
- package/dist/workflow/auto-fix.js.map +1 -0
- package/dist/workflow/consensus.d.ts +70 -2
- package/dist/workflow/consensus.d.ts.map +1 -1
- package/dist/workflow/consensus.js +872 -17
- package/dist/workflow/consensus.js.map +1 -1
- package/dist/workflow/execution-mode.d.ts +10 -4
- package/dist/workflow/execution-mode.d.ts.map +1 -1
- package/dist/workflow/execution-mode.js +547 -58
- package/dist/workflow/execution-mode.js.map +1 -1
- package/dist/workflow/index.d.ts +14 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +69 -6
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/milestone-workflow.d.ts +34 -0
- package/dist/workflow/milestone-workflow.d.ts.map +1 -0
- package/dist/workflow/milestone-workflow.js +414 -0
- package/dist/workflow/milestone-workflow.js.map +1 -0
- package/dist/workflow/plan-mode.d.ts +80 -3
- package/dist/workflow/plan-mode.d.ts.map +1 -1
- package/dist/workflow/plan-mode.js +767 -49
- package/dist/workflow/plan-mode.js.map +1 -1
- package/dist/workflow/plan-storage.d.ts +386 -0
- package/dist/workflow/plan-storage.d.ts.map +1 -0
- package/dist/workflow/plan-storage.js +878 -0
- package/dist/workflow/plan-storage.js.map +1 -0
- package/dist/workflow/project-verification.d.ts +37 -0
- package/dist/workflow/project-verification.d.ts.map +1 -0
- package/dist/workflow/project-verification.js +381 -0
- package/dist/workflow/project-verification.js.map +1 -0
- package/dist/workflow/task-workflow.d.ts +37 -0
- package/dist/workflow/task-workflow.d.ts.map +1 -0
- package/dist/workflow/task-workflow.js +386 -0
- package/dist/workflow/task-workflow.js.map +1 -0
- package/dist/workflow/test-runner.d.ts +9 -0
- package/dist/workflow/test-runner.d.ts.map +1 -1
- package/dist/workflow/test-runner.js +101 -5
- package/dist/workflow/test-runner.js.map +1 -1
- package/dist/workflow/ui-designer.d.ts +82 -0
- package/dist/workflow/ui-designer.d.ts.map +1 -0
- package/dist/workflow/ui-designer.js +234 -0
- package/dist/workflow/ui-designer.js.map +1 -0
- package/dist/workflow/ui-setup.d.ts +58 -0
- package/dist/workflow/ui-setup.d.ts.map +1 -0
- package/dist/workflow/ui-setup.js +685 -0
- package/dist/workflow/ui-setup.js.map +1 -0
- package/dist/workflow/ui-verification.d.ts +114 -0
- package/dist/workflow/ui-verification.d.ts.map +1 -0
- package/dist/workflow/ui-verification.js +258 -0
- package/dist/workflow/ui-verification.js.map +1 -0
- package/dist/workflow/workflow-logger.d.ts +110 -0
- package/dist/workflow/workflow-logger.d.ts.map +1 -0
- package/dist/workflow/workflow-logger.js +267 -0
- package/dist/workflow/workflow-logger.js.map +1 -0
- package/dist/workflow/workspace-manager.d.ts +342 -0
- package/dist/workflow/workspace-manager.d.ts.map +1 -0
- package/dist/workflow/workspace-manager.js +733 -0
- package/dist/workflow/workspace-manager.js.map +1 -0
- package/package.json +2 -2
- package/src/adapters/claude.ts +1067 -47
- package/src/adapters/gemini.ts +373 -0
- package/src/adapters/grok.ts +492 -0
- package/src/adapters/openai.ts +48 -9
- package/src/auth/claude.ts +120 -78
- package/src/auth/gemini.ts +207 -0
- package/src/auth/grok.ts +255 -0
- package/src/auth/index.ts +47 -9
- package/src/auth/keychain.ts +95 -28
- package/src/auth/openai.ts +29 -36
- package/src/cli/commands/auth.ts +89 -10
- package/src/cli/commands/create.ts +13 -4
- package/src/cli/interactive.ts +1774 -142
- package/src/config/defaults.ts +19 -2
- package/src/config/index.ts +36 -1
- package/src/config/schema.ts +30 -1
- package/src/generators/fullstack.ts +551 -0
- package/src/generators/index.ts +25 -1
- package/src/generators/python.ts +65 -20
- package/src/generators/templates/fullstack.ts +1047 -0
- package/src/generators/typescript.ts +69 -20
- package/src/state/index.ts +713 -4
- package/src/state/registry.ts +278 -0
- package/src/types/cli.ts +8 -0
- package/src/types/consensus.ts +197 -6
- package/src/types/project.ts +82 -1
- package/src/types/workflow.ts +90 -1
- package/src/workflow/auto-fix.ts +340 -0
- package/src/workflow/consensus.ts +1180 -16
- package/src/workflow/execution-mode.ts +673 -74
- package/src/workflow/index.ts +95 -6
- package/src/workflow/milestone-workflow.ts +576 -0
- package/src/workflow/plan-mode.ts +924 -50
- package/src/workflow/plan-storage.ts +1282 -0
- package/src/workflow/project-verification.ts +471 -0
- package/src/workflow/task-workflow.ts +528 -0
- package/src/workflow/test-runner.ts +120 -5
- package/src/workflow/ui-designer.ts +337 -0
- package/src/workflow/ui-setup.ts +797 -0
- package/src/workflow/ui-verification.ts +357 -0
- package/src/workflow/workflow-logger.ts +353 -0
- package/src/workflow/workspace-manager.ts +912 -0
- package/tests/config/config.test.ts +1 -1
- package/tests/types/consensus.test.ts +3 -3
- package/tests/workflow/plan-mode.test.ts +213 -0
- 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, state.language, 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, state.language, 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
|
/**
|
|
@@ -31,16 +32,17 @@ export interface PlanModeResult {
|
|
|
31
32
|
* @param onProgress - Progress callback
|
|
32
33
|
* @returns Expanded specification
|
|
33
34
|
*/
|
|
34
|
-
export declare function expandIdea(idea: string, language: 'python' | 'typescript', onProgress?: (message: string) => void): Promise<string>;
|
|
35
|
+
export declare function expandIdea(idea: string, language: 'python' | 'typescript' | 'fullstack', onProgress?: (message: string) => void): Promise<string>;
|
|
35
36
|
/**
|
|
36
37
|
* Create a development plan from a specification
|
|
37
38
|
*
|
|
38
39
|
* @param specification - The project specification
|
|
39
40
|
* @param context - Additional context
|
|
41
|
+
* @param language - Target programming language
|
|
40
42
|
* @param onProgress - Progress callback
|
|
41
43
|
* @returns Development plan
|
|
42
44
|
*/
|
|
43
|
-
export declare function createPlan(specification: string, context?: string, onProgress?: (message: string) => void): Promise<string>;
|
|
45
|
+
export declare function createPlan(specification: string, context?: string, language?: 'python' | 'typescript' | 'fullstack', onProgress?: (message: string) => void): Promise<string>;
|
|
44
46
|
/**
|
|
45
47
|
* Get existing project context by analyzing the codebase
|
|
46
48
|
*
|
|
@@ -50,15 +52,90 @@ export declare function createPlan(specification: string, context?: string, onPr
|
|
|
50
52
|
*/
|
|
51
53
|
export declare function getProjectContext(projectDir: string, onProgress?: (message: string) => void): Promise<string>;
|
|
52
54
|
/**
|
|
53
|
-
* Save the plan to a markdown file
|
|
55
|
+
* Save the plan to a markdown file in docs folder
|
|
54
56
|
*
|
|
55
57
|
* @param projectDir - The project directory
|
|
56
58
|
* @param plan - The plan content
|
|
57
59
|
* @param filename - The filename (default: PLAN.md)
|
|
58
60
|
*/
|
|
59
61
|
export declare function documentPlan(projectDir: string, plan: string, filename?: string): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Task app tag for fullstack projects
|
|
64
|
+
*/
|
|
65
|
+
export type TaskAppTag = 'FE' | 'BE' | 'INT';
|
|
66
|
+
/**
|
|
67
|
+
* Task with app targeting information for fullstack projects
|
|
68
|
+
*/
|
|
69
|
+
export interface ParsedFullstackTask {
|
|
70
|
+
name: string;
|
|
71
|
+
description: string;
|
|
72
|
+
appTag?: TaskAppTag;
|
|
73
|
+
appTarget?: 'frontend' | 'backend' | 'unified';
|
|
74
|
+
files?: string[];
|
|
75
|
+
dependencies?: string[];
|
|
76
|
+
acceptanceCriteria?: string[];
|
|
77
|
+
testPlan?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parse task tag from task name
|
|
81
|
+
* e.g., "Task 1.1 [FE]: Create Button component" -> 'FE'
|
|
82
|
+
*
|
|
83
|
+
* @param taskName - The task name to parse
|
|
84
|
+
* @returns The parsed app tag or undefined
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseTaskTag(taskName: string): TaskAppTag | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Derive app target from tag
|
|
89
|
+
*
|
|
90
|
+
* @param tag - The task tag
|
|
91
|
+
* @returns The app target
|
|
92
|
+
*/
|
|
93
|
+
export declare function tagToAppTarget(tag: TaskAppTag): 'frontend' | 'backend' | 'unified';
|
|
94
|
+
/**
|
|
95
|
+
* Validation result for fullstack task
|
|
96
|
+
*/
|
|
97
|
+
export interface FullstackTaskValidation {
|
|
98
|
+
valid: boolean;
|
|
99
|
+
issues: string[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate task has proper app targeting for fullstack projects
|
|
103
|
+
*
|
|
104
|
+
* @param task - The parsed task to validate
|
|
105
|
+
* @returns Validation result with issues
|
|
106
|
+
*/
|
|
107
|
+
export declare function validateFullstackTask(task: ParsedFullstackTask): FullstackTaskValidation;
|
|
108
|
+
/**
|
|
109
|
+
* Validate all tasks in a fullstack plan
|
|
110
|
+
*
|
|
111
|
+
* @param plan - The plan content
|
|
112
|
+
* @returns Validation result with all issues
|
|
113
|
+
*/
|
|
114
|
+
export declare function validateFullstackPlan(plan: string): {
|
|
115
|
+
valid: boolean;
|
|
116
|
+
issues: string[];
|
|
117
|
+
stats: {
|
|
118
|
+
totalTasks: number;
|
|
119
|
+
feTasks: number;
|
|
120
|
+
beTasks: number;
|
|
121
|
+
intTasks: number;
|
|
122
|
+
untaggedTasks: number;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Detect if a plan is actually Claude's thinking/conversation instead of a real plan
|
|
127
|
+
* This happens when Claude outputs its reasoning instead of the plan content
|
|
128
|
+
*
|
|
129
|
+
* @param plan - The plan content
|
|
130
|
+
* @returns Object indicating if garbage and why
|
|
131
|
+
*/
|
|
132
|
+
export declare function detectGarbagePlan(plan: string): {
|
|
133
|
+
isGarbage: boolean;
|
|
134
|
+
reason?: string;
|
|
135
|
+
};
|
|
60
136
|
/**
|
|
61
137
|
* Parse milestones and tasks from a plan
|
|
138
|
+
* Extracts only actionable implementation tasks, not plan metadata
|
|
62
139
|
*
|
|
63
140
|
* @param plan - The plan content
|
|
64
141
|
* @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;
|
|
1
|
+
{"version":3,"file":"plan-mode.d.ts","sourceRoot":"","sources":["../../src/workflow/plan-mode.ts"],"names":[],"mappings":"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"}
|