popeye-cli 1.1.0 → 1.2.1

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 (150) 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 +340 -27
  5. package/dist/adapters/claude.d.ts +28 -2
  6. package/dist/adapters/claude.d.ts.map +1 -1
  7. package/dist/adapters/claude.js +273 -20
  8. package/dist/adapters/claude.js.map +1 -1
  9. package/dist/adapters/grok.d.ts +73 -0
  10. package/dist/adapters/grok.d.ts.map +1 -0
  11. package/dist/adapters/grok.js +430 -0
  12. package/dist/adapters/grok.js.map +1 -0
  13. package/dist/adapters/openai.d.ts +1 -1
  14. package/dist/adapters/openai.d.ts.map +1 -1
  15. package/dist/adapters/openai.js +6 -1
  16. package/dist/adapters/openai.js.map +1 -1
  17. package/dist/auth/grok.d.ts +73 -0
  18. package/dist/auth/grok.d.ts.map +1 -0
  19. package/dist/auth/grok.js +211 -0
  20. package/dist/auth/grok.js.map +1 -0
  21. package/dist/auth/index.d.ts +9 -6
  22. package/dist/auth/index.d.ts.map +1 -1
  23. package/dist/auth/index.js +23 -6
  24. package/dist/auth/index.js.map +1 -1
  25. package/dist/cli/commands/auth.d.ts +1 -1
  26. package/dist/cli/commands/auth.d.ts.map +1 -1
  27. package/dist/cli/commands/auth.js +79 -8
  28. package/dist/cli/commands/auth.js.map +1 -1
  29. package/dist/cli/commands/create.d.ts.map +1 -1
  30. package/dist/cli/commands/create.js +15 -4
  31. package/dist/cli/commands/create.js.map +1 -1
  32. package/dist/cli/interactive.d.ts.map +1 -1
  33. package/dist/cli/interactive.js +406 -35
  34. package/dist/cli/interactive.js.map +1 -1
  35. package/dist/config/defaults.d.ts +3 -0
  36. package/dist/config/defaults.d.ts.map +1 -1
  37. package/dist/config/defaults.js +9 -0
  38. package/dist/config/defaults.js.map +1 -1
  39. package/dist/config/index.d.ts +9 -0
  40. package/dist/config/index.d.ts.map +1 -1
  41. package/dist/config/index.js +16 -3
  42. package/dist/config/index.js.map +1 -1
  43. package/dist/config/schema.d.ts +27 -0
  44. package/dist/config/schema.d.ts.map +1 -1
  45. package/dist/config/schema.js +24 -3
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/generators/fullstack.d.ts +32 -0
  48. package/dist/generators/fullstack.d.ts.map +1 -0
  49. package/dist/generators/fullstack.js +497 -0
  50. package/dist/generators/fullstack.js.map +1 -0
  51. package/dist/generators/index.d.ts +4 -3
  52. package/dist/generators/index.d.ts.map +1 -1
  53. package/dist/generators/index.js +15 -1
  54. package/dist/generators/index.js.map +1 -1
  55. package/dist/generators/python.d.ts +17 -1
  56. package/dist/generators/python.d.ts.map +1 -1
  57. package/dist/generators/python.js +34 -21
  58. package/dist/generators/python.js.map +1 -1
  59. package/dist/generators/templates/fullstack.d.ts +113 -0
  60. package/dist/generators/templates/fullstack.d.ts.map +1 -0
  61. package/dist/generators/templates/fullstack.js +1004 -0
  62. package/dist/generators/templates/fullstack.js.map +1 -0
  63. package/dist/generators/typescript.d.ts +19 -1
  64. package/dist/generators/typescript.d.ts.map +1 -1
  65. package/dist/generators/typescript.js +37 -21
  66. package/dist/generators/typescript.js.map +1 -1
  67. package/dist/types/cli.d.ts +4 -0
  68. package/dist/types/cli.d.ts.map +1 -1
  69. package/dist/types/cli.js.map +1 -1
  70. package/dist/types/consensus.d.ts +119 -2
  71. package/dist/types/consensus.d.ts.map +1 -1
  72. package/dist/types/consensus.js +12 -1
  73. package/dist/types/consensus.js.map +1 -1
  74. package/dist/types/project.d.ts +76 -0
  75. package/dist/types/project.d.ts.map +1 -1
  76. package/dist/types/project.js +1 -1
  77. package/dist/types/project.js.map +1 -1
  78. package/dist/types/workflow.d.ts +170 -16
  79. package/dist/types/workflow.d.ts.map +1 -1
  80. package/dist/types/workflow.js +26 -3
  81. package/dist/types/workflow.js.map +1 -1
  82. package/dist/workflow/consensus.d.ts +29 -3
  83. package/dist/workflow/consensus.d.ts.map +1 -1
  84. package/dist/workflow/consensus.js +334 -27
  85. package/dist/workflow/consensus.js.map +1 -1
  86. package/dist/workflow/execution-mode.d.ts +2 -0
  87. package/dist/workflow/execution-mode.d.ts.map +1 -1
  88. package/dist/workflow/execution-mode.js +20 -0
  89. package/dist/workflow/execution-mode.js.map +1 -1
  90. package/dist/workflow/index.d.ts +2 -0
  91. package/dist/workflow/index.d.ts.map +1 -1
  92. package/dist/workflow/index.js +11 -0
  93. package/dist/workflow/index.js.map +1 -1
  94. package/dist/workflow/milestone-workflow.d.ts +2 -0
  95. package/dist/workflow/milestone-workflow.d.ts.map +1 -1
  96. package/dist/workflow/milestone-workflow.js +19 -2
  97. package/dist/workflow/milestone-workflow.js.map +1 -1
  98. package/dist/workflow/plan-mode.d.ts +66 -2
  99. package/dist/workflow/plan-mode.d.ts.map +1 -1
  100. package/dist/workflow/plan-mode.js +187 -11
  101. package/dist/workflow/plan-mode.js.map +1 -1
  102. package/dist/workflow/plan-storage.d.ts +252 -8
  103. package/dist/workflow/plan-storage.d.ts.map +1 -1
  104. package/dist/workflow/plan-storage.js +580 -33
  105. package/dist/workflow/plan-storage.js.map +1 -1
  106. package/dist/workflow/project-verification.js +1 -1
  107. package/dist/workflow/project-verification.js.map +1 -1
  108. package/dist/workflow/task-workflow.d.ts +2 -0
  109. package/dist/workflow/task-workflow.d.ts.map +1 -1
  110. package/dist/workflow/task-workflow.js +23 -1
  111. package/dist/workflow/task-workflow.js.map +1 -1
  112. package/dist/workflow/test-runner.d.ts +8 -0
  113. package/dist/workflow/test-runner.d.ts.map +1 -1
  114. package/dist/workflow/test-runner.js +92 -0
  115. package/dist/workflow/test-runner.js.map +1 -1
  116. package/dist/workflow/workspace-manager.d.ts +342 -0
  117. package/dist/workflow/workspace-manager.d.ts.map +1 -0
  118. package/dist/workflow/workspace-manager.js +733 -0
  119. package/dist/workflow/workspace-manager.js.map +1 -0
  120. package/package.json +1 -1
  121. package/src/adapters/claude.ts +322 -25
  122. package/src/adapters/grok.ts +492 -0
  123. package/src/adapters/openai.ts +8 -2
  124. package/src/auth/grok.ts +255 -0
  125. package/src/auth/index.ts +27 -9
  126. package/src/cli/commands/auth.ts +89 -10
  127. package/src/cli/commands/create.ts +13 -4
  128. package/src/cli/interactive.ts +453 -34
  129. package/src/config/defaults.ts +9 -0
  130. package/src/config/index.ts +17 -3
  131. package/src/config/schema.ts +25 -3
  132. package/src/generators/fullstack.ts +551 -0
  133. package/src/generators/index.ts +25 -1
  134. package/src/generators/python.ts +65 -21
  135. package/src/generators/templates/fullstack.ts +1047 -0
  136. package/src/generators/typescript.ts +69 -21
  137. package/src/types/cli.ts +4 -0
  138. package/src/types/consensus.ts +135 -3
  139. package/src/types/project.ts +82 -1
  140. package/src/types/workflow.ts +58 -4
  141. package/src/workflow/consensus.ts +461 -31
  142. package/src/workflow/execution-mode.ts +32 -0
  143. package/src/workflow/index.ts +12 -0
  144. package/src/workflow/milestone-workflow.ts +24 -2
  145. package/src/workflow/plan-mode.ts +238 -10
  146. package/src/workflow/plan-storage.ts +835 -35
  147. package/src/workflow/project-verification.ts +1 -1
  148. package/src/workflow/task-workflow.ts +29 -1
  149. package/src/workflow/test-runner.ts +110 -0
  150. package/src/workflow/workspace-manager.ts +912 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * xAI Grok API authentication module
