@juspay/neurolink 7.34.0 → 7.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +64 -7
  3. package/dist/adapters/providerImageAdapter.d.ts +56 -0
  4. package/dist/adapters/providerImageAdapter.js +257 -0
  5. package/dist/cli/commands/config.d.ts +20 -20
  6. package/dist/cli/commands/setup-anthropic.d.ts +16 -0
  7. package/dist/cli/commands/setup-anthropic.js +414 -0
  8. package/dist/cli/commands/setup-azure.d.ts +17 -0
  9. package/dist/cli/commands/setup-azure.js +415 -0
  10. package/dist/cli/commands/setup-bedrock.d.ts +13 -0
  11. package/dist/cli/commands/setup-bedrock.js +487 -0
  12. package/dist/cli/commands/setup-gcp.d.ts +18 -0
  13. package/dist/cli/commands/setup-gcp.js +569 -0
  14. package/dist/cli/commands/setup-google-ai.d.ts +16 -0
  15. package/dist/cli/commands/setup-google-ai.js +369 -0
  16. package/dist/cli/commands/setup-huggingface.d.ts +8 -0
  17. package/dist/cli/commands/setup-huggingface.js +200 -0
  18. package/dist/cli/commands/setup-mistral.d.ts +8 -0
  19. package/dist/cli/commands/setup-mistral.js +233 -0
  20. package/dist/cli/commands/setup-openai.d.ts +16 -0
  21. package/dist/cli/commands/setup-openai.js +402 -0
  22. package/dist/cli/commands/setup.d.ts +19 -0
  23. package/dist/cli/commands/setup.js +539 -0
  24. package/dist/cli/factories/commandFactory.d.ts +5 -0
  25. package/dist/cli/factories/commandFactory.js +67 -3
  26. package/dist/cli/factories/setupCommandFactory.d.ts +18 -0
  27. package/dist/cli/factories/setupCommandFactory.js +137 -0
  28. package/dist/cli/parser.js +4 -1
  29. package/dist/cli/utils/envManager.d.ts +3 -2
  30. package/dist/cli/utils/envManager.js +18 -4
  31. package/dist/core/baseProvider.js +99 -45
  32. package/dist/core/types.d.ts +3 -0
  33. package/dist/lib/adapters/providerImageAdapter.d.ts +56 -0
  34. package/dist/lib/adapters/providerImageAdapter.js +257 -0
  35. package/dist/lib/core/baseProvider.js +99 -45
  36. package/dist/lib/core/types.d.ts +3 -0
  37. package/dist/lib/neurolink.js +8 -3
  38. package/dist/lib/types/content.d.ts +78 -0
  39. package/dist/lib/types/content.js +5 -0
  40. package/dist/lib/types/conversation.d.ts +19 -0
  41. package/dist/lib/types/generateTypes.d.ts +4 -1
  42. package/dist/lib/types/streamTypes.d.ts +6 -3
  43. package/dist/lib/utils/imageProcessor.d.ts +84 -0
  44. package/dist/lib/utils/imageProcessor.js +362 -0
  45. package/dist/lib/utils/messageBuilder.d.ts +8 -1
  46. package/dist/lib/utils/messageBuilder.js +279 -0
  47. package/dist/neurolink.js +8 -3
  48. package/dist/types/content.d.ts +78 -0
  49. package/dist/types/content.js +5 -0
  50. package/dist/types/conversation.d.ts +19 -0
  51. package/dist/types/generateTypes.d.ts +4 -1
  52. package/dist/types/streamTypes.d.ts +6 -3
  53. package/dist/utils/imageProcessor.d.ts +84 -0
  54. package/dist/utils/imageProcessor.js +362 -0
  55. package/dist/utils/messageBuilder.d.ts +8 -1
  56. package/dist/utils/messageBuilder.js +279 -0
  57. package/package.json +1 -1
