monty-autonomous-fullstack-dev-multillm 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 (186) hide show
  1. package/LICENSE +81 -0
  2. package/README.md +608 -0
  3. package/bin/cli.js +448 -0
  4. package/dist/agents/coding.d.ts +15 -0
  5. package/dist/agents/coding.d.ts.map +1 -0
  6. package/dist/agents/coding.js +189 -0
  7. package/dist/agents/coding.js.map +1 -0
  8. package/dist/agents/initializer.d.ts +15 -0
  9. package/dist/agents/initializer.d.ts.map +1 -0
  10. package/dist/agents/initializer.js +87 -0
  11. package/dist/agents/initializer.js.map +1 -0
  12. package/dist/agents/prompts/arbitrator.md +143 -0
  13. package/dist/agents/prompts/coding.md +247 -0
  14. package/dist/agents/prompts/initializer.md +98 -0
  15. package/dist/config/agent-config.d.ts +103 -0
  16. package/dist/config/agent-config.d.ts.map +1 -0
  17. package/dist/config/agent-config.js +138 -0
  18. package/dist/config/agent-config.js.map +1 -0
  19. package/dist/config/auth-config.d.ts +152 -0
  20. package/dist/config/auth-config.d.ts.map +1 -0
  21. package/dist/config/auth-config.js +139 -0
  22. package/dist/config/auth-config.js.map +1 -0
  23. package/dist/config/mcp-config.d.ts +109 -0
  24. package/dist/config/mcp-config.d.ts.map +1 -0
  25. package/dist/config/mcp-config.js +234 -0
  26. package/dist/config/mcp-config.js.map +1 -0
  27. package/dist/config/provider-config.d.ts +139 -0
  28. package/dist/config/provider-config.d.ts.map +1 -0
  29. package/dist/config/provider-config.js +344 -0
  30. package/dist/config/provider-config.js.map +1 -0
  31. package/dist/config/subagents-config.d.ts +85 -0
  32. package/dist/config/subagents-config.d.ts.map +1 -0
  33. package/dist/config/subagents-config.js +430 -0
  34. package/dist/config/subagents-config.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +385 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/orchestrator/arbitrator.d.ts +93 -0
  40. package/dist/orchestrator/arbitrator.d.ts.map +1 -0
  41. package/dist/orchestrator/arbitrator.js +330 -0
  42. package/dist/orchestrator/arbitrator.js.map +1 -0
  43. package/dist/orchestrator/index.d.ts +113 -0
  44. package/dist/orchestrator/index.d.ts.map +1 -0
  45. package/dist/orchestrator/index.js +217 -0
  46. package/dist/orchestrator/index.js.map +1 -0
  47. package/dist/orchestrator/review-coordinator.d.ts +143 -0
  48. package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
  49. package/dist/orchestrator/review-coordinator.js +401 -0
  50. package/dist/orchestrator/review-coordinator.js.map +1 -0
  51. package/dist/orchestrator/task-classifier.d.ts +87 -0
  52. package/dist/orchestrator/task-classifier.d.ts.map +1 -0
  53. package/dist/orchestrator/task-classifier.js +250 -0
  54. package/dist/orchestrator/task-classifier.js.map +1 -0
  55. package/dist/providers/anthropic-provider.d.ts +64 -0
  56. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  57. package/dist/providers/anthropic-provider.js +264 -0
  58. package/dist/providers/anthropic-provider.js.map +1 -0
  59. package/dist/providers/base-provider.d.ts +219 -0
  60. package/dist/providers/base-provider.d.ts.map +1 -0
  61. package/dist/providers/base-provider.js +143 -0
  62. package/dist/providers/base-provider.js.map +1 -0
  63. package/dist/providers/cursor-provider.d.ts +82 -0
  64. package/dist/providers/cursor-provider.d.ts.map +1 -0
  65. package/dist/providers/cursor-provider.js +321 -0
  66. package/dist/providers/cursor-provider.js.map +1 -0
  67. package/dist/providers/google-provider.d.ts +75 -0
  68. package/dist/providers/google-provider.d.ts.map +1 -0
  69. package/dist/providers/google-provider.js +274 -0
  70. package/dist/providers/google-provider.js.map +1 -0
  71. package/dist/providers/index.d.ts +92 -0
  72. package/dist/providers/index.d.ts.map +1 -0
  73. package/dist/providers/index.js +233 -0
  74. package/dist/providers/index.js.map +1 -0
  75. package/dist/providers/openai-provider.d.ts +83 -0
  76. package/dist/providers/openai-provider.d.ts.map +1 -0
  77. package/dist/providers/openai-provider.js +295 -0
  78. package/dist/providers/openai-provider.js.map +1 -0
  79. package/dist/templates/feature_list.template.json +66 -0
  80. package/dist/templates/progress.template.txt +51 -0
  81. package/dist/utils/auth-manager.d.ts +121 -0
  82. package/dist/utils/auth-manager.d.ts.map +1 -0
  83. package/dist/utils/auth-manager.js +560 -0
  84. package/dist/utils/auth-manager.js.map +1 -0
  85. package/dist/utils/budget-enforcer.d.ts +181 -0
  86. package/dist/utils/budget-enforcer.d.ts.map +1 -0
  87. package/dist/utils/budget-enforcer.js +386 -0
  88. package/dist/utils/budget-enforcer.js.map +1 -0
  89. package/dist/utils/chatgpt-detector.d.ts +51 -0
  90. package/dist/utils/chatgpt-detector.d.ts.map +1 -0
  91. package/dist/utils/chatgpt-detector.js +274 -0
  92. package/dist/utils/chatgpt-detector.js.map +1 -0
  93. package/dist/utils/claude-code-detector.d.ts +39 -0
  94. package/dist/utils/claude-code-detector.d.ts.map +1 -0
  95. package/dist/utils/claude-code-detector.js +153 -0
  96. package/dist/utils/claude-code-detector.js.map +1 -0
  97. package/dist/utils/code-quality.d.ts +58 -0
  98. package/dist/utils/code-quality.d.ts.map +1 -0
  99. package/dist/utils/code-quality.js +258 -0
  100. package/dist/utils/code-quality.js.map +1 -0
  101. package/dist/utils/context-primer.d.ts +50 -0
  102. package/dist/utils/context-primer.d.ts.map +1 -0
  103. package/dist/utils/context-primer.js +429 -0
  104. package/dist/utils/context-primer.js.map +1 -0
  105. package/dist/utils/dependency-management.d.ts +40 -0
  106. package/dist/utils/dependency-management.d.ts.map +1 -0
  107. package/dist/utils/dependency-management.js +123 -0
  108. package/dist/utils/dependency-management.js.map +1 -0
  109. package/dist/utils/environment-validation.d.ts +33 -0
  110. package/dist/utils/environment-validation.d.ts.map +1 -0
  111. package/dist/utils/environment-validation.js +136 -0
  112. package/dist/utils/environment-validation.js.map +1 -0
  113. package/dist/utils/error-recovery.d.ts +60 -0
  114. package/dist/utils/error-recovery.d.ts.map +1 -0
  115. package/dist/utils/error-recovery.js +183 -0
  116. package/dist/utils/error-recovery.js.map +1 -0
  117. package/dist/utils/feature-list.d.ts +102 -0
  118. package/dist/utils/feature-list.d.ts.map +1 -0
  119. package/dist/utils/feature-list.js +191 -0
  120. package/dist/utils/feature-list.js.map +1 -0
  121. package/dist/utils/gemini-detector.d.ts +65 -0
  122. package/dist/utils/gemini-detector.d.ts.map +1 -0
  123. package/dist/utils/gemini-detector.js +340 -0
  124. package/dist/utils/gemini-detector.js.map +1 -0
  125. package/dist/utils/git-utils.d.ts +48 -0
  126. package/dist/utils/git-utils.d.ts.map +1 -0
  127. package/dist/utils/git-utils.js +110 -0
  128. package/dist/utils/git-utils.js.map +1 -0
  129. package/dist/utils/health-check.d.ts +32 -0
  130. package/dist/utils/health-check.d.ts.map +1 -0
  131. package/dist/utils/health-check.js +152 -0
  132. package/dist/utils/health-check.js.map +1 -0
  133. package/dist/utils/hooks-manager.d.ts +154 -0
  134. package/dist/utils/hooks-manager.d.ts.map +1 -0
  135. package/dist/utils/hooks-manager.js +359 -0
  136. package/dist/utils/hooks-manager.js.map +1 -0
  137. package/dist/utils/multi-auth-manager.d.ts +144 -0
  138. package/dist/utils/multi-auth-manager.d.ts.map +1 -0
  139. package/dist/utils/multi-auth-manager.js +588 -0
  140. package/dist/utils/multi-auth-manager.js.map +1 -0
  141. package/dist/utils/progress.d.ts +49 -0
  142. package/dist/utils/progress.d.ts.map +1 -0
  143. package/dist/utils/progress.js +209 -0
  144. package/dist/utils/progress.js.map +1 -0
  145. package/dist/utils/project-detection.d.ts +40 -0
  146. package/dist/utils/project-detection.d.ts.map +1 -0
  147. package/dist/utils/project-detection.js +230 -0
  148. package/dist/utils/project-detection.js.map +1 -0
  149. package/dist/utils/session-manager.d.ts +119 -0
  150. package/dist/utils/session-manager.d.ts.map +1 -0
  151. package/dist/utils/session-manager.js +389 -0
  152. package/dist/utils/session-manager.js.map +1 -0
  153. package/dist/utils/skills-manager.d.ts +113 -0
  154. package/dist/utils/skills-manager.d.ts.map +1 -0
  155. package/dist/utils/skills-manager.js +332 -0
  156. package/dist/utils/skills-manager.js.map +1 -0
  157. package/dist/utils/structured-output.d.ts +117 -0
  158. package/dist/utils/structured-output.d.ts.map +1 -0
  159. package/dist/utils/structured-output.js +191 -0
  160. package/dist/utils/structured-output.js.map +1 -0
  161. package/dist/utils/subagent-manager.d.ts +143 -0
  162. package/dist/utils/subagent-manager.d.ts.map +1 -0
  163. package/dist/utils/subagent-manager.js +326 -0
  164. package/dist/utils/subagent-manager.js.map +1 -0
  165. package/dist/utils/supabase-setup.d.ts +50 -0
  166. package/dist/utils/supabase-setup.d.ts.map +1 -0
  167. package/dist/utils/supabase-setup.js +151 -0
  168. package/dist/utils/supabase-setup.js.map +1 -0
  169. package/dist/utils/token-refresh.d.ts +21 -0
  170. package/dist/utils/token-refresh.d.ts.map +1 -0
  171. package/dist/utils/token-refresh.js +77 -0
  172. package/dist/utils/token-refresh.js.map +1 -0
  173. package/dist/utils/tos-warning.d.ts +115 -0
  174. package/dist/utils/tos-warning.d.ts.map +1 -0
  175. package/dist/utils/tos-warning.js +304 -0
  176. package/dist/utils/tos-warning.js.map +1 -0
  177. package/dist/utils/usage-monitor.d.ts +156 -0
  178. package/dist/utils/usage-monitor.d.ts.map +1 -0
  179. package/dist/utils/usage-monitor.js +296 -0
  180. package/dist/utils/usage-monitor.js.map +1 -0
  181. package/package.json +105 -0
  182. package/scripts/init.ps1 +73 -0
  183. package/scripts/init.sh +86 -0
  184. package/scripts/test-auth.sh +90 -0
  185. package/templates/feature_list.template.json +66 -0
  186. package/templates/progress.template.txt +51 -0
