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.
Files changed (216) hide show
  1. package/.env.example +24 -1
  2. package/CONTRIBUTING.md +275 -0
  3. package/OPEN_SOURCE_MANIFESTO.md +172 -0
  4. package/README.md +832 -123
  5. package/dist/adapters/claude.d.ts +19 -4
  6. package/dist/adapters/claude.d.ts.map +1 -1
  7. package/dist/adapters/claude.js +908 -42
  8. package/dist/adapters/claude.js.map +1 -1
  9. package/dist/adapters/gemini.d.ts +55 -0
  10. package/dist/adapters/gemini.d.ts.map +1 -0
  11. package/dist/adapters/gemini.js +318 -0
  12. package/dist/adapters/gemini.js.map +1 -0
  13. package/dist/adapters/grok.d.ts +73 -0
  14. package/dist/adapters/grok.d.ts.map +1 -0
  15. package/dist/adapters/grok.js +430 -0
  16. package/dist/adapters/grok.js.map +1 -0
  17. package/dist/adapters/openai.d.ts +1 -1
  18. package/dist/adapters/openai.d.ts.map +1 -1
  19. package/dist/adapters/openai.js +47 -8
  20. package/dist/adapters/openai.js.map +1 -1
  21. package/dist/auth/claude.d.ts +11 -9
  22. package/dist/auth/claude.d.ts.map +1 -1
  23. package/dist/auth/claude.js +107 -71
  24. package/dist/auth/claude.js.map +1 -1
  25. package/dist/auth/gemini.d.ts +58 -0
  26. package/dist/auth/gemini.d.ts.map +1 -0
  27. package/dist/auth/gemini.js +172 -0
  28. package/dist/auth/gemini.js.map +1 -0
  29. package/dist/auth/grok.d.ts +73 -0
  30. package/dist/auth/grok.d.ts.map +1 -0
  31. package/dist/auth/grok.js +211 -0
  32. package/dist/auth/grok.js.map +1 -0
  33. package/dist/auth/index.d.ts +14 -7
  34. package/dist/auth/index.d.ts.map +1 -1
  35. package/dist/auth/index.js +41 -6
  36. package/dist/auth/index.js.map +1 -1
  37. package/dist/auth/keychain.d.ts +20 -7
  38. package/dist/auth/keychain.d.ts.map +1 -1
  39. package/dist/auth/keychain.js +85 -29
  40. package/dist/auth/keychain.js.map +1 -1
  41. package/dist/auth/openai.d.ts +2 -2
  42. package/dist/auth/openai.d.ts.map +1 -1
  43. package/dist/auth/openai.js +30 -32
  44. package/dist/auth/openai.js.map +1 -1
  45. package/dist/cli/commands/auth.d.ts +1 -1
  46. package/dist/cli/commands/auth.d.ts.map +1 -1
  47. package/dist/cli/commands/auth.js +79 -8
  48. package/dist/cli/commands/auth.js.map +1 -1
  49. package/dist/cli/commands/create.d.ts.map +1 -1
  50. package/dist/cli/commands/create.js +15 -4
  51. package/dist/cli/commands/create.js.map +1 -1
  52. package/dist/cli/interactive.d.ts.map +1 -1
  53. package/dist/cli/interactive.js +1494 -114
  54. package/dist/cli/interactive.js.map +1 -1
  55. package/dist/config/defaults.d.ts +9 -1
  56. package/dist/config/defaults.d.ts.map +1 -1
  57. package/dist/config/defaults.js +19 -2
  58. package/dist/config/defaults.js.map +1 -1
  59. package/dist/config/index.d.ts +19 -0
  60. package/dist/config/index.d.ts.map +1 -1
  61. package/dist/config/index.js +33 -1
  62. package/dist/config/index.js.map +1 -1
  63. package/dist/config/schema.d.ts +47 -0
  64. package/dist/config/schema.d.ts.map +1 -1
  65. package/dist/config/schema.js +29 -1
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/generators/fullstack.d.ts +32 -0
  68. package/dist/generators/fullstack.d.ts.map +1 -0
  69. package/dist/generators/fullstack.js +497 -0
  70. package/dist/generators/fullstack.js.map +1 -0
  71. package/dist/generators/index.d.ts +4 -3
  72. package/dist/generators/index.d.ts.map +1 -1
  73. package/dist/generators/index.js +15 -1
  74. package/dist/generators/index.js.map +1 -1
  75. package/dist/generators/python.d.ts +17 -1
  76. package/dist/generators/python.d.ts.map +1 -1
  77. package/dist/generators/python.js +34 -20
  78. package/dist/generators/python.js.map +1 -1
  79. package/dist/generators/templates/fullstack.d.ts +113 -0
  80. package/dist/generators/templates/fullstack.d.ts.map +1 -0
  81. package/dist/generators/templates/fullstack.js +1004 -0
  82. package/dist/generators/templates/fullstack.js.map +1 -0
  83. package/dist/generators/typescript.d.ts +19 -1
  84. package/dist/generators/typescript.d.ts.map +1 -1
  85. package/dist/generators/typescript.js +37 -20
  86. package/dist/generators/typescript.js.map +1 -1
  87. package/dist/state/index.d.ts +108 -0
  88. package/dist/state/index.d.ts.map +1 -1
  89. package/dist/state/index.js +551 -4
  90. package/dist/state/index.js.map +1 -1
  91. package/dist/state/registry.d.ts +52 -0
  92. package/dist/state/registry.d.ts.map +1 -0
  93. package/dist/state/registry.js +215 -0
  94. package/dist/state/registry.js.map +1 -0
  95. package/dist/types/cli.d.ts +8 -0
  96. package/dist/types/cli.d.ts.map +1 -1
  97. package/dist/types/cli.js.map +1 -1
  98. package/dist/types/consensus.d.ts +186 -4
  99. package/dist/types/consensus.d.ts.map +1 -1
  100. package/dist/types/consensus.js +35 -3
  101. package/dist/types/consensus.js.map +1 -1
  102. package/dist/types/project.d.ts +76 -0
  103. package/dist/types/project.d.ts.map +1 -1
  104. package/dist/types/project.js +1 -1
  105. package/dist/types/project.js.map +1 -1
  106. package/dist/types/workflow.d.ts +217 -16
  107. package/dist/types/workflow.d.ts.map +1 -1
  108. package/dist/types/workflow.js +40 -1
  109. package/dist/types/workflow.js.map +1 -1
  110. package/dist/workflow/auto-fix.d.ts +45 -0
  111. package/dist/workflow/auto-fix.d.ts.map +1 -0
  112. package/dist/workflow/auto-fix.js +274 -0
  113. package/dist/workflow/auto-fix.js.map +1 -0
  114. package/dist/workflow/consensus.d.ts +70 -2
  115. package/dist/workflow/consensus.d.ts.map +1 -1
  116. package/dist/workflow/consensus.js +872 -17
  117. package/dist/workflow/consensus.js.map +1 -1
  118. package/dist/workflow/execution-mode.d.ts +10 -4
  119. package/dist/workflow/execution-mode.d.ts.map +1 -1
  120. package/dist/workflow/execution-mode.js +547 -58
  121. package/dist/workflow/execution-mode.js.map +1 -1
  122. package/dist/workflow/index.d.ts +14 -2
  123. package/dist/workflow/index.d.ts.map +1 -1
  124. package/dist/workflow/index.js +69 -6
  125. package/dist/workflow/index.js.map +1 -1
  126. package/dist/workflow/milestone-workflow.d.ts +34 -0
  127. package/dist/workflow/milestone-workflow.d.ts.map +1 -0
  128. package/dist/workflow/milestone-workflow.js +414 -0
  129. package/dist/workflow/milestone-workflow.js.map +1 -0
  130. package/dist/workflow/plan-mode.d.ts +80 -3
  131. package/dist/workflow/plan-mode.d.ts.map +1 -1
  132. package/dist/workflow/plan-mode.js +767 -49
  133. package/dist/workflow/plan-mode.js.map +1 -1
  134. package/dist/workflow/plan-storage.d.ts +386 -0
  135. package/dist/workflow/plan-storage.d.ts.map +1 -0
  136. package/dist/workflow/plan-storage.js +878 -0
  137. package/dist/workflow/plan-storage.js.map +1 -0
  138. package/dist/workflow/project-verification.d.ts +37 -0
  139. package/dist/workflow/project-verification.d.ts.map +1 -0
  140. package/dist/workflow/project-verification.js +381 -0
  141. package/dist/workflow/project-verification.js.map +1 -0
  142. package/dist/workflow/task-workflow.d.ts +37 -0
  143. package/dist/workflow/task-workflow.d.ts.map +1 -0
  144. package/dist/workflow/task-workflow.js +386 -0
  145. package/dist/workflow/task-workflow.js.map +1 -0
  146. package/dist/workflow/test-runner.d.ts +9 -0
  147. package/dist/workflow/test-runner.d.ts.map +1 -1
  148. package/dist/workflow/test-runner.js +101 -5
  149. package/dist/workflow/test-runner.js.map +1 -1
  150. package/dist/workflow/ui-designer.d.ts +82 -0
  151. package/dist/workflow/ui-designer.d.ts.map +1 -0
  152. package/dist/workflow/ui-designer.js +234 -0
  153. package/dist/workflow/ui-designer.js.map +1 -0
  154. package/dist/workflow/ui-setup.d.ts +58 -0
  155. package/dist/workflow/ui-setup.d.ts.map +1 -0
  156. package/dist/workflow/ui-setup.js +685 -0
  157. package/dist/workflow/ui-setup.js.map +1 -0
  158. package/dist/workflow/ui-verification.d.ts +114 -0
  159. package/dist/workflow/ui-verification.d.ts.map +1 -0
  160. package/dist/workflow/ui-verification.js +258 -0
  161. package/dist/workflow/ui-verification.js.map +1 -0
  162. package/dist/workflow/workflow-logger.d.ts +110 -0
  163. package/dist/workflow/workflow-logger.d.ts.map +1 -0
  164. package/dist/workflow/workflow-logger.js +267 -0
  165. package/dist/workflow/workflow-logger.js.map +1 -0
  166. package/dist/workflow/workspace-manager.d.ts +342 -0
  167. package/dist/workflow/workspace-manager.d.ts.map +1 -0
  168. package/dist/workflow/workspace-manager.js +733 -0
  169. package/dist/workflow/workspace-manager.js.map +1 -0
  170. package/package.json +2 -2
  171. package/src/adapters/claude.ts +1067 -47
  172. package/src/adapters/gemini.ts +373 -0
  173. package/src/adapters/grok.ts +492 -0
  174. package/src/adapters/openai.ts +48 -9
  175. package/src/auth/claude.ts +120 -78
  176. package/src/auth/gemini.ts +207 -0
  177. package/src/auth/grok.ts +255 -0
  178. package/src/auth/index.ts +47 -9
  179. package/src/auth/keychain.ts +95 -28
  180. package/src/auth/openai.ts +29 -36
  181. package/src/cli/commands/auth.ts +89 -10
  182. package/src/cli/commands/create.ts +13 -4
  183. package/src/cli/interactive.ts +1774 -142
  184. package/src/config/defaults.ts +19 -2
  185. package/src/config/index.ts +36 -1
  186. package/src/config/schema.ts +30 -1
  187. package/src/generators/fullstack.ts +551 -0
  188. package/src/generators/index.ts +25 -1
  189. package/src/generators/python.ts +65 -20
  190. package/src/generators/templates/fullstack.ts +1047 -0
  191. package/src/generators/typescript.ts +69 -20
  192. package/src/state/index.ts +713 -4
  193. package/src/state/registry.ts +278 -0
  194. package/src/types/cli.ts +8 -0
  195. package/src/types/consensus.ts +197 -6
  196. package/src/types/project.ts +82 -1
  197. package/src/types/workflow.ts +90 -1
  198. package/src/workflow/auto-fix.ts +340 -0
  199. package/src/workflow/consensus.ts +1180 -16
  200. package/src/workflow/execution-mode.ts +673 -74
  201. package/src/workflow/index.ts +95 -6
  202. package/src/workflow/milestone-workflow.ts +576 -0
  203. package/src/workflow/plan-mode.ts +924 -50
  204. package/src/workflow/plan-storage.ts +1282 -0
  205. package/src/workflow/project-verification.ts +471 -0
  206. package/src/workflow/task-workflow.ts +528 -0
  207. package/src/workflow/test-runner.ts +120 -5
  208. package/src/workflow/ui-designer.ts +337 -0
  209. package/src/workflow/ui-setup.ts +797 -0
  210. package/src/workflow/ui-verification.ts +357 -0
  211. package/src/workflow/workflow-logger.ts +353 -0
  212. package/src/workflow/workspace-manager.ts +912 -0
  213. package/tests/config/config.test.ts +1 -1
  214. package/tests/types/consensus.test.ts +3 -3
  215. package/tests/workflow/plan-mode.test.ts +213 -0
  216. package/tests/workflow/test-runner.test.ts +5 -3