@@ -0,0 +1,487 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AWS Bedrock Setup Command for New Developers
4
+ *
5
+ * Checks for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
6
+ * Auto-detects AWS CLI configuration, prompts for missing config, updates .env safely
7
+ */
8
+ import * as fs from "fs";
9
+ import * as path from "path";
10
+ import * as os from "os";
11
+ import inquirer from "inquirer";
12
+ import chalk from "chalk";
13
+ import ora from "ora";
14
+ import { logger } from "../../lib/utils/logger.js";
15
+ import { updateEnvFile as envUpdate } from "../utils/envManager.js";
16
+ export async function handleBedrockSetup(argv) {
17
+ try {
18
+ const options = {
19
+ checkOnly: argv.check || false,
20
+ interactive: !argv.nonInteractive,
21
+ };
22
+ logger.always(chalk.blue("🔍 Checking for existing AWS Bedrock configuration..."));
23
+ const configStatus = checkExistingConfiguration();
24
+ const config = {};
25
+ // Handle existing credentials
26
+ if (configStatus.hasAccessKey && configStatus.hasSecretKey) {
27
+ const result = await handleExistingCredentials(configStatus, options, config);
28
+ if (result.shouldReturn) {
29
+ return;
30
+ }
31
+ }
32
+ else {
33
+ displayCurrentStatus(configStatus);
34
+ if (options.checkOnly) {
35
+ return;
36
+ }
37
+ }
38
+ // Auto-detect AWS CLI configuration
39
+ await detectAndDisplayAWSConfig(configStatus, config);
40
+ // Interactive credential setup
41
+ if (options.interactive) {
42
+ const setupResult = await handleInteractiveCredentialSetup(configStatus, config, options);
43
+ if (setupResult.shouldReturn) {
44
+ return;
45
+ }
46
+ }
47
+ // Model selection
48
+ if (options.interactive) {
49
+ await handleModelSelection(config);
50
+ }
51
+ // Update .env and show completion
52
+ await finalizeSetup(config, options);
53
+ }
54
+ catch (error) {
55
+ logger.error(chalk.red("❌ AWS Bedrock setup failed:"));
56
+ logger.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
57
+ process.exit(1);
58
+ }
59
+ }
60
+ async function detectAWSCredentials() {
61
+ try {
62
+ const credentialsPath = path.join(os.homedir(), ".aws", "credentials");
63
+ if (!fs.existsSync(credentialsPath)) {
64
+ return {};
65
+ }
66
+ const credentialsContent = fs.readFileSync(credentialsPath, "utf-8");
67
+ // Parse AWS credentials file format
68
+ const lines = credentialsContent.split("\n");
69
+ let inDefaultProfile = false;
70
+ const credentials = {};
71
+ for (const line of lines) {
72
+ const trimmed = line.trim();
73
+ // Profile section headers
74
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
75
+ const currentProfile = trimmed.slice(1, -1);
76
+ inDefaultProfile = currentProfile === "default";
77
+ continue;
78
+ }
79
+ // Skip if not in default profile (for simplicity)
80
+ if (!inDefaultProfile) {
81
+ continue;
82
+ }
83
+ // Key-value pairs
84
+ if (trimmed.includes("=")) {
85
+ const [key, ...valueParts] = trimmed.split("=");
86
+ const value = valueParts.join("=").trim();
87
+ credentials[key.trim()] = value;
88
+ }
89
+ }
90
+ return {
91
+ accessKeyId: credentials.aws_access_key_id,
92
+ secretAccessKey: credentials.aws_secret_access_key,
93
+ };
94
+ }
95
+ catch {
96
+ // Silently fail - this is just auto-detection
97
+ return {};
98
+ }
99
+ }
100
+ async function detectAWSConfig() {
101
+ try {
102
+ const configPath = path.join(os.homedir(), ".aws", "config");
103
+ if (!fs.existsSync(configPath)) {
104
+ return {};
105
+ }
106
+ const configContent = fs.readFileSync(configPath, "utf-8");
107
+ // Parse AWS config file format
108
+ const lines = configContent.split("\n");
109
+ let inDefaultProfile = false;
110
+ const config = {};
111
+ for (const line of lines) {
112
+ const trimmed = line.trim();
113
+ // Profile section headers - config uses [profile name] format except for default
114
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
115
+ const profileMatch = trimmed.match(/^\[(?:profile\s+)?(.+)\]$/);
116
+ if (profileMatch) {
117
+ const currentProfile = profileMatch[1];
118
+ inDefaultProfile = currentProfile === "default";
119
+ }
120
+ continue;
121
+ }
122
+ // Skip if not in default profile
123
+ if (!inDefaultProfile) {
124
+ continue;
125
+ }
126
+ // Key-value pairs
127
+ if (trimmed.includes("=")) {
128
+ const [key, ...valueParts] = trimmed.split("=");
129
+ const value = valueParts.join("=").trim();
130
+ config[key.trim()] = value;
131
+ }
132
+ }
133
+ return {
134
+ region: config.region,
135
+ };
136
+ }
137
+ catch {
138
+ // Silently fail - this is just auto-detection
139
+ return {};
140
+ }
141
+ }
142
+ function checkExistingConfiguration() {
143
+ return {
144
+ hasAccessKey: !!process.env.AWS_ACCESS_KEY_ID,
145
+ hasSecretKey: !!process.env.AWS_SECRET_ACCESS_KEY,
146
+ hasRegion: !!process.env.AWS_REGION,
147
+ };
148
+ }
149
+ function displayCurrentStatus(configStatus) {
150
+ if (configStatus.hasAccessKey) {
151
+ logger.always(chalk.green("✔ AWS_ACCESS_KEY_ID found in environment"));
152
+ }
153
+ else {
154
+ logger.always(chalk.red("✘ AWS_ACCESS_KEY_ID not found"));
155
+ }
156
+ if (configStatus.hasSecretKey) {
157
+ logger.always(chalk.green("✔ AWS_SECRET_ACCESS_KEY found in environment"));
158
+ }
159
+ else {
160
+ logger.always(chalk.red("✘ AWS_SECRET_ACCESS_KEY not found"));
161
+ }
162
+ if (configStatus.hasRegion) {
163
+ logger.always(chalk.green(`✔ AWS_REGION found in environment: ${process.env.AWS_REGION}`));
164
+ }
165
+ else {
166
+ logger.always(chalk.yellow("⚠️ AWS_REGION not set (will default to us-east-1)"));
167
+ }
168
+ }
169
+ async function handleExistingCredentials(configStatus, options, config) {
170
+ logger.always(chalk.green("✔ AWS_ACCESS_KEY_ID found in environment"));
171
+ logger.always(chalk.green("✔ AWS_SECRET_ACCESS_KEY found in environment"));
172
+ logger.always(chalk.green(`✔ AWS_REGION: ${process.env.AWS_REGION || "us-east-1 (default)"}`));
173
+ if (options.checkOnly) {
174
+ logger.always(chalk.green("✅ Configuration check complete - credentials are available!"));
175
+ return { shouldReturn: true };
176
+ }
177
+ if (options.interactive) {
178
+ const { useExisting } = await inquirer.prompt([
179
+ {
180
+ type: "confirm",
181
+ name: "useExisting",
182
+ message: "AWS credentials detected. Do you want to use the existing credentials?",
183
+ default: true,
184
+ },
185
+ ]);
186
+ if (useExisting) {
187
+ logger.always(chalk.green("✅ Using existing AWS credentials."));
188
+ await handleModelSelection(config);
189
+ await finalizeSetup(config, options);
190
+ return { shouldReturn: true };
191
+ }
192
+ else {
193
+ logger.always(chalk.blue("📝 Setting up new AWS credentials..."));
194
+ }
195
+ }
196
+ else {
197
+ logger.always(chalk.green("✅ Setup complete! Using existing AWS credentials."));
198
+ return { shouldReturn: true };
199
+ }
200
+ return { shouldReturn: false };
201
+ }
202
+ async function detectAndDisplayAWSConfig(configStatus, config) {
203
+ if (!configStatus.hasAccessKey || !configStatus.hasSecretKey) {
204
+ logger.always(chalk.blue("🔍 Checking for AWS CLI configuration..."));
205
+ const awsCredentials = await detectAWSCredentials();
206
+ if (!configStatus.hasAccessKey && awsCredentials.accessKeyId) {
207
+ logger.always(chalk.green("✔ Found AWS_ACCESS_KEY_ID in AWS CLI configuration"));
208
+ config.accessKeyId = awsCredentials.accessKeyId;
209
+ }
210
+ if (!configStatus.hasSecretKey && awsCredentials.secretAccessKey) {
211
+ logger.always(chalk.green("✔ Found AWS_SECRET_ACCESS_KEY in AWS CLI configuration"));
212
+ config.secretAccessKey = awsCredentials.secretAccessKey;
213
+ }
214
+ }
215
+ if (!configStatus.hasRegion) {
216
+ const awsConfig = await detectAWSConfig();
217
+ if (awsConfig.region) {
218
+ logger.always(chalk.green(`✔ Found AWS_REGION in AWS CLI configuration: ${awsConfig.region}`));
219
+ config.region = awsConfig.region;
220
+ }
221
+ }
222
+ }
223
+ async function handleInteractiveCredentialSetup(configStatus, config, _options) {
224
+ const isReconfiguring = configStatus.hasAccessKey && configStatus.hasSecretKey;
225
+ // If no credentials found at all, offer choice of setup methods
226
+ if (!configStatus.hasAccessKey &&
227
+ !configStatus.hasSecretKey &&
228
+ !config.accessKeyId &&
229
+ !config.secretAccessKey) {
230
+ const setupMethod = await promptForSetupMethod();
231
+ if (setupMethod === "terminal") {
232
+ displayTerminalInstructions();
233
+ return { shouldReturn: true };
234
+ }
235
+ logger.always(chalk.blue("📝 Setting up AWS credentials manually..."));
236
+ }
237
+ // Prompt for credentials
238
+ await promptForCredentials(configStatus, config, isReconfiguring);
239
+ return { shouldReturn: false };
240
+ }
241
+ async function promptForSetupMethod() {
242
+ logger.always("");
243
+ logger.always(chalk.yellow("📋 No AWS credentials found. Choose your setup method:"));
244
+ logger.always("");
245
+ logger.always(chalk.cyan("Option 1: Use temporary AWS credentials from AWS Console"));
246
+ logger.always(" - Go to AWS Console → IAM → Security credentials");
247
+ logger.always(" - Create temporary credentials");
248
+ logger.always(" - Export them in your terminal, then restart this command");
249
+ logger.always("");
250
+ logger.always(chalk.cyan("Option 2: Manually enter your credentials"));
251
+ logger.always(" - Enter Access Key ID and Secret Access Key step by step");
252
+ logger.always("");
253
+ const { setupMethod } = await inquirer.prompt([
254
+ {
255
+ type: "list",
256
+ name: "setupMethod",
257
+ message: "How would you like to provide your AWS credentials?",
258
+ choices: [
259
+ {
260
+ name: "Paste temporary credentials in terminal and restart",
261
+ value: "terminal",
262
+ },
263
+ {
264
+ name: "Manually enter credentials step by step",
265
+ value: "manual",
266
+ },
267
+ ],
268
+ },
269
+ ]);
270
+ return setupMethod;
271
+ }
272
+ function displayTerminalInstructions() {
273
+ logger.always("");
274
+ logger.always(chalk.blue("📝 Follow these steps:"));
275
+ logger.always("");
276
+ logger.always("1. Copy and paste these commands in your terminal:");
277
+ logger.always(chalk.gray(' export AWS_ACCESS_KEY_ID="your-access-key-id"'));
278
+ logger.always(chalk.gray(' export AWS_SECRET_ACCESS_KEY="your-secret-access-key"'));
279
+ logger.always(chalk.gray(' export AWS_SESSION_TOKEN="your-session-token" # if using temporary credentials'));
280
+ logger.always(chalk.gray(' export AWS_REGION="your-preferred-region" # optional'));
281
+ logger.always("");
282
+ logger.always("2. Then run this command again:");
283
+ logger.always(chalk.cyan(" pnpm cli setup-bedrock"));
284
+ logger.always("");
285
+ logger.always(chalk.green("✅ Instructions provided! Set your credentials and restart the command."));
286
+ }
287
+ async function promptForCredentials(configStatus, config, isReconfiguring) {
288
+ // Prompt for access key
289
+ if (isReconfiguring || (!configStatus.hasAccessKey && !config.accessKeyId)) {
290
+ const { accessKey } = await inquirer.prompt([
291
+ {
292
+ type: "input",
293
+ name: "accessKey",
294
+ message: isReconfiguring
295
+ ? `Enter your AWS Access Key ID ${configStatus.hasAccessKey ? "(replacing existing)" : ""}:`
296
+ : "Enter your AWS Access Key ID:",
297
+ validate: (input) => {
298
+ if (!input.trim()) {
299
+ return "AWS Access Key ID is required";
300
+ }
301
+ if (!input.startsWith("AKIA") && !input.startsWith("ASIA")) {
302
+ return "AWS Access Key ID should start with AKIA or ASIA";
303
+ }
304
+ return true;
305
+ },
306
+ },
307
+ ]);
308
+ config.accessKeyId = accessKey.trim();
309
+ }
310
+ // Prompt for secret key
311
+ if (isReconfiguring ||
312
+ (!configStatus.hasSecretKey && !config.secretAccessKey)) {
313
+ const { secretKey } = await inquirer.prompt([
314
+ {
315
+ type: "password",
316
+ name: "secretKey",
317
+ message: isReconfiguring
318
+ ? `Enter your AWS Secret Access Key ${configStatus.hasSecretKey ? "(replacing existing)" : ""}:`
319
+ : "Enter your AWS Secret Access Key:",
320
+ validate: (input) => {
321
+ if (!input.trim()) {
322
+ return "AWS Secret Access Key is required";
323
+ }
324
+ if (input.length < 20) {
325
+ return "AWS Secret Access Key seems too short";
326
+ }
327
+ return true;
328
+ },
329
+ },
330
+ ]);
331
+ config.secretAccessKey = secretKey.trim();
332
+ }
333
+ // Prompt for region
334
+ if (isReconfiguring || (!configStatus.hasRegion && !config.region)) {
335
+ const { region } = await inquirer.prompt([
336
+ {
337
+ type: "input",
338
+ name: "region",
339
+ message: isReconfiguring
340
+ ? `Enter your AWS Region ${configStatus.hasRegion ? "(current: " + process.env.AWS_REGION + ")" : "(or press Enter for us-east-1)"}:`
341
+ : "Enter your AWS Region (or press Enter for us-east-1):",
342
+ default: configStatus.hasRegion ? process.env.AWS_REGION : "us-east-1",
343
+ validate: (input) => {
344
+ const trimmed = input.trim();
345
+ if (!trimmed) {
346
+ return true; // Allow default
347
+ }
348
+ if (!/^[a-z0-9-]+$/.test(trimmed)) {
349
+ return "AWS Region should contain only lowercase letters, numbers, and hyphens";
350
+ }
351
+ return true;
352
+ },
353
+ },
354
+ ]);
355
+ config.region =
356
+ region.trim() ||
357
+ (configStatus.hasRegion ? process.env.AWS_REGION : "us-east-1");
358
+ }
359
+ }
360
+ async function handleModelSelection(config) {
361
+ const hasModel = !!(process.env.BEDROCK_MODEL || process.env.BEDROCK_MODEL_ID);
362
+ const { wantsCustomModel } = await inquirer.prompt([
363
+ {
364
+ type: "confirm",
365
+ name: "wantsCustomModel",
366
+ message: hasModel
367
+ ? `Do you want to change the Bedrock model? (current: ${process.env.BEDROCK_MODEL || process.env.BEDROCK_MODEL_ID})`
368
+ : "Do you want to specify a custom Bedrock model? (optional - will use default if not specified)",
369
+ default: false,
370
+ },
371
+ ]);
372
+ if (wantsCustomModel) {
373
+ const { model } = await inquirer.prompt([
374
+ {
375
+ type: "list",
376
+ name: "model",
377
+ message: "Select a Bedrock model:",
378
+ choices: [
379
+ {
380
+ name: "Claude 3.7 Sonnet (Recommended - Latest)",
381
+ value: "arn:aws:bedrock:us-east-2:225681119357:inference-profile/us.anthropic.claude-3-7-sonnet-20250219-v1:0",
382
+ },
383
+ {
384
+ name: "Claude 3.5 Sonnet v2",
385
+ value: "anthropic.claude-3-5-sonnet-20241022-v2:0",
386
+ },
387
+ {
388
+ name: "Claude 3 Sonnet",
389
+ value: "anthropic.claude-3-sonnet-20240229-v1:0",
390
+ },
391
+ {
392
+ name: "Claude 3 Haiku",
393
+ value: "anthropic.claude-3-haiku-20240307-v1:0",
394
+ },
395
+ {
396
+ name: "Claude 3 Opus",
397
+ value: "anthropic.claude-3-opus-20240229-v1:0",
398
+ },
399
+ {
400
+ name: "Custom model (enter manually)",
401
+ value: "custom",
402
+ },
403
+ ],
404
+ },
405
+ ]);
406
+ if (model === "custom") {
407
+ const { customModel } = await inquirer.prompt([
408
+ {
409
+ type: "input",
410
+ name: "customModel",
411
+ message: "Enter your custom Bedrock model ID or ARN:",
412
+ validate: (input) => {
413
+ if (!input.trim()) {
414
+ return "Model ID/ARN is required";
415
+ }
416
+ return true;
417
+ },
418
+ },
419
+ ]);
420
+ config.model = customModel.trim();
421
+ }
422
+ else {
423
+ config.model = model;
424
+ }
425
+ }
426
+ }
427
+ async function finalizeSetup(config, options) {
428
+ if (config.accessKeyId ||
429
+ config.secretAccessKey ||
430
+ config.region ||
431
+ config.model) {
432
+ const newVars = {};
433
+ if (config.accessKeyId) {
434
+ newVars.AWS_ACCESS_KEY_ID = config.accessKeyId;
435
+ }
436
+ if (config.secretAccessKey) {
437
+ newVars.AWS_SECRET_ACCESS_KEY = config.secretAccessKey;
438
+ }
439
+ if (config.region) {
440
+ newVars.AWS_REGION = config.region;
441
+ }
442
+ if (config.model) {
443
+ newVars.BEDROCK_MODEL_ID = config.model;
444
+ }
445
+ const spinner = ora("💾 Updating .env file...").start();
446
+ try {
447
+ const result = envUpdate(newVars, ".env", true);
448
+ spinner.succeed(chalk.green(`✔ .env updated (added: ${result.added.length}, updated: ${result.updated.length})`));
449
+ }
450
+ catch (e) {
451
+ spinner.fail(chalk.red("❌ Failed to update .env file"));
452
+ throw e;
453
+ }
454
+ logger.always(chalk.green("✅ Setup complete!"));
455
+ if (config.accessKeyId) {
456
+ logger.always(` AWS_ACCESS_KEY_ID=${maskCredential(config.accessKeyId)}`);
457
+ }
458
+ if (config.secretAccessKey) {
459
+ logger.always(` AWS_SECRET_ACCESS_KEY=${maskCredential(config.secretAccessKey)}`);
460
+ }
461
+ if (config.region) {
462
+ logger.always(` AWS_REGION=${config.region}`);
463
+ }
464
+ if (config.model) {
465
+ logger.always(` BEDROCK_MODEL_ID=${config.model}`);
466
+ }
467
+ displayUsageExample();
468
+ }
469
+ else if (options.interactive && !options.checkOnly) {
470
+ logger.always(chalk.green("✅ Setup complete!"));
471
+ displayUsageExample();
472
+ }
473
+ }
474
+ function displayUsageExample() {
475
+ logger.always("");
476
+ logger.always(chalk.green("🚀 You can now use AWS Bedrock with the NeuroLink CLI:"));
477
+ logger.always(chalk.cyan(" pnpm cli generate 'Hello from Bedrock!' --provider bedrock"));
478
+ }
479
+ function maskCredential(credential) {
480
+ if (!credential || credential.length < 8) {
481
+ return "****";
482
+ }
483
+ const start = credential.slice(0, 4);
484
+ const end = credential.slice(-4);
485
+ const middle = "*".repeat(Math.max(4, credential.length - 8));
486
+ return `${start}${middle}${end}`;
487
+ }
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Google Vertex AI Setup Command
4
+ *
5
+ * Supports three authentication methods:
6
+ * - Method 1: File Path (GOOGLE_APPLICATION_CREDENTIALS)
7
+ * - Method 2: JSON String (GOOGLE_SERVICE_ACCOUNT_KEY)
8
+ * - Method 3: Individual Vars (GOOGLE_AUTH_CLIENT_EMAIL + GOOGLE_AUTH_PRIVATE_KEY)
9
+ *
10
+ * All methods require GOOGLE_VERTEX_PROJECT
11
+ * Optional: GOOGLE_VERTEX_LOCATION (defaults to 'us-east5')
12
+ */
13
+ interface GCPSetupArgv {
14
+ check?: boolean;
15
+ nonInteractive?: boolean;
16
+ }
17
+ export declare function handleGCPSetup(argv: GCPSetupArgv): Promise<void>;
18
+ export {};