popeye-cli 1.0.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 (209) hide show
  1. package/.env.example +25 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +320 -0
  4. package/dist/adapters/claude.d.ts +82 -0
  5. package/dist/adapters/claude.d.ts.map +1 -0
  6. package/dist/adapters/claude.js +230 -0
  7. package/dist/adapters/claude.js.map +1 -0
  8. package/dist/adapters/openai.d.ts +48 -0
  9. package/dist/adapters/openai.d.ts.map +1 -0
  10. package/dist/adapters/openai.js +257 -0
  11. package/dist/adapters/openai.js.map +1 -0
  12. package/dist/auth/claude.d.ts +44 -0
  13. package/dist/auth/claude.d.ts.map +1 -0
  14. package/dist/auth/claude.js +139 -0
  15. package/dist/auth/claude.js.map +1 -0
  16. package/dist/auth/index.d.ts +61 -0
  17. package/dist/auth/index.d.ts.map +1 -0
  18. package/dist/auth/index.js +141 -0
  19. package/dist/auth/index.js.map +1 -0
  20. package/dist/auth/keychain.d.ts +66 -0
  21. package/dist/auth/keychain.d.ts.map +1 -0
  22. package/dist/auth/keychain.js +125 -0
  23. package/dist/auth/keychain.js.map +1 -0
  24. package/dist/auth/openai-entry.d.ts +9 -0
  25. package/dist/auth/openai-entry.d.ts.map +1 -0
  26. package/dist/auth/openai-entry.js +410 -0
  27. package/dist/auth/openai-entry.js.map +1 -0
  28. package/dist/auth/openai.d.ts +71 -0
  29. package/dist/auth/openai.d.ts.map +1 -0
  30. package/dist/auth/openai.js +212 -0
  31. package/dist/auth/openai.js.map +1 -0
  32. package/dist/auth/server.d.ts +32 -0
  33. package/dist/auth/server.d.ts.map +1 -0
  34. package/dist/auth/server.js +213 -0
  35. package/dist/auth/server.js.map +1 -0
  36. package/dist/cli/commands/auth.d.ts +10 -0
  37. package/dist/cli/commands/auth.d.ts.map +1 -0
  38. package/dist/cli/commands/auth.js +162 -0
  39. package/dist/cli/commands/auth.js.map +1 -0
  40. package/dist/cli/commands/config.d.ts +10 -0
  41. package/dist/cli/commands/config.d.ts.map +1 -0
  42. package/dist/cli/commands/config.js +215 -0
  43. package/dist/cli/commands/config.js.map +1 -0
  44. package/dist/cli/commands/create.d.ts +10 -0
  45. package/dist/cli/commands/create.d.ts.map +1 -0
  46. package/dist/cli/commands/create.js +240 -0
  47. package/dist/cli/commands/create.js.map +1 -0
  48. package/dist/cli/commands/index.d.ts +10 -0
  49. package/dist/cli/commands/index.d.ts.map +1 -0
  50. package/dist/cli/commands/index.js +10 -0
  51. package/dist/cli/commands/index.js.map +1 -0
  52. package/dist/cli/commands/resume.d.ts +18 -0
  53. package/dist/cli/commands/resume.d.ts.map +1 -0
  54. package/dist/cli/commands/resume.js +241 -0
  55. package/dist/cli/commands/resume.js.map +1 -0
  56. package/dist/cli/commands/status.d.ts +18 -0
  57. package/dist/cli/commands/status.d.ts.map +1 -0
  58. package/dist/cli/commands/status.js +154 -0
  59. package/dist/cli/commands/status.js.map +1 -0
  60. package/dist/cli/index.d.ts +17 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +71 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/interactive.d.ts +9 -0
  65. package/dist/cli/interactive.d.ts.map +1 -0
  66. package/dist/cli/interactive.js +330 -0
  67. package/dist/cli/interactive.js.map +1 -0
  68. package/dist/cli/output.d.ts +182 -0
  69. package/dist/cli/output.d.ts.map +1 -0
  70. package/dist/cli/output.js +355 -0
  71. package/dist/cli/output.js.map +1 -0
  72. package/dist/config/defaults.d.ts +57 -0
  73. package/dist/config/defaults.d.ts.map +1 -0
  74. package/dist/config/defaults.js +103 -0
  75. package/dist/config/defaults.js.map +1 -0
  76. package/dist/config/index.d.ts +138 -0
  77. package/dist/config/index.d.ts.map +1 -0
  78. package/dist/config/index.js +244 -0
  79. package/dist/config/index.js.map +1 -0
  80. package/dist/config/schema.d.ts +220 -0
  81. package/dist/config/schema.d.ts.map +1 -0
  82. package/dist/config/schema.js +141 -0
  83. package/dist/config/schema.js.map +1 -0
  84. package/dist/generators/index.d.ts +101 -0
  85. package/dist/generators/index.d.ts.map +1 -0
  86. package/dist/generators/index.js +200 -0
  87. package/dist/generators/index.js.map +1 -0
  88. package/dist/generators/python.d.ts +48 -0
  89. package/dist/generators/python.d.ts.map +1 -0
  90. package/dist/generators/python.js +262 -0
  91. package/dist/generators/python.js.map +1 -0
  92. package/dist/generators/templates/index.d.ts +6 -0
  93. package/dist/generators/templates/index.d.ts.map +1 -0
  94. package/dist/generators/templates/index.js +6 -0
  95. package/dist/generators/templates/index.js.map +1 -0
  96. package/dist/generators/templates/python.d.ts +53 -0
  97. package/dist/generators/templates/python.d.ts.map +1 -0
  98. package/dist/generators/templates/python.js +454 -0
  99. package/dist/generators/templates/python.js.map +1 -0
  100. package/dist/generators/templates/typescript.d.ts +53 -0
  101. package/dist/generators/templates/typescript.d.ts.map +1 -0
  102. package/dist/generators/templates/typescript.js +394 -0
  103. package/dist/generators/templates/typescript.js.map +1 -0
  104. package/dist/generators/typescript.d.ts +64 -0
  105. package/dist/generators/typescript.d.ts.map +1 -0
  106. package/dist/generators/typescript.js +271 -0
  107. package/dist/generators/typescript.js.map +1 -0
  108. package/dist/index.d.ts +7 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +12 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/state/index.d.ts +168 -0
  113. package/dist/state/index.d.ts.map +1 -0
  114. package/dist/state/index.js +338 -0
  115. package/dist/state/index.js.map +1 -0
  116. package/dist/state/persistence.d.ts +91 -0
  117. package/dist/state/persistence.d.ts.map +1 -0
  118. package/dist/state/persistence.js +201 -0
  119. package/dist/state/persistence.js.map +1 -0
  120. package/dist/types/cli.d.ts +132 -0
  121. package/dist/types/cli.d.ts.map +1 -0
  122. package/dist/types/cli.js +17 -0
  123. package/dist/types/cli.js.map +1 -0
  124. package/dist/types/consensus.d.ts +111 -0
  125. package/dist/types/consensus.d.ts.map +1 -0
  126. package/dist/types/consensus.js +29 -0
  127. package/dist/types/consensus.js.map +1 -0
  128. package/dist/types/index.d.ts +9 -0
  129. package/dist/types/index.d.ts.map +1 -0
  130. package/dist/types/index.js +13 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/project.d.ts +73 -0
  133. package/dist/types/project.d.ts.map +1 -0
  134. package/dist/types/project.js +55 -0
  135. package/dist/types/project.js.map +1 -0
  136. package/dist/types/workflow.d.ts +236 -0
  137. package/dist/types/workflow.d.ts.map +1 -0
  138. package/dist/types/workflow.js +74 -0
  139. package/dist/types/workflow.js.map +1 -0
  140. package/dist/workflow/consensus.d.ts +89 -0
  141. package/dist/workflow/consensus.d.ts.map +1 -0
  142. package/dist/workflow/consensus.js +220 -0
  143. package/dist/workflow/consensus.js.map +1 -0
  144. package/dist/workflow/execution-mode.d.ts +82 -0
  145. package/dist/workflow/execution-mode.d.ts.map +1 -0
  146. package/dist/workflow/execution-mode.js +346 -0
  147. package/dist/workflow/execution-mode.js.map +1 -0
  148. package/dist/workflow/index.d.ts +110 -0
  149. package/dist/workflow/index.d.ts.map +1 -0
  150. package/dist/workflow/index.js +283 -0
  151. package/dist/workflow/index.js.map +1 -0
  152. package/dist/workflow/plan-mode.d.ts +83 -0
  153. package/dist/workflow/plan-mode.d.ts.map +1 -0
  154. package/dist/workflow/plan-mode.js +241 -0
  155. package/dist/workflow/plan-mode.js.map +1 -0
  156. package/dist/workflow/test-runner.d.ts +87 -0
  157. package/dist/workflow/test-runner.d.ts.map +1 -0
  158. package/dist/workflow/test-runner.js +273 -0
  159. package/dist/workflow/test-runner.js.map +1 -0
  160. package/eslint.config.js +25 -0
  161. package/package.json +66 -0
  162. package/src/adapters/claude.ts +298 -0
  163. package/src/adapters/openai.ts +300 -0
  164. package/src/auth/claude.ts +166 -0
  165. package/src/auth/index.ts +171 -0
  166. package/src/auth/keychain.ts +138 -0
  167. package/src/auth/openai-entry.ts +410 -0
  168. package/src/auth/openai.ts +260 -0
  169. package/src/auth/server.ts +252 -0
  170. package/src/cli/commands/auth.ts +194 -0
  171. package/src/cli/commands/config.ts +241 -0
  172. package/src/cli/commands/create.ts +308 -0
  173. package/src/cli/commands/index.ts +10 -0
  174. package/src/cli/commands/resume.ts +304 -0
  175. package/src/cli/commands/status.ts +189 -0
  176. package/src/cli/index.ts +90 -0
  177. package/src/cli/interactive.ts +418 -0
  178. package/src/cli/output.ts +410 -0
  179. package/src/config/defaults.ts +114 -0
  180. package/src/config/index.ts +315 -0
  181. package/src/config/schema.ts +164 -0
  182. package/src/generators/index.ts +251 -0
  183. package/src/generators/python.ts +318 -0
  184. package/src/generators/templates/index.ts +6 -0
  185. package/src/generators/templates/python.ts +465 -0
  186. package/src/generators/templates/typescript.ts +417 -0
  187. package/src/generators/typescript.ts +340 -0
  188. package/src/index.ts +13 -0
  189. package/src/state/index.ts +454 -0
  190. package/src/state/persistence.ts +230 -0
  191. package/src/types/cli.ts +146 -0
  192. package/src/types/consensus.ts +116 -0
  193. package/src/types/index.ts +64 -0
  194. package/src/types/project.ts +85 -0
  195. package/src/types/workflow.ts +149 -0
  196. package/src/workflow/consensus.ts +299 -0
  197. package/src/workflow/execution-mode.ts +517 -0
  198. package/src/workflow/index.ts +396 -0
  199. package/src/workflow/plan-mode.ts +356 -0
  200. package/src/workflow/test-runner.ts +345 -0
  201. package/tests/adapters/openai.test.ts +145 -0
  202. package/tests/config/config.test.ts +208 -0
  203. package/tests/generators/generators.test.ts +185 -0
  204. package/tests/types/consensus.test.ts +152 -0
  205. package/tests/types/project.test.ts +134 -0
  206. package/tests/workflow/consensus.test.ts +221 -0
  207. package/tests/workflow/test-runner.test.ts +214 -0
  208. package/tsconfig.json +25 -0
  209. package/vitest.config.ts +22 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Execution Mode workflow
