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,236 @@
1
+ /**
2
+ * Workflow-related type definitions
3
+ * Defines workflow modes, tasks, milestones, and state transitions
4
+ */
5
+ import { z } from 'zod';
6
+ import type { OutputLanguage, OpenAIModel } from './project.js';
7
+ import type { ConsensusIteration } from './consensus.js';
8
+ /**
9
+ * Workflow phases
10
+ */
11
+ export declare const WorkflowPhaseSchema: z.ZodEnum<{
12
+ plan: "plan";
13
+ execution: "execution";
14
+ complete: "complete";
15
+ }>;
16
+ export type WorkflowPhase = z.infer<typeof WorkflowPhaseSchema>;
17
+ /**
18
+ * Project status
19
+ */
20
+ export declare const ProjectStatusSchema: z.ZodEnum<{
21
+ complete: "complete";
22
+ pending: "pending";
23
+ "in-progress": "in-progress";
24
+ failed: "failed";
25
+ }>;
26
+ export type ProjectStatus = z.infer<typeof ProjectStatusSchema>;
27
+ /**
28
+ * Status of a task or milestone
29
+ */
30
+ export declare const TaskStatusSchema: z.ZodEnum<{
31
+ complete: "complete";
32
+ pending: "pending";
33
+ "in-progress": "in-progress";
34
+ failed: "failed";
35
+ }>;
36
+ export type TaskStatus = z.infer<typeof TaskStatusSchema>;
37
+ /**
38
+ * Individual task within a milestone
39
+ */
40
+ export interface Task {
41
+ id: string;
42
+ name: string;
43
+ description: string;
44
+ status: TaskStatus;
45
+ testsPassed?: boolean;
46
+ testPlan?: string;
47
+ error?: string;
48
+ }
49
+ /**
50
+ * Zod schema for Task
51
+ */
52
+ export declare const TaskSchema: z.ZodObject<{
53
+ id: z.ZodString;
54
+ name: z.ZodString;
55
+ description: z.ZodString;
56
+ status: z.ZodEnum<{
57
+ complete: "complete";
58
+ pending: "pending";
59
+ "in-progress": "in-progress";
60
+ failed: "failed";
61
+ }>;
62
+ testsPassed: z.ZodOptional<z.ZodBoolean>;
63
+ testPlan: z.ZodOptional<z.ZodString>;
64
+ error: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>;
66
+ /**
67
+ * Milestone containing multiple tasks
68
+ */
69
+ export interface Milestone {
70
+ id: string;
71
+ name: string;
72
+ description: string;
73
+ status: TaskStatus;
74
+ tasks: Task[];
75
+ }
76
+ /**
77
+ * Zod schema for Milestone
78
+ */
79
+ export declare const MilestoneSchema: z.ZodObject<{
80
+ id: z.ZodString;
81
+ name: z.ZodString;
82
+ description: z.ZodString;
83
+ status: z.ZodEnum<{
84
+ complete: "complete";
85
+ pending: "pending";
86
+ "in-progress": "in-progress";
87
+ failed: "failed";
88
+ }>;
89
+ tasks: z.ZodArray<z.ZodObject<{
90
+ id: z.ZodString;
91
+ name: z.ZodString;
92
+ description: z.ZodString;
93
+ status: z.ZodEnum<{
94
+ complete: "complete";
95
+ pending: "pending";
96
+ "in-progress": "in-progress";
97
+ failed: "failed";
98
+ }>;
99
+ testsPassed: z.ZodOptional<z.ZodBoolean>;
100
+ testPlan: z.ZodOptional<z.ZodString>;
101
+ error: z.ZodOptional<z.ZodString>;
102
+ }, z.core.$strip>>;
103
+ }, z.core.$strip>;
104
+ /**
105
+ * Complete project state for persistence
106
+ */
107
+ export interface ProjectState {
108
+ id: string;
109
+ name: string;
110
+ idea: string;
111
+ language: OutputLanguage;
112
+ openaiModel: OpenAIModel;
113
+ phase: WorkflowPhase;
114
+ status: ProjectStatus;
115
+ specification?: string;
116
+ plan?: string;
117
+ milestones: Milestone[];
118
+ currentMilestone: string | null;
119
+ currentTask: string | null;
120
+ consensusHistory: ConsensusIteration[];
121
+ error?: string;
122
+ createdAt: string;
123
+ updatedAt: string;
124
+ }
125
+ /**
126
+ * Zod schema for project state validation
127
+ */
128
+ export declare const ProjectStateSchema: z.ZodObject<{
129
+ id: z.ZodString;
130
+ name: z.ZodString;
131
+ idea: z.ZodString;
132
+ language: z.ZodEnum<{
133
+ python: "python";
134
+ typescript: "typescript";
135
+ }>;
136
+ openaiModel: z.ZodEnum<{
137
+ "gpt-4o": "gpt-4o";
138
+ "gpt-4o-mini": "gpt-4o-mini";
139
+ "gpt-4-turbo": "gpt-4-turbo";
140
+ "o1-preview": "o1-preview";
141
+ "o1-mini": "o1-mini";
142
+ }>;
143
+ phase: z.ZodEnum<{
144
+ plan: "plan";
145
+ execution: "execution";
146
+ complete: "complete";
147
+ }>;
148
+ status: z.ZodEnum<{
149
+ complete: "complete";
150
+ pending: "pending";
151
+ "in-progress": "in-progress";
152
+ failed: "failed";
153
+ }>;
154
+ specification: z.ZodOptional<z.ZodString>;
155
+ plan: z.ZodOptional<z.ZodString>;
156
+ milestones: z.ZodArray<z.ZodObject<{
157
+ id: z.ZodString;
158
+ name: z.ZodString;
159
+ description: z.ZodString;
160
+ status: z.ZodEnum<{
161
+ complete: "complete";
162
+ pending: "pending";
163
+ "in-progress": "in-progress";
164
+ failed: "failed";
165
+ }>;
166
+ tasks: z.ZodArray<z.ZodObject<{
167
+ id: z.ZodString;
168
+ name: z.ZodString;
169
+ description: z.ZodString;
170
+ status: z.ZodEnum<{
171
+ complete: "complete";
172
+ pending: "pending";
173
+ "in-progress": "in-progress";
174
+ failed: "failed";
175
+ }>;
176
+ testsPassed: z.ZodOptional<z.ZodBoolean>;
177
+ testPlan: z.ZodOptional<z.ZodString>;
178
+ error: z.ZodOptional<z.ZodString>;
179
+ }, z.core.$strip>>;
180
+ }, z.core.$strip>>;
181
+ currentMilestone: z.ZodNullable<z.ZodString>;
182
+ currentTask: z.ZodNullable<z.ZodString>;
183
+ consensusHistory: z.ZodArray<z.ZodObject<{
184
+ iteration: z.ZodNumber;
185
+ plan: z.ZodString;
186
+ result: z.ZodObject<{
187
+ score: z.ZodNumber;
188
+ analysis: z.ZodString;
189
+ strengths: z.ZodArray<z.ZodString>;
190
+ concerns: z.ZodArray<z.ZodString>;
191
+ recommendations: z.ZodArray<z.ZodString>;
192
+ approved: z.ZodBoolean;
193
+ rawResponse: z.ZodString;
194
+ }, z.core.$strip>;
195
+ timestamp: z.ZodString;
196
+ }, z.core.$strip>>;
197
+ error: z.ZodOptional<z.ZodString>;
198
+ createdAt: z.ZodString;
199
+ updatedAt: z.ZodString;
200
+ }, z.core.$strip>;
201
+ /**
202
+ * Workflow event types for state machine
203
+ */
204
+ export type WorkflowEvent = {
205
+ type: 'START_PLANNING';
206
+ } | {
207
+ type: 'CONSENSUS_APPROVED';
208
+ score: number;
209
+ } | {
210
+ type: 'CONSENSUS_REJECTED';
211
+ score: number;
212
+ feedback: string;
213
+ } | {
214
+ type: 'START_EXECUTION';
215
+ } | {
216
+ type: 'TASK_COMPLETED';
217
+ taskId: string;
218
+ } | {
219
+ type: 'TASK_FAILED';
220
+ taskId: string;
221
+ error: string;
222
+ } | {
223
+ type: 'TEST_PASSED';
224
+ } | {
225
+ type: 'TEST_FAILED';
226
+ error: string;
227
+ } | {
228
+ type: 'MILESTONE_COMPLETED';
229
+ milestoneId: string;
230
+ } | {
231
+ type: 'PROJECT_COMPLETED';
232
+ } | {
233
+ type: 'ESCALATE_TO_USER';
234
+ reason: string;
235
+ };
236
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Workflow-related type definitions
3
+ * Defines workflow modes, tasks, milestones, and state transitions
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Workflow phases
8
+ */
9
+ export const WorkflowPhaseSchema = z.enum(['plan', 'execution', 'complete']);
10
+ /**
11
+ * Project status
12
+ */
13
+ export const ProjectStatusSchema = z.enum(['pending', 'in-progress', 'complete', 'failed']);
14
+ /**
15
+ * Status of a task or milestone
16
+ */
17
+ export const TaskStatusSchema = z.enum(['pending', 'in-progress', 'complete', 'failed']);
18
+ /**
19
+ * Zod schema for Task
20
+ */
21
+ export const TaskSchema = z.object({
22
+ id: z.string(),
23
+ name: z.string(),
24
+ description: z.string(),
25
+ status: TaskStatusSchema,
26
+ testsPassed: z.boolean().optional(),
27
+ testPlan: z.string().optional(),
28
+ error: z.string().optional(),
29
+ });
30
+ /**
31
+ * Zod schema for Milestone
32
+ */
33
+ export const MilestoneSchema = z.object({
34
+ id: z.string(),
35
+ name: z.string(),
36
+ description: z.string(),
37
+ status: TaskStatusSchema,
38
+ tasks: z.array(TaskSchema),
39
+ });
40
+ /**
41
+ * Zod schema for project state validation
42
+ */
43
+ export const ProjectStateSchema = z.object({
44
+ id: z.string(),
45
+ name: z.string(),
46
+ idea: z.string(),
47
+ language: z.enum(['python', 'typescript']),
48
+ openaiModel: z.enum(['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini']),
49
+ phase: WorkflowPhaseSchema,
50
+ status: ProjectStatusSchema,
51
+ specification: z.string().optional(),
52
+ plan: z.string().optional(),
53
+ milestones: z.array(MilestoneSchema),
54
+ currentMilestone: z.string().nullable(),
55
+ currentTask: z.string().nullable(),
56
+ consensusHistory: z.array(z.object({
57
+ iteration: z.number(),
58
+ plan: z.string(),
59
+ result: z.object({
60
+ score: z.number(),
61
+ analysis: z.string(),
62
+ strengths: z.array(z.string()),
63
+ concerns: z.array(z.string()),
64
+ recommendations: z.array(z.string()),
65
+ approved: z.boolean(),
66
+ rawResponse: z.string(),
67
+ }),
68
+ timestamp: z.string(),
69
+ })),
70
+ error: z.string().optional(),
71
+ createdAt: z.string(),
72
+ updatedAt: z.string(),
73
+ });
74
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Consensus workflow module
3
+ * Handles the iterative consensus-building process between Claude and OpenAI
4
+ */
5
+ import type { ConsensusResult, ConsensusIteration, ConsensusConfig } from '../types/consensus.js';
6
+ /**
7
+ * Options for consensus iteration
8
+ */
9
+ export interface ConsensusOptions {
10
+ projectDir: string;
11
+ config?: Partial<ConsensusConfig>;
12
+ onIteration?: (iteration: number, result: ConsensusResult) => void;
13
+ onRevision?: (iteration: number, revisedPlan: string) => void;
14
+ }
15
+ /**
16
+ * Result of the consensus process
17
+ */
18
+ export interface ConsensusProcessResult {
19
+ approved: boolean;
20
+ finalPlan: string;
21
+ finalScore: number;
22
+ iterations: ConsensusIteration[];
23
+ totalIterations: number;
24
+ }
25
+ /**
26
+ * Format a plan for consensus review
27
+ * Structures the plan in a way that's optimal for review
28
+ *
29
+ * @param plan - The raw plan content
30
+ * @param context - Project context
31
+ * @returns Formatted plan string
32
+ */
33
+ export declare function formatPlanForReview(plan: string, context: string): string;
34
+ /**
35
+ * Extract concerns from a consensus result for revision
36
+ *
37
+ * @param result - The consensus result
38
+ * @returns Array of concerns to address
39
+ */
40
+ export declare function extractConcerns(result: ConsensusResult): string[];
41
+ /**
42
+ * Check if consensus threshold is met
43
+ *
44
+ * @param score - The consensus score
45
+ * @param threshold - The threshold to meet (default from config)
46
+ * @returns True if threshold is met
47
+ */
48
+ export declare function meetsThreshold(score: number, threshold?: number): boolean;
49
+ /**
50
+ * Iterate until consensus is reached
51
+ *
52
+ * @param initialPlan - The initial plan to review
53
+ * @param context - Project context
54
+ * @param options - Consensus options
55
+ * @returns The consensus process result
56
+ */
57
+ export declare function iterateUntilConsensus(initialPlan: string, context: string, options: ConsensusOptions): Promise<ConsensusProcessResult>;
58
+ /**
59
+ * Get a summary of the consensus process
60
+ *
61
+ * @param result - The consensus process result
62
+ * @returns Human-readable summary
63
+ */
64
+ export declare function summarizeConsensusProcess(result: ConsensusProcessResult): string;
65
+ /**
66
+ * Validate a plan structure has required sections
67
+ *
68
+ * @param plan - The plan to validate
69
+ * @returns Validation result with missing sections
70
+ */
71
+ export declare function validatePlanStructure(plan: string): {
72
+ valid: boolean;
73
+ missingSections: string[];
74
+ };
75
+ /**
76
+ * Calculate average score across iterations
77
+ *
78
+ * @param iterations - The consensus iterations
79
+ * @returns Average score
80
+ */
81
+ export declare function calculateAverageScore(iterations: ConsensusIteration[]): number;
82
+ /**
83
+ * Get the score trend across iterations
84
+ *
85
+ * @param iterations - The consensus iterations
86
+ * @returns 'improving', 'declining', or 'stable'
87
+ */
88
+ export declare function getScoreTrend(iterations: ConsensusIteration[]): 'improving' | 'declining' | 'stable';
89
+ //# sourceMappingURL=consensus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.d.ts","sourceRoot":"","sources":["../../src/workflow/consensus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMlG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUzE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAcjE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAA2C,GACrD,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAqFjC;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAiChF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAuBA;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAK9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,kBAAkB,EAAE,GAC/B,WAAW,GAAG,WAAW,GAAG,QAAQ,CAetC"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Consensus workflow module
3
+ * Handles the iterative consensus-building process between Claude and OpenAI
4
+ */
5
+ import { DEFAULT_CONSENSUS_CONFIG } from '../types/consensus.js';
6
+ import { requestConsensus } from '../adapters/openai.js';
7
+ import { revisePlan } from '../adapters/claude.js';
8
+ import { recordConsensusIteration } from '../state/index.js';
9
+ /**
10
+ * Format a plan for consensus review
11
+ * Structures the plan in a way that's optimal for review
12
+ *
13
+ * @param plan - The raw plan content
14
+ * @param context - Project context
15
+ * @returns Formatted plan string
16
+ */
17
+ export function formatPlanForReview(plan, context) {
18
+ return `
19
+ ## Development Plan
20
+
21
+ ${plan}
22
+
23
+ ## Project Context
24
+
25
+ ${context}
26
+ `.trim();
27
+ }
28
+ /**
29
+ * Extract concerns from a consensus result for revision
30
+ *
31
+ * @param result - The consensus result
32
+ * @returns Array of concerns to address
33
+ */
34
+ export function extractConcerns(result) {
35
+ const concerns = [];
36
+ // Add explicit concerns
37
+ if (result.concerns && result.concerns.length > 0) {
38
+ concerns.push(...result.concerns);
39
+ }
40
+ // Add recommendations as concerns to address
41
+ if (result.recommendations && result.recommendations.length > 0) {
42
+ concerns.push(...result.recommendations.map((r) => `Consider: ${r}`));
43
+ }
44
+ return concerns;
45
+ }
46
+ /**
47
+ * Check if consensus threshold is met
48
+ *
49
+ * @param score - The consensus score
50
+ * @param threshold - The threshold to meet (default from config)
51
+ * @returns True if threshold is met
52
+ */
53
+ export function meetsThreshold(score, threshold = DEFAULT_CONSENSUS_CONFIG.threshold) {
54
+ return score >= threshold;
55
+ }
56
+ /**
57
+ * Iterate until consensus is reached
58
+ *
59
+ * @param initialPlan - The initial plan to review
60
+ * @param context - Project context
61
+ * @param options - Consensus options
62
+ * @returns The consensus process result
63
+ */
64
+ export async function iterateUntilConsensus(initialPlan, context, options) {
65
+ const { projectDir, config = {}, onIteration, onRevision, } = options;
66
+ const { threshold = DEFAULT_CONSENSUS_CONFIG.threshold, maxIterations = DEFAULT_CONSENSUS_CONFIG.maxIterations, } = config;
67
+ const iterations = [];
68
+ let currentPlan = initialPlan;
69
+ let iteration = 0;
70
+ while (iteration < maxIterations) {
71
+ iteration++;
72
+ // Request consensus review from OpenAI
73
+ const consensusResult = await requestConsensus(currentPlan, context, config);
74
+ // Record the iteration
75
+ const iterationRecord = {
76
+ iteration,
77
+ plan: currentPlan,
78
+ result: consensusResult,
79
+ timestamp: new Date().toISOString(),
80
+ };
81
+ iterations.push(iterationRecord);
82
+ // Save to project state
83
+ await recordConsensusIteration(projectDir, iterationRecord);
84
+ // Notify callback
85
+ if (onIteration) {
86
+ onIteration(iteration, consensusResult);
87
+ }
88
+ // Check if we've reached consensus
89
+ if (meetsThreshold(consensusResult.score, threshold)) {
90
+ return {
91
+ approved: true,
92
+ finalPlan: currentPlan,
93
+ finalScore: consensusResult.score,
94
+ iterations,
95
+ totalIterations: iteration,
96
+ };
97
+ }
98
+ // If not at max iterations, revise the plan
99
+ if (iteration < maxIterations) {
100
+ const concerns = extractConcerns(consensusResult);
101
+ // Use Claude to revise the plan
102
+ const revisionResult = await revisePlan(currentPlan, consensusResult.analysis, concerns);
103
+ if (revisionResult.success && revisionResult.response) {
104
+ currentPlan = revisionResult.response;
105
+ if (onRevision) {
106
+ onRevision(iteration, currentPlan);
107
+ }
108
+ }
109
+ else {
110
+ // If revision fails, try to continue with current plan
111
+ console.warn(`Plan revision failed at iteration ${iteration}:`, revisionResult.error);
112
+ }
113
+ }
114
+ }
115
+ // Max iterations reached without consensus
116
+ const lastIteration = iterations[iterations.length - 1];
117
+ return {
118
+ approved: false,
119
+ finalPlan: currentPlan,
120
+ finalScore: lastIteration?.result.score || 0,
121
+ iterations,
122
+ totalIterations: iteration,
123
+ };
124
+ }
125
+ /**
126
+ * Get a summary of the consensus process
127
+ *
128
+ * @param result - The consensus process result
129
+ * @returns Human-readable summary
130
+ */
131
+ export function summarizeConsensusProcess(result) {
132
+ const lines = [];
133
+ lines.push(`## Consensus Summary`);
134
+ lines.push('');
135
+ lines.push(`**Status:** ${result.approved ? 'APPROVED' : 'NOT APPROVED'}`);
136
+ lines.push(`**Final Score:** ${result.finalScore}%`);
137
+ lines.push(`**Total Iterations:** ${result.totalIterations}`);
138
+ lines.push('');
139
+ lines.push(`### Iteration History`);
140
+ lines.push('');
141
+ for (const iteration of result.iterations) {
142
+ lines.push(`#### Iteration ${iteration.iteration}`);
143
+ lines.push(`- Score: ${iteration.result.score}%`);
144
+ lines.push(`- Strengths: ${iteration.result.strengths?.length || 0}`);
145
+ lines.push(`- Concerns: ${iteration.result.concerns?.length || 0}`);
146
+ lines.push('');
147
+ }
148
+ if (!result.approved) {
149
+ const lastResult = result.iterations[result.iterations.length - 1]?.result;
150
+ if (lastResult?.concerns && lastResult.concerns.length > 0) {
151
+ lines.push(`### Remaining Concerns`);
152
+ lines.push('');
153
+ for (const concern of lastResult.concerns) {
154
+ lines.push(`- ${concern}`);
155
+ }
156
+ }
157
+ }
158
+ return lines.join('\n');
159
+ }
160
+ /**
161
+ * Validate a plan structure has required sections
162
+ *
163
+ * @param plan - The plan to validate
164
+ * @returns Validation result with missing sections
165
+ */
166
+ export function validatePlanStructure(plan) {
167
+ const requiredSections = [
168
+ 'Background',
169
+ 'Goals',
170
+ 'Milestones',
171
+ 'Tasks',
172
+ 'Test',
173
+ ];
174
+ const missingSections = [];
175
+ for (const section of requiredSections) {
176
+ // Check for section header (case-insensitive)
177
+ const pattern = new RegExp(`(^|\\n)#+\\s*${section}`, 'i');
178
+ if (!pattern.test(plan)) {
179
+ missingSections.push(section);
180
+ }
181
+ }
182
+ return {
183
+ valid: missingSections.length === 0,
184
+ missingSections,
185
+ };
186
+ }
187
+ /**
188
+ * Calculate average score across iterations
189
+ *
190
+ * @param iterations - The consensus iterations
191
+ * @returns Average score
192
+ */
193
+ export function calculateAverageScore(iterations) {
194
+ if (iterations.length === 0)
195
+ return 0;
196
+ const sum = iterations.reduce((acc, it) => acc + it.result.score, 0);
197
+ return Math.round(sum / iterations.length);
198
+ }
199
+ /**
200
+ * Get the score trend across iterations
201
+ *
202
+ * @param iterations - The consensus iterations
203
+ * @returns 'improving', 'declining', or 'stable'
204
+ */
205
+ export function getScoreTrend(iterations) {
206
+ if (iterations.length < 2)
207
+ return 'stable';
208
+ const scores = iterations.map((it) => it.result.score);
209
+ const firstHalf = scores.slice(0, Math.floor(scores.length / 2));
210
+ const secondHalf = scores.slice(Math.floor(scores.length / 2));
211
+ const firstAvg = firstHalf.reduce((a, b) => a + b, 0) / firstHalf.length;
212
+ const secondAvg = secondHalf.reduce((a, b) => a + b, 0) / secondHalf.length;
213
+ const diff = secondAvg - firstAvg;
214
+ if (diff > 5)
215
+ return 'improving';
216
+ if (diff < -5)
217
+ return 'declining';
218
+ return 'stable';
219
+ }
220
+ //# sourceMappingURL=consensus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.js","sourceRoot":"","sources":["../../src/workflow/consensus.ts"],"names":[],"mappings":"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"}