maistro 1.0.390
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 +15 -0
- package/README.md +107 -0
- package/dist/app.d.ts +247 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +4971 -0
- package/dist/app.js.map +1 -0
- package/dist/buildInfo.d.ts +5 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +2 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/caffeinate.d.ts +72 -0
- package/dist/caffeinate.d.ts.map +1 -0
- package/dist/caffeinate.js +258 -0
- package/dist/caffeinate.js.map +1 -0
- package/dist/claudePath.d.ts +10 -0
- package/dist/claudePath.d.ts.map +1 -0
- package/dist/claudePath.js +34 -0
- package/dist/claudePath.js.map +1 -0
- package/dist/clipboard.d.ts +44 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +442 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +211 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +933 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +81 -0
- package/dist/constants.js.map +1 -0
- package/dist/contextBuilder.d.ts +38 -0
- package/dist/contextBuilder.d.ts.map +1 -0
- package/dist/contextBuilder.js +113 -0
- package/dist/contextBuilder.js.map +1 -0
- package/dist/dependencyDetector.d.ts +57 -0
- package/dist/dependencyDetector.d.ts.map +1 -0
- package/dist/dependencyDetector.js +505 -0
- package/dist/dependencyDetector.js.map +1 -0
- package/dist/executor.d.ts +83 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +583 -0
- package/dist/executor.js.map +1 -0
- package/dist/git.d.ts +85 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +283 -0
- package/dist/git.js.map +1 -0
- package/dist/imageManager.d.ts +161 -0
- package/dist/imageManager.d.ts.map +1 -0
- package/dist/imageManager.js +674 -0
- package/dist/imageManager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/dist/input-visual-test.d.ts +9 -0
- package/dist/input-visual-test.d.ts.map +1 -0
- package/dist/input-visual-test.js +108 -0
- package/dist/input-visual-test.js.map +1 -0
- package/dist/inputBox.d.ts +228 -0
- package/dist/inputBox.d.ts.map +1 -0
- package/dist/inputBox.js +966 -0
- package/dist/inputBox.js.map +1 -0
- package/dist/logger.d.ts +136 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +347 -0
- package/dist/logger.js.map +1 -0
- package/dist/orchestrator.d.ts +149 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +821 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planner.d.ts +86 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +830 -0
- package/dist/planner.js.map +1 -0
- package/dist/pty-test-runner.d.ts +87 -0
- package/dist/pty-test-runner.d.ts.map +1 -0
- package/dist/pty-test-runner.js +721 -0
- package/dist/pty-test-runner.js.map +1 -0
- package/dist/screen.d.ts +44 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +152 -0
- package/dist/screen.js.map +1 -0
- package/dist/taskQueue.d.ts +70 -0
- package/dist/taskQueue.d.ts.map +1 -0
- package/dist/taskQueue.js +282 -0
- package/dist/taskQueue.js.map +1 -0
- package/dist/tui-test-harness.d.ts +216 -0
- package/dist/tui-test-harness.d.ts.map +1 -0
- package/dist/tui-test-harness.js +527 -0
- package/dist/tui-test-harness.js.map +1 -0
- package/dist/types.d.ts +257 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +46 -0
- package/dist/types.js.map +1 -0
- package/dist/ui-visual-test.d.ts +15 -0
- package/dist/ui-visual-test.d.ts.map +1 -0
- package/dist/ui-visual-test.js +141 -0
- package/dist/ui-visual-test.js.map +1 -0
- package/dist/ui.d.ts +272 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1531 -0
- package/dist/ui.js.map +1 -0
- package/dist/validator.d.ts +53 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +491 -0
- package/dist/validator.js.map +1 -0
- package/dist/versionCheck.d.ts +63 -0
- package/dist/versionCheck.d.ts.map +1 -0
- package/dist/versionCheck.js +261 -0
- package/dist/versionCheck.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
import { glob } from 'glob';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { join, relative, sep } from 'node:path';
|
|
5
|
+
const KNOWN_API_KEYS = [
|
|
6
|
+
{
|
|
7
|
+
id: 'anthropic_api_key',
|
|
8
|
+
name: 'Anthropic API Key',
|
|
9
|
+
envVars: ['ANTHROPIC_API_KEY'],
|
|
10
|
+
codePatterns: [
|
|
11
|
+
/@anthropic-ai\/sdk/,
|
|
12
|
+
/new\s+Anthropic\(/,
|
|
13
|
+
/anthropic\.messages/i,
|
|
14
|
+
/claude/i,
|
|
15
|
+
],
|
|
16
|
+
obtainUrl: 'https://console.anthropic.com/settings/keys',
|
|
17
|
+
obtainInstructions: 'Visit the Anthropic Console to create an API key',
|
|
18
|
+
valueFormat: 'sk-ant-...',
|
|
19
|
+
description: 'Required to use Claude AI models via the Anthropic API',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'openai_api_key',
|
|
23
|
+
name: 'OpenAI API Key',
|
|
24
|
+
envVars: ['OPENAI_API_KEY', 'OPENAI_KEY'],
|
|
25
|
+
codePatterns: [
|
|
26
|
+
/openai/i,
|
|
27
|
+
/new\s+OpenAI\(/,
|
|
28
|
+
/gpt-[34]/i,
|
|
29
|
+
/chatgpt/i,
|
|
30
|
+
/dall-?e/i,
|
|
31
|
+
],
|
|
32
|
+
obtainUrl: 'https://platform.openai.com/api-keys',
|
|
33
|
+
obtainInstructions: 'Visit the OpenAI Platform to create an API key',
|
|
34
|
+
valueFormat: 'sk-...',
|
|
35
|
+
description: 'Required to use GPT models via the OpenAI API',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'github_token',
|
|
39
|
+
name: 'GitHub Token',
|
|
40
|
+
envVars: ['GITHUB_TOKEN', 'GH_TOKEN', 'GITHUB_PAT'],
|
|
41
|
+
codePatterns: [
|
|
42
|
+
/@octokit/,
|
|
43
|
+
/github\.com\/api/,
|
|
44
|
+
/api\.github\.com/,
|
|
45
|
+
/new\s+Octokit\(/,
|
|
46
|
+
],
|
|
47
|
+
obtainUrl: 'https://github.com/settings/tokens',
|
|
48
|
+
obtainInstructions: 'Go to GitHub Settings > Developer settings > Personal access tokens',
|
|
49
|
+
valueFormat: 'ghp_... or github_pat_...',
|
|
50
|
+
description: 'Required for GitHub API access',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'aws_credentials',
|
|
54
|
+
name: 'AWS Credentials',
|
|
55
|
+
envVars: ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_REGION'],
|
|
56
|
+
codePatterns: [
|
|
57
|
+
/@aws-sdk/,
|
|
58
|
+
/aws-sdk/,
|
|
59
|
+
/new\s+S3\(/,
|
|
60
|
+
/new\s+DynamoDB/,
|
|
61
|
+
/new\s+Lambda\(/,
|
|
62
|
+
],
|
|
63
|
+
obtainUrl: 'https://console.aws.amazon.com/iam/home#/security_credentials',
|
|
64
|
+
obtainInstructions: 'Create access keys in the AWS IAM Console',
|
|
65
|
+
description: 'Required for AWS service access',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'stripe_key',
|
|
69
|
+
name: 'Stripe API Key',
|
|
70
|
+
envVars: ['STRIPE_SECRET_KEY', 'STRIPE_PUBLISHABLE_KEY', 'STRIPE_API_KEY'],
|
|
71
|
+
codePatterns: [
|
|
72
|
+
/stripe/i,
|
|
73
|
+
/new\s+Stripe\(/,
|
|
74
|
+
],
|
|
75
|
+
obtainUrl: 'https://dashboard.stripe.com/apikeys',
|
|
76
|
+
obtainInstructions: 'Get your API keys from the Stripe Dashboard',
|
|
77
|
+
valueFormat: 'sk_test_... or sk_live_...',
|
|
78
|
+
description: 'Required for Stripe payment processing',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'firebase',
|
|
82
|
+
name: 'Firebase Config',
|
|
83
|
+
envVars: ['FIREBASE_API_KEY', 'FIREBASE_PROJECT_ID', 'FIREBASE_AUTH_DOMAIN'],
|
|
84
|
+
codePatterns: [
|
|
85
|
+
/firebase/i,
|
|
86
|
+
/initializeApp\(/,
|
|
87
|
+
/firestore\(/,
|
|
88
|
+
],
|
|
89
|
+
obtainUrl: 'https://console.firebase.google.com/',
|
|
90
|
+
obtainInstructions: 'Get your Firebase config from the Firebase Console > Project settings',
|
|
91
|
+
description: 'Required for Firebase services',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'supabase',
|
|
95
|
+
name: 'Supabase Credentials',
|
|
96
|
+
envVars: ['SUPABASE_URL', 'SUPABASE_KEY', 'SUPABASE_ANON_KEY', 'SUPABASE_SERVICE_ROLE_KEY'],
|
|
97
|
+
codePatterns: [
|
|
98
|
+
/@supabase\/supabase-js/,
|
|
99
|
+
/createClient\(/,
|
|
100
|
+
],
|
|
101
|
+
obtainUrl: 'https://app.supabase.com/',
|
|
102
|
+
obtainInstructions: 'Get your Supabase credentials from the project settings',
|
|
103
|
+
description: 'Required for Supabase backend services',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'database_url',
|
|
107
|
+
name: 'Database Connection URL',
|
|
108
|
+
envVars: ['DATABASE_URL', 'DB_URL', 'POSTGRES_URL', 'MYSQL_URL', 'MONGODB_URL', 'MONGO_URI'],
|
|
109
|
+
codePatterns: [
|
|
110
|
+
/prisma/i,
|
|
111
|
+
/sequelize/i,
|
|
112
|
+
/mongoose/i,
|
|
113
|
+
/pg\s*\(/,
|
|
114
|
+
/mysql/i,
|
|
115
|
+
/postgres/i,
|
|
116
|
+
/mongodb/i,
|
|
117
|
+
],
|
|
118
|
+
obtainInstructions: 'Configure your database connection string',
|
|
119
|
+
valueFormat: 'postgresql://user:password@host:port/database',
|
|
120
|
+
description: 'Database connection string for your application',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'redis_url',
|
|
124
|
+
name: 'Redis URL',
|
|
125
|
+
envVars: ['REDIS_URL', 'REDIS_HOST', 'REDIS_PORT'],
|
|
126
|
+
codePatterns: [
|
|
127
|
+
/redis/i,
|
|
128
|
+
/ioredis/,
|
|
129
|
+
/new\s+Redis\(/,
|
|
130
|
+
],
|
|
131
|
+
obtainInstructions: 'Configure your Redis connection',
|
|
132
|
+
valueFormat: 'redis://user:password@host:port',
|
|
133
|
+
description: 'Redis connection for caching or pub/sub',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'sendgrid',
|
|
137
|
+
name: 'SendGrid API Key',
|
|
138
|
+
envVars: ['SENDGRID_API_KEY'],
|
|
139
|
+
codePatterns: [
|
|
140
|
+
/@sendgrid/,
|
|
141
|
+
/sendgrid/i,
|
|
142
|
+
],
|
|
143
|
+
obtainUrl: 'https://app.sendgrid.com/settings/api_keys',
|
|
144
|
+
obtainInstructions: 'Create an API key in your SendGrid account',
|
|
145
|
+
valueFormat: 'SG...',
|
|
146
|
+
description: 'Required for sending emails via SendGrid',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'twilio',
|
|
150
|
+
name: 'Twilio Credentials',
|
|
151
|
+
envVars: ['TWILIO_ACCOUNT_SID', 'TWILIO_AUTH_TOKEN', 'TWILIO_PHONE_NUMBER'],
|
|
152
|
+
codePatterns: [
|
|
153
|
+
/twilio/i,
|
|
154
|
+
/new\s+Twilio\(/,
|
|
155
|
+
],
|
|
156
|
+
obtainUrl: 'https://console.twilio.com/',
|
|
157
|
+
obtainInstructions: 'Get your Account SID and Auth Token from the Twilio Console',
|
|
158
|
+
description: 'Required for SMS and voice via Twilio',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: 'google_api',
|
|
162
|
+
name: 'Google API Credentials',
|
|
163
|
+
envVars: ['GOOGLE_API_KEY', 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET'],
|
|
164
|
+
codePatterns: [
|
|
165
|
+
/googleapis/,
|
|
166
|
+
/google-auth-library/,
|
|
167
|
+
],
|
|
168
|
+
obtainUrl: 'https://console.cloud.google.com/apis/credentials',
|
|
169
|
+
obtainInstructions: 'Create credentials in the Google Cloud Console',
|
|
170
|
+
description: 'Required for Google API access',
|
|
171
|
+
},
|
|
172
|
+
];
|
|
173
|
+
/**
|
|
174
|
+
* Common config file patterns to scan
|
|
175
|
+
*/
|
|
176
|
+
const CONFIG_FILES = [
|
|
177
|
+
'package.json',
|
|
178
|
+
'.env.example',
|
|
179
|
+
'.env.sample',
|
|
180
|
+
'.env.template',
|
|
181
|
+
'docker-compose.yml',
|
|
182
|
+
'docker-compose.yaml',
|
|
183
|
+
'Dockerfile',
|
|
184
|
+
'.env.local.example',
|
|
185
|
+
'config/default.json',
|
|
186
|
+
'config/default.yml',
|
|
187
|
+
'config.json',
|
|
188
|
+
'config.yml',
|
|
189
|
+
'config.yaml',
|
|
190
|
+
'settings.json',
|
|
191
|
+
];
|
|
192
|
+
/**
|
|
193
|
+
* Source code patterns to scan
|
|
194
|
+
*/
|
|
195
|
+
const SOURCE_PATTERNS = [
|
|
196
|
+
'**/*.ts',
|
|
197
|
+
'**/*.tsx',
|
|
198
|
+
'**/*.js',
|
|
199
|
+
'**/*.jsx',
|
|
200
|
+
'**/*.mjs',
|
|
201
|
+
'**/*.py',
|
|
202
|
+
'**/*.go',
|
|
203
|
+
'**/*.rs',
|
|
204
|
+
];
|
|
205
|
+
const EXCLUDE_PATTERNS = [
|
|
206
|
+
'**/node_modules/**',
|
|
207
|
+
'**/.git/**',
|
|
208
|
+
'**/dist/**',
|
|
209
|
+
'**/build/**',
|
|
210
|
+
'**/vendor/**',
|
|
211
|
+
'**/__pycache__/**',
|
|
212
|
+
];
|
|
213
|
+
/**
|
|
214
|
+
* Scan a project directory for external dependencies
|
|
215
|
+
*/
|
|
216
|
+
export async function detectDependencies(projectPath) {
|
|
217
|
+
const detectedDeps = new Map();
|
|
218
|
+
// 1. Scan config files for environment variable references
|
|
219
|
+
await scanConfigFiles(projectPath, detectedDeps);
|
|
220
|
+
// 2. Scan source code for SDK/library usage patterns
|
|
221
|
+
await scanSourceCode(projectPath, detectedDeps);
|
|
222
|
+
// 3. Check which dependencies are present
|
|
223
|
+
await checkDependencyPresence(projectPath, detectedDeps);
|
|
224
|
+
const dependencies = Array.from(detectedDeps.values());
|
|
225
|
+
const missing = dependencies.filter(d => !d.present && d.required);
|
|
226
|
+
const present = dependencies.filter(d => d.present);
|
|
227
|
+
return { dependencies, missing, present };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Scan config files for environment variable references
|
|
231
|
+
*/
|
|
232
|
+
async function scanConfigFiles(projectPath, deps) {
|
|
233
|
+
for (const configFile of CONFIG_FILES) {
|
|
234
|
+
const filePath = join(projectPath, configFile);
|
|
235
|
+
if (!existsSync(filePath))
|
|
236
|
+
continue;
|
|
237
|
+
try {
|
|
238
|
+
const content = await readFile(filePath, 'utf-8');
|
|
239
|
+
const fileName = configFile;
|
|
240
|
+
// Check for known API key patterns
|
|
241
|
+
for (const pattern of KNOWN_API_KEYS) {
|
|
242
|
+
for (const envVar of pattern.envVars) {
|
|
243
|
+
// Look for environment variable references
|
|
244
|
+
const envPatterns = [
|
|
245
|
+
new RegExp(`${envVar}\\s*[=:]`, 'i'),
|
|
246
|
+
new RegExp(`\\$\\{?${envVar}\\}?`, 'i'),
|
|
247
|
+
new RegExp(`process\\.env\\.${envVar}`, 'i'),
|
|
248
|
+
new RegExp(`os\\.environ\\[['"]${envVar}['"]\\]`, 'i'),
|
|
249
|
+
];
|
|
250
|
+
for (const regex of envPatterns) {
|
|
251
|
+
if (regex.test(content)) {
|
|
252
|
+
addOrUpdateDependency(deps, pattern, fileName, envVar);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Extract generic environment variables from .env.example files
|
|
259
|
+
if (configFile.includes('.env')) {
|
|
260
|
+
const envVarRegex = /^([A-Z][A-Z0-9_]+)\s*=/gm;
|
|
261
|
+
let match;
|
|
262
|
+
while ((match = envVarRegex.exec(content)) !== null) {
|
|
263
|
+
const varName = match[1];
|
|
264
|
+
// Skip if it's already covered by known patterns
|
|
265
|
+
const isKnown = KNOWN_API_KEYS.some(p => p.envVars.includes(varName));
|
|
266
|
+
if (!isKnown) {
|
|
267
|
+
addGenericEnvVar(deps, varName, fileName);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Check docker-compose for environment variables
|
|
272
|
+
if (configFile.includes('docker-compose')) {
|
|
273
|
+
const envSectionRegex = /environment:\s*\n((?:\s+-\s*[A-Z_]+=.*\n?)+)/gm;
|
|
274
|
+
let match;
|
|
275
|
+
while ((match = envSectionRegex.exec(content)) !== null) {
|
|
276
|
+
const envLines = match[1];
|
|
277
|
+
const envVarRegex = /([A-Z][A-Z0-9_]+)=/g;
|
|
278
|
+
let envMatch;
|
|
279
|
+
while ((envMatch = envVarRegex.exec(envLines)) !== null) {
|
|
280
|
+
const varName = envMatch[1];
|
|
281
|
+
const isKnown = KNOWN_API_KEYS.some(p => p.envVars.includes(varName));
|
|
282
|
+
if (!isKnown) {
|
|
283
|
+
addGenericEnvVar(deps, varName, fileName);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// File read failed, skip
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Scan source code for SDK/library usage patterns
|
|
296
|
+
*/
|
|
297
|
+
async function scanSourceCode(projectPath, deps) {
|
|
298
|
+
try {
|
|
299
|
+
const files = await glob(SOURCE_PATTERNS, {
|
|
300
|
+
cwd: projectPath,
|
|
301
|
+
absolute: true,
|
|
302
|
+
ignore: EXCLUDE_PATTERNS,
|
|
303
|
+
});
|
|
304
|
+
// Limit to first 100 files to avoid scanning huge codebases
|
|
305
|
+
const filesToScan = files.slice(0, 100);
|
|
306
|
+
for (const filePath of filesToScan) {
|
|
307
|
+
try {
|
|
308
|
+
const content = await readFile(filePath, 'utf-8');
|
|
309
|
+
const relativePath = relative(projectPath, filePath).split(sep).join('/');
|
|
310
|
+
for (const pattern of KNOWN_API_KEYS) {
|
|
311
|
+
// Check code patterns
|
|
312
|
+
for (const codePattern of pattern.codePatterns) {
|
|
313
|
+
if (codePattern.test(content)) {
|
|
314
|
+
addOrUpdateDependency(deps, pattern, relativePath);
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Check for direct env var access in code
|
|
319
|
+
for (const envVar of pattern.envVars) {
|
|
320
|
+
const envAccessPatterns = [
|
|
321
|
+
new RegExp(`process\\.env\\.${envVar}`, 'i'),
|
|
322
|
+
new RegExp(`process\\.env\\[['"]${envVar}['"]\\]`, 'i'),
|
|
323
|
+
new RegExp(`os\\.environ\\.get\\(['"]${envVar}['"]\\)`, 'i'),
|
|
324
|
+
new RegExp(`os\\.getenv\\(['"]${envVar}['"]\\)`, 'i'),
|
|
325
|
+
];
|
|
326
|
+
for (const regex of envAccessPatterns) {
|
|
327
|
+
if (regex.test(content)) {
|
|
328
|
+
addOrUpdateDependency(deps, pattern, relativePath, envVar);
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
// File read failed, skip
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// Glob failed, skip source scanning
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Check if dependencies are present in the environment or .env file
|
|
346
|
+
*/
|
|
347
|
+
async function checkDependencyPresence(projectPath, deps) {
|
|
348
|
+
// Load .env file if present
|
|
349
|
+
// Filter out undefined values from process.env
|
|
350
|
+
const envVars = {};
|
|
351
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
352
|
+
if (value !== undefined) {
|
|
353
|
+
envVars[key] = value;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const envFilePath = join(projectPath, '.env');
|
|
357
|
+
if (existsSync(envFilePath)) {
|
|
358
|
+
try {
|
|
359
|
+
const envContent = await readFile(envFilePath, 'utf-8');
|
|
360
|
+
const envRegex = /^([A-Z][A-Z0-9_]+)\s*=\s*(.+)$/gm;
|
|
361
|
+
let match;
|
|
362
|
+
while ((match = envRegex.exec(envContent)) !== null) {
|
|
363
|
+
envVars[match[1]] = match[2].replace(/^["']|["']$/g, '');
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// Failed to read .env
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Check each dependency
|
|
371
|
+
for (const dep of deps.values()) {
|
|
372
|
+
// For known API keys, check their env vars
|
|
373
|
+
const knownPattern = KNOWN_API_KEYS.find(p => p.id === dep.id);
|
|
374
|
+
if (knownPattern) {
|
|
375
|
+
for (const envVar of knownPattern.envVars) {
|
|
376
|
+
const value = envVars[envVar];
|
|
377
|
+
if (value && value.length > 0 && !value.includes('your_') && !value.includes('xxx') && value !== 'changeme') {
|
|
378
|
+
dep.present = true;
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// Generic env var - check directly
|
|
385
|
+
const value = envVars[dep.id];
|
|
386
|
+
if (value && value.length > 0 && !value.includes('your_') && !value.includes('xxx') && value !== 'changeme') {
|
|
387
|
+
dep.present = true;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Add or update a known dependency
|
|
394
|
+
*/
|
|
395
|
+
function addOrUpdateDependency(deps, pattern, source, _specificEnvVar) {
|
|
396
|
+
const existing = deps.get(pattern.id);
|
|
397
|
+
if (existing) {
|
|
398
|
+
if (!existing.sources.includes(source)) {
|
|
399
|
+
existing.sources.push(source);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
deps.set(pattern.id, {
|
|
404
|
+
id: pattern.id,
|
|
405
|
+
name: pattern.name, // Always use the pattern name for known dependencies
|
|
406
|
+
type: pattern.id.includes('database') || pattern.id.includes('redis') ? 'config' : 'api_key',
|
|
407
|
+
sources: [source],
|
|
408
|
+
present: false,
|
|
409
|
+
obtainUrl: pattern.obtainUrl,
|
|
410
|
+
obtainInstructions: pattern.obtainInstructions,
|
|
411
|
+
valueFormat: pattern.valueFormat,
|
|
412
|
+
description: pattern.description,
|
|
413
|
+
required: true, // Assume required if detected
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Add a generic environment variable dependency
|
|
419
|
+
*/
|
|
420
|
+
function addGenericEnvVar(deps, varName, source) {
|
|
421
|
+
const existing = deps.get(varName);
|
|
422
|
+
if (existing) {
|
|
423
|
+
if (!existing.sources.includes(source)) {
|
|
424
|
+
existing.sources.push(source);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
// Determine type based on name
|
|
429
|
+
let type = 'env_var';
|
|
430
|
+
if (varName.includes('KEY') || varName.includes('TOKEN') || varName.includes('SECRET')) {
|
|
431
|
+
type = 'api_key';
|
|
432
|
+
}
|
|
433
|
+
else if (varName.includes('URL') || varName.includes('HOST') || varName.includes('PORT')) {
|
|
434
|
+
type = 'config';
|
|
435
|
+
}
|
|
436
|
+
// Determine if likely required (keys and URLs are usually required)
|
|
437
|
+
const required = type === 'api_key' || varName.includes('URL');
|
|
438
|
+
deps.set(varName, {
|
|
439
|
+
id: varName,
|
|
440
|
+
name: formatEnvVarName(varName),
|
|
441
|
+
type,
|
|
442
|
+
sources: [source],
|
|
443
|
+
present: false,
|
|
444
|
+
required,
|
|
445
|
+
description: `Environment variable ${varName}`,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Format an environment variable name for display
|
|
451
|
+
* e.g., DATABASE_URL -> Database URL
|
|
452
|
+
*/
|
|
453
|
+
function formatEnvVarName(varName) {
|
|
454
|
+
return varName
|
|
455
|
+
.split('_')
|
|
456
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
457
|
+
.join(' ');
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Get missing required dependencies
|
|
461
|
+
*/
|
|
462
|
+
export function getMissingDependencies(result) {
|
|
463
|
+
return result.dependencies.filter(d => !d.present && d.required);
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Group dependencies by type
|
|
467
|
+
*/
|
|
468
|
+
export function groupDependenciesByType(dependencies) {
|
|
469
|
+
const grouped = new Map();
|
|
470
|
+
for (const dep of dependencies) {
|
|
471
|
+
const existing = grouped.get(dep.type) || [];
|
|
472
|
+
existing.push(dep);
|
|
473
|
+
grouped.set(dep.type, existing);
|
|
474
|
+
}
|
|
475
|
+
return grouped;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Format dependencies for display
|
|
479
|
+
*/
|
|
480
|
+
export function formatDependenciesForDisplay(dependencies) {
|
|
481
|
+
if (dependencies.length === 0) {
|
|
482
|
+
return 'No external dependencies detected.';
|
|
483
|
+
}
|
|
484
|
+
const grouped = groupDependenciesByType(dependencies);
|
|
485
|
+
const lines = [];
|
|
486
|
+
const typeLabels = {
|
|
487
|
+
api_key: 'API Keys',
|
|
488
|
+
env_var: 'Environment Variables',
|
|
489
|
+
config: 'Configuration',
|
|
490
|
+
secret: 'Secrets',
|
|
491
|
+
};
|
|
492
|
+
for (const [type, deps] of grouped) {
|
|
493
|
+
lines.push(`\n${typeLabels[type]}:`);
|
|
494
|
+
for (const dep of deps) {
|
|
495
|
+
const status = dep.present ? '✓' : '✗';
|
|
496
|
+
const statusColor = dep.present ? '\x1b[32m' : '\x1b[31m';
|
|
497
|
+
lines.push(` ${statusColor}${status}\x1b[0m ${dep.name}`);
|
|
498
|
+
if (!dep.present && dep.obtainUrl) {
|
|
499
|
+
lines.push(` \x1b[90m→ ${dep.obtainUrl}\x1b[0m`);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return lines.join('\n');
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=dependencyDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyDetector.js","sourceRoot":"","sources":["../src/dependencyDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AA2DhD,MAAM,cAAc,GAAoB;IACtC;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,YAAY,EAAE;YACZ,oBAAoB;YACpB,mBAAmB;YACnB,sBAAsB;YACtB,SAAS;SACV;QACD,SAAS,EAAE,6CAA6C;QACxD,kBAAkB,EAAE,kDAAkD;QACtE,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,wDAAwD;KACtE;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC;QACzC,YAAY,EAAE;YACZ,SAAS;YACT,gBAAgB;YAChB,WAAW;YACX,UAAU;YACV,UAAU;SACX;QACD,SAAS,EAAE,sCAAsC;QACjD,kBAAkB,EAAE,gDAAgD;QACpE,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC;QACnD,YAAY,EAAE;YACZ,UAAU;YACV,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;SAClB;QACD,SAAS,EAAE,oCAAoC;QAC/C,kBAAkB,EAAE,qEAAqE;QACzF,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,YAAY,CAAC;QACrE,YAAY,EAAE;YACZ,UAAU;YACV,SAAS;YACT,YAAY;YACZ,gBAAgB;YAChB,gBAAgB;SACjB;QACD,SAAS,EAAE,+DAA+D;QAC1E,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,iCAAiC;KAC/C;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,CAAC;QAC1E,YAAY,EAAE;YACZ,SAAS;YACT,gBAAgB;SACjB;QACD,SAAS,EAAE,sCAAsC;QACjD,kBAAkB,EAAE,6CAA6C;QACjE,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC;QAC5E,YAAY,EAAE;YACZ,WAAW;YACX,iBAAiB;YACjB,aAAa;SACd;QACD,SAAS,EAAE,sCAAsC;QACjD,kBAAkB,EAAE,uEAAuE;QAC3F,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,CAAC;QAC3F,YAAY,EAAE;YACZ,wBAAwB;YACxB,gBAAgB;SACjB;QACD,SAAS,EAAE,2BAA2B;QACtC,kBAAkB,EAAE,yDAAyD;QAC7E,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC;QAC5F,YAAY,EAAE;YACZ,SAAS;YACT,YAAY;YACZ,WAAW;YACX,SAAS;YACT,QAAQ;YACR,WAAW;YACX,UAAU;SACX;QACD,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;QAClD,YAAY,EAAE;YACZ,QAAQ;YACR,SAAS;YACT,eAAe;SAChB;QACD,kBAAkB,EAAE,iCAAiC;QACrD,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,yCAAyC;KACvD;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,YAAY,EAAE;YACZ,WAAW;YACX,WAAW;SACZ;QACD,SAAS,EAAE,4CAA4C;QACvD,kBAAkB,EAAE,4CAA4C;QAChE,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;QAC3E,YAAY,EAAE;YACZ,SAAS;YACT,gBAAgB;SACjB;QACD,SAAS,EAAE,6BAA6B;QACxC,kBAAkB,EAAE,6DAA6D;QACjF,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC;QACvE,YAAY,EAAE;YACZ,YAAY;YACZ,qBAAqB;SACtB;QACD,SAAS,EAAE,mDAAmD;QAC9D,kBAAkB,EAAE,gDAAgD;QACpE,WAAW,EAAE,gCAAgC;KAC9C;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,cAAc;IACd,cAAc;IACd,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAG;IACtB,SAAS;IACT,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,cAAc;IACd,mBAAmB;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB;IAEnB,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE3D,2DAA2D;IAC3D,MAAM,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEjD,qDAAqD;IACrD,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEhD,0CAA0C;IAC1C,MAAM,uBAAuB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,IAAqC;IAErC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,UAAU,CAAC;YAE5B,mCAAmC;YACnC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,2CAA2C;oBAC3C,MAAM,WAAW,GAAG;wBAClB,IAAI,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,GAAG,CAAC;wBACpC,IAAI,MAAM,CAAC,UAAU,MAAM,MAAM,EAAE,GAAG,CAAC;wBACvC,IAAI,MAAM,CAAC,mBAAmB,MAAM,EAAE,EAAE,GAAG,CAAC;wBAC5C,IAAI,MAAM,CAAC,sBAAsB,MAAM,SAAS,EAAE,GAAG,CAAC;qBACvD,CAAC;oBAEF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;wBAChC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;4BACxB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;4BACvD,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gEAAgE;YAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAG,0BAA0B,CAAC;gBAC/C,IAAI,KAAK,CAAC;gBACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,iDAAiD;oBACjD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtE,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAG,gDAAgD,CAAC;gBACzE,IAAI,KAAK,CAAC;gBACV,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM,WAAW,GAAG,qBAAqB,CAAC;oBAC1C,IAAI,QAAQ,CAAC;oBACb,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;wBACtE,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;wBAC5C,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAC3B,WAAmB,EACnB,IAAqC;IAErC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE;YACxC,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QAEH,4DAA4D;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE1E,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;oBACrC,sBAAsB;oBACtB,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;wBAC/C,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC9B,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;4BACnD,MAAM;wBACR,CAAC;oBACH,CAAC;oBAED,0CAA0C;oBAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrC,MAAM,iBAAiB,GAAG;4BACxB,IAAI,MAAM,CAAC,mBAAmB,MAAM,EAAE,EAAE,GAAG,CAAC;4BAC5C,IAAI,MAAM,CAAC,uBAAuB,MAAM,SAAS,EAAE,GAAG,CAAC;4BACvD,IAAI,MAAM,CAAC,4BAA4B,MAAM,SAAS,EAAE,GAAG,CAAC;4BAC5D,IAAI,MAAM,CAAC,qBAAqB,MAAM,SAAS,EAAE,GAAG,CAAC;yBACtD,CAAC;wBAEF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;4BACtC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gCACxB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;gCAC3D,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,WAAmB,EACnB,IAAqC;IAErC,4BAA4B;IAC5B,+CAA+C;IAC/C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,kCAAkC,CAAC;YACpD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,2CAA2C;QAC3C,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC5G,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5G,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,IAAqC,EACrC,OAAsB,EACtB,MAAc,EACd,eAAwB;IAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;YACnB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,qDAAqD;YACzE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC5F,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,IAAI,EAAE,8BAA8B;SAC/C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAqC,EACrC,OAAe,EACf,MAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,IAAI,IAAI,GAAmB,SAAS,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvF,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3F,IAAI,GAAG,QAAQ,CAAC;QAClB,CAAC;QAED,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;YAC/B,IAAI;YACJ,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,WAAW,EAAE,wBAAwB,OAAO,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACvE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiC;IACtE,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAkC;IAElC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;IAEhE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAkC;IAC7E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,UAAU,GAAmC;QACjD,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,SAAS;KAClB,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,GAAG,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,SAAS,SAAS,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Task, ExecutionResult, ImageMetadata } from './types.js';
|
|
2
|
+
import { type ContextResult } from './contextBuilder.js';
|
|
3
|
+
/**
|
|
4
|
+
* Truncate a string with "..." in the middle if it exceeds maxLength.
|
|
5
|
+
*/
|
|
6
|
+
export declare function truncateMiddle(str: string, maxLength: number): string;
|
|
7
|
+
/**
|
|
8
|
+
* Format tool input arguments for display.
|
|
9
|
+
* Single arg: show value only. Multiple args: show full JSON.
|
|
10
|
+
* @deprecated Use formatToolCall instead for better tool-specific formatting
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatToolArgs(input: Record<string, unknown> | undefined): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a tool call for display with tool-specific formatting.
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* - Bash: 'Run tests "Bash(npm test)"'
|
|
18
|
+
* - Read: 'Read(/src/app.ts) Lines 10-59'
|
|
19
|
+
* - Edit: 'Edit(/src/app.ts)'
|
|
20
|
+
* - TodoWrite: 'TodoWrite(3 items)'
|
|
21
|
+
* - mcp__chrome-devtools__list_pages: 'MCP Chrome Devtools: List Pages'
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatToolCall(toolName: string, input: Record<string, unknown> | unknown[] | undefined): string;
|
|
24
|
+
export interface ExecutorOptions {
|
|
25
|
+
/** Timeout in milliseconds (default: 10 minutes) */
|
|
26
|
+
timeout?: number;
|
|
27
|
+
/** Working directory for execution */
|
|
28
|
+
cwd: string;
|
|
29
|
+
/** Whether to allow network access in sandbox */
|
|
30
|
+
allowNetwork?: boolean;
|
|
31
|
+
/** Additional environment variables */
|
|
32
|
+
env?: Record<string, string>;
|
|
33
|
+
/** Callback for streaming output lines */
|
|
34
|
+
onOutput?: (line: string) => void;
|
|
35
|
+
/** Callback to check if execution should be aborted (polled during execution) */
|
|
36
|
+
shouldAbort?: () => boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ProjectContext {
|
|
39
|
+
goal: string;
|
|
40
|
+
projectName: string;
|
|
41
|
+
completedTasks: Array<{
|
|
42
|
+
title: string;
|
|
43
|
+
description: string;
|
|
44
|
+
}>;
|
|
45
|
+
pendingTasks: Array<{
|
|
46
|
+
title: string;
|
|
47
|
+
description: string;
|
|
48
|
+
}>;
|
|
49
|
+
currentTaskIndex: number;
|
|
50
|
+
totalTasks: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build the prompt for Claude Code with full project context
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildPrompt(task: Task, context: ContextResult, projectContext?: ProjectContext, imageMetadata?: Record<string, ImageMetadata>, projectPath?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Execute a task using Claude Code CLI
|
|
58
|
+
*/
|
|
59
|
+
export declare function executeTask(task: Task, context: ContextResult, options: ExecutorOptions, projectContext?: ProjectContext, imageMetadata?: Record<string, ImageMetadata>): Promise<ExecutionResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Execute a task with retry feedback
|
|
62
|
+
*/
|
|
63
|
+
export declare function executeTaskWithFeedback(task: Task, context: ContextResult, previousError: string, options: ExecutorOptions, projectContext?: ProjectContext, imageMetadata?: Record<string, ImageMetadata>): Promise<ExecutionResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if Claude Code CLI is available
|
|
66
|
+
*/
|
|
67
|
+
export declare function isClaudeCodeAvailable(): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Get Claude Code version
|
|
70
|
+
*/
|
|
71
|
+
export declare function getClaudeCodeVersion(): Promise<string | null>;
|
|
72
|
+
export interface ClaudeInitOptions {
|
|
73
|
+
/** Working directory for execution */
|
|
74
|
+
cwd: string;
|
|
75
|
+
/** Timeout in milliseconds (default: 2 minutes) */
|
|
76
|
+
timeout?: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Run Claude Code's /init command to create CLAUDE.md
|
|
80
|
+
* This command analyzes the project and creates a CLAUDE.md with project context
|
|
81
|
+
*/
|
|
82
|
+
export declare function runClaudeInit(options: ClaudeInitOptions): Promise<ExecutionResult>;
|
|
83
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|