3
+ * Handles task execution, testing, and error recovery
4
+ */
5
+ import type { ProjectState, Task, Milestone } from '../types/workflow.js';
6
+ import { type ClaudeExecuteResult } from '../adapters/claude.js';
7
+ import { type TestResult } from './test-runner.js';
8
+ /**
9
+ * Options for execution mode
10
+ */
11
+ export interface ExecutionModeOptions {
12
+ projectDir: string;
13
+ maxRetries?: number;
14
+ onProgress?: (phase: string, message: string) => void;
15
+ onTaskStart?: (milestone: Milestone, task: Task) => void;
16
+ onTaskComplete?: (milestone: Milestone, task: Task, success: boolean) => void;
17
+ onTestResult?: (result: TestResult) => void;
18
+ }
19
+ /**
20
+ * Result of task execution
21
+ */
22
+ export interface TaskExecutionResult {
23
+ success: boolean;
24
+ task: Task;
25
+ response?: string;
26
+ testResult?: TestResult;
27
+ error?: string;
28
+ retries: number;
29
+ }
30
+ /**
31
+ * Result of execution mode
32
+ */
33
+ export interface ExecutionModeResult {
34
+ success: boolean;
35
+ state: ProjectState;
36
+ completedTasks: number;
37
+ failedTasks: number;
38
+ error?: string;
39
+ }
40
+ /**
41
+ * Execute a single task
42
+ *
43
+ * @param task - The task to execute
44
+ * @param context - Execution context
45
+ * @param projectDir - Project directory
46
+ * @returns Execution result
47
+ */
48
+ export declare function executeTask(task: Task, context: string, projectDir: string): Promise<ClaudeExecuteResult>;
49
+ /**
50
+ * Handle a test failure by attempting to fix the code
51
+ *
52
+ * @param task - The failed task
53
+ * @param testResult - The test result
54
+ * @param context - Execution context
55
+ * @param projectDir - Project directory
56
+ * @returns Fix attempt result
57
+ */
58
+ export declare function handleTestFailure(task: Task, testResult: TestResult, context: string, projectDir: string): Promise<ClaudeExecuteResult>;
59
+ /**
60
+ * Run execution mode for a project
61
+ *
62
+ * @param options - Execution options
63
+ * @returns Execution mode result
64
+ */
65
+ export declare function runExecutionMode(options: ExecutionModeOptions): Promise<ExecutionModeResult>;
66
+ /**
67
+ * Resume execution mode from where it left off
68
+ *
69
+ * @param options - Execution options
70
+ * @returns Execution mode result
71
+ */
72
+ export declare function resumeExecutionMode(options: ExecutionModeOptions): Promise<ExecutionModeResult>;
73
+ /**
74
+ * Execute a single task by ID
75
+ *
76
+ * @param projectDir - Project directory
77
+ * @param taskId - Task ID to execute
78
+ * @param options - Execution options
79
+ * @returns Task execution result
80
+ */
81
+ export declare function executeSingleTask(projectDir: string, taskId: string, options?: Partial<ExecutionModeOptions>): Promise<TaskExecutionResult>;
82
+ //# sourceMappingURL=execution-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-mode.d.ts","sourceRoot":"","sources":["../../src/workflow/execution-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAY/E,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACzD,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwDD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAwB9B;AAyGD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAuI9B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA8B9B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Execution Mode workflow
3
+ * Handles task execution, testing, and error recovery
4
+ */
5
+ import { generateCode } from '../adapters/claude.js';
6
+ import { loadProject, updateState, updateTaskStatus, setCurrentMilestone, setCurrentTask, getNextTask, getProgress, completeProject, failProject, } from '../state/index.js';
7
+ import { runTests, testsExist, getTestSummary, } from './test-runner.js';
8
+ /**
9
+ * Maximum number of retries for failed tests
10
+ */
11
+ const DEFAULT_MAX_RETRIES = 3;
12
+ /**
13
+ * Build the execution context for a task
14
+ *
15
+ * @param state - Current project state
16
+ * @param milestone - Current milestone
17
+ * @param task - Current task
18
+ * @returns Context string for code generation
19
+ */
20
+ function buildTaskContext(state, milestone, _task) {
21
+ const lines = [];
22
+ lines.push(`## Project: ${state.name}`);
23
+ lines.push(`Language: ${state.language}`);
24
+ lines.push('');
25
+ if (state.specification) {
26
+ lines.push('## Specification');
27
+ lines.push(state.specification.slice(0, 2000));
28
+ lines.push('');
29
+ }
30
+ if (state.plan) {
31
+ lines.push('## Development Plan');
32
+ lines.push(state.plan.slice(0, 2000));
33
+ lines.push('');
34
+ }
35
+ lines.push('## Current Milestone');
36
+ lines.push(`Name: ${milestone.name}`);
37
+ lines.push(`Description: ${milestone.description}`);
38
+ lines.push('');
39
+ // Add completed tasks for context
40
+ const completedTasks = milestone.tasks.filter((t) => t.status === 'complete');
41
+ if (completedTasks.length > 0) {
42
+ lines.push('## Completed Tasks in This Milestone');
43
+ for (const t of completedTasks) {
44
+ lines.push(`- ${t.name}`);
45
+ }
46
+ lines.push('');
47
+ }
48
+ return lines.join('\n');
49
+ }
50
+ /**
51
+ * Execute a single task
52
+ *
53
+ * @param task - The task to execute
54
+ * @param context - Execution context
55
+ * @param projectDir - Project directory
56
+ * @returns Execution result
57
+ */
58
+ export async function executeTask(task, context, projectDir) {
59
+ const prompt = `
60
+ ## Task
61
+ ${task.name}
62
+
63
+ ## Description
64
+ ${task.description || task.name}
65
+
66
+ ${task.testPlan ? `## Test Requirements\n${task.testPlan}\n` : ''}
67
+
68
+ Please implement this task completely. After implementing:
69
+ 1. Create appropriate tests if needed
70
+ 2. Ensure code follows best practices
71
+ 3. Document any complex logic
72
+ `.trim();
73
+ return generateCode(prompt, context, { cwd: projectDir });
74
+ }
75
+ /**
76
+ * Handle a test failure by attempting to fix the code
77
+ *
78
+ * @param task - The failed task
79
+ * @param testResult - The test result
80
+ * @param context - Execution context
81
+ * @param projectDir - Project directory
82
+ * @returns Fix attempt result
83
+ */
84
+ export async function handleTestFailure(task, testResult, context, projectDir) {
85
+ const prompt = `
86
+ ## Test Failure Fix Required
87
+
88
+ The tests for the following task have failed:
89
+
90
+ ### Task
91
+ ${task.name}
92
+
93
+ ### Test Output
94
+ \`\`\`
95
+ ${testResult.output.slice(0, 3000)}
96
+ \`\`\`
97
+
98
+ ### Failed Tests
99
+ ${testResult.failedTests?.map((t) => `- ${t}`).join('\n') || 'See output above'}
100
+
101
+ Please:
102
+ 1. Analyze the test failures
103
+ 2. Fix the code to make all tests pass
104
+ 3. Do NOT modify the tests unless they are incorrect
105
+ `.trim();
106
+ return generateCode(prompt, context, { cwd: projectDir });
107
+ }
108
+ /**
109
+ * Execute a task with retry logic for test failures
110
+ *
111
+ * @param milestone - The milestone containing the task
112
+ * @param task - The task to execute
113
+ * @param state - Current project state
114
+ * @param options - Execution options
115
+ * @returns Task execution result
116
+ */
117
+ async function executeTaskWithRetry(milestone, task, state, options) {
118
+ const { projectDir, maxRetries = DEFAULT_MAX_RETRIES, onTestResult, } = options;
119
+ const context = buildTaskContext(state, milestone, task);
120
+ let retries = 0;
121
+ // Execute the task
122
+ const execResult = await executeTask(task, context, projectDir);
123
+ if (!execResult.success) {
124
+ return {
125
+ success: false,
126
+ task,
127
+ error: execResult.error || 'Task execution failed',
128
+ retries: 0,
129
+ };
130
+ }
131
+ // Check if tests exist
132
+ const hasTests = await testsExist(projectDir, state.language);
133
+ if (!hasTests) {
134
+ // No tests to run, mark as complete
135
+ return {
136
+ success: true,
137
+ task,
138
+ response: execResult.response,
139
+ retries: 0,
140
+ };
141
+ }
142
+ // Run tests with retry loop
143
+ while (retries <= maxRetries) {
144
+ const testResult = await runTests(projectDir, state.language);
145
+ if (onTestResult) {
146
+ onTestResult(testResult);
147
+ }
148
+ if (testResult.success) {
149
+ return {
150
+ success: true,
151
+ task,
152
+ response: execResult.response,
153
+ testResult,
154
+ retries,
155
+ };
156
+ }
157
+ // Tests failed
158
+ if (retries >= maxRetries) {
159
+ return {
160
+ success: false,
161
+ task,
162
+ response: execResult.response,
163
+ testResult,
164
+ error: `Tests failed after ${retries} retries: ${getTestSummary(testResult)}`,
165
+ retries,
166
+ };
167
+ }
168
+ // Attempt to fix
169
+ retries++;
170
+ const fixResult = await handleTestFailure(task, testResult, context, projectDir);
171
+ if (!fixResult.success) {
172
+ return {
173
+ success: false,
174
+ task,
175
+ testResult,
176
+ error: `Fix attempt failed: ${fixResult.error}`,
177
+ retries,
178
+ };
179
+ }
180
+ }
181
+ // Should not reach here
182
+ return {
183
+ success: false,
184
+ task,
185
+ error: 'Unexpected error in retry loop',
186
+ retries,
187
+ };
188
+ }
189
+ /**
190
+ * Run execution mode for a project
191
+ *
192
+ * @param options - Execution options
193
+ * @returns Execution mode result
194
+ */
195
+ export async function runExecutionMode(options) {
196
+ const { projectDir, onProgress, onTaskStart, onTaskComplete, } = options;
197
+ let completedTasks = 0;
198
+ let failedTasks = 0;
199
+ try {
200
+ let state = await loadProject(projectDir);
201
+ // Ensure we're in execution phase
202
+ if (state.phase !== 'execution') {
203
+ return {
204
+ success: false,
205
+ state,
206
+ completedTasks: 0,
207
+ failedTasks: 0,
208
+ error: `Cannot run execution mode: project is in ${state.phase} phase`,
209
+ };
210
+ }
211
+ // Update status
212
+ state = await updateState(projectDir, { status: 'in-progress' });
213
+ onProgress?.('execution-start', 'Starting execution mode...');
214
+ // Process tasks
215
+ let nextTask = await getNextTask(projectDir);
216
+ while (nextTask) {
217
+ const { milestone, task } = nextTask;
218
+ // Set current milestone and task
219
+ state = await setCurrentMilestone(projectDir, milestone.id);
220
+ state = await setCurrentTask(projectDir, task.id);
221
+ // Update task to in-progress
222
+ state = await updateTaskStatus(projectDir, task.id, 'in-progress');
223
+ onProgress?.('task-start', `Executing: ${task.name} (Milestone: ${milestone.name})`);
224
+ if (onTaskStart) {
225
+ onTaskStart(milestone, task);
226
+ }
227
+ // Execute the task
228
+ const result = await executeTaskWithRetry(milestone, task, state, options);
229
+ if (result.success) {
230
+ state = await updateTaskStatus(projectDir, task.id, 'complete', {
231
+ testsPassed: result.testResult?.success,
232
+ });
233
+ completedTasks++;
234
+ onProgress?.('task-complete', `Completed: ${task.name}${result.testResult ? ` (${getTestSummary(result.testResult)})` : ''}`);
235
+ }
236
+ else {
237
+ state = await updateTaskStatus(projectDir, task.id, 'failed', {
238
+ testsPassed: false,
239
+ error: result.error,
240
+ });
241
+ failedTasks++;
242
+ onProgress?.('task-failed', `Failed: ${task.name} - ${result.error}`);
243
+ }
244
+ if (onTaskComplete) {
245
+ onTaskComplete(milestone, task, result.success);
246
+ }
247
+ // Get next task
248
+ nextTask = await getNextTask(projectDir);
249
+ }
250
+ // Check final status
251
+ const progress = await getProgress(projectDir);
252
+ if (failedTasks > 0) {
253
+ state = await failProject(projectDir, `${failedTasks} tasks failed out of ${progress.totalTasks}`);
254
+ return {
255
+ success: false,
256
+ state,
257
+ completedTasks,
258
+ failedTasks,
259
+ error: `Execution completed with ${failedTasks} failed tasks`,
260
+ };
261
+ }
262
+ // All tasks complete
263
+ state = await completeProject(projectDir);
264
+ onProgress?.('execution-complete', `Project complete! ${completedTasks} tasks executed successfully.`);
265
+ return {
266
+ success: true,
267
+ state,
268
+ completedTasks,
269
+ failedTasks: 0,
270
+ };
271
+ }
272
+ catch (error) {
273
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
274
+ onProgress?.('error', errorMessage);
275
+ return {
276
+ success: false,
277
+ state: await loadProject(projectDir).catch(() => ({})),
278
+ completedTasks,
279
+ failedTasks,
280
+ error: errorMessage,
281
+ };
282
+ }
283
+ }
284
+ /**
285
+ * Resume execution mode from where it left off
286
+ *
287
+ * @param options - Execution options
288
+ * @returns Execution mode result
289
+ */
290
+ export async function resumeExecutionMode(options) {
291
+ const state = await loadProject(options.projectDir);
292
+ // Check current status
293
+ if (state.status === 'complete') {
294
+ return {
295
+ success: true,
296
+ state,
297
+ completedTasks: state.milestones.flatMap((m) => m.tasks).filter((t) => t.status === 'complete').length,
298
+ failedTasks: 0,
299
+ };
300
+ }
301
+ // Reset failed tasks to pending so they can be retried
302
+ if (state.status === 'failed') {
303
+ const updatedMilestones = state.milestones.map((m) => ({
304
+ ...m,
305
+ tasks: m.tasks.map((t) => t.status === 'failed' ? { ...t, status: 'pending', error: undefined } : t),
306
+ }));
307
+ await updateState(options.projectDir, {
308
+ milestones: updatedMilestones,
309
+ status: 'pending',
310
+ error: undefined,
311
+ });
312
+ }
313
+ return runExecutionMode(options);
314
+ }
315
+ /**
316
+ * Execute a single task by ID
317
+ *
318
+ * @param projectDir - Project directory
319
+ * @param taskId - Task ID to execute
320
+ * @param options - Execution options
321
+ * @returns Task execution result
322
+ */
323
+ export async function executeSingleTask(projectDir, taskId, options = {}) {
324
+ const state = await loadProject(projectDir);
325
+ // Find the task
326
+ let foundTask;
327
+ let foundMilestone;
328
+ for (const milestone of state.milestones) {
329
+ const task = milestone.tasks.find((t) => t.id === taskId);
330
+ if (task) {
331
+ foundTask = task;
332
+ foundMilestone = milestone;
333
+ break;
334
+ }
335
+ }
336
+ if (!foundTask || !foundMilestone) {
337
+ return {
338
+ success: false,
339
+ task: { id: taskId, name: 'Unknown', status: 'pending', description: '' },
340
+ error: `Task ${taskId} not found`,
341
+ retries: 0,
342
+ };
343
+ }
344
+ return executeTaskWithRetry(foundMilestone, foundTask, state, { projectDir, ...options });
345
+ }
346
+ //# sourceMappingURL=execution-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-mode.js","sourceRoot":"","sources":["../../src/workflow/execution-mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Workflow orchestration module
3
+ * Main entry point for managing the complete project workflow
4
+ */
5
+ import type { ProjectSpec } from '../types/project.js';
6
+ import type { ProjectState, WorkflowPhase } from '../types/workflow.js';
7
+ import type { ConsensusConfig } from '../types/consensus.js';
8
+ import { type PlanModeResult } from './plan-mode.js';
9
+ import { type ExecutionModeResult, type TaskExecutionResult } from './execution-mode.js';
10
+ export * from './consensus.js';
11
+ export * from './plan-mode.js';
12
+ export * from './execution-mode.js';
13
+ export * from './test-runner.js';
14
+ /**
15
+ * Workflow options
16
+ */
17
+ export interface WorkflowOptions {
18
+ projectDir: string;
19
+ consensusConfig?: Partial<ConsensusConfig>;
20
+ maxRetries?: number;
21
+ onProgress?: (phase: string, message: string) => void;
22
+ }
23
+ /**
24
+ * Complete workflow result
25
+ */
26
+ export interface WorkflowResult {
27
+ success: boolean;
28
+ state: ProjectState;
29
+ planResult?: PlanModeResult;
30
+ executionResult?: ExecutionModeResult;
31
+ error?: string;
32
+ }
33
+ /**
34
+ * Run the complete workflow from idea to deployed code
35
+ *
36
+ * @param spec - Project specification
37
+ * @param options - Workflow options
38
+ * @returns Workflow result
39
+ */
40
+ export declare function runWorkflow(spec: ProjectSpec, options: WorkflowOptions): Promise<WorkflowResult>;
41
+ /**
42
+ * Resume an existing workflow from where it left off
43
+ *
44
+ * @param projectDir - Project directory
45
+ * @param options - Workflow options
46
+ * @returns Workflow result
47
+ */
48
+ export declare function resumeWorkflow(projectDir: string, options: Omit<WorkflowOptions, 'projectDir'>): Promise<WorkflowResult>;
49
+ /**
50
+ * Get workflow status and progress
51
+ *
52
+ * @param projectDir - Project directory
53
+ * @returns Status information
54
+ */
55
+ export declare function getWorkflowStatus(projectDir: string): Promise<{
56
+ exists: boolean;
57
+ state?: ProjectState;
58
+ progress?: {
59
+ totalMilestones: number;
60
+ completedMilestones: number;
61
+ totalTasks: number;
62
+ completedTasks: number;
63
+ percentComplete: number;
64
+ };
65
+ }>;
66
+ /**
67
+ * Reset workflow to a specific phase
68
+ *
69
+ * @param projectDir - Project directory
70
+ * @param phase - Phase to reset to
71
+ * @returns Updated state
72
+ */
73
+ export declare function resetWorkflow(projectDir: string, phase: WorkflowPhase): Promise<ProjectState>;
74
+ /**
75
+ * Cancel and delete a workflow
76
+ *
77
+ * @param projectDir - Project directory
78
+ * @returns True if deleted
79
+ */
80
+ export declare function cancelWorkflow(projectDir: string): Promise<boolean>;
81
+ /**
82
+ * Get a human-readable summary of the workflow status
83
+ *
84
+ * @param projectDir - Project directory
85
+ * @returns Summary string
86
+ */
87
+ export declare function getWorkflowSummary(projectDir: string): Promise<string>;
88
+ /**
89
+ * Execute a single task manually
90
+ *
91
+ * @param projectDir - Project directory
92
+ * @param taskId - Task ID
93
+ * @param options - Execution options
94
+ * @returns Task result
95
+ */
96
+ export declare function executeTask(projectDir: string, taskId: string, options?: {
97
+ maxRetries?: number;
98
+ onProgress?: (message: string) => void;
99
+ }): Promise<TaskExecutionResult>;
100
+ /**
101
+ * Validate that a project is ready for execution
102
+ *
103
+ * @param projectDir - Project directory
104
+ * @returns Validation result
105
+ */
106
+ export declare function validateReadyForExecution(projectDir: string): Promise<{
107
+ ready: boolean;
108
+ issues: string[];
109
+ }>;
110
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQ7D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAI7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAC3C,OAAO,CAAC,cAAc,CAAC,CAqFzB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC,CAaD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwD5E;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACxE,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3E,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAmCD"}