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,430 @@
1
+ /**
2
+ * xAI Grok API adapter
3
+ * Handles consensus reviews and arbitration using Grok models
4
+ *
5
+ * Uses OpenAI SDK with custom baseURL since Grok API is OpenAI-compatible
6
+ */
7
+ import OpenAI from 'openai';
8
+ import { getGrokToken, GROK_API_URL } from '../auth/grok.js';
9
+ import { DEFAULT_GROK_MODEL } from '../types/consensus.js';
10
+ /**
11
+ * Default Grok configuration
12
+ */
13
+ export const DEFAULT_GROK_CONFIG = {
14
+ model: DEFAULT_GROK_MODEL,
15
+ temperature: 0.3,
16
+ maxTokens: 4096,
17
+ };
18
+ /**
19
+ * Create a Grok client using OpenAI SDK with custom baseURL
20
+ */
21
+ export async function createClient() {
22
+ const apiKey = await getGrokToken();
23
+ if (!apiKey) {
24
+ throw new Error('Grok API key not found. Run: popeye-cli auth grok');
25
+ }
26
+ return new OpenAI({
27
+ apiKey,
28
+ baseURL: GROK_API_URL,
29
+ });
30
+ }
31
+ /**
32
+ * Request consensus review from Grok
33
+ *
34
+ * @param plan - The development plan to review
35
+ * @param context - Project context
36
+ * @param config - Configuration options
37
+ * @returns Consensus result
38
+ */
39
+ export async function requestConsensus(plan, context, config = {}) {
40
+ const { model = DEFAULT_GROK_CONFIG.model, temperature = DEFAULT_GROK_CONFIG.temperature, maxTokens = DEFAULT_GROK_CONFIG.maxTokens, } = config;
41
+ const client = await createClient();
42
+ const prompt = buildConsensusPrompt(plan, context);
43
+ try {
44
+ const completion = await client.chat.completions.create({
45
+ model,
46
+ messages: [{ role: 'user', content: prompt }],
47
+ temperature,
48
+ max_tokens: maxTokens,
49
+ });
50
+ const response = completion.choices[0]?.message?.content || '';
51
+ return parseConsensusResponse(response);
52
+ }
53
+ catch (error) {
54
+ if (error instanceof OpenAI.RateLimitError) {
55
+ // Implement exponential backoff retry
56
+ await sleep(5000);
57
+ return requestConsensus(plan, context, config);
58
+ }
59
+ throw error;
60
+ }
61
+ }
62
+ /**
63
+ * Request arbitration from Grok when consensus is stuck
64
+ *
65
+ * @param plan - The best plan achieved
66
+ * @param reviewerFeedback - Feedback from the reviewer
67
+ * @param claudeFeedback - Claude's perspective on the plan
68
+ * @param iterations - Number of iterations attempted
69
+ * @param scores - Score history
70
+ * @returns Arbitration decision
71
+ */
72
+ export async function requestArbitration(plan, reviewerFeedback, claudeFeedback, iterations, scores) {
73
+ const client = await createClient();
74
+ const prompt = buildArbitrationPrompt(plan, reviewerFeedback, claudeFeedback, iterations, scores);
75
+ try {
76
+ const completion = await client.chat.completions.create({
77
+ model: DEFAULT_GROK_CONFIG.model,
78
+ messages: [{ role: 'user', content: prompt }],
79
+ temperature: 0.2,
80
+ max_tokens: 4096,
81
+ });
82
+ const response = completion.choices[0]?.message?.content || '';
83
+ return parseArbitrationResponse(response);
84
+ }
85
+ catch (error) {
86
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
87
+ throw new Error(`Grok arbitration error: ${errorMsg}`);
88
+ }
89
+ }
90
+ /**
91
+ * Build the consensus review prompt
92
+ */
93
+ function buildConsensusPrompt(plan, context) {
94
+ return `You are a senior software architect reviewing a development plan.
95
+ Analyze the following plan for completeness, correctness, and feasibility.
96
+
97
+ PROJECT CONTEXT:
98
+ ${context}
99
+
100
+ PROPOSED PLAN:
101
+ ${plan}
102
+
103
+ Please provide your response in EXACTLY this format (use these exact headers):
104
+
105
+ ANALYSIS:
106
+ [Your detailed analysis here]
107
+
108
+ STRENGTHS:
109
+ - [Strength 1]
110
+ - [Strength 2]
111
+ - [etc.]
112
+
113
+ CONCERNS:
114
+ - [Concern 1]
115
+ - [Concern 2]
116
+ - [etc.]
117
+
118
+ RECOMMENDATIONS:
119
+ - [Recommendation 1]
120
+ - [Recommendation 2]
121
+ - [etc.]
122
+
123
+ CONSENSUS: [X]%
124
+
125
+ Scoring guide:
126
+ - 95-100%: Ready for execution, no changes needed
127
+ - 85-94%: Minor revisions needed, mostly good
128
+ - 70-84%: Significant revisions needed
129
+ - Below 70%: Major rework required
130
+
131
+ Be thorough but constructive. Focus on actionable feedback.`;
132
+ }
133
+ /**
134
+ * Build the arbitration prompt
135
+ */
136
+ function buildArbitrationPrompt(plan, reviewerFeedback, claudeFeedback, iterations, scores) {
137
+ const scoreHistory = scores.map((s, i) => `Iteration ${i + 1}: ${s}%`).join(', ');
138
+ return `You are an impartial arbitrator resolving a disagreement between two AI systems about a development plan.
139
+
140
+ SITUATION:
141
+ - Claude (code generator) created a plan
142
+ - A reviewer has been reviewing and providing feedback
143
+ - They have gone through ${iterations} iterations without reaching 95% consensus
144
+ - Score history: ${scoreHistory}
145
+
146
+ THE PLAN:
147
+ ${plan}
148
+
149
+ REVIEWER'S LATEST FEEDBACK:
150
+ ${reviewerFeedback}
151
+
152
+ CLAUDE'S PERSPECTIVE:
153
+ ${claudeFeedback}
154
+
155
+ As the arbitrator, you must:
156
+ 1. Analyze both perspectives objectively
157
+ 2. Determine if the remaining concerns are:
158
+ - CRITICAL: Must be addressed before proceeding
159
+ - MINOR: Can be addressed during implementation
160
+ - SUBJECTIVE: Matters of preference, not correctness
161
+ 3. Make a final decision
162
+
163
+ Respond in EXACTLY this format:
164
+
165
+ ANALYSIS:
166
+ [Your analysis of the disagreement]
167
+
168
+ CRITICAL_CONCERNS:
169
+ - [List any truly critical issues, or "None" if none exist]
170
+
171
+ MINOR_CONCERNS:
172
+ - [List minor issues that can be addressed during implementation]
173
+
174
+ SUBJECTIVE_CONCERNS:
175
+ - [List preference-based concerns that don't affect correctness]
176
+
177
+ DECISION: [APPROVE or REVISE]
178
+
179
+ FINAL_SCORE: [X]%
180
+
181
+ REASONING:
182
+ [Explain your decision]
183
+
184
+ SUGGESTED_CHANGES:
185
+ - [If REVISE, list specific changes needed]
186
+ - [If APPROVE, write "None - plan is acceptable"]`;
187
+ }
188
+ /**
189
+ * Parse the consensus response from Grok
190
+ * Uses same format as OpenAI/Gemini for consistency
191
+ */
192
+ export function parseConsensusResponse(response) {
193
+ // Extract consensus score - look for various formats
194
+ let score = 0;
195
+ const scorePatterns = [
196
+ /CONSENSUS:\s*(\d+)%/i,
197
+ /CONSENSUS\s*SCORE:\s*(\d+)%/i,
198
+ /(\d+)%\s*consensus/i,
199
+ /score[:\s]+(\d+)%/i,
200
+ ];
201
+ for (const pattern of scorePatterns) {
202
+ const match = response.match(pattern);
203
+ if (match) {
204
+ score = parseInt(match[1], 10);
205
+ break;
206
+ }
207
+ }
208
+ // Extract sections with better handling of markdown headers
209
+ const analysis = extractSection(response, ['ANALYSIS', '## Analysis', '### Analysis']);
210
+ const strengthsText = extractSection(response, ['STRENGTHS', '## Strengths', '### Strengths']);
211
+ const concernsText = extractSection(response, ['CONCERNS', '## Concerns', '### Concerns']);
212
+ const recommendationsText = extractSection(response, ['RECOMMENDATIONS', '## Recommendations', '### Recommendations']);
213
+ // Parse lists from sections
214
+ const strengths = parseList(strengthsText);
215
+ const concerns = parseList(concernsText);
216
+ const recommendations = parseList(recommendationsText);
217
+ return {
218
+ score,
219
+ analysis: analysis.trim(),
220
+ strengths,
221
+ concerns,
222
+ recommendations,
223
+ approved: score >= 95,
224
+ rawResponse: response,
225
+ };
226
+ }
227
+ /**
228
+ * Parse the arbitration response
229
+ */
230
+ function parseArbitrationResponse(response) {
231
+ // Extract score
232
+ const scoreMatch = response.match(/FINAL_SCORE:\s*(\d+)%/i);
233
+ const score = scoreMatch ? parseInt(scoreMatch[1], 10) : 0;
234
+ // Extract decision
235
+ const decisionMatch = response.match(/DECISION:\s*(APPROVE|REVISE)/i);
236
+ const approved = decisionMatch ? decisionMatch[1].toUpperCase() === 'APPROVE' : score >= 90;
237
+ // Extract sections
238
+ const analysis = extractSection(response, ['ANALYSIS']);
239
+ const criticalConcerns = parseList(extractSection(response, ['CRITICAL_CONCERNS']));
240
+ const minorConcerns = parseList(extractSection(response, ['MINOR_CONCERNS']));
241
+ const subjectiveConcerns = parseList(extractSection(response, ['SUBJECTIVE_CONCERNS']));
242
+ const reasoning = extractSection(response, ['REASONING']);
243
+ const suggestedChanges = parseList(extractSection(response, ['SUGGESTED_CHANGES']));
244
+ return {
245
+ approved,
246
+ score,
247
+ analysis,
248
+ criticalConcerns: criticalConcerns.filter(c => c.toLowerCase() !== 'none'),
249
+ minorConcerns: minorConcerns.filter(c => c.toLowerCase() !== 'none'),
250
+ subjectiveConcerns: subjectiveConcerns.filter(c => c.toLowerCase() !== 'none'),
251
+ reasoning,
252
+ suggestedChanges: suggestedChanges.filter(c => !c.toLowerCase().includes('none')),
253
+ rawResponse: response,
254
+ };
255
+ }
256
+ /**
257
+ * Extract a section from the response with multiple possible headers
258
+ */
259
+ function extractSection(response, headers) {
260
+ // Build pattern to match any of the headers
261
+ const headerPattern = headers.map(h => h.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|');
262
+ const startPattern = new RegExp(`(${headerPattern})[:\\s]*\\n?`, 'i');
263
+ const startMatch = response.match(startPattern);
264
+ if (!startMatch || startMatch.index === undefined)
265
+ return '';
266
+ const startIndex = startMatch.index + startMatch[0].length;
267
+ // Find the next section header (any capitalized word followed by colon or markdown header)
268
+ const endPattern = /\n(?:#{1,3}\s+)?[A-Z][A-Z_]+[:\s]/;
269
+ const remaining = response.slice(startIndex);
270
+ const endMatch = remaining.match(endPattern);
271
+ if (!endMatch || endMatch.index === undefined) {
272
+ return remaining.trim();
273
+ }
274
+ return remaining.slice(0, endMatch.index).trim();
275
+ }
276
+ /**
277
+ * Parse a bulleted or numbered list from text
278
+ */
279
+ function parseList(text) {
280
+ if (!text)
281
+ return [];
282
+ const lines = text.split('\n');
283
+ const items = [];
284
+ for (const line of lines) {
285
+ const trimmed = line.trim();
286
+ // Skip empty lines and section headers
287
+ if (!trimmed)
288
+ continue;
289
+ if (trimmed.match(/^#{1,3}\s/))
290
+ continue; // Skip markdown headers
291
+ if (trimmed.match(/^[A-Z][A-Z_]+:/))
292
+ continue; // Skip section headers
293
+ // Match bullets (-, *, +) or numbers (1., 2., etc.)
294
+ const bulletMatch = trimmed.match(/^[-*+]\s+(.+)$/);
295
+ const numberMatch = trimmed.match(/^\d+\.\s+(.+)$/);
296
+ if (bulletMatch) {
297
+ items.push(bulletMatch[1].trim());
298
+ }
299
+ else if (numberMatch) {
300
+ items.push(numberMatch[1].trim());
301
+ }
302
+ else if (trimmed && !trimmed.match(/^[A-Z]+:/i)) {
303
+ // Only add non-header lines that have substantial content
304
+ if (trimmed.length > 10 && !trimmed.startsWith('**') && !trimmed.endsWith(':')) {
305
+ items.push(trimmed);
306
+ }
307
+ }
308
+ }
309
+ return items;
310
+ }
311
+ /**
312
+ * Helper sleep function for rate limiting
313
+ */
314
+ function sleep(ms) {
315
+ return new Promise((resolve) => setTimeout(resolve, ms));
316
+ }
317
+ /**
318
+ * Validate that the Grok API key is working
319
+ */
320
+ export async function validateApiKey() {
321
+ try {
322
+ const client = await createClient();
323
+ await client.chat.completions.create({
324
+ model: DEFAULT_GROK_CONFIG.model,
325
+ messages: [{ role: 'user', content: 'Say "OK" if you can hear me.' }],
326
+ max_tokens: 5,
327
+ });
328
+ return true;
329
+ }
330
+ catch {
331
+ return false;
332
+ }
333
+ }
334
+ /**
335
+ * List available Grok models (if API supports it)
336
+ */
337
+ export async function listAvailableModels() {
338
+ try {
339
+ const client = await createClient();
340
+ const models = await client.models.list();
341
+ return models.data
342
+ .filter((m) => m.id.includes('grok'))
343
+ .map((m) => m.id)
344
+ .sort();
345
+ }
346
+ catch {
347
+ // Return known models if listing fails
348
+ return ['grok-3', 'grok-4'];
349
+ }
350
+ }
351
+ /**
352
+ * Expand a brief idea into a full specification using Grok
353
+ *
354
+ * @param idea - The brief project idea
355
+ * @param language - Target programming language
356
+ * @returns Expanded specification
357
+ */
358
+ export async function expandIdea(idea, language) {
359
+ const client = await createClient();
360
+ const languageDesc = language === 'fullstack'
361
+ ? 'React (TypeScript) frontend with FastAPI (Python) backend'
362
+ : language === 'python'
363
+ ? 'Python'
364
+ : 'TypeScript';
365
+ const prompt = `You are a senior software architect. A user wants to build a project with the following idea:
366
+
367
+ "${idea}"
368
+
369
+ The project will be implemented in ${languageDesc}.
370
+
371
+ Expand this into a complete software specification including:
372
+
373
+ 1. **Project Overview**: A clear description of what will be built
374
+ 2. **Core Features**: List of main features and functionality
375
+ 3. **Technical Requirements**:
376
+ - Language and framework choices
377
+ - Database requirements (if any)
378
+ - External APIs or services needed
379
+ - Authentication requirements (if any)
380
+ 4. **Architecture Overview**: High-level system design
381
+ 5. **API Specification** (if applicable): Key endpoints and their purposes
382
+ 6. **Data Models**: Key entities and their relationships
383
+ 7. **Non-Functional Requirements**: Performance, security, scalability considerations
384
+ 8. **Deployment**: Docker configuration and deployment approach
385
+
386
+ Be specific and actionable. The specification should be detailed enough that a developer could implement it without further clarification.`;
387
+ const completion = await client.chat.completions.create({
388
+ model: DEFAULT_GROK_CONFIG.model,
389
+ messages: [{ role: 'user', content: prompt }],
390
+ temperature: 0.7,
391
+ max_tokens: 4096,
392
+ });
393
+ return completion.choices[0]?.message?.content || idea;
394
+ }
395
+ /**
396
+ * Get feedback on generated code using Grok
397
+ *
398
+ * @param code - The code to review
399
+ * @param context - Context about what the code should do
400
+ */
401
+ export async function reviewCode(code, context) {
402
+ const client = await createClient();
403
+ const prompt = `You are a senior software engineer reviewing code. Review the following code:
404
+
405
+ CONTEXT:
406
+ ${context}
407
+
408
+ CODE:
409
+ \`\`\`
410
+ ${code}
411
+ \`\`\`
412
+
413
+ Provide:
414
+ 1. ANALYSIS: Overall code quality assessment
415
+ 2. STRENGTHS: What's done well
416
+ 3. CONCERNS: Issues, bugs, or improvements needed
417
+ 4. RECOMMENDATIONS: Specific fixes or enhancements
418
+ 5. CONSENSUS SCORE: A percentage (0-100%) of how production-ready this code is
419
+
420
+ Format your score as: CONSENSUS: [X]%`;
421
+ const completion = await client.chat.completions.create({
422
+ model: DEFAULT_GROK_CONFIG.model,
423
+ messages: [{ role: 'user', content: prompt }],
424
+ temperature: 0.3,
425
+ max_tokens: 2048,
426
+ });
427
+ const response = completion.choices[0]?.message?.content || '';
428
+ return parseConsensusResponse(response);
429
+ }
430
+ //# sourceMappingURL=grok.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok.js","sourceRoot":"","sources":["../../src/adapters/grok.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export declare function listAvailableModels(): Promise<string[]>;
37
37
  * @param language - Target programming language
38
38
  * @returns Expanded specification
39
39
  */
40
- export declare function expandIdea(idea: string, language: 'python' | 'typescript'): Promise<string>;
40
+ export declare function expandIdea(idea: string, language: 'python' | 'typescript' | 'fullstack'): Promise<string>;
41
41
  /**
42
42
  * Get feedback on generated code
43
43
  *
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIvF;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAQpD;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,eAAe,CAAC,CA8B1B;AAgCD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAyBxE;AAuDD;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB7D;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAChC,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA+BxF"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIvF;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAQpD;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,eAAe,CAAC,CA8B1B;AAgCD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAyBxE;AAwFD;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB7D;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,GAC9C,OAAO,CAAC,MAAM,CAAC,CAwCjB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA+BxF"}
@@ -121,6 +121,7 @@ function extractSection(response, startHeader, endHeader) {
121
121
  }
122
122
  /**
123
123
  * Parse a bulleted or numbered list from text
124
+ * Filters out markdown headers and section markers
124
125
  */
125
126
  function parseList(text) {
126
127
  if (!text)
@@ -128,17 +129,50 @@ function parseList(text) {
128
129
  const lines = text.split('\n');
129
130
  const items = [];
130
131
  for (const line of lines) {
132
+ const trimmed = line.trim();
133
+ // Skip empty lines
134
+ if (!trimmed)
135
+ continue;
136
+ // Skip markdown headers (### Header, ## Header, etc.)
137
+ if (trimmed.match(/^#{1,6}\s/))
138
+ continue;
139
+ // Skip section headers (WORD: or WORD WORD:)
140
+ if (trimmed.match(/^[A-Z][A-Z_\s]+:/))
141
+ continue;
142
+ // Skip lines that look like section markers
143
+ if (trimmed.match(/^[A-Z]+$/))
144
+ continue;
131
145
  // Match bullets (-, *, +) or numbers (1., 2., etc.)
132
- const match = line.match(/^[\s]*[-*+][\s]+(.+)$|^[\s]*\d+\.[\s]+(.+)$/);
133
- if (match) {
134
- const item = (match[1] || match[2]).trim();
135
- if (item) {
146
+ const bulletMatch = trimmed.match(/^[-*+]\s+(.+)$/);
147
+ const numberMatch = trimmed.match(/^\d+\.\s+(.+)$/);
148
+ const boldMatch = trimmed.match(/^\*\*([^*]+)\*\*[:\s]*(.*)$/);
149
+ if (bulletMatch) {
150
+ const item = bulletMatch[1].trim();
151
+ // Skip items that are just headers
152
+ if (item && !item.match(/^[A-Z][A-Z_\s]+$/) && item.length > 3) {
136
153
  items.push(item);
137
154
  }
138
155
  }
139
- else if (line.trim() && !line.match(/^[A-Z]+:/)) {
140
- // Non-empty line that's not a header
141
- items.push(line.trim());
156
+ else if (numberMatch) {
157
+ const item = numberMatch[1].trim();
158
+ if (item && item.length > 3) {
159
+ items.push(item);
160
+ }
161
+ }
162
+ else if (boldMatch) {
163
+ // Handle "**Title**: description" format
164
+ const title = boldMatch[1].trim();
165
+ const desc = boldMatch[2].trim();
166
+ if (desc) {
167
+ items.push(`${title}: ${desc}`);
168
+ }
169
+ else if (title && title.length > 10) {
170
+ items.push(title);
171
+ }
172
+ }
173
+ else if (trimmed.length > 15 && !trimmed.startsWith('**') && !trimmed.endsWith(':')) {
174
+ // Only include plain text lines if they're substantial
175
+ items.push(trimmed);
142
176
  }
143
177
  }
144
178
  return items;
@@ -189,11 +223,16 @@ export async function listAvailableModels() {
189
223
  */
190
224
  export async function expandIdea(idea, language) {
191
225
  const client = await createClient();
226
+ const languageDesc = language === 'fullstack'
227
+ ? 'React (TypeScript) frontend with FastAPI (Python) backend'
228
+ : language === 'python'
229
+ ? 'Python'
230
+ : 'TypeScript';
192
231
  const prompt = `You are a senior software architect. A user wants to build a project with the following idea:
193
232
 
194
233
  "${idea}"
195
234
 
196
- The project will be implemented in ${language === 'python' ? 'Python' : 'TypeScript'}.
235
+ The project will be implemented in ${languageDesc}.
197
236
 
198
237
  Expand this into a complete software specification including:
199
238
 
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Claude CLI authentication module
3
- * Handles OAuth flow and token management for Claude CLI
3
+ * Checks for Claude Code CLI installation and authentication status
4
4
  */
5
5
  /**
6
6
  * Claude authentication status
@@ -10,16 +10,20 @@ export interface ClaudeAuthStatus {
10
10
  user?: string;
11
11
  expires?: string;
12
12
  error?: string;
13
+ cliInstalled?: boolean;
13
14
  }
14
15
  /**
15
- * Check if Claude CLI is already authenticated
16
- * This checks for existing credentials in the keychain or environment
16
+ * Check if Claude Code CLI is installed
17
+ */
18
+ export declare function isClaudeCLIInstalled(): Promise<boolean>;
19
+ /**
20
+ * Check if Claude Code CLI is authenticated
21
+ * Uses 'claude auth status' to check authentication
17
22
  */
18
23
  export declare function checkClaudeCLIAuth(): Promise<ClaudeAuthStatus>;
19
24
  /**
20
- * Authenticate with Claude CLI using browser-based OAuth flow
21
- *
22
- * @returns Promise that resolves to true if authentication was successful
25
+ * Authenticate with Claude Code CLI
26
+ * Opens the Claude login flow
23
27
  */
24
28
  export declare function authenticateClaude(): Promise<boolean>;
25
29
  /**
@@ -29,16 +33,14 @@ export declare function authenticateClaude(): Promise<boolean>;
29
33
  export declare function logoutClaude(): Promise<void>;
30
34
  /**
31
35
  * Refresh Claude CLI authentication
32
- * Re-authenticates if the current token is expired or invalid
33
36
  */
34
37
  export declare function refreshClaudeAuth(): Promise<boolean>;
35
38
  /**
36
- * Get the Claude CLI token for API calls
39
+ * Get the Claude CLI token (placeholder for API compatibility)
37
40
  */
38
41
  export declare function getClaudeToken(): Promise<string | null>;
39
42
  /**
40
43
  * Ensure Claude CLI is authenticated
41
- * Prompts for authentication if not already authenticated
42
44
  */
43
45
  export declare function ensureClaudeAuth(): Promise<boolean>;
44
46
  //# sourceMappingURL=claude.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/auth/claude.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAoBpE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiD3D;AAsBD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM1D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQzD"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/auth/claude.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiCD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkDpE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CA2C3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQzD"}