3
+ * Handles API key validation and storage
4
+ */
5
+ import * as readline from 'node:readline';
6
+ import OpenAI from 'openai';
7
+ import { getCredential, setCredential, deleteCredential, maskCredential, } from './keychain.js';
8
+ import { ENV_VARS } from '../config/defaults.js';
9
+ /**
10
+ * Grok API URL (OpenAI-compatible)
11
+ */
12
+ export const GROK_API_URL = 'https://api.x.ai/v1';
13
+ /**
14
+ * Keychain account for Grok
15
+ */
16
+ const GROK_ACCOUNT = 'grok-api';
17
+ /**
18
+ * Validate a Grok API key by making a test API call
19
+ *
20
+ * @param apiKey - The API key to validate
21
+ * @returns True if the key is valid
22
+ */
23
+ export async function validateGrokToken(apiKey) {
24
+ try {
25
+ const client = new OpenAI({
26
+ apiKey,
27
+ baseURL: GROK_API_URL,
28
+ });
29
+ // Test the key by making a simple request
30
+ await client.chat.completions.create({
31
+ model: 'grok-3',
32
+ messages: [{ role: 'user', content: 'Say "OK"' }],
33
+ max_tokens: 5,
34
+ });
35
+ return true;
36
+ }
37
+ catch (error) {
38
+ // Check for authentication errors
39
+ const errorMessage = error instanceof Error ? error.message : '';
40
+ if (errorMessage.includes('401') ||
41
+ errorMessage.includes('Invalid API') ||
42
+ errorMessage.includes('Unauthorized')) {
43
+ return false;
44
+ }
45
+ // For other errors (e.g., rate limits), assume the key might be valid
46
+ console.warn('Could not fully validate Grok key:', error);
47
+ return true;
48
+ }
49
+ }
50
+ /**
51
+ * Get the Grok API credential
52
+ */
53
+ export async function getGrokCredential() {
54
+ // First check file storage
55
+ const stored = await getCredential(GROK_ACCOUNT);
56
+ if (stored)
57
+ return stored;
58
+ // Fallback to environment variable
59
+ return process.env[ENV_VARS.GROK_KEY] || null;
60
+ }
61
+ /**
62
+ * Set the Grok API credential
63
+ */
64
+ export async function setGrokCredential(apiKey) {
65
+ return setCredential(GROK_ACCOUNT, apiKey);
66
+ }
67
+ /**
68
+ * Delete the Grok API credential
69
+ */
70
+ export async function deleteGrokCredential() {
71
+ return deleteCredential(GROK_ACCOUNT);
72
+ }
73
+ /**
74
+ * Check if Grok is already authenticated
75
+ */
76
+ export async function checkGrokAuth() {
77
+ try {
78
+ const apiKey = await getGrokCredential();
79
+ if (!apiKey) {
80
+ return { authenticated: false };
81
+ }
82
+ // Validate the key
83
+ const isValid = await validateGrokToken(apiKey);
84
+ if (!isValid) {
85
+ return {
86
+ authenticated: false,
87
+ error: 'Stored API key is invalid',
88
+ };
89
+ }
90
+ return {
91
+ authenticated: true,
92
+ keyLastFour: maskCredential(apiKey),
93
+ };
94
+ }
95
+ catch (error) {
96
+ return {
97
+ authenticated: false,
98
+ error: error instanceof Error ? error.message : 'Unknown error',
99
+ };
100
+ }
101
+ }
102
+ /**
103
+ * Prompt for API key in the terminal
104
+ *
105
+ * @returns The entered API key or null if cancelled
106
+ */
107
+ export async function promptForGrokAPIKey() {
108
+ return new Promise((resolve) => {
109
+ const rl = readline.createInterface({
110
+ input: process.stdin,
111
+ output: process.stdout,
112
+ });
113
+ console.log('\nGet your API key from: https://console.x.ai/\n');
114
+ rl.question('Enter your Grok API key: ', (answer) => {
115
+ rl.close();
116
+ const key = answer.trim();
117
+ if (key) {
118
+ resolve(key);
119
+ }
120
+ else {
121
+ resolve(null);
122
+ }
123
+ });
124
+ });
125
+ }
126
+ /**
127
+ * Authenticate with Grok API
128
+ *
129
+ * @returns True if authentication was successful
130
+ */
131
+ export async function authenticateGrok() {
132
+ // Check if already authenticated
133
+ const existingAuth = await checkGrokAuth();
134
+ if (existingAuth.authenticated) {
135
+ console.log('Already authenticated with Grok API');
136
+ return true;
137
+ }
138
+ console.log('Grok API key required for AI reviews.');
139
+ try {
140
+ // Prompt for the API key
141
+ const apiKey = await promptForGrokAPIKey();
142
+ if (!apiKey) {
143
+ console.error('\nNo API key provided');
144
+ return false;
145
+ }
146
+ // Validate the token
147
+ console.log('\nValidating API key...');
148
+ const isValid = await validateGrokToken(apiKey);
149
+ if (!isValid) {
150
+ console.error('Invalid Grok API key');
151
+ return false;
152
+ }
153
+ // Store the token
154
+ await setGrokCredential(apiKey);
155
+ console.log('Grok API authenticated successfully!\n');
156
+ return true;
157
+ }
158
+ catch (error) {
159
+ console.error(`Authentication error: ${error instanceof Error ? error.message : error}`);
160
+ return false;
161
+ }
162
+ }
163
+ /**
164
+ * Authenticate with a provided API key (for CLI --api-key option)
165
+ *
166
+ * @param apiKey - The API key to use
167
+ * @returns True if authentication was successful
168
+ */
169
+ export async function authenticateGrokWithKey(apiKey) {
170
+ // Validate the token
171
+ const isValid = await validateGrokToken(apiKey);
172
+ if (!isValid) {
173
+ console.error('Invalid Grok API key');
174
+ return false;
175
+ }
176
+ // Store the token
177
+ await setGrokCredential(apiKey);
178
+ console.log('Grok API authenticated successfully!\n');
179
+ return true;
180
+ }
181
+ /**
182
+ * Logout from Grok API
183
+ * Removes stored credentials
184
+ */
185
+ export async function logoutGrok() {
186
+ const deleted = await deleteGrokCredential();
187
+ if (deleted) {
188
+ console.log('Grok API credentials removed.');
189
+ }
190
+ else {
191
+ console.log('No Grok API credentials found.');
192
+ }
193
+ }
194
+ /**
195
+ * Get the Grok API key for API calls
196
+ */
197
+ export async function getGrokToken() {
198
+ return getGrokCredential();
199
+ }
200
+ /**
201
+ * Ensure Grok is authenticated
202
+ * Prompts for authentication if not already authenticated
203
+ */
204
+ export async function ensureGrokAuth() {
205
+ const status = await checkGrokAuth();
206
+ if (status.authenticated) {
207
+ return true;
208
+ }
209
+ return authenticateGrok();
210
+ }
211
+ //# sourceMappingURL=grok.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok.js","sourceRoot":"","sources":["../../src/auth/grok.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
1
  /**
2
2
  * Authentication orchestration module
3
- * Coordinates authentication for Claude CLI, OpenAI API, and Gemini API
3
+ * Coordinates authentication for Claude CLI, OpenAI API, Gemini API, and Grok API
4
4
  */