@@ -0,0 +1,386 @@
1
+ /**
2
+ * Task-level workflow
3
+ * Handles the per-task consensus cycle: Plan → Consensus → Implement → Test
4
+ */
5
+ import { promises as fs } from 'node:fs';
6
+ import path from 'node:path';
7
+ import { createPlan as claudeCreatePlan } from '../adapters/claude.js';
8
+ import { loadProject, updateState, } from '../state/index.js';
9
+ import { iterateUntilConsensus, runOptimizedConsensusProcess } from './consensus.js';
10
+ import { executeTask as executeTaskCode } from './execution-mode.js';
11
+ import { runTests, testsExist, getTestSummary } from './test-runner.js';
12
+ /**
13
+ * Create a detailed implementation plan for a specific task
14
+ *
15
+ * @param task - The task to plan
16
+ * @param milestone - The parent milestone
17
+ * @param state - Current project state
18
+ * @param onProgress - Progress callback
19
+ * @returns The task implementation plan
20
+ */
21
+ async function createTaskPlan(task, milestone, state, onProgress) {
22
+ onProgress?.('Creating detailed task plan...');
23
+ const context = `
24
+ ## Project Context
25
+ Project: ${state.name}
26
+ Language: ${state.language}
27
+
28
+ ## Milestone: ${milestone.name}
29
+ ${milestone.description}
30
+
31
+ ## Overall Project Plan
32
+ ${state.plan?.slice(0, 2000) || 'No overall plan available'}
33
+
34
+ ## Completed Tasks in This Milestone
35
+ ${milestone.tasks
36
+ .filter(t => t.status === 'complete')
37
+ .map(t => `- ${t.name}`)
38
+ .join('\n') || 'None yet'}
39
+ `.trim();
40
+ const prompt = `
41
+ Create a detailed implementation plan for the following task:
42
+
43
+ ## Task: ${task.name}
44
+ ${task.description}
45
+
46
+ ${task.testPlan ? `## Test Requirements\n${task.testPlan}` : ''}
47
+
48
+ Please provide:
49
+ 1. **Implementation Steps**: Specific code changes needed
50
+ 2. **Files to Create/Modify**: List all files that will be touched
51
+ 3. **Dependencies**: Any packages or modules needed
52
+ 4. **Acceptance Criteria**: How to verify the task is complete
53
+ 5. **Test Plan**: Specific tests to write
54
+
55
+ Be specific and actionable. This plan will be reviewed for consensus before implementation.
56
+ `.trim();
57
+ const result = await claudeCreatePlan(prompt, context, state.language, onProgress);
58
+ if (!result.success) {
59
+ throw new Error(`Failed to create task plan: ${result.error}`);
60
+ }
61
+ return result.response;
62
+ }
63
+ /**
64
+ * Document a task plan to the docs folder
65
+ *
66
+ * @param projectDir - Project directory
67
+ * @param milestone - Parent milestone
68
+ * @param task - The task
69
+ * @param plan - The plan content
70
+ * @param consensusResult - The consensus result
71
+ * @returns Path to the document
72
+ */
73
+ async function documentTaskPlan(projectDir, milestone, task, plan, consensusResult) {
74
+ const docsDir = path.join(projectDir, 'docs', 'tasks');
75
+ await fs.mkdir(docsDir, { recursive: true });
76
+ const milestoneNum = milestone.id.replace('milestone-', '');
77
+ const taskNum = task.id.split('-task-')[1] || '1';
78
+ const filename = `milestone_${milestoneNum}_task_${taskNum}_plan.md`;
79
+ const docPath = path.join(docsDir, filename);
80
+ const content = `# Task Plan: ${task.name}
81
+
82
+ ## Metadata
83
+ - **Milestone**: ${milestone.name}
84
+ - **Task ID**: ${task.id}
85
+ - **Consensus Score**: ${consensusResult.finalScore}%
86
+ - **Iterations**: ${consensusResult.totalIterations}
87
+ - **Status**: ${consensusResult.approved ? 'APPROVED' : 'NOT APPROVED'}
88
+ - **Generated**: ${new Date().toISOString()}
89
+
90
+ ## Task Description
91
+ ${task.description}
92
+
93
+ ## Implementation Plan
94
+ ${plan}
95
+
96
+ ${consensusResult.finalConcerns.length > 0 ? `
97
+ ## Notes from Review
98
+ ${consensusResult.finalConcerns.map(c => `- ${c}`).join('\n')}
99
+ ` : ''}
100
+ `;
101
+ await fs.writeFile(docPath, content, 'utf-8');
102
+ return `docs/tasks/${filename}`;
103
+ }
104
+ /**
105
+ * Document task test results
106
+ *
107
+ * @param projectDir - Project directory
108
+ * @param milestone - Parent milestone
109
+ * @param task - The task
110
+ * @param testResult - Test results
111
+ * @returns Path to the document
112
+ */
113
+ async function documentTestResults(projectDir, milestone, task, testResult) {
114
+ const docsDir = path.join(projectDir, 'docs', 'tests');
115
+ await fs.mkdir(docsDir, { recursive: true });
116
+ const milestoneNum = milestone.id.replace('milestone-', '');
117
+ const taskNum = task.id.split('-task-')[1] || '1';
118
+ const filename = `milestone_${milestoneNum}_task_${taskNum}_tests.md`;
119
+ const docPath = path.join(docsDir, filename);
120
+ const content = `# Test Results: ${task.name}
121
+
122
+ ## Summary
123
+ - **Status**: ${testResult.success ? 'PASSED' : 'FAILED'}
124
+ - **Total Tests**: ${testResult.total}
125
+ - **Passed**: ${testResult.passed}
126
+ - **Failed**: ${testResult.failed}
127
+ - **Execution Time**: ${new Date().toISOString()}
128
+
129
+ ## Task Details
130
+ - **Milestone**: ${milestone.name}
131
+ - **Task ID**: ${task.id}
132
+
133
+ ## Test Output
134
+ \`\`\`
135
+ ${testResult.output.slice(0, 5000)}
136
+ \`\`\`
137
+
138
+ ${testResult.failedTests && testResult.failedTests.length > 0 ? `
139
+ ## Failed Tests
140
+ ${testResult.failedTests.map(t => `- ${t}`).join('\n')}
141
+ ` : ''}
142
+ `;
143
+ await fs.writeFile(docPath, content, 'utf-8');
144
+ return `docs/tests/${filename}`;
145
+ }
146
+ /**
147
+ * Update task in state with new data
148
+ */
149
+ async function updateTaskInState(projectDir, taskId, updates) {
150
+ const state = await loadProject(projectDir);
151
+ const updatedMilestones = state.milestones.map(milestone => ({
152
+ ...milestone,
153
+ tasks: milestone.tasks.map(task => task.id === taskId ? { ...task, ...updates } : task),
154
+ }));
155
+ return updateState(projectDir, { milestones: updatedMilestones });
156
+ }
157
+ /**
158
+ * Run the complete task workflow: Plan → Consensus → Implement → Test
159
+ *
160
+ * @param milestone - The parent milestone
161
+ * @param task - The task to execute
162
+ * @param options - Workflow options
163
+ * @returns Task workflow result
164
+ */
165
+ export async function runTaskWorkflow(milestone, task, options) {
166
+ const { projectDir, consensusConfig, maxRetries = 3, onProgress, } = options;
167
+ try {
168
+ let state = await loadProject(projectDir);
169
+ // Reload task from state to get latest data (for resume scenarios)
170
+ const currentMilestone = state.milestones.find(m => m.id === milestone.id);
171
+ const currentTask = currentMilestone?.tasks.find(t => t.id === task.id);
172
+ if (currentTask) {
173
+ task = currentTask;
174
+ }
175
+ // Check if we're resuming from a previous attempt
176
+ const hasApprovedPlan = task.consensusApproved && task.plan;
177
+ const hasCompletedImplementation = task.implementationComplete;
178
+ // Mark task as in-progress
179
+ state = await updateTaskInState(projectDir, task.id, {
180
+ status: 'in-progress',
181
+ error: undefined, // Clear previous error
182
+ });
183
+ let consensusResult;
184
+ // ============================================
185
+ // PHASE 1-2: Plan and Consensus (skip if already approved)
186
+ // ============================================
187
+ if (hasApprovedPlan) {
188
+ onProgress?.('task-plan', `Using existing approved plan for: ${task.name} (Score: ${task.consensusScore}%)`);
189
+ // Create mock consensus result from saved data
190
+ consensusResult = {
191
+ approved: true,
192
+ finalPlan: task.plan,
193
+ finalScore: task.consensusScore || 95,
194
+ bestPlan: task.plan,
195
+ bestScore: task.consensusScore || 95,
196
+ bestIteration: task.consensusIterations || 1,
197
+ totalIterations: task.consensusIterations || 1,
198
+ iterations: [],
199
+ finalConcerns: [],
200
+ finalRecommendations: [],
201
+ arbitrated: false,
202
+ };
203
+ }
204
+ else {
205
+ // ============================================
206
+ // PHASE 1: Create Task Plan
207
+ // ============================================
208
+ onProgress?.('task-plan', `Planning task: ${task.name}`);
209
+ const taskPlan = await createTaskPlan(task, milestone, state, (msg) => onProgress?.('task-plan', msg));
210
+ // Store plan in task
211
+ state = await updateTaskInState(projectDir, task.id, {
212
+ plan: taskPlan,
213
+ });
214
+ // ============================================
215
+ // PHASE 2: Get Consensus on Task Plan
216
+ // ============================================
217
+ onProgress?.('task-consensus', `Getting consensus for task: ${task.name}`);
218
+ const context = `
219
+ Project: ${state.name}
220
+ Language: ${state.language}
221
+ Milestone: ${milestone.name}
222
+ Task: ${task.name}
223
+ `.trim();
224
+ // Use optimized consensus with batched feedback and plan storage
225
+ const useOptimized = consensusConfig?.useOptimizedConsensus !== false;
226
+ if (useOptimized) {
227
+ onProgress?.('task-consensus', `Using optimized consensus (batched feedback, file-based tracking)`);
228
+ consensusResult = await runOptimizedConsensusProcess(taskPlan, context, {
229
+ projectDir,
230
+ config: consensusConfig,
231
+ milestoneId: milestone.id,
232
+ milestoneName: milestone.name,
233
+ taskId: task.id,
234
+ taskName: task.name,
235
+ parallelReviews: true,
236
+ isFullstack: state.language === 'fullstack',
237
+ onIteration: (iteration, result) => {
238
+ onProgress?.('task-consensus', `Iteration ${iteration}: ${result.score}%`);
239
+ },
240
+ onProgress,
241
+ });
242
+ }
243
+ else {
244
+ // Fallback to original consensus
245
+ consensusResult = await iterateUntilConsensus(taskPlan, context, {
246
+ projectDir,
247
+ config: consensusConfig,
248
+ isFullstack: state.language === 'fullstack',
249
+ language: state.language,
250
+ onIteration: (iteration, result) => {
251
+ onProgress?.('task-consensus', `Iteration ${iteration}: ${result.score}%`);
252
+ },
253
+ onProgress,
254
+ });
255
+ }
256
+ // Document the task plan
257
+ const planDocPath = await documentTaskPlan(projectDir, milestone, task, consensusResult.bestPlan, consensusResult);
258
+ // Update task with consensus results
259
+ state = await updateTaskInState(projectDir, task.id, {
260
+ plan: consensusResult.bestPlan,
261
+ consensusScore: consensusResult.finalScore,
262
+ consensusIterations: consensusResult.totalIterations,
263
+ consensusApproved: consensusResult.approved,
264
+ planDoc: planDocPath,
265
+ });
266
+ // Check if consensus was achieved
267
+ if (!consensusResult.approved) {
268
+ onProgress?.('task-consensus', `Consensus not reached for task: ${task.name} (${consensusResult.finalScore}%)`);
269
+ state = await updateTaskInState(projectDir, task.id, {
270
+ status: 'failed',
271
+ error: `Consensus not reached: ${consensusResult.finalScore}%`,
272
+ });
273
+ return {
274
+ success: false,
275
+ task: { ...task, status: 'failed' },
276
+ consensusResult,
277
+ error: `Task plan not approved. Score: ${consensusResult.finalScore}%`,
278
+ };
279
+ }
280
+ onProgress?.('task-consensus', `Task plan approved with ${consensusResult.finalScore}% consensus`);
281
+ }
282
+ // ============================================
283
+ // PHASE 3: Implement the Task (skip if already complete)
284
+ // ============================================
285
+ if (hasCompletedImplementation) {
286
+ onProgress?.('task-implement', `Implementation already complete for: ${task.name}, skipping to tests...`);
287
+ }
288
+ else {
289
+ onProgress?.('task-implement', `Implementing task: ${task.name}`);
290
+ const implementResult = await executeTaskCode(task, consensusResult.bestPlan, // Use the approved plan as context
291
+ projectDir, (msg) => onProgress?.('task-implement', msg));
292
+ if (!implementResult.success) {
293
+ state = await updateTaskInState(projectDir, task.id, {
294
+ status: 'failed',
295
+ error: implementResult.error,
296
+ });
297
+ return {
298
+ success: false,
299
+ task: { ...task, status: 'failed' },
300
+ consensusResult,
301
+ error: `Implementation failed: ${implementResult.error}`,
302
+ };
303
+ }
304
+ // Mark implementation as complete (for resume purposes)
305
+ state = await updateTaskInState(projectDir, task.id, {
306
+ implementationComplete: true,
307
+ });
308
+ onProgress?.('task-implement', `Implementation complete for: ${task.name}`);
309
+ }
310
+ // ============================================
311
+ // PHASE 4: Run Tests
312
+ // ============================================
313
+ const hasTests = await testsExist(projectDir, state.language);
314
+ if (hasTests) {
315
+ onProgress?.('task-test', `Running tests for: ${task.name}`);
316
+ let retries = 0;
317
+ let testResult;
318
+ while (retries <= maxRetries) {
319
+ testResult = await runTests(projectDir, state.language);
320
+ // Document test results
321
+ const testDocPath = await documentTestResults(projectDir, milestone, task, testResult);
322
+ state = await updateTaskInState(projectDir, task.id, {
323
+ testResultsDoc: testDocPath,
324
+ });
325
+ if (testResult.success) {
326
+ onProgress?.('task-test', `Tests passed: ${getTestSummary(testResult)}`);
327
+ break;
328
+ }
329
+ retries++;
330
+ if (retries <= maxRetries) {
331
+ onProgress?.('task-test', `Tests failed, retry ${retries}/${maxRetries}...`);
332
+ // Could add fix attempt here
333
+ }
334
+ }
335
+ if (testResult && !testResult.success) {
336
+ state = await updateTaskInState(projectDir, task.id, {
337
+ status: 'failed',
338
+ testsPassed: false,
339
+ error: `Tests failed after ${retries} retries`,
340
+ });
341
+ return {
342
+ success: false,
343
+ task: { ...task, status: 'failed', testsPassed: false },
344
+ consensusResult,
345
+ testResult,
346
+ error: `Tests failed: ${getTestSummary(testResult)}`,
347
+ };
348
+ }
349
+ // Mark task as complete
350
+ state = await updateTaskInState(projectDir, task.id, {
351
+ status: 'complete',
352
+ testsPassed: true,
353
+ });
354
+ return {
355
+ success: true,
356
+ task: { ...task, status: 'complete', testsPassed: true },
357
+ consensusResult,
358
+ testResult,
359
+ };
360
+ }
361
+ // No tests - mark as complete
362
+ state = await updateTaskInState(projectDir, task.id, {
363
+ status: 'complete',
364
+ });
365
+ onProgress?.('task-complete', `Task complete: ${task.name}`);
366
+ return {
367
+ success: true,
368
+ task: { ...task, status: 'complete' },
369
+ consensusResult,
370
+ };
371
+ }
372
+ catch (error) {
373
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
374
+ onProgress?.('task-error', errorMessage);
375
+ await updateTaskInState(projectDir, task.id, {
376
+ status: 'failed',
377
+ error: errorMessage,
378
+ });
379
+ return {
380
+ success: false,
381
+ task: { ...task, status: 'failed', error: errorMessage },
382
+ error: errorMessage,
383
+ };
384
+ }
385
+ }
386
+ //# sourceMappingURL=task-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-workflow.js","sourceRoot":"","sources":["../../src/workflow/task-workflow.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export interface TestResult {
14
14
  output: string;
