firecrawl-cli 1.15.0 → 1.15.1

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.
@@ -0,0 +1,515 @@
1
+ "use strict";
2
+ /**
3
+ * Vendored from firecrawl/firecrawl-agent:.internal/cli/src/commands/init.ts
4
+ *
5
+ * This is the interactive-to-non-interactive create flow. The original file
6
+ * also exposed a `createInitCommand` commander builder — we drop that here
7
+ * because the root CLI's `src/commands/create.ts` owns the command surface.
8
+ * `handleCreate` (renamed from `handleInit`) is what we export.
9
+ *
10
+ * Keep in sync with upstream when the create flow evolves.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.handleCreate = handleCreate;
47
+ const prompts_1 = require("@inquirer/prompts");
48
+ const path = __importStar(require("path"));
49
+ const child_process_1 = require("child_process");
50
+ const manifest_1 = require("./manifest");
51
+ const credentials_1 = require("./credentials");
52
+ const scaffold_1 = require("./scaffold");
53
+ const ui_1 = require("./ui");
54
+ function resolveSpawnCommand(command) {
55
+ if (process.platform === 'win32' && command === 'npm') {
56
+ return 'npm.cmd';
57
+ }
58
+ return command;
59
+ }
60
+ function getSelectedProvider(providers, providerId) {
61
+ return providers.find((provider) => provider.id === providerId);
62
+ }
63
+ function parseKeyFlags(keys) {
64
+ const map = {};
65
+ const providerEnvMap = {
66
+ anthropic: 'ANTHROPIC_API_KEY',
67
+ openai: 'OPENAI_API_KEY',
68
+ google: 'GOOGLE_GENERATIVE_AI_API_KEY',
69
+ gateway: 'AI_GATEWAY_API_KEY',
70
+ };
71
+ for (const entry of keys) {
72
+ const eq = entry.indexOf('=');
73
+ if (eq === -1)
74
+ continue;
75
+ const provider = entry.slice(0, eq).toLowerCase();
76
+ const value = entry.slice(eq + 1);
77
+ const envVar = providerEnvMap[provider] ?? provider.toUpperCase();
78
+ map[envVar] = value;
79
+ }
80
+ return map;
81
+ }
82
+ /**
83
+ * Prompt the user to pick a provider+model pair from the available manifest.
84
+ * Used by both the initial orchestrator prompt and the review-loop "Change…"
85
+ * actions so changes stay in sync.
86
+ */
87
+ async function promptProviderAndModel(availableProviders, message) {
88
+ const providerId = await (0, prompts_1.select)({
89
+ message,
90
+ choices: availableProviders
91
+ .filter((p) => p.models && p.models.length > 0)
92
+ .map((provider) => ({
93
+ name: `${provider.name} ${ui_1.dim}${provider.models[0].name}${ui_1.reset}`,
94
+ value: provider.id,
95
+ })),
96
+ });
97
+ const provider = getSelectedProvider(availableProviders, providerId);
98
+ let modelId;
99
+ if (provider.id === 'custom-openai') {
100
+ modelId =
101
+ (await (0, prompts_1.input)({ message: 'Model ID', default: 'gpt-4o' })).trim() ||
102
+ 'gpt-4o';
103
+ }
104
+ else if (provider.models.length > 1) {
105
+ modelId = await (0, prompts_1.select)({
106
+ message: 'Model',
107
+ choices: provider.models.map((m) => ({ name: m.name, value: m.id })),
108
+ });
109
+ }
110
+ else {
111
+ modelId = provider.models[0]?.id ?? 'gpt-4o';
112
+ }
113
+ return { provider, modelId };
114
+ }
115
+ async function handleCreate(rawName, options) {
116
+ (0, ui_1.printBanner)();
117
+ // --- Project name: arg > interactive prompt > default ---
118
+ let projectName;
119
+ if (rawName) {
120
+ projectName = rawName;
121
+ }
122
+ else if (process.stdin.isTTY) {
123
+ projectName =
124
+ (await (0, prompts_1.input)({
125
+ message: 'Project name',
126
+ default: 'my-firecrawl-agent',
127
+ })).trim() || 'my-firecrawl-agent';
128
+ }
129
+ else {
130
+ projectName = 'my-firecrawl-agent';
131
+ }
132
+ // Load external manifest if --from is provided
133
+ if (options.from) {
134
+ try {
135
+ await (0, manifest_1.loadExternalManifest)(options.from);
136
+ (0, ui_1.success)(`Loaded manifest from ${options.from}`);
137
+ }
138
+ catch (err) {
139
+ (0, ui_1.warn)(err instanceof Error ? err.message : String(err));
140
+ process.exit(1);
141
+ }
142
+ console.log('');
143
+ }
144
+ const availableProviders = (0, manifest_1.getProviders)();
145
+ // --- Template selection (only interactive prompt if not passed via flag) ---
146
+ const templates = (0, manifest_1.getTemplates)();
147
+ let template;
148
+ if (options.template) {
149
+ const found = (0, manifest_1.getTemplate)(options.template);
150
+ if (!found) {
151
+ (0, ui_1.warn)(`Unknown template "${options.template}". Available: ${templates.map((t) => t.id).join(', ')}`);
152
+ process.exit(1);
153
+ }
154
+ template = found;
155
+ }
156
+ else {
157
+ const templateId = await (0, prompts_1.select)({
158
+ message: 'Template',
159
+ choices: templates.map((t) => ({
160
+ name: `${t.name} ${ui_1.dim}${t.description}${ui_1.reset}`,
161
+ value: t.id,
162
+ })),
163
+ });
164
+ template = (0, manifest_1.getTemplate)(templateId);
165
+ }
166
+ let selectedProvider = getSelectedProvider(availableProviders, options.provider);
167
+ if (options.provider && !selectedProvider) {
168
+ (0, ui_1.warn)(`Unknown provider "${options.provider}". Available: ${availableProviders.map((p) => p.id).join(', ')}`);
169
+ process.exit(1);
170
+ }
171
+ if (!selectedProvider) {
172
+ if (process.stdin.isTTY) {
173
+ const providerId = await (0, prompts_1.select)({
174
+ message: 'Default model provider',
175
+ choices: availableProviders
176
+ .filter((p) => p.models && p.models.length > 0)
177
+ .map((provider) => ({
178
+ name: `${provider.name} ${ui_1.dim}${provider.models[0].name}${ui_1.reset}`,
179
+ value: provider.id,
180
+ })),
181
+ });
182
+ selectedProvider = getSelectedProvider(availableProviders, providerId);
183
+ }
184
+ else {
185
+ selectedProvider =
186
+ getSelectedProvider(availableProviders, 'google') ??
187
+ availableProviders[0];
188
+ }
189
+ }
190
+ // --- Orchestrator model selection ---
191
+ let selectedModelId;
192
+ if (options.model) {
193
+ selectedModelId = options.model;
194
+ }
195
+ else if (selectedProvider.id === 'custom-openai') {
196
+ selectedModelId = (await (0, prompts_1.input)({
197
+ message: 'Model ID',
198
+ default: 'gpt-4o',
199
+ })).trim();
200
+ }
201
+ else if (selectedProvider.models.length > 1 && process.stdin.isTTY) {
202
+ selectedModelId = await (0, prompts_1.select)({
203
+ message: 'Default model',
204
+ choices: selectedProvider.models.map((m) => ({
205
+ name: m.name,
206
+ value: m.id,
207
+ })),
208
+ });
209
+ }
210
+ else {
211
+ selectedModelId = selectedProvider.models[0]?.id ?? 'gpt-4o';
212
+ }
213
+ // --- Sub-agent model selection ---
214
+ let selectedSubProvider = selectedProvider;
215
+ let selectedSubModelId = selectedModelId;
216
+ if (options.subAgentProvider || options.subAgentModel) {
217
+ const subProv = options.subAgentProvider
218
+ ? getSelectedProvider(availableProviders, options.subAgentProvider)
219
+ : selectedProvider;
220
+ if (options.subAgentProvider && !subProv) {
221
+ (0, ui_1.warn)(`Unknown sub-agent provider "${options.subAgentProvider}". Available: ${availableProviders.map((p) => p.id).join(', ')}`);
222
+ process.exit(1);
223
+ }
224
+ selectedSubProvider = subProv ?? selectedProvider;
225
+ selectedSubModelId =
226
+ options.subAgentModel ??
227
+ (selectedSubProvider.id === selectedProvider.id
228
+ ? selectedModelId
229
+ : (selectedSubProvider.models[0]?.id ?? selectedModelId));
230
+ }
231
+ else if (process.stdin.isTTY && !options.model) {
232
+ const subChoice = await (0, prompts_1.select)({
233
+ message: 'Sub-agent model',
234
+ choices: [
235
+ {
236
+ name: `Same as orchestrator ${ui_1.dim}(${selectedModelId})${ui_1.reset}`,
237
+ value: '__same__',
238
+ },
239
+ ...availableProviders.flatMap((p) => p.models.map((m) => ({
240
+ name: `${p.name} — ${m.name}`,
241
+ value: `${p.id}::${m.id}`,
242
+ }))),
243
+ ],
244
+ });
245
+ if (subChoice !== '__same__') {
246
+ const [pId, mId] = subChoice.split('::');
247
+ const p = getSelectedProvider(availableProviders, pId);
248
+ if (p) {
249
+ selectedSubProvider = p;
250
+ selectedSubModelId = mId;
251
+ }
252
+ }
253
+ }
254
+ // --- Custom OpenAI endpoint ---
255
+ let customEndpoint;
256
+ if (selectedProvider.endpointEnvVar && process.stdin.isTTY) {
257
+ customEndpoint =
258
+ (await (0, prompts_1.input)({
259
+ message: `Base URL ${ui_1.dim}(OpenAI-compatible endpoint)${ui_1.reset}`,
260
+ default: 'https://api.openai.com/v1',
261
+ })).trim() || undefined;
262
+ }
263
+ // --- Collect all env vars silently ---
264
+ const envVars = {};
265
+ const missing = new Set();
266
+ envVars.MODEL_PROVIDER = selectedProvider.id;
267
+ envVars.MODEL_ID = selectedModelId;
268
+ if (selectedProvider.endpointEnvVar && customEndpoint) {
269
+ envVars[selectedProvider.endpointEnvVar] = customEndpoint;
270
+ }
271
+ // Firecrawl API key: flag > env > credentials > prompt
272
+ if (options.apiKey) {
273
+ envVars.FIRECRAWL_API_KEY = options.apiKey;
274
+ }
275
+ else {
276
+ const resolved = await (0, credentials_1.resolveFirecrawlApiKey)();
277
+ if (resolved) {
278
+ envVars.FIRECRAWL_API_KEY = resolved.key;
279
+ }
280
+ }
281
+ // Provider keys from --key flags
282
+ const flagKeys = parseKeyFlags(options.key ?? []);
283
+ Object.assign(envVars, flagKeys);
284
+ // Auto-detect remaining provider keys from environment
285
+ for (const provider of availableProviders) {
286
+ if (!envVars[provider.envVar] && process.env[provider.envVar]) {
287
+ envVars[provider.envVar] = process.env[provider.envVar];
288
+ }
289
+ }
290
+ // Prompt for missing required keys when running interactively
291
+ if (!envVars.FIRECRAWL_API_KEY) {
292
+ const key = await (0, prompts_1.password)({
293
+ message: `Firecrawl API key ${ui_1.dim}(https://firecrawl.dev/app/api-keys)${ui_1.reset}`,
294
+ });
295
+ if (key) {
296
+ envVars.FIRECRAWL_API_KEY = key;
297
+ }
298
+ else {
299
+ missing.add('FIRECRAWL_API_KEY');
300
+ }
301
+ }
302
+ if (!envVars[selectedProvider.envVar] && process.stdin.isTTY) {
303
+ const key = await (0, prompts_1.password)({
304
+ message: `${selectedProvider.name} API key ${ui_1.dim}(${selectedProvider.hint})${ui_1.reset}`,
305
+ });
306
+ if (key) {
307
+ envVars[selectedProvider.envVar] = key;
308
+ }
309
+ else {
310
+ missing.add(selectedProvider.envVar);
311
+ }
312
+ }
313
+ if (selectedSubProvider.id !== selectedProvider.id &&
314
+ !envVars[selectedSubProvider.envVar] &&
315
+ process.stdin.isTTY) {
316
+ const key = await (0, prompts_1.password)({
317
+ message: `${selectedSubProvider.name} API key ${ui_1.dim}(${selectedSubProvider.hint})${ui_1.reset}`,
318
+ });
319
+ if (key) {
320
+ envVars[selectedSubProvider.envVar] = key;
321
+ }
322
+ else {
323
+ missing.add(selectedSubProvider.envVar);
324
+ }
325
+ }
326
+ for (const envVar of template.optionalEnvVars) {
327
+ if (!envVars[envVar])
328
+ missing.add(envVar);
329
+ }
330
+ // --- Config summary review loop ---
331
+ const fullyFlagged = !!(options.template &&
332
+ (options.apiKey || envVars.FIRECRAWL_API_KEY) &&
333
+ options.provider &&
334
+ options.model);
335
+ if (process.stdin.isTTY && !fullyFlagged) {
336
+ let confirmed = false;
337
+ while (!confirmed) {
338
+ printConfigSummary({
339
+ template,
340
+ orchProvider: selectedProvider,
341
+ orchModelId: selectedModelId,
342
+ subProvider: selectedSubProvider,
343
+ subModelId: selectedSubModelId,
344
+ envVars,
345
+ missing,
346
+ });
347
+ const action = await (0, prompts_1.select)({
348
+ message: 'Review',
349
+ choices: [
350
+ { name: 'Continue', value: 'continue' },
351
+ { name: 'Change orchestrator model', value: 'orch' },
352
+ { name: 'Change sub-agent model', value: 'sub' },
353
+ { name: 'Cancel', value: 'cancel' },
354
+ ],
355
+ });
356
+ if (action === 'cancel') {
357
+ (0, ui_1.info)('Cancelled.');
358
+ process.exit(0);
359
+ }
360
+ if (action === 'orch') {
361
+ const picked = await promptProviderAndModel(availableProviders, 'Orchestrator model');
362
+ const prev = selectedProvider;
363
+ selectedProvider = picked.provider;
364
+ selectedModelId = picked.modelId;
365
+ envVars.MODEL_PROVIDER = selectedProvider.id;
366
+ envVars.MODEL_ID = selectedModelId;
367
+ if (prev.envVar !== selectedProvider.envVar) {
368
+ if (!envVars[selectedProvider.envVar]) {
369
+ const key = await (0, prompts_1.password)({
370
+ message: `${selectedProvider.name} API key ${ui_1.dim}(${selectedProvider.hint})${ui_1.reset}`,
371
+ });
372
+ if (key)
373
+ envVars[selectedProvider.envVar] = key;
374
+ else
375
+ missing.add(selectedProvider.envVar);
376
+ }
377
+ }
378
+ continue;
379
+ }
380
+ if (action === 'sub') {
381
+ const sameChoice = await (0, prompts_1.select)({
382
+ message: 'Sub-agent model',
383
+ choices: [
384
+ {
385
+ name: `Same as orchestrator ${ui_1.dim}(${selectedModelId})${ui_1.reset}`,
386
+ value: '__same__',
387
+ },
388
+ { name: 'Different provider / model', value: '__different__' },
389
+ ],
390
+ });
391
+ if (sameChoice === '__same__') {
392
+ selectedSubProvider = selectedProvider;
393
+ selectedSubModelId = selectedModelId;
394
+ }
395
+ else {
396
+ const picked = await promptProviderAndModel(availableProviders, 'Sub-agent model');
397
+ selectedSubProvider = picked.provider;
398
+ selectedSubModelId = picked.modelId;
399
+ if (selectedSubProvider.id !== selectedProvider.id &&
400
+ !envVars[selectedSubProvider.envVar]) {
401
+ const key = await (0, prompts_1.password)({
402
+ message: `${selectedSubProvider.name} API key ${ui_1.dim}(${selectedSubProvider.hint})${ui_1.reset}`,
403
+ });
404
+ if (key)
405
+ envVars[selectedSubProvider.envVar] = key;
406
+ else
407
+ missing.add(selectedSubProvider.envVar);
408
+ }
409
+ }
410
+ continue;
411
+ }
412
+ confirmed = true;
413
+ }
414
+ }
415
+ // --- Scaffold ---
416
+ const projectDir = path.resolve(process.cwd(), projectName);
417
+ console.log('');
418
+ (0, ui_1.info)(`Creating a new Firecrawl Agent app in ${projectDir}`);
419
+ console.log('');
420
+ await (0, scaffold_1.scaffoldProject)({
421
+ projectDir,
422
+ template,
423
+ envVars,
424
+ selectedProvider: selectedProvider.id,
425
+ defaultModelId: envVars.MODEL_ID,
426
+ subAgentProvider: selectedSubProvider.id,
427
+ subAgentModelId: selectedSubModelId,
428
+ skipInstall: options.skipInstall,
429
+ });
430
+ // --- Summary ---
431
+ console.log('');
432
+ console.log(` ${ui_1.green}${ui_1.bold}Ready!${ui_1.reset} ${projectDir}`);
433
+ console.log('');
434
+ const detected = Object.keys(envVars).filter((k) => /_API_KEY$/.test(k) && envVars[k]);
435
+ if (detected.length > 0) {
436
+ (0, ui_1.info)(`Keys: ${detected.join(', ')}`);
437
+ }
438
+ (0, ui_1.info)(`Orchestrator: ${selectedProvider.name} (${envVars.MODEL_ID})`);
439
+ if (selectedSubProvider.id === selectedProvider.id &&
440
+ selectedSubModelId === selectedModelId) {
441
+ (0, ui_1.info)(`Sub-agent: same as orchestrator`);
442
+ }
443
+ else {
444
+ (0, ui_1.info)(`Sub-agent: ${selectedSubProvider.name} (${selectedSubModelId})`);
445
+ }
446
+ if (missing.size > 0) {
447
+ (0, ui_1.info)(`Missing: ${Array.from(missing).join(', ')} ${ui_1.dim}(add to .env later)${ui_1.reset}`);
448
+ }
449
+ console.log('');
450
+ // --- What next? ---
451
+ if (fullyFlagged || !process.stdin.isTTY) {
452
+ console.log(` cd ${projectName} && ${template.devCommand}`);
453
+ console.log('');
454
+ return;
455
+ }
456
+ const action = await (0, prompts_1.select)({
457
+ message: 'Next',
458
+ choices: [
459
+ {
460
+ name: `Start dev server ${ui_1.dim}${template.devCommand}${ui_1.reset}`,
461
+ value: 'dev',
462
+ },
463
+ { name: 'Exit', value: 'exit' },
464
+ ],
465
+ });
466
+ if (action === 'dev') {
467
+ console.log('');
468
+ const [cmd, ...args] = template.devCommand.split(' ');
469
+ (0, child_process_1.spawn)(resolveSpawnCommand(cmd), args, {
470
+ cwd: projectDir,
471
+ stdio: 'inherit',
472
+ });
473
+ }
474
+ else {
475
+ console.log(` cd ${projectName} && ${template.devCommand}`);
476
+ console.log('');
477
+ }
478
+ }
479
+ function printConfigSummary(args) {
480
+ const { template, orchProvider, orchModelId, subProvider, subModelId, envVars, missing, } = args;
481
+ const sameAsOrch = subProvider.id === orchProvider.id && subModelId === orchModelId;
482
+ const mask = (v) => (v ? v.slice(0, 5) + '••••' + v.slice(-4) : '');
483
+ console.log('');
484
+ console.log(` ${ui_1.bold}Config${ui_1.reset}`);
485
+ console.log(` ${ui_1.dim}────────────────────────────────${ui_1.reset}`);
486
+ console.log(` Orchestrator ${ui_1.green}${orchProvider.name}${ui_1.reset} ${ui_1.dim}·${ui_1.reset} ${orchModelId}`);
487
+ console.log(` Sub-agent ${ui_1.green}${subProvider.name}${ui_1.reset} ${ui_1.dim}·${ui_1.reset} ${subModelId}` +
488
+ (sameAsOrch ? ` ${ui_1.dim}(same as orchestrator)${ui_1.reset}` : ''));
489
+ console.log(` Template ${template.name}`);
490
+ const fcKey = envVars.FIRECRAWL_API_KEY;
491
+ console.log(` Firecrawl key ${fcKey ? `${mask(fcKey)} ${ui_1.green}✓${ui_1.reset}` : `${ui_1.dim}(missing)${ui_1.reset} !`}`);
492
+ const orchKey = envVars[orchProvider.envVar];
493
+ console.log(` ${orchProvider.name} key` +
494
+ ' '.repeat(Math.max(1, 14 - orchProvider.name.length - 4)) +
495
+ (orchKey
496
+ ? `${mask(orchKey)} ${ui_1.green}✓${ui_1.reset}`
497
+ : `${ui_1.dim}(missing)${ui_1.reset} !`));
498
+ if (!sameAsOrch) {
499
+ const subKey = envVars[subProvider.envVar];
500
+ console.log(` ${subProvider.name} key (sub)` +
501
+ ' '.repeat(Math.max(1, 8 - subProvider.name.length)) +
502
+ (subKey
503
+ ? `${mask(subKey)} ${ui_1.green}✓${ui_1.reset}`
504
+ : `${ui_1.dim}(missing)${ui_1.reset} !`));
505
+ }
506
+ if (missing.size > 0) {
507
+ console.log(` ${ui_1.dim}Other missing: ${Array.from(missing)
508
+ .filter((m) => m !== orchProvider.envVar &&
509
+ m !== subProvider.envVar &&
510
+ m !== 'FIRECRAWL_API_KEY')
511
+ .join(', ') || '—'}${ui_1.reset}`);
512
+ }
513
+ console.log('');
514
+ }
515
+ //# sourceMappingURL=create-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/create-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vendored from firecrawl/firecrawl-agent:.internal/cli/src/utils/credentials.ts
3
+ *
4
+ * Resolves the Firecrawl API key from env or the shared `firecrawl-cli` config
5
+ * directory. Same path as the root CLI's own credentials store (that's the
6
+ * point — both CLIs read from the same place), so keeping this as a light
7
+ * standalone copy avoids coupling the scaffolder to the root CLI's richer
8
+ * credentials module.
9
+ */
10
+ interface StoredCredentials {
11
+ apiKey?: string;
12
+ apiUrl?: string;
13
+ }
14
+ export declare function loadFirecrawlCredentials(): StoredCredentials | null;
15
+ export declare function resolveFirecrawlApiKey(): Promise<{
16
+ key: string;
17
+ source: 'env' | 'credentials' | 'prompt';
18
+ } | null>;
19
+ export {};
20
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD,wBAAgB,wBAAwB,IAAI,iBAAiB,GAAG,IAAI,CAQnE;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,QAAQ,CAAC;CAC1C,GAAG,IAAI,CAAC,CAaR"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Vendored from firecrawl/firecrawl-agent:.internal/cli/src/utils/credentials.ts
4
+ *
5
+ * Resolves the Firecrawl API key from env or the shared `firecrawl-cli` config
6
+ * directory. Same path as the root CLI's own credentials store (that's the
7
+ * point — both CLIs read from the same place), so keeping this as a light
8
+ * standalone copy avoids coupling the scaffolder to the root CLI's richer
9
+ * credentials module.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.loadFirecrawlCredentials = loadFirecrawlCredentials;
46
+ exports.resolveFirecrawlApiKey = resolveFirecrawlApiKey;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const os = __importStar(require("os"));
50
+ function getConfigDir() {
51
+ const homeDir = os.homedir();
52
+ switch (os.platform()) {
53
+ case 'darwin':
54
+ return path.join(homeDir, 'Library', 'Application Support', 'firecrawl-cli');
55
+ case 'win32':
56
+ return path.join(homeDir, 'AppData', 'Roaming', 'firecrawl-cli');
57
+ default:
58
+ return path.join(homeDir, '.config', 'firecrawl-cli');
59
+ }
60
+ }
61
+ function loadFirecrawlCredentials() {
62
+ try {
63
+ const credPath = path.join(getConfigDir(), 'credentials.json');
64
+ if (!fs.existsSync(credPath))
65
+ return null;
66
+ return JSON.parse(fs.readFileSync(credPath, 'utf-8'));
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ async function resolveFirecrawlApiKey() {
73
+ // 1. Environment variable
74
+ if (process.env.FIRECRAWL_API_KEY) {
75
+ return { key: process.env.FIRECRAWL_API_KEY, source: 'env' };
76
+ }
77
+ // 2. Stored credentials from firecrawl-cli
78
+ const creds = loadFirecrawlCredentials();
79
+ if (creds?.apiKey) {
80
+ return { key: creds.apiKey, source: 'credentials' };
81
+ }
82
+ return null;
83
+ }
84
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/credentials.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BH,4DAQC;AAED,wDAgBC;AApDD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAOzB,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,eAAe,CAChB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACnE;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAsB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAI1C,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAC;IACzC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}