5
5
  import { type ClaudeAuthStatus } from './claude.js';
6
6
  import { type OpenAIAuthStatus } from './openai.js';
7
7
  import { type GeminiAuthStatus } from './gemini.js';
8
+ import { type GrokAuthStatus } from './grok.js';
8
9
  import type { AuthStatus } from '../types/index.js';
9
10
  export * from './claude.js';
10
11
  export * from './openai.js';
11
12
  export * from './gemini.js';
13
+ export * from './grok.js';
12
14
  export * from './keychain.js';
13
15
  export * from './server.js';
14
16
  /**
@@ -18,6 +20,7 @@ export interface CombinedAuthStatus {
18
20
  claude: ClaudeAuthStatus;
19
21
  openai: OpenAIAuthStatus;
20
22
  gemini: GeminiAuthStatus;
23
+ grok: GrokAuthStatus;
21
24
  fullyAuthenticated: boolean;
22
25
  hasArbitrator: boolean;
23
26
  }
@@ -39,23 +42,23 @@ export declare function ensureAuthenticated(): Promise<boolean>;
39
42
  /**
40
43
  * Authenticate a specific service
41
44
  *
42
- * @param service - The service to authenticate ('claude', 'openai', 'gemini', or 'all')
45
+ * @param service - The service to authenticate ('claude', 'openai', 'gemini', 'grok', or 'all')
43
46
  * @returns True if authentication was successful
44
47
  */
