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.
- package/LICENSE +81 -0
- package/README.md +608 -0
- package/bin/cli.js +448 -0
- package/dist/agents/coding.d.ts +15 -0
- package/dist/agents/coding.d.ts.map +1 -0
- package/dist/agents/coding.js +189 -0
- package/dist/agents/coding.js.map +1 -0
- package/dist/agents/initializer.d.ts +15 -0
- package/dist/agents/initializer.d.ts.map +1 -0
- package/dist/agents/initializer.js +87 -0
- package/dist/agents/initializer.js.map +1 -0
- package/dist/agents/prompts/arbitrator.md +143 -0
- package/dist/agents/prompts/coding.md +247 -0
- package/dist/agents/prompts/initializer.md +98 -0
- package/dist/config/agent-config.d.ts +103 -0
- package/dist/config/agent-config.d.ts.map +1 -0
- package/dist/config/agent-config.js +138 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/auth-config.d.ts +152 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +139 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +109 -0
- package/dist/config/mcp-config.d.ts.map +1 -0
- package/dist/config/mcp-config.js +234 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/provider-config.d.ts +139 -0
- package/dist/config/provider-config.d.ts.map +1 -0
- package/dist/config/provider-config.js +344 -0
- package/dist/config/provider-config.js.map +1 -0
- package/dist/config/subagents-config.d.ts +85 -0
- package/dist/config/subagents-config.d.ts.map +1 -0
- package/dist/config/subagents-config.js +430 -0
- package/dist/config/subagents-config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/arbitrator.d.ts +93 -0
- package/dist/orchestrator/arbitrator.d.ts.map +1 -0
- package/dist/orchestrator/arbitrator.js +330 -0
- package/dist/orchestrator/arbitrator.js.map +1 -0
- package/dist/orchestrator/index.d.ts +113 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +217 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/review-coordinator.d.ts +143 -0
- package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
- package/dist/orchestrator/review-coordinator.js +401 -0
- package/dist/orchestrator/review-coordinator.js.map +1 -0
- package/dist/orchestrator/task-classifier.d.ts +87 -0
- package/dist/orchestrator/task-classifier.d.ts.map +1 -0
- package/dist/orchestrator/task-classifier.js +250 -0
- package/dist/orchestrator/task-classifier.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +64 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +264 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +219 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +143 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cursor-provider.d.ts +82 -0
- package/dist/providers/cursor-provider.d.ts.map +1 -0
- package/dist/providers/cursor-provider.js +321 -0
- package/dist/providers/cursor-provider.js.map +1 -0
- package/dist/providers/google-provider.d.ts +75 -0
- package/dist/providers/google-provider.d.ts.map +1 -0
- package/dist/providers/google-provider.js +274 -0
- package/dist/providers/google-provider.js.map +1 -0
- package/dist/providers/index.d.ts +92 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +233 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +83 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +295 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/templates/feature_list.template.json +66 -0
- package/dist/templates/progress.template.txt +51 -0
- package/dist/utils/auth-manager.d.ts +121 -0
- package/dist/utils/auth-manager.d.ts.map +1 -0
- package/dist/utils/auth-manager.js +560 -0
- package/dist/utils/auth-manager.js.map +1 -0
- package/dist/utils/budget-enforcer.d.ts +181 -0
- package/dist/utils/budget-enforcer.d.ts.map +1 -0
- package/dist/utils/budget-enforcer.js +386 -0
- package/dist/utils/budget-enforcer.js.map +1 -0
- package/dist/utils/chatgpt-detector.d.ts +51 -0
- package/dist/utils/chatgpt-detector.d.ts.map +1 -0
- package/dist/utils/chatgpt-detector.js +274 -0
- package/dist/utils/chatgpt-detector.js.map +1 -0
- package/dist/utils/claude-code-detector.d.ts +39 -0
- package/dist/utils/claude-code-detector.d.ts.map +1 -0
- package/dist/utils/claude-code-detector.js +153 -0
- package/dist/utils/claude-code-detector.js.map +1 -0
- package/dist/utils/code-quality.d.ts +58 -0
- package/dist/utils/code-quality.d.ts.map +1 -0
- package/dist/utils/code-quality.js +258 -0
- package/dist/utils/code-quality.js.map +1 -0
- package/dist/utils/context-primer.d.ts +50 -0
- package/dist/utils/context-primer.d.ts.map +1 -0
- package/dist/utils/context-primer.js +429 -0
- package/dist/utils/context-primer.js.map +1 -0
- package/dist/utils/dependency-management.d.ts +40 -0
- package/dist/utils/dependency-management.d.ts.map +1 -0
- package/dist/utils/dependency-management.js +123 -0
- package/dist/utils/dependency-management.js.map +1 -0
- package/dist/utils/environment-validation.d.ts +33 -0
- package/dist/utils/environment-validation.d.ts.map +1 -0
- package/dist/utils/environment-validation.js +136 -0
- package/dist/utils/environment-validation.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +60 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +183 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/feature-list.d.ts +102 -0
- package/dist/utils/feature-list.d.ts.map +1 -0
- package/dist/utils/feature-list.js +191 -0
- package/dist/utils/feature-list.js.map +1 -0
- package/dist/utils/gemini-detector.d.ts +65 -0
- package/dist/utils/gemini-detector.d.ts.map +1 -0
- package/dist/utils/gemini-detector.js +340 -0
- package/dist/utils/gemini-detector.js.map +1 -0
- package/dist/utils/git-utils.d.ts +48 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +110 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/health-check.d.ts +32 -0
- package/dist/utils/health-check.d.ts.map +1 -0
- package/dist/utils/health-check.js +152 -0
- package/dist/utils/health-check.js.map +1 -0
- package/dist/utils/hooks-manager.d.ts +154 -0
- package/dist/utils/hooks-manager.d.ts.map +1 -0
- package/dist/utils/hooks-manager.js +359 -0
- package/dist/utils/hooks-manager.js.map +1 -0
- package/dist/utils/multi-auth-manager.d.ts +144 -0
- package/dist/utils/multi-auth-manager.d.ts.map +1 -0
- package/dist/utils/multi-auth-manager.js +588 -0
- package/dist/utils/multi-auth-manager.js.map +1 -0
- package/dist/utils/progress.d.ts +49 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +209 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/project-detection.d.ts +40 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +230 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/dist/utils/session-manager.d.ts +119 -0
- package/dist/utils/session-manager.d.ts.map +1 -0
- package/dist/utils/session-manager.js +389 -0
- package/dist/utils/session-manager.js.map +1 -0
- package/dist/utils/skills-manager.d.ts +113 -0
- package/dist/utils/skills-manager.d.ts.map +1 -0
- package/dist/utils/skills-manager.js +332 -0
- package/dist/utils/skills-manager.js.map +1 -0
- package/dist/utils/structured-output.d.ts +117 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +191 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/subagent-manager.d.ts +143 -0
- package/dist/utils/subagent-manager.d.ts.map +1 -0
- package/dist/utils/subagent-manager.js +326 -0
- package/dist/utils/subagent-manager.js.map +1 -0
- package/dist/utils/supabase-setup.d.ts +50 -0
- package/dist/utils/supabase-setup.d.ts.map +1 -0
- package/dist/utils/supabase-setup.js +151 -0
- package/dist/utils/supabase-setup.js.map +1 -0
- package/dist/utils/token-refresh.d.ts +21 -0
- package/dist/utils/token-refresh.d.ts.map +1 -0
- package/dist/utils/token-refresh.js +77 -0
- package/dist/utils/token-refresh.js.map +1 -0
- package/dist/utils/tos-warning.d.ts +115 -0
- package/dist/utils/tos-warning.d.ts.map +1 -0
- package/dist/utils/tos-warning.js +304 -0
- package/dist/utils/tos-warning.js.map +1 -0
- package/dist/utils/usage-monitor.d.ts +156 -0
- package/dist/utils/usage-monitor.d.ts.map +1 -0
- package/dist/utils/usage-monitor.js +296 -0
- package/dist/utils/usage-monitor.js.map +1 -0
- package/package.json +105 -0
- package/scripts/init.ps1 +73 -0
- package/scripts/init.sh +86 -0
- package/scripts/test-auth.sh +90 -0
- package/templates/feature_list.template.json +66 -0
- 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"}
|