15
15
  failedTests?: string[];
16
16
  error?: string;
17
+ noTestsFound?: boolean;
17
18
  }
18
19
  /**
19
20
  * Test configuration
@@ -60,6 +61,14 @@ export declare function runPythonTests(cwd: string, config?: Partial<TestConfig>
60
61
  * @returns Test result
61
62
  */
62
63
  export declare function runTypeScriptTests(cwd: string, config?: Partial<TestConfig>): Promise<TestResult>;
64
+ /**
65
+ * Run fullstack tests (both frontend and backend)
66
+ *
67
+ * @param cwd - Working directory
68
+ * @param config - Test configuration
69
+ * @returns Combined test result
70
+ */
71
+ export declare function runFullstackTests(cwd: string, config?: Partial<TestConfig>): Promise<TestResult>;
63
72
  /**
64
73
  * Run tests for a project
65
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAGhE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkC3D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,UAAU,CA6DpF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAkDlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiBzD"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAIhE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAwC3D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,UAAU,CAiGpF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA8BrB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CASrB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CA6ElB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiBzD"}
@@ -9,6 +9,7 @@ import { runTests as claudeRunTests } from '../adapters/claude.js';
9
9
  export const DEFAULT_TEST_COMMANDS = {
10
10
  python: 'python -m pytest tests/ -v',
11
11
  typescript: 'npm test',
12
+ fullstack: 'npm run test:all', // Runs both frontend and backend tests via workspace.json
12
13
  };
13
14
  /**
14
15
  * Build the test command for a language
@@ -42,6 +43,11 @@ export function buildTestCommand(config) {
42
43
  }
43
44
  return parts.join(' ');
44
45
  }
46
+ case 'fullstack': {
47
+ // Fullstack projects use workspace.json commands
48
+ // Default to running both frontend and backend tests
49
+ return 'npm run test:all';
50
+ }
45
51
  }
46
52
  }
47
53
  /**
@@ -92,8 +98,38 @@ export function parseTestOutput(output, language) {
92
98
  }
93
99
  break;
94
100
  }
101
+ case 'fullstack': {
102
+ // Fullstack combines pytest and jest output
103
+ // Parse both formats
104
+ const pytestMatch = output.match(/(\d+)\s+passed/);
105
+ const pytestFailedMatch = output.match(/(\d+)\s+failed/);
106
+ const jestMatch = output.match(/Tests:\s*(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*(\d+)\s+total/);
107
+ if (pytestMatch) {
108
+ passed += parseInt(pytestMatch[1], 10);
109
+ }
110
+ if (pytestFailedMatch) {
111
+ failed += parseInt(pytestFailedMatch[1], 10);
112
+ }
113
+ if (jestMatch) {
114
+ failed += jestMatch[1] ? parseInt(jestMatch[1], 10) : 0;
115
+ passed += parseInt(jestMatch[2], 10);
116
+ }
117
+ total = passed + failed;
118
+ // Extract failed test names from both pytest and jest
119
+ const pytestFailedMatches = output.matchAll(/FAILED\s+([^\s]+)/g);
120
+ for (const match of pytestFailedMatches) {
121
+ failedTests.push(match[1]);
122
+ }
123
+ const jestFailedMatches = output.matchAll(/✕\s+(.+)/g);
124
+ for (const match of jestFailedMatches) {
125
+ failedTests.push(match[1].trim());
126
+ }
127
+ break;
128
+ }
95
129
  }
96
- const success = failed === 0 && total > 0;
130
+ // Success if no failures - treat "no tests found" as success (not a failure)
131
+ // If total === 0, there are no tests to fail, so it's technically a pass
132
+ const success = failed === 0;
97
133
  return {
98
134
  success,
99
135
  passed,
@@ -101,6 +137,8 @@ export function parseTestOutput(output, language) {
101
137
  total,
102
138
  output,
103
139
  failedTests: failedTests.length > 0 ? failedTests : undefined,
140
+ // Flag to indicate no tests were found (for informational purposes)
141
+ noTestsFound: total === 0,
104
142
  };
105
143
  }
106
144
  /**
@@ -177,6 +215,40 @@ export async function runTypeScriptTests(cwd, config = {}) {
177
215
  };
178
216
  }
179
217
  }
218
+ /**
219
+ * Run fullstack tests (both frontend and backend)
220
+ *
221
+ * @param cwd - Working directory
222
+ * @param config - Test configuration
223
+ * @returns Combined test result
224
+ */
225
+ export async function runFullstackTests(cwd, config = {}) {
226
+ const path = await import('node:path');
227
+ // Run backend tests first
228
+ const backendCwd = path.join(cwd, 'apps', 'backend');
229
+ const backendResult = await runPythonTests(backendCwd, config);
230
+ // Run frontend tests
231
+ const frontendCwd = path.join(cwd, 'apps', 'frontend');
232
+ const frontendResult = await runTypeScriptTests(frontendCwd, config);
233
+ // Combine results
234
+ const combinedOutput = `=== Backend Tests ===\n${backendResult.output}\n\n=== Frontend Tests ===\n${frontendResult.output}`;
235
+ return {
236
+ success: backendResult.success && frontendResult.success,
237
+ passed: backendResult.passed + frontendResult.passed,
238
+ failed: backendResult.failed + frontendResult.failed,
239
+ total: backendResult.total + frontendResult.total,
240
+ output: combinedOutput,
241
+ failedTests: [
242
+ ...(backendResult.failedTests || []).map((t) => `[backend] ${t}`),
243
+ ...(frontendResult.failedTests || []).map((t) => `[frontend] ${t}`),
244
+ ].length > 0 ? [
245
+ ...(backendResult.failedTests || []).map((t) => `[backend] ${t}`),
246
+ ...(frontendResult.failedTests || []).map((t) => `[frontend] ${t}`),
247
+ ] : undefined,
248
+ error: backendResult.error || frontendResult.error,
249
+ noTestsFound: backendResult.noTestsFound && frontendResult.noTestsFound,
250
+ };
251
+ }
180
252
  /**
181
253
  * Run tests for a project
182
254
  *
@@ -191,6 +263,8 @@ export async function runTests(cwd, language, config = {}) {
191
263
  return runPythonTests(cwd, config);
192
264
  case 'typescript':
193
265
  return runTypeScriptTests(cwd, config);
266
+ case 'fullstack':
267
+ return runFullstackTests(cwd, config);
194
268
  }
195
269
  }
196
270
  /**
@@ -244,6 +318,28 @@ export async function testsExist(cwd, language) {
244
318
  }
245
319
  }
246
320
  }
321
+ case 'fullstack': {
322
+ // Check for tests in both frontend and backend
323
+ const backendTestsDir = path.join(cwd, 'apps', 'backend', 'tests');
324
+ const frontendTestsDir = path.join(cwd, 'apps', 'frontend', 'src');
325
+ let hasBackendTests = false;
326
+ let hasFrontendTests = false;
327
+ try {
328
+ await fs.access(backendTestsDir);
329
+ hasBackendTests = true;
330
+ }
331
+ catch {
332
+ // No backend tests directory
333
+ }
334
+ try {
335
+ const files = await fs.readdir(frontendTestsDir, { recursive: true });
336
+ hasFrontendTests = files.some((f) => f.toString().endsWith('.test.ts') || f.toString().endsWith('.spec.ts'));
337
+ }
338
+ catch {
339
+ // No frontend test files
340
+ }
341
+ return hasBackendTests || hasFrontendTests;
342
+ }
247
343
  }
248
344
  }
249
345
  catch {
@@ -260,11 +356,11 @@ export function getTestSummary(result) {
260
356
  if (result.error) {
261
357
  return `Tests failed to run: ${result.error}`;
262
358
  }
263
- if (result.total === 0) {
264
- return 'No tests found';
359
+ if (result.total === 0 || result.noTestsFound) {
360
+ return 'No tests found (OK)';
265
361
  }
266
- const status = result.success ? '' : '';
267
- let summary = `${status} ${result.passed}/${result.total} tests passed`;
362
+ const status = result.success ? 'PASS' : 'FAIL';
363
+ let summary = `${status}: ${result.passed}/${result.total} tests passed`;
268
364
  if (result.failed > 0) {
269
365
  summary += ` (${result.failed} failed)`;
270
366
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA4BnE;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmC;IACnE,MAAM,EAAE,4BAA4B;IACpC,UAAU,EAAE,UAAU;IACtB,SAAS,EAAE,kBAAkB,EAAG,0DAA0D;CAC3F,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAExD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEzC,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;YACvD,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAE9B,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,iDAAiD;YACjD,qDAAqD;YACrD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,QAAwB;IACtE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,sBAAsB;YACtB,oDAAoD;YACpD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEnD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;YAExB,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAChE,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,2BAA2B;YAC3B,gDAAgD;YAChD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAErG,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACvD,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,4CAA4C;YAC5C,qBAAqB;YACrB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnD,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAElG,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;YAExB,sDAAsD;YACtD,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAClE,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;gBACxC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACvD,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC;IAE7B,OAAO;QACL,OAAO;QACP,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC7D,oEAAoE;QACpE,YAAY,EAAE,KAAK,KAAK,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,SAA8B,EAAE;IAEhC,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACnC,QAAQ,EAAE,QAAQ;QAClB,GAAG,MAAM;KACV,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,MAAM,CAAC,QAAQ;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;SAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,SAA8B,EAAE;IAEhC,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACnC,QAAQ,EAAE,YAAY;QACtB,GAAG,MAAM;KACV,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,MAAM,CAAC,QAAQ;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;SAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,SAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvC,0BAA0B;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/D,qBAAqB;IACrB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAErE,kBAAkB;IAClB,MAAM,cAAc,GAAG,0BAA0B,aAAa,CAAC,MAAM,+BAA+B,cAAc,CAAC,MAAM,EAAE,CAAC;IAE5H,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;QACxD,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;QACpD,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;QACpD,KAAK,EAAE,aAAa,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK;QACjD,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE;YACX,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;SACpE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC,CAAC,SAAS;QACb,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK;QAClD,YAAY,EAAE,aAAa,CAAC,YAAY,IAAI,cAAc,CAAC,YAAY;KACxE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,QAAwB,EACxB,SAA8B,EAAE;IAEhC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzC,KAAK,WAAW;YACd,OAAO,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,QAAwB;IAExB,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,gDAAgD;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;oBAC/B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,kDAAkD;gBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAEhD,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC;wBACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBAC7B,OAAO,IAAI,CAAC;oBACd,CAAC;oBAAC,MAAM,CAAC;wBACP,8BAA8B;wBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,CAAC;4BACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAC5D,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAC3E,CAAC;wBACJ,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,+CAA+C;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBAEnE,IAAI,eAAe,GAAG,KAAK,CAAC;gBAC5B,IAAI,gBAAgB,GAAG,KAAK,CAAC;gBAE7B,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;oBACjC,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtE,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC9E,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;gBAED,OAAO,eAAe,IAAI,gBAAgB,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,wBAAwB,MAAM,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9C,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,OAAO,GAAG,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,eAAe,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,KAAK,MAAM,CAAC,MAAM,UAAU,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}