45
- export declare function authenticateService(service: 'claude' | 'openai' | 'gemini' | 'all'): Promise<boolean>;
48
+ export declare function authenticateService(service: 'claude' | 'openai' | 'gemini' | 'grok' | 'all'): Promise<boolean>;
46
49
  /**
47
50
  * Logout from a specific service or all services
48
51
  *
49
- * @param service - The service to logout from ('claude', 'openai', 'gemini', or 'all')
52
+ * @param service - The service to logout from ('claude', 'openai', 'gemini', 'grok', or 'all')
50
53
  */
51
- export declare function logout(service: 'claude' | 'openai' | 'gemini' | 'all'): Promise<void>;
54
+ export declare function logout(service: 'claude' | 'openai' | 'gemini' | 'grok' | 'all'): Promise<void>;
52
55
  /**
53
56
  * Check if a specific service is authenticated
54
57
  *
55
58
  * @param service - The service to check
56
59
  * @returns True if the service is authenticated
57
60
  */
58
- export declare function isAuthenticated(service: 'claude' | 'openai' | 'gemini' | 'both' | 'all'): Promise<boolean>;
61
+ export declare function isAuthenticated(service: 'claude' | 'openai' | 'gemini' | 'grok' | 'both' | 'all'): Promise<boolean>;
59
62
  /**
60
63
  * Require authentication, throwing an error if not authenticated
61
64
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAqD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAqD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAcjE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAmBnE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4B5D;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAC9C,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3F;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAehH;AAED;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAUjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAqD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAqD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAgBjE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAuBnE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4B5D;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GACvD,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpG;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBzH;AAED;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAUjD"}
@@ -1,32 +1,36 @@
1
1
  /**
2
2
  * Authentication orchestration module
3
- * Coordinates authentication for Claude CLI, OpenAI API, and Gemini API
3
+ * Coordinates authentication for Claude CLI, OpenAI API, Gemini API, and Grok API
4
4
  */
