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.
Files changed (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +107 -0
  3. package/dist/app.d.ts +247 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +4971 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/buildInfo.d.ts +5 -0
  8. package/dist/buildInfo.d.ts.map +1 -0
  9. package/dist/buildInfo.js +2 -0
  10. package/dist/buildInfo.js.map +1 -0
  11. package/dist/caffeinate.d.ts +72 -0
  12. package/dist/caffeinate.d.ts.map +1 -0
  13. package/dist/caffeinate.js +258 -0
  14. package/dist/caffeinate.js.map +1 -0
  15. package/dist/claudePath.d.ts +10 -0
  16. package/dist/claudePath.d.ts.map +1 -0
  17. package/dist/claudePath.js +34 -0
  18. package/dist/claudePath.js.map +1 -0
  19. package/dist/clipboard.d.ts +44 -0
  20. package/dist/clipboard.d.ts.map +1 -0
  21. package/dist/clipboard.js +442 -0
  22. package/dist/clipboard.js.map +1 -0
  23. package/dist/config.d.ts +211 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +933 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/constants.d.ts +50 -0
  28. package/dist/constants.d.ts.map +1 -0
  29. package/dist/constants.js +81 -0
  30. package/dist/constants.js.map +1 -0
  31. package/dist/contextBuilder.d.ts +38 -0
  32. package/dist/contextBuilder.d.ts.map +1 -0
  33. package/dist/contextBuilder.js +113 -0
  34. package/dist/contextBuilder.js.map +1 -0
  35. package/dist/dependencyDetector.d.ts +57 -0
  36. package/dist/dependencyDetector.d.ts.map +1 -0
  37. package/dist/dependencyDetector.js +505 -0
  38. package/dist/dependencyDetector.js.map +1 -0
  39. package/dist/executor.d.ts +83 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +583 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/git.d.ts +85 -0
  44. package/dist/git.d.ts.map +1 -0
  45. package/dist/git.js +283 -0
  46. package/dist/git.js.map +1 -0
  47. package/dist/imageManager.d.ts +161 -0
  48. package/dist/imageManager.d.ts.map +1 -0
  49. package/dist/imageManager.js +674 -0
  50. package/dist/imageManager.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +437 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/input-visual-test.d.ts +9 -0
  56. package/dist/input-visual-test.d.ts.map +1 -0
  57. package/dist/input-visual-test.js +108 -0
  58. package/dist/input-visual-test.js.map +1 -0
  59. package/dist/inputBox.d.ts +228 -0
  60. package/dist/inputBox.d.ts.map +1 -0
  61. package/dist/inputBox.js +966 -0
  62. package/dist/inputBox.js.map +1 -0
  63. package/dist/logger.d.ts +136 -0
  64. package/dist/logger.d.ts.map +1 -0
  65. package/dist/logger.js +347 -0
  66. package/dist/logger.js.map +1 -0
  67. package/dist/orchestrator.d.ts +149 -0
  68. package/dist/orchestrator.d.ts.map +1 -0
  69. package/dist/orchestrator.js +821 -0
  70. package/dist/orchestrator.js.map +1 -0
  71. package/dist/planner.d.ts +86 -0
  72. package/dist/planner.d.ts.map +1 -0
  73. package/dist/planner.js +830 -0
  74. package/dist/planner.js.map +1 -0
  75. package/dist/pty-test-runner.d.ts +87 -0
  76. package/dist/pty-test-runner.d.ts.map +1 -0
  77. package/dist/pty-test-runner.js +721 -0
  78. package/dist/pty-test-runner.js.map +1 -0
  79. package/dist/screen.d.ts +44 -0
  80. package/dist/screen.d.ts.map +1 -0
  81. package/dist/screen.js +152 -0
  82. package/dist/screen.js.map +1 -0
  83. package/dist/taskQueue.d.ts +70 -0
  84. package/dist/taskQueue.d.ts.map +1 -0
  85. package/dist/taskQueue.js +282 -0
  86. package/dist/taskQueue.js.map +1 -0
  87. package/dist/tui-test-harness.d.ts +216 -0
  88. package/dist/tui-test-harness.d.ts.map +1 -0
  89. package/dist/tui-test-harness.js +527 -0
  90. package/dist/tui-test-harness.js.map +1 -0
  91. package/dist/types.d.ts +257 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +46 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/ui-visual-test.d.ts +15 -0
  96. package/dist/ui-visual-test.d.ts.map +1 -0
  97. package/dist/ui-visual-test.js +141 -0
  98. package/dist/ui-visual-test.js.map +1 -0
  99. package/dist/ui.d.ts +272 -0
  100. package/dist/ui.d.ts.map +1 -0
  101. package/dist/ui.js +1531 -0
  102. package/dist/ui.js.map +1 -0
  103. package/dist/validator.d.ts +53 -0
  104. package/dist/validator.d.ts.map +1 -0
  105. package/dist/validator.js +491 -0
  106. package/dist/validator.js.map +1 -0
  107. package/dist/versionCheck.d.ts +63 -0
  108. package/dist/versionCheck.d.ts.map +1 -0
  109. package/dist/versionCheck.js +261 -0
  110. package/dist/versionCheck.js.map +1 -0
  111. 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":"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"}
@@ -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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"}