@@ -0,0 +1,588 @@
1
+ /**
2
+ * Multi-Provider Authentication Manager
3
+ * Unified credential management for all supported AI providers.
4
+ * Supports auto-migration from v1 credentials and provider-specific login flows.
5
+ *
6
+ * Copyright (c) 2025 Dobeu Tech Solutions LLC
7
+ * Licensed under CC BY-NC 4.0
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
10
+ import { createInterface } from 'readline';
11
+ import open from 'open';
12
+ import { authConfig, PROVIDER_ENV_VARS, DEFAULT_MULTI_PROVIDER_CREDENTIALS, isMultiProviderCredentials, migrateToMultiProvider, } from '../config/auth-config.js';
13
+ import { PROVIDER_CONFIGS, getProviderConfig, } from '../config/provider-config.js';
14
+ import { detectClaudeCodeCredentials, getDaysUntilExpiration, getClaudeCodePaths } from './claude-code-detector.js';
15
+ import { isTokenExpired, refreshSubscriptionToken } from './token-refresh.js';
16
+ /**
17
+ * MultiAuthManager - Singleton for managing multi-provider authentication
18
+ */
19
+ export class MultiAuthManager {
20
+ static instance;
21
+ credentials;
22
+ constructor() {
23
+ this.credentials = this.loadCredentials();
24
+ }
25
+ /**
26
+ * Get the singleton instance
27
+ */
28
+ static getInstance() {
29
+ if (!MultiAuthManager.instance) {
30
+ MultiAuthManager.instance = new MultiAuthManager();
31
+ }
32
+ return MultiAuthManager.instance;
33
+ }
34
+ /**
35
+ * Ensure the config directory exists
36
+ */
37
+ ensureConfigDir() {
38
+ if (!existsSync(authConfig.configDir)) {
39
+ mkdirSync(authConfig.configDir, { recursive: true });
40
+ }
41
+ }
42
+ /**
43
+ * Load credentials from file (auto-migrates v1 to v2 format)
44
+ */
45
+ loadCredentials() {
46
+ try {
47
+ if (existsSync(authConfig.credentialsPath)) {
48
+ const data = readFileSync(authConfig.credentialsPath, 'utf-8');
49
+ const parsed = JSON.parse(data);
50
+ // Check if v2 format
51
+ if (isMultiProviderCredentials(parsed)) {
52
+ return parsed;
53
+ }
54
+ // Migrate v1 to v2
55
+ const v1 = parsed;
56
+ const v2 = migrateToMultiProvider(v1);
57
+ this.saveCredentials(v2);
58
+ console.log('✓ Migrated credentials to multi-provider format (v2.0)');
59
+ return v2;
60
+ }
61
+ }
62
+ catch (error) {
63
+ console.error('Failed to load credentials:', error);
64
+ }
65
+ return { ...DEFAULT_MULTI_PROVIDER_CREDENTIALS };
66
+ }
67
+ /**
68
+ * Save credentials to file
69
+ */
70
+ saveCredentials(credentials) {
71
+ this.ensureConfigDir();
72
+ writeFileSync(authConfig.credentialsPath, JSON.stringify(credentials, null, 2), {
73
+ mode: 0o600,
74
+ });
75
+ // On Windows, mode parameter is ignored
76
+ if (process.platform === 'win32') {
77
+ try {
78
+ const { execSync } = require('child_process');
79
+ execSync(`icacls "${authConfig.credentialsPath}" /inheritance:r /grant:r "%USERNAME%:F"`, {
80
+ stdio: 'ignore',
81
+ });
82
+ }
83
+ catch {
84
+ console.warn('Warning: Could not set Windows file permissions for credentials file');
85
+ }
86
+ }
87
+ this.credentials = credentials;
88
+ }
89
+ /**
90
+ * Get credentials for a specific provider
91
+ */
92
+ getProviderCredentials(provider) {
93
+ // Check environment variables first
94
+ const envVars = PROVIDER_ENV_VARS[provider];
95
+ if (envVars) {
96
+ const apiKey = process.env[envVars.API_KEY];
97
+ if (apiKey) {
98
+ return {
99
+ enabled: true,
100
+ method: 'api_key',
101
+ source: 'manual',
102
+ apiKey,
103
+ };
104
+ }
105
+ if (envVars.ACCESS_TOKEN) {
106
+ const token = process.env[envVars.ACCESS_TOKEN];
107
+ if (token) {
108
+ return {
109
+ enabled: true,
110
+ method: 'subscription',
111
+ source: 'manual',
112
+ accessToken: token,
113
+ };
114
+ }
115
+ }
116
+ }
117
+ // Return stored credentials
118
+ return this.credentials.providers[provider] ?? null;
119
+ }
120
+ /**
121
+ * Set credentials for a specific provider
122
+ */
123
+ setProviderCredentials(provider, creds) {
124
+ this.credentials.providers[provider] = creds;
125
+ this.saveCredentials(this.credentials);
126
+ }
127
+ /**
128
+ * Remove credentials for a specific provider
129
+ */
130
+ removeProviderCredentials(provider) {
131
+ delete this.credentials.providers[provider];
132
+ this.saveCredentials(this.credentials);
133
+ }
134
+ /**
135
+ * Get API key for a provider (with token refresh if needed)
136
+ */
137
+ async getApiKey(provider) {
138
+ const creds = this.getProviderCredentials(provider);
139
+ if (!creds)
140
+ return null;
141
+ // Check if subscription token needs refresh
142
+ if (creds.method === 'subscription' && creds.refreshToken && creds.expiresAt) {
143
+ if (isTokenExpired(creds.expiresAt)) {
144
+ console.log(`Token expired for ${provider}, attempting refresh...`);
145
+ if (provider === 'anthropic') {
146
+ const refreshed = await refreshSubscriptionToken(creds.refreshToken);
147
+ if (refreshed) {
148
+ this.setProviderCredentials(provider, {
149
+ ...creds,
150
+ accessToken: refreshed.subscriptionKey ?? refreshed.apiKey,
151
+ refreshToken: refreshed.refreshToken,
152
+ expiresAt: refreshed.expiresAt,
153
+ });
154
+ console.log(`✓ Token refreshed for ${provider}`);
155
+ return refreshed.subscriptionKey ?? refreshed.apiKey ?? null;
156
+ }
157
+ }
158
+ console.error(`✗ Token refresh failed for ${provider}`);
159
+ return null;
160
+ }
161
+ }
162
+ return creds.apiKey ?? creds.accessToken ?? null;
163
+ }
164
+ /**
165
+ * Get API key synchronously (no refresh)
166
+ */
167
+ getApiKeySync(provider) {
168
+ const creds = this.getProviderCredentials(provider);
169
+ return creds?.apiKey ?? creds?.accessToken ?? null;
170
+ }
171
+ /**
172
+ * Check if a provider is authenticated
173
+ */
174
+ isProviderAuthenticated(provider) {
175
+ const creds = this.getProviderCredentials(provider);
176
+ if (!creds || !creds.enabled)
177
+ return false;
178
+ // Check for valid credentials
179
+ if (creds.apiKey || creds.accessToken) {
180
+ // Check expiration for subscription tokens
181
+ if (creds.expiresAt && creds.expiresAt < Date.now()) {
182
+ return !!creds.refreshToken; // Can potentially be refreshed
183
+ }
184
+ return true;
185
+ }
186
+ return false;
187
+ }
188
+ /**
189
+ * Check if any provider is authenticated
190
+ */
191
+ isAnyProviderAuthenticated() {
192
+ for (const provider of Object.keys(PROVIDER_CONFIGS)) {
193
+ if (this.isProviderAuthenticated(provider)) {
194
+ return true;
195
+ }
196
+ }
197
+ return false;
198
+ }
199
+ /**
200
+ * Get all authenticated providers
201
+ */
202
+ getAuthenticatedProviders() {
203
+ return Object.keys(PROVIDER_CONFIGS)
204
+ .filter(provider => this.isProviderAuthenticated(provider));
205
+ }
206
+ /**
207
+ * Get default provider
208
+ */
209
+ getDefaultProvider() {
210
+ return this.credentials.default_provider;
211
+ }
212
+ /**
213
+ * Set default provider
214
+ */
215
+ setDefaultProvider(provider) {
216
+ this.credentials.default_provider = provider;
217
+ this.saveCredentials(this.credentials);
218
+ }
219
+ /**
220
+ * Get display info for all providers
221
+ */
222
+ getProviderDisplayInfo() {
223
+ const result = [];
224
+ for (const [name, config] of Object.entries(PROVIDER_CONFIGS)) {
225
+ const providerName = name;
226
+ const creds = this.getProviderCredentials(providerName);
227
+ const key = creds?.apiKey ?? creds?.accessToken;
228
+ result.push({
229
+ name: providerName,
230
+ displayName: config.displayName,
231
+ enabled: config.enabled && !!creds?.enabled,
232
+ authenticated: this.isProviderAuthenticated(providerName),
233
+ method: creds?.method ?? null,
234
+ source: creds?.source ?? null,
235
+ email: creds?.email ?? null,
236
+ keyPreview: key ? `${key.slice(0, 8)}...${key.slice(-4)}` : null,
237
+ isDefault: providerName === this.credentials.default_provider,
238
+ });
239
+ }
240
+ return result;
241
+ }
242
+ /**
243
+ * Validate a provider's API key
244
+ */
245
+ async validateProviderKey(provider, key) {
246
+ const config = getProviderConfig(provider);
247
+ try {
248
+ switch (provider) {
249
+ case 'anthropic': {
250
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
251
+ method: 'POST',
252
+ headers: {
253
+ 'Content-Type': 'application/json',
254
+ 'x-api-key': key,
255
+ 'anthropic-version': '2023-06-01',
256
+ },
257
+ body: JSON.stringify({
258
+ model: 'claude-3-haiku-20240307',
259
+ max_tokens: 1,
260
+ messages: [{ role: 'user', content: 'hi' }],
261
+ }),
262
+ });
263
+ return response.status === 200 || response.status === 400;
264
+ }
265
+ case 'openai': {
266
+ const response = await fetch('https://api.openai.com/v1/models', {
267
+ method: 'GET',
268
+ headers: { 'Authorization': `Bearer ${key}` },
269
+ });
270
+ return response.status === 200;
271
+ }
272
+ case 'google': {
273
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models?key=${key}`, { method: 'GET' });
274
+ return response.status === 200;
275
+ }
276
+ case 'cursor': {
277
+ const response = await fetch(`${config.apiEndpoint}/health`, {
278
+ method: 'GET',
279
+ headers: { 'Authorization': `Bearer ${key}` },
280
+ });
281
+ return response.status === 200;
282
+ }
283
+ default:
284
+ return true;
285
+ }
286
+ }
287
+ catch {
288
+ console.warn(`Could not validate ${provider} key online`);
289
+ return true; // Assume valid if network error
290
+ }
291
+ }
292
+ /**
293
+ * Interactive login for a specific provider
294
+ */
295
+ async loginProvider(provider, options) {
296
+ const config = getProviderConfig(provider);
297
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
298
+ const question = (prompt) => new Promise(resolve => rl.question(prompt, answer => resolve(answer.trim())));
299
+ try {
300
+ // Special handling for Anthropic (auto-detect Claude Code)
301
+ if (provider === 'anthropic' && !options?.key) {
302
+ console.log('\nChecking for existing Claude Code subscription credentials...');
303
+ console.log(' Checking paths:', getClaudeCodePaths().join(', '));
304
+ const claudeCreds = await detectClaudeCodeCredentials();
305
+ if (claudeCreds) {
306
+ console.log('✓ Found Claude Code subscription credentials!');
307
+ const daysRemaining = getDaysUntilExpiration(claudeCreds.expiresAt);
308
+ if (daysRemaining !== null) {
309
+ console.log(`✓ Token is valid (expires in ${daysRemaining} days)`);
310
+ }
311
+ this.setProviderCredentials('anthropic', {
312
+ enabled: true,
313
+ method: 'subscription',
314
+ source: 'auto-detect',
315
+ accessToken: claudeCreds.accessToken,
316
+ refreshToken: claudeCreds.refreshToken,
317
+ expiresAt: claudeCreds.expiresAt
318
+ ? (claudeCreds.expiresAt > 1e12 ? claudeCreds.expiresAt : claudeCreds.expiresAt * 1000)
319
+ : undefined,
320
+ tier: claudeCreds.tier ?? 'pro',
321
+ });
322
+ console.log('✓ Imported successfully');
323
+ rl.close();
324
+ return true;
325
+ }
326
+ console.log('No Claude Code subscription credentials found.');
327
+ }
328
+ // Manual key entry
329
+ console.log(`\n─────────────────────────────────────────────────────────────`);
330
+ console.log(` ${config.displayName} Setup`);
331
+ console.log(`─────────────────────────────────────────────────────────────\n`);
332
+ let key = options?.key ?? '';
333
+ if (!key) {
334
+ const envVar = PROVIDER_ENV_VARS[provider]?.API_KEY;
335
+ if (envVar && process.env[envVar]) {
336
+ const useEnv = await question(`Use existing ${envVar} environment variable? (Y/n): `);
337
+ if (useEnv.toLowerCase() !== 'n') {
338
+ key = process.env[envVar];
339
+ }
340
+ }
341
+ }
342
+ if (!key) {
343
+ const consoleUrls = {
344
+ anthropic: 'https://console.anthropic.com/settings/keys',
345
+ openai: 'https://platform.openai.com/api-keys',
346
+ google: 'https://aistudio.google.com/app/apikey',
347
+ cursor: 'https://cursor.com/settings/api',
348
+ };
349
+ console.log(`To get your API key, visit: ${consoleUrls[provider]}\n`);
350
+ const openBrowser = await question('Open browser to get API key? (y/N): ');
351
+ if (openBrowser.toLowerCase() === 'y') {
352
+ try {
353
+ await open(consoleUrls[provider]);
354
+ console.log('✓ Browser opened\n');
355
+ }
356
+ catch {
357
+ console.log('Could not open browser. Please visit the URL manually.\n');
358
+ }
359
+ }
360
+ const keyPrefixes = {
361
+ anthropic: 'sk-ant-...',
362
+ openai: 'sk-...',
363
+ google: 'AIza...',
364
+ cursor: 'cur_...',
365
+ };
366
+ key = await question(`API key (${keyPrefixes[provider]}): `);
367
+ }
368
+ if (!key || key.length < 10) {
369
+ console.log('\n✗ Error: Invalid key format.');
370
+ rl.close();
371
+ return false;
372
+ }
373
+ // Validate key
374
+ console.log('\nValidating credentials...');
375
+ const isValid = await this.validateProviderKey(provider, key);
376
+ if (!isValid) {
377
+ console.log('\n✗ Error: Could not validate credentials.');
378
+ rl.close();
379
+ return false;
380
+ }
381
+ console.log('✓ Credentials validated');
382
+ // Get optional email
383
+ const email = await question('\nEmail (optional, press Enter to skip): ');
384
+ // Save credentials
385
+ this.setProviderCredentials(provider, {
386
+ enabled: true,
387
+ method: 'api_key',
388
+ source: 'manual',
389
+ apiKey: key,
390
+ email: email || undefined,
391
+ });
392
+ console.log('\n═══════════════════════════════════════════════════════════════');
393
+ console.log(` ✓ ${config.displayName} Login Successful!`);
394
+ console.log('═══════════════════════════════════════════════════════════════\n');
395
+ console.log(` Key: ${key.slice(0, 8)}...${key.slice(-4)}`);
396
+ if (email)
397
+ console.log(` Email: ${email}`);
398
+ console.log(`\n Credentials saved to: ~/.monty/credentials.json\n`);
399
+ rl.close();
400
+ return true;
401
+ }
402
+ catch (error) {
403
+ console.error('Login failed:', error);
404
+ rl.close();
405
+ return false;
406
+ }
407
+ }
408
+ /**
409
+ * Interactive login for all providers
410
+ */
411
+ async loginAll() {
412
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
413
+ const question = (prompt) => new Promise(resolve => rl.question(prompt, answer => resolve(answer.trim())));
414
+ console.log('\n╔══════════════════════════════════════════════════════════════╗');
415
+ console.log('║ Monty Multi-Provider Login ║');
416
+ console.log('╠══════════════════════════════════════════════════════════════╣');
417
+ console.log('║ ║');
418
+ console.log('║ Available Providers: ║');
419
+ const providerInfo = this.getProviderDisplayInfo();
420
+ for (const info of providerInfo) {
421
+ const status = info.authenticated ? '✓ Configured' : '○ Not configured';
422
+ const defaultMarker = info.isDefault ? ' ★' : '';
423
+ console.log(`║ [${info.name.slice(0, 1).toUpperCase()}] ${info.displayName.padEnd(20)} ${status}${defaultMarker}`);
424
+ }
425
+ console.log('║ ║');
426
+ console.log('║ [A] Configure all providers ║');
427
+ console.log('║ [S] Skip - use only configured providers ║');
428
+ console.log('║ ║');
429
+ console.log('╚══════════════════════════════════════════════════════════════╝');
430
+ const choice = await question('\nSelect option: ');
431
+ rl.close();
432
+ if (choice.toLowerCase() === 's') {
433
+ return;
434
+ }
435
+ if (choice.toLowerCase() === 'a') {
436
+ for (const provider of ['anthropic', 'openai', 'google', 'cursor']) {
437
+ await this.loginProvider(provider);
438
+ }
439
+ return;
440
+ }
441
+ // Map single letter choices to providers
442
+ const choiceMap = {
443
+ 'a': 'anthropic',
444
+ '1': 'anthropic',
445
+ 'o': 'openai',
446
+ '2': 'openai',
447
+ 'g': 'google',
448
+ '3': 'google',
449
+ 'c': 'cursor',
450
+ '4': 'cursor',
451
+ };
452
+ const provider = choiceMap[choice.toLowerCase()];
453
+ if (provider) {
454
+ await this.loginProvider(provider);
455
+ }
456
+ }
457
+ /**
458
+ * Logout from a specific provider
459
+ */
460
+ logoutProvider(provider) {
461
+ const wasAuthenticated = this.isProviderAuthenticated(provider);
462
+ this.removeProviderCredentials(provider);
463
+ if (wasAuthenticated) {
464
+ console.log(`\n✓ Logged out from ${getProviderConfig(provider).displayName}`);
465
+ }
466
+ else {
467
+ console.log(`\nNo credentials found for ${getProviderConfig(provider).displayName}`);
468
+ }
469
+ }
470
+ /**
471
+ * Logout from all providers
472
+ */
473
+ logoutAll() {
474
+ const wasAuthenticated = this.isAnyProviderAuthenticated();
475
+ try {
476
+ if (existsSync(authConfig.credentialsPath)) {
477
+ unlinkSync(authConfig.credentialsPath);
478
+ }
479
+ if (existsSync(authConfig.sessionPath)) {
480
+ unlinkSync(authConfig.sessionPath);
481
+ }
482
+ }
483
+ catch {
484
+ // Ignore errors during cleanup
485
+ }
486
+ this.credentials = { ...DEFAULT_MULTI_PROVIDER_CREDENTIALS };
487
+ if (wasAuthenticated) {
488
+ console.log('\n✓ Logged out from all providers');
489
+ console.log(' Credentials removed from ~/.monty/credentials.json\n');
490
+ }
491
+ else {
492
+ console.log('\nNo credentials were stored.\n');
493
+ }
494
+ }
495
+ /**
496
+ * Display current auth status (whoami)
497
+ */
498
+ whoami() {
499
+ console.log('\n╔══════════════════════════════════════════════════════════════╗');
500
+ console.log('║ Monty Agent - Current User ║');
501
+ console.log('╚══════════════════════════════════════════════════════════════╝\n');
502
+ const providerInfo = this.getProviderDisplayInfo();
503
+ let anyAuthenticated = false;
504
+ console.log(' Provider Status Auth Method');
505
+ console.log(' ─────────────────────────────────────────────────────────────');
506
+ for (const info of providerInfo) {
507
+ const status = info.authenticated ? '✓ Authenticated' : '○ Not configured';
508
+ const method = info.method ?? '-';
509
+ const defaultMarker = info.isDefault ? ' ★' : '';
510
+ console.log(` ${info.displayName.padEnd(22)} ${status.padEnd(14)} ${method}${defaultMarker}`);
511
+ if (info.authenticated)
512
+ anyAuthenticated = true;
513
+ }
514
+ if (!anyAuthenticated) {
515
+ console.log('\n No providers authenticated.');
516
+ console.log(' Run "monty login" to authenticate.\n');
517
+ return;
518
+ }
519
+ console.log(`\n Default Provider: ${this.credentials.default_provider}`);
520
+ console.log(` Credentials: ~/.monty/credentials.json`);
521
+ console.log('');
522
+ }
523
+ /**
524
+ * Set environment variables for all authenticated providers
525
+ */
526
+ setEnvForChildProcess() {
527
+ for (const provider of Object.keys(PROVIDER_CONFIGS)) {
528
+ const key = this.getApiKeySync(provider);
529
+ const envVar = PROVIDER_ENV_VARS[provider]?.API_KEY;
530
+ if (key && envVar) {
531
+ process.env[envVar] = key;
532
+ }
533
+ }
534
+ // Log authentication status
535
+ const authenticated = this.getAuthenticatedProviders();
536
+ if (authenticated.length > 0) {
537
+ console.log(`✓ Authentication configured: ${authenticated.join(', ')}`);
538
+ }
539
+ }
540
+ /**
541
+ * Get preferences
542
+ */
543
+ getPreferences() {
544
+ return { ...this.credentials.preferences };
545
+ }
546
+ /**
547
+ * Update preferences
548
+ */
549
+ setPreferences(prefs) {
550
+ this.credentials.preferences = { ...this.credentials.preferences, ...prefs };
551
+ this.saveCredentials(this.credentials);
552
+ }
553
+ }
554
+ // Export singleton instance
555
+ export const multiAuthManager = MultiAuthManager.getInstance();
556
+ // Export convenience functions
557
+ export function getApiKey(provider) {
558
+ return multiAuthManager.getApiKey(provider);
559
+ }
560
+ export function getApiKeySync(provider) {
561
+ return multiAuthManager.getApiKeySync(provider);
562
+ }
563
+ export function isProviderAuthenticated(provider) {
564
+ return multiAuthManager.isProviderAuthenticated(provider);
565
+ }
566
+ export function getAuthenticatedProviders() {
567
+ return multiAuthManager.getAuthenticatedProviders();
568
+ }
569
+ export function loginProvider(provider) {
570
+ return multiAuthManager.loginProvider(provider);
571
+ }
572
+ export function loginAll() {
573
+ return multiAuthManager.loginAll();
574
+ }
575
+ export function logoutProvider(provider) {
576
+ multiAuthManager.logoutProvider(provider);
577
+ }
578
+ export function logoutAll() {
579
+ multiAuthManager.logoutAll();
580
+ }
581
+ export function whoami() {
582
+ multiAuthManager.whoami();
583
+ }
584
+ export function setEnvForChildProcess() {
585
+ multiAuthManager.setEnvForChildProcess();
586
+ }
587
+ export default multiAuthManager;
588
+ //# sourceMappingURL=multi-auth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-auth-manager.js","sourceRoot":"","sources":["../../src/utils/multi-auth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Progress File Utilities
3
+ * Manages the claude-progress.txt file for session continuity.
4
+ */
5
+ /**
6
+ * Session log entry structure
7
+ */
8
+ export interface SessionLogEntry {
9
+ timestamp: string;
10
+ agentType: "initializer" | "coding";
11
+ actions: string[];
12
+ featuresCompleted: string[];
13
+ issuesEncountered: string[];
14
+ nextSteps: string[];
15
+ }
16
+ /**
17
+ * Load the progress file content
18
+ */
19
+ export declare function loadProgressFile(): string | null;
20
+ /**
21
+ * Create a new progress file from template
22
+ */
23
+ export declare function createProgressFile(projectName: string, projectDescription: string): boolean;
24
+ /**
25
+ * Append a session log entry to the progress file
26
+ */
27
+ export declare function appendSessionLog(entry: SessionLogEntry): boolean;
28
+ /**
29
+ * Update the current state section in the progress file
30
+ */
31
+ export declare function updateCurrentState(totalFeatures: number, completed: number, lastFeature: string | null): boolean;
32
+ /**
33
+ * Add a known issue to the progress file
34
+ */
35
+ export declare function addKnownIssue(issue: string): boolean;
36
+ /**
37
+ * Get a summary of the last session from the progress file
38
+ */
39
+ export declare function getLastSessionSummary(): string | null;
40
+ declare const _default: {
41
+ loadProgressFile: typeof loadProgressFile;
42
+ createProgressFile: typeof createProgressFile;
43
+ appendSessionLog: typeof appendSessionLog;
44
+ updateCurrentState: typeof updateCurrentState;
45
+ addKnownIssue: typeof addKnownIssue;
46
+ getLastSessionSummary: typeof getLastSessionSummary;
47
+ };
48
+ export default _default;
49
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,GAAG,QAAQ,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAahD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAiD3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAwDhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CA2BT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CA8BpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAerD;;;;;;;;;AAED,wBAOE"}