5
5
  import { checkClaudeCLIAuth, authenticateClaude, logoutClaude } from './claude.js';
6
6
  import { checkOpenAIAuth, authenticateOpenAI, logoutOpenAI } from './openai.js';
7
7
  import { checkGeminiAuth, authenticateGemini, logoutGemini } from './gemini.js';
8
- import { clearAllCredentials } from './keychain.js';
8
+ import { checkGrokAuth, authenticateGrok, logoutGrok } from './grok.js';
9
+ import { clearAllCredentials, deleteCredential } from './keychain.js';
9
10
  // Re-export individual auth modules
10
11
  export * from './claude.js';
11
12
  export * from './openai.js';
12
13
  export * from './gemini.js';
14
+ export * from './grok.js';
13
15
  export * from './keychain.js';
14
16
  export * from './server.js';
15
17
  /**
16
18
  * Get the authentication status for all services
17
19
  */
18
20
  export async function getAuthStatus() {
19
- const [claudeStatus, openaiStatus, geminiStatus] = await Promise.all([
21
+ const [claudeStatus, openaiStatus, geminiStatus, grokStatus] = await Promise.all([
20
22
  checkClaudeCLIAuth(),
21
23
  checkOpenAIAuth(),
22
24
  checkGeminiAuth(),
25
+ checkGrokAuth(),
23
26
  ]);
24
27
  return {
25
28
  claude: claudeStatus,
26
29
  openai: openaiStatus,
27
30
  gemini: geminiStatus,
31
+ grok: grokStatus,
28
32
  fullyAuthenticated: claudeStatus.authenticated && openaiStatus.authenticated,
29
- hasArbitrator: geminiStatus.authenticated || openaiStatus.authenticated,
33
+ hasArbitrator: geminiStatus.authenticated || openaiStatus.authenticated || grokStatus.authenticated,
30
34
  };
31
35
  }
32
36
  /**
@@ -49,6 +53,10 @@ export async function getAuthStatusForDisplay() {
49
53
  authenticated: status.gemini.authenticated,
50
54
  keyLastFour: status.gemini.keyLastFour,
51
55
  },
56
+ grok: {
57
+ authenticated: status.grok.authenticated,
58
+ keyLastFour: status.grok.keyLastFour,
59
+ },
52
60
  };
53
61
  }
54
62
  /**
@@ -84,7 +92,7 @@ export async function ensureAuthenticated() {
84
92
  /**
85
93
  * Authenticate a specific service
86
94
  *
87
- * @param service - The service to authenticate ('claude', 'openai', 'gemini', or 'all')
95
+ * @param service - The service to authenticate ('claude', 'openai', 'gemini', 'grok', or 'all')
88
96
  * @returns True if authentication was successful
89
97
  */
90
98
  export async function authenticateService(service) {
@@ -95,6 +103,8 @@ export async function authenticateService(service) {
95
103
  return authenticateOpenAI();
96
104
  case 'gemini':
97
105
  return authenticateGemini();
106
+ case 'grok':
107
+ return authenticateGrok();
98
108
  case 'all':
99
109
  return ensureAuthenticated();
100
110
  }
@@ -102,7 +112,7 @@ export async function authenticateService(service) {
102
112
  /**
103
113
  * Logout from a specific service or all services
104
114
  *
105
- * @param service - The service to logout from ('claude', 'openai', 'gemini', or 'all')
115
+ * @param service - The service to logout from ('claude', 'openai', 'gemini', 'grok', or 'all')
106
116
  */
107
117
  export async function logout(service) {
108
118
  switch (service) {
@@ -115,8 +125,13 @@ export async function logout(service) {
115
125
  case 'gemini':
116
126
  await logoutGemini();
117
127
  break;
128
+ case 'grok':
129
+ await logoutGrok();
130
+ break;
118
131
  case 'all':
119
132
  await clearAllCredentials();
133
+ // Also clear grok credential
134
+ await deleteCredential('grok-api');
120
135
  console.log('All credentials removed.');
121
136
  break;
122
137
  }
@@ -136,6 +151,8 @@ export async function isAuthenticated(service) {
136
151
  return status.openai.authenticated;
137
152
  case 'gemini':
138
153
  return status.gemini.authenticated;
154
+ case 'grok':
155
+ return status.grok.authenticated;
139
156
  case 'both':
140
157
  return status.fullyAuthenticated;
141
158
  case 'all':
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Authentication commands
3
- * Handles login, logout, and status for Claude and OpenAI
3
+ * Handles login, logout, and status for Claude, OpenAI, Gemini, and Grok
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsK3C"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAmP3C"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Authentication commands
3
- * Handles login, logout, and status for Claude and OpenAI
3
+ * Handles login, logout, and status for Claude, OpenAI, Gemini, and Grok
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import { getAuthStatusForDisplay, authenticateService, logout, isAuthenticated, } from '../../auth/index.js';
7
7
  import { authenticateOpenAIWithKey } from '../../auth/openai.js';
8
+ import { authenticateGeminiWithKey } from '../../auth/gemini.js';
9
+ import { authenticateGrokWithKey } from '../../auth/grok.js';
8
10
  import { printHeader, printAuthStatus, printSuccess, printError, printInfo, startSpinner, succeedSpinner, failSpinner, } from '../output.js';
9
11
  /**
10
12
  * Create the auth command
@@ -26,6 +28,9 @@ export function createAuthCommand() {
26
28
  console.log();
27
29
  printInfo('Run "popeye-cli auth login" to authenticate missing services.');
28
30
  }
31
+ if (status.grok && !status.grok.authenticated) {
32
+ printInfo('Run "popeye-cli auth grok" to authenticate Grok (optional).');
33
+ }
29
34
  }
30
35
  catch (error) {
31
36
  failSpinner('Failed to check status');
@@ -37,12 +42,12 @@ export function createAuthCommand() {
37
42
  auth
38
43
  .command('login')
39
44
  .description('Authenticate with services')
40
- .argument('[service]', 'Service to authenticate (claude, openai, all)', 'all')
41
- .option('--api-key <key>', 'OpenAI API key (for openai service)')
45
+ .argument('[service]', 'Service to authenticate (claude, openai, gemini, grok, all)', 'all')
46
+ .option('--api-key <key>', 'API key (for openai, gemini, or grok service)')
42
47
  .action(async (service, options) => {
43
48
  // Validate service
44
- if (!['claude', 'openai', 'all'].includes(service)) {
45
- printError(`Invalid service: ${service}. Use 'claude', 'openai', or 'all'.`);
49
+ if (!['claude', 'openai', 'gemini', 'grok', 'all'].includes(service)) {
50
+ printError(`Invalid service: ${service}. Use 'claude', 'openai', 'gemini', 'grok', or 'all'.`);
46
51
  process.exit(1);
47
52
  }
48
53
  printHeader('Authentication');
@@ -88,11 +93,11 @@ export function createAuthCommand() {
88
93
  auth
89
94
  .command('logout')
90
95
  .description('Remove stored credentials')
91
- .argument('[service]', 'Service to logout from (claude, openai, all)', 'all')
96
+ .argument('[service]', 'Service to logout from (claude, openai, gemini, grok, all)', 'all')
92
97
  .action(async (service) => {
93
98
  // Validate service
94
- if (!['claude', 'openai', 'all'].includes(service)) {
95
- printError(`Invalid service: ${service}. Use 'claude', 'openai', or 'all'.`);
99
+ if (!['claude', 'openai', 'gemini', 'grok', 'all'].includes(service)) {
100
+ printError(`Invalid service: ${service}. Use 'claude', 'openai', 'gemini', 'grok', or 'all'.`);
96
101
  process.exit(1);
97
102
  }
98
103
  try {
@@ -157,6 +162,72 @@ export function createAuthCommand() {
157
162
  process.exit(1);
158
163
  }
159
164
  });
165
+ // Gemini-specific subcommand
166
+ auth
167
+ .command('gemini')
168
+ .description('Authenticate with Gemini API')
169
+ .option('--api-key <key>', 'Gemini API key')
170
+ .action(async (options) => {
171
+ printHeader('Gemini API Authentication');
172
+ if (options.apiKey) {
173
+ startSpinner('Validating API key...');
174
+ const success = await authenticateGeminiWithKey(options.apiKey);
175
+ if (success) {
176
+ succeedSpinner('Gemini API authenticated!');
177
+ }
178
+ else {
179
+ failSpinner('Invalid API key');
180
+ process.exit(1);
181
+ }
182
+ return;
183
+ }
184
+ const alreadyAuth = await isAuthenticated('gemini');
185
+ if (alreadyAuth) {
186
+ printInfo('Already authenticated with Gemini API');
187
+ return;
188
+ }
189
+ const success = await authenticateService('gemini');
190
+ if (success) {
191
+ printSuccess('Gemini API authenticated!');
192
+ }
193
+ else {
194
+ printError('Gemini API authentication failed');
195
+ process.exit(1);
196
+ }
197
+ });
198
+ // Grok-specific subcommand
199
+ auth
200
+ .command('grok')
201
+ .description('Authenticate with xAI Grok API')
202
+ .option('--api-key <key>', 'Grok API key')
203
+ .action(async (options) => {
204
+ printHeader('Grok API Authentication');
205
+ if (options.apiKey) {
206
+ startSpinner('Validating API key...');
207
+ const success = await authenticateGrokWithKey(options.apiKey);
208
+ if (success) {
209
+ succeedSpinner('Grok API authenticated!');
210
+ }
211
+ else {
212
+ failSpinner('Invalid API key');
213
+ process.exit(1);
214
+ }
215
+ return;
216
+ }
217
+ const alreadyAuth = await isAuthenticated('grok');
218
+ if (alreadyAuth) {
219
+ printInfo('Already authenticated with Grok API');
220
+ return;
221
+ }
222
+ const success = await authenticateService('grok');
223
+ if (success) {
224
+ printSuccess('Grok API authenticated!');
225
+ }
226
+ else {
227
+ printError('Grok API authentication failed');
228
+ process.exit(1);
229
+ }
230
+ });
160
231
  return auth;
161
232
  }
162
233
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAmM7C"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA4M7C"}
@@ -17,7 +17,7 @@ export function createCreateCommand() {
17
17
  .description('Create a new project from an idea')
18
18
  .argument('<idea>', 'Project idea or description')
19
19
  .option('-n, --name <name>', 'Project name')
20
- .option('-l, --language <lang>', 'Output language (python, typescript)', 'python')
20
+ .option('-l, --language <lang>', 'Output language (python, typescript, fullstack)', 'python')
21
21
  .option('-m, --model <model>', 'OpenAI model for consensus (gpt-4o, gpt-4o-mini, o1-preview)', 'gpt-4o')
22
22
  .option('-o, --output <dir>', 'Output directory', process.cwd())
23
23
  .option('--threshold <percent>', 'Consensus threshold percentage', '95')
@@ -27,8 +27,8 @@ export function createCreateCommand() {
27
27
  try {
28
28
  // Validate inputs
29
29
  const language = options.language;
30
- if (!['python', 'typescript'].includes(language)) {
31
- printError(`Invalid language: ${language}. Use 'python' or 'typescript'.`);
30
+ if (!['python', 'typescript', 'fullstack'].includes(language)) {
31
+ printError(`Invalid language: ${language}. Use 'python', 'typescript', or 'fullstack'.`);
32
32
  process.exit(1);
33
33
  }
34
34
  const model = options.model;
@@ -131,7 +131,18 @@ export function createCreateCommand() {
131
131
  printSuccess('Your project is ready!');
132
132
  console.log();
133
133
  printInfo(`cd ${projectDir}`);
134
- printInfo(language === 'python' ? 'python -m pytest tests/' : 'npm test');
134
+ if (language === 'python') {
135
+ printInfo('python -m pytest tests/');
136
+ }
137
+ else if (language === 'typescript') {
138
+ printInfo('npm test');
139
+ }
140
+ else if (language === 'fullstack') {
141
+ printInfo('docker-compose up # Run both frontend and backend');
142
+ printInfo('# Or run separately:');
143
+ printInfo('cd apps/frontend && npm install && npm run dev');
144
+ printInfo('cd apps/backend && pip install -e . && uvicorn src.backend.main:app --reload');
145
+ }
135
146
  }
136
147
  else {
137
148
  printHeader('Project Creation Failed');