firecrawl-cli 1.15.0 → 1.15.2

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,57 @@
1
+ /**
2
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/manifest.ts
3
+ *
4
+ * Divergence from upstream: removed the "look for agent-manifest.json next to
5
+ * the bundled CLI" branch — when this code runs inside the root firecrawl-cli
6
+ * npm package there is no bundled manifest. `loadManifest()` always clones
7
+ * the public agent repo into a tmp dir and reads the manifest from there,
8
+ * which is exactly what `loadExternalManifestSync` already does.
9
+ *
10
+ * Keep in sync with upstream when the manifest schema evolves.
11
+ */
12
+ export interface TemplateEntry {
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ path: string;
17
+ requiredEnvVars: string[];
18
+ optionalEnvVars: string[];
19
+ envFile?: string;
20
+ devCommand: string;
21
+ deploy: string[];
22
+ }
23
+ export interface ModelEntry {
24
+ id: string;
25
+ name: string;
26
+ }
27
+ export interface ProviderEntry {
28
+ id: string;
29
+ name: string;
30
+ envVar: string;
31
+ hint: string;
32
+ models: ModelEntry[];
33
+ endpointEnvVar?: string;
34
+ }
35
+ export interface Manifest {
36
+ version: number;
37
+ templates: TemplateEntry[];
38
+ providers: ProviderEntry[];
39
+ }
40
+ export declare function loadManifest(): Manifest;
41
+ /**
42
+ * Load manifest from an external GitHub repo or local path.
43
+ * Returns the manifest and the root directory where templates live.
44
+ *
45
+ * Supported sources:
46
+ * - "user/repo" — clones from GitHub, reads agent-manifest.json
47
+ * - "/absolute/path" or "./relative" — reads from local directory
48
+ */
49
+ export declare function loadExternalManifest(source: string): Promise<{
50
+ manifest: Manifest;
51
+ sourceRoot: string;
52
+ }>;
53
+ export declare function getSourceRoot(): string;
54
+ export declare function getTemplates(): TemplateEntry[];
55
+ export declare function getTemplate(id: string): TemplateEntry | undefined;
56
+ export declare function getProviders(): ProviderEntry[];
57
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAOD,wBAAgB,YAAY,IAAI,QAAQ,CAIvC;AA+DD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAwDD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ /**
3
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/manifest.ts
4
+ *
5
+ * Divergence from upstream: removed the "look for agent-manifest.json next to
6
+ * the bundled CLI" branch — when this code runs inside the root firecrawl-cli
7
+ * npm package there is no bundled manifest. `loadManifest()` always clones
8
+ * the public agent repo into a tmp dir and reads the manifest from there,
9
+ * which is exactly what `loadExternalManifestSync` already does.
10
+ *
11
+ * Keep in sync with upstream when the manifest schema evolves.
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.loadManifest = loadManifest;
48
+ exports.loadExternalManifest = loadExternalManifest;
49
+ exports.getSourceRoot = getSourceRoot;
50
+ exports.getTemplates = getTemplates;
51
+ exports.getTemplate = getTemplate;
52
+ exports.getProviders = getProviders;
53
+ const path = __importStar(require("path"));
54
+ const fs = __importStar(require("fs"));
55
+ const child_process_1 = require("child_process");
56
+ const ui_1 = require("./ui");
57
+ let cached = null;
58
+ let cachedSourceRoot = null;
59
+ const DEFAULT_REMOTE = 'firecrawl/web-agent';
60
+ function loadManifest() {
61
+ if (cached)
62
+ return cached;
63
+ const { manifest } = loadExternalManifestSync(DEFAULT_REMOTE);
64
+ return manifest;
65
+ }
66
+ function cloneRepo(source, dest) {
67
+ const ghToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
68
+ // Try gh CLI first (handles private repos via gh auth)
69
+ try {
70
+ (0, child_process_1.execSync)(`gh repo clone ${source} "${dest}" -- --depth 1`, {
71
+ stdio: 'pipe',
72
+ });
73
+ return;
74
+ }
75
+ catch { }
76
+ // Fall back to git clone with token if available
77
+ const cloneUrl = ghToken
78
+ ? `https://${ghToken}@github.com/${source}.git`
79
+ : `https://github.com/${source}.git`;
80
+ (0, child_process_1.execSync)(`git clone --depth 1 ${cloneUrl} "${dest}"`, { stdio: 'pipe' });
81
+ }
82
+ function loadExternalManifestSync(source) {
83
+ const tmpDir = fs.mkdtempSync(path.join(require('os').tmpdir(), 'fc-agent-'));
84
+ try {
85
+ cloneRepo(source, tmpDir);
86
+ }
87
+ catch {
88
+ // Default remote is public once launched; until then, gh auth covers
89
+ // insiders and everyone else sees this hint.
90
+ throw new Error(`Could not clone ${source}. If the repo isn't public yet, authenticate with \`gh auth login\` or set GITHUB_TOKEN. Otherwise, check your network / git install.`);
91
+ }
92
+ const manifestPath = path.join(tmpDir, 'agent-manifest.json');
93
+ if (!fs.existsSync(manifestPath)) {
94
+ // Upstream currently ships the manifest at `.internal/cli/agent-manifest.json`.
95
+ // Fall back to that location so the scaffolder keeps working until the
96
+ // manifest is promoted to repo root.
97
+ const nestedPath = path.join(tmpDir, '.internal', 'cli', 'agent-manifest.json');
98
+ if (fs.existsSync(nestedPath)) {
99
+ const manifest = JSON.parse(fs.readFileSync(nestedPath, 'utf-8'));
100
+ cached = manifest;
101
+ cachedSourceRoot = tmpDir;
102
+ return { manifest, sourceRoot: tmpDir };
103
+ }
104
+ throw new Error(`No agent-manifest.json found in ${source}`);
105
+ }
106
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
107
+ cached = manifest;
108
+ cachedSourceRoot = tmpDir;
109
+ return { manifest, sourceRoot: tmpDir };
110
+ }
111
+ /**
112
+ * Load manifest from an external GitHub repo or local path.
113
+ * Returns the manifest and the root directory where templates live.
114
+ *
115
+ * Supported sources:
116
+ * - "user/repo" — clones from GitHub, reads agent-manifest.json
117
+ * - "/absolute/path" or "./relative" — reads from local directory
118
+ */
119
+ async function loadExternalManifest(source) {
120
+ // Local path
121
+ if (source.startsWith('/') || source.startsWith('.')) {
122
+ const absPath = path.resolve(source);
123
+ const manifestPath = path.join(absPath, 'agent-manifest.json');
124
+ if (fs.existsSync(manifestPath)) {
125
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
126
+ cached = manifest;
127
+ cachedSourceRoot = absPath;
128
+ return { manifest, sourceRoot: absPath };
129
+ }
130
+ // Same upstream fallback as the remote clone path: while the manifest
131
+ // lives under `.internal/cli/` rather than repo root, still accept
132
+ // local agent-repo checkouts. Source root stays at repo root so
133
+ // templates resolve correctly.
134
+ const nestedPath = path.join(absPath, '.internal', 'cli', 'agent-manifest.json');
135
+ if (fs.existsSync(nestedPath)) {
136
+ const manifest = JSON.parse(fs.readFileSync(nestedPath, 'utf-8'));
137
+ cached = manifest;
138
+ cachedSourceRoot = absPath;
139
+ return { manifest, sourceRoot: absPath };
140
+ }
141
+ throw new Error(`No agent-manifest.json found in ${absPath}`);
142
+ }
143
+ // GitHub repo (user/repo format)
144
+ const tmpDir = fs.mkdtempSync(path.join(require('os').tmpdir(), 'fc-agent-'));
145
+ (0, ui_1.info)(`Cloning ${source}...`);
146
+ try {
147
+ cloneRepo(source, tmpDir);
148
+ }
149
+ catch {
150
+ throw new Error(`Failed to clone ${source} - for private repos, install the gh CLI (gh auth login) or set GITHUB_TOKEN`);
151
+ }
152
+ const manifestPath = path.join(tmpDir, 'agent-manifest.json');
153
+ if (!fs.existsSync(manifestPath)) {
154
+ throw new Error(`No agent-manifest.json found in ${source}`);
155
+ }
156
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
157
+ cached = manifest;
158
+ cachedSourceRoot = tmpDir;
159
+ return { manifest, sourceRoot: tmpDir };
160
+ }
161
+ function getSourceRoot() {
162
+ if (cachedSourceRoot)
163
+ return cachedSourceRoot;
164
+ loadManifest();
165
+ return cachedSourceRoot;
166
+ }
167
+ function getTemplates() {
168
+ return (cached ?? loadManifest()).templates;
169
+ }
170
+ function getTemplate(id) {
171
+ return getTemplates().find((t) => t.id === id);
172
+ }
173
+ function getProviders() {
174
+ return (cached ?? loadManifest()).providers;
175
+ }
176
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/scaffold.ts
3
+ * Copies templates from the cloned agent repo into the user's project dir,
4
+ * then merges agent-core deps and writes .env. No divergence from upstream
5
+ * — keep in sync if upstream changes scaffolding behavior.
6
+ */
7
+ import type { TemplateEntry } from './manifest';
8
+ export interface ScaffoldOptions {
9
+ projectDir: string;
10
+ template: TemplateEntry;
11
+ envVars: Record<string, string>;
12
+ selectedProvider?: string;
13
+ defaultModelId?: string;
14
+ /** Sub-agent provider. Defaults to selectedProvider when omitted. */
15
+ subAgentProvider?: string;
16
+ /** Sub-agent model id. Defaults to defaultModelId when omitted. */
17
+ subAgentModelId?: string;
18
+ skipInstall?: boolean;
19
+ }
20
+ export declare function scaffoldProject(opts: ScaffoldOptions): Promise<void>;
21
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4EhD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAoCD,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH1E"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ /**
3
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/scaffold.ts
4
+ * Copies templates from the cloned agent repo into the user's project dir,
5
+ * then merges agent-core deps and writes .env. No divergence from upstream
6
+ * — keep in sync if upstream changes scaffolding behavior.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.scaffoldProject = scaffoldProject;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ const manifest_1 = require("./manifest");
47
+ const ui_1 = require("./ui");
48
+ const SKIP = new Set([
49
+ 'node_modules',
50
+ '.next',
51
+ '.git',
52
+ '.DS_Store',
53
+ 'README.md',
54
+ ]);
55
+ /** Files to skip when copying agent-core (dev artifacts, build config) */
56
+ const AGENT_CORE_SKIP = new Set([
57
+ 'dist',
58
+ 'tsup.config.ts',
59
+ 'tsconfig.json',
60
+ 'package.json',
61
+ ]);
62
+ function copyDirRecursive(src, dest, extraSkip) {
63
+ if (!fs.existsSync(src))
64
+ return;
65
+ fs.mkdirSync(dest, { recursive: true });
66
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
67
+ if (SKIP.has(entry.name))
68
+ continue;
69
+ if (extraSkip?.(entry.name))
70
+ continue;
71
+ const srcPath = path.join(src, entry.name);
72
+ // Skip symlinks — agent-core is copied separately
73
+ try {
74
+ if (fs.lstatSync(srcPath).isSymbolicLink())
75
+ continue;
76
+ }
77
+ catch {
78
+ /* proceed */
79
+ }
80
+ const destPath = path.join(dest, entry.name);
81
+ if (entry.isDirectory()) {
82
+ copyDirRecursive(srcPath, destPath, extraSkip);
83
+ }
84
+ else {
85
+ fs.copyFileSync(srcPath, destPath);
86
+ }
87
+ }
88
+ }
89
+ /** Clean up any leftover workspace references in scaffolded files. */
90
+ function cleanupScaffold(dir) {
91
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
92
+ const fullPath = path.join(dir, entry.name);
93
+ if (entry.isDirectory() && !SKIP.has(entry.name)) {
94
+ cleanupScaffold(fullPath);
95
+ }
96
+ else if (entry.name === 'package.json') {
97
+ const pkg = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
98
+ if (pkg.dependencies?.['@firecrawl/agent-core']) {
99
+ delete pkg.dependencies['@firecrawl/agent-core'];
100
+ fs.writeFileSync(fullPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
101
+ }
102
+ }
103
+ }
104
+ }
105
+ function generateEnvFile(keys) {
106
+ const lines = [];
107
+ for (const [envVar, value] of Object.entries(keys)) {
108
+ if (value)
109
+ lines.push(`${envVar}=${value}`);
110
+ }
111
+ return lines.join('\n') + '\n';
112
+ }
113
+ function applyTemplateProviderDefaults(projectDir, templateId, orchProvider, orchModel, subProvider, subModel) {
114
+ if (!orchProvider || !orchModel || templateId !== 'next')
115
+ return;
116
+ const configPath = path.join(projectDir, 'app', '(agent)', '_config.ts');
117
+ if (!fs.existsSync(configPath))
118
+ return;
119
+ const effectiveSubProvider = subProvider ?? orchProvider;
120
+ const effectiveSubModel = subModel ?? orchModel;
121
+ let content = fs.readFileSync(configPath, 'utf-8');
122
+ content = content
123
+ .replace(/^(\s*)orchestrator:\s*\{ provider: "[^"]+", model: "[^"]+" \} satisfies ModelRef,$/m, `$1orchestrator: { provider: "${orchProvider}", model: "${orchModel}" } satisfies ModelRef,`)
124
+ .replace(/^(\s*)subAgent:\s*\{ provider: "[^"]+", model: "[^"]+" \} satisfies ModelRef,$/m, `$1subAgent: { provider: "${effectiveSubProvider}", model: "${effectiveSubModel}" } satisfies ModelRef,`)
125
+ .replace(/^(\s*)background:\s*\{ provider: "[^"]+", model: "[^"]+" \} satisfies ModelRef,$/m, `$1background: { provider: "${orchProvider}", model: "${orchModel}" } satisfies ModelRef,`);
126
+ fs.writeFileSync(configPath, content, 'utf-8');
127
+ }
128
+ async function scaffoldProject(opts) {
129
+ const { projectDir, template, envVars, selectedProvider, defaultModelId, subAgentProvider, subAgentModelId, skipInstall, } = opts;
130
+ const sourceRoot = (0, manifest_1.getSourceRoot)();
131
+ fs.mkdirSync(projectDir, { recursive: true });
132
+ // Copy agent-core (skip dev artifacts, test files, build output)
133
+ const agentCoreSrc = path.join(sourceRoot, 'agent-core');
134
+ if (fs.existsSync(agentCoreSrc)) {
135
+ copyDirRecursive(agentCoreSrc, path.join(projectDir, 'agent-core'), (name) => {
136
+ if (AGENT_CORE_SKIP.has(name))
137
+ return true;
138
+ if (name.endsWith('.test.ts'))
139
+ return true;
140
+ return false;
141
+ });
142
+ }
143
+ // Copy template files
144
+ const templateSrc = path.join(sourceRoot, template.path);
145
+ for (const entry of fs.readdirSync(templateSrc, { withFileTypes: true })) {
146
+ if (SKIP.has(entry.name))
147
+ continue;
148
+ const srcPath = path.join(templateSrc, entry.name);
149
+ // Skip symlinks (agent-core is already copied above)
150
+ try {
151
+ if (fs.lstatSync(srcPath).isSymbolicLink())
152
+ continue;
153
+ }
154
+ catch {
155
+ /* proceed */
156
+ }
157
+ const destPath = path.join(projectDir, entry.name);
158
+ if (entry.isDirectory()) {
159
+ copyDirRecursive(srcPath, destPath);
160
+ }
161
+ else {
162
+ fs.copyFileSync(srcPath, destPath);
163
+ }
164
+ }
165
+ // Clean up any leftover workspace references
166
+ cleanupScaffold(projectDir);
167
+ // Merge agent-core deps into the project package.json
168
+ const agentCorePkgPath = path.join(sourceRoot, 'agent-core', 'package.json');
169
+ const projectPkgPath = path.join(projectDir, 'package.json');
170
+ if (fs.existsSync(agentCorePkgPath) && fs.existsSync(projectPkgPath)) {
171
+ const corePkg = JSON.parse(fs.readFileSync(agentCorePkgPath, 'utf-8'));
172
+ const projectPkg = JSON.parse(fs.readFileSync(projectPkgPath, 'utf-8'));
173
+ // Add agent-core runtime deps to the project
174
+ for (const [dep, version] of Object.entries(corePkg.dependencies ?? {})) {
175
+ if (!projectPkg.dependencies?.[dep]) {
176
+ projectPkg.dependencies = projectPkg.dependencies ?? {};
177
+ projectPkg.dependencies[dep] = version;
178
+ }
179
+ }
180
+ // Add agent-core peer deps (optional providers)
181
+ for (const [dep, version] of Object.entries(corePkg.peerDependencies ?? {})) {
182
+ if (!projectPkg.dependencies?.[dep]) {
183
+ projectPkg.dependencies = projectPkg.dependencies ?? {};
184
+ projectPkg.dependencies[dep] = version;
185
+ }
186
+ }
187
+ fs.writeFileSync(projectPkgPath, JSON.stringify(projectPkg, null, 2) + '\n', 'utf-8');
188
+ }
189
+ applyTemplateProviderDefaults(projectDir, template.id, selectedProvider, defaultModelId, subAgentProvider, subAgentModelId);
190
+ (0, ui_1.success)(`${template.name} template scaffolded`);
191
+ // Write .env file
192
+ const envFileName = template.envFile ?? '.env';
193
+ const envPath = path.join(projectDir, envFileName);
194
+ fs.writeFileSync(envPath, generateEnvFile(envVars), 'utf-8');
195
+ (0, ui_1.success)(`Created ${envFileName}`);
196
+ // Install dependencies
197
+ if (!skipInstall) {
198
+ (0, ui_1.info)('Installing dependencies...');
199
+ try {
200
+ (0, child_process_1.execSync)('npm install', { cwd: projectDir, stdio: 'pipe' });
201
+ (0, ui_1.success)('Dependencies installed');
202
+ }
203
+ catch (err) {
204
+ const stderr = err instanceof Error && 'stderr' in err
205
+ ? err.stderr?.toString().trim()
206
+ : '';
207
+ (0, ui_1.warn)('npm install failed — run it manually in the project directory');
208
+ if (stderr)
209
+ console.error(`\n${stderr}\n`);
210
+ }
211
+ }
212
+ }
213
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/ui.ts
3
+ * Keep in sync if upstream changes — this file intentionally mirrors the
4
+ * agent repo's CLI output style so scaffold messages match docs verbatim.
5
+ */
6
+ export declare const orange = "\u001B[38;5;208m";
7
+ export declare const reset = "\u001B[0m";
8
+ export declare const dim = "\u001B[2m";
9
+ export declare const bold = "\u001B[1m";
10
+ export declare const green = "\u001B[32m";
11
+ export declare const red = "\u001B[31m";
12
+ export declare const cyan = "\u001B[36m";
13
+ export declare const yellow = "\u001B[33m";
14
+ export declare function printBanner(): void;
15
+ export declare function step(n: number, label: string): void;
16
+ export declare function success(msg: string): void;
17
+ export declare function warn(msg: string): void;
18
+ export declare function error(msg: string): void;
19
+ export declare function info(msg: string): void;
20
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/ui.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,MAAM,qBAAmB,CAAC;AACvC,eAAO,MAAM,KAAK,cAAY,CAAC;AAC/B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,GAAG,eAAa,CAAC;AAC9B,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,MAAM,eAAa,CAAC;AAEjC,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Vendored from firecrawl/web-agent:.internal/cli/src/utils/ui.ts
4
+ * Keep in sync if upstream changes — this file intentionally mirrors the
5
+ * agent repo's CLI output style so scaffold messages match docs verbatim.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.yellow = exports.cyan = exports.red = exports.green = exports.bold = exports.dim = exports.reset = exports.orange = void 0;
9
+ exports.printBanner = printBanner;
10
+ exports.step = step;
11
+ exports.success = success;
12
+ exports.warn = warn;
13
+ exports.error = error;
14
+ exports.info = info;
15
+ exports.orange = '\x1b[38;5;208m';
16
+ exports.reset = '\x1b[0m';
17
+ exports.dim = '\x1b[2m';
18
+ exports.bold = '\x1b[1m';
19
+ exports.green = '\x1b[32m';
20
+ exports.red = '\x1b[31m';
21
+ exports.cyan = '\x1b[36m';
22
+ exports.yellow = '\x1b[33m';
23
+ function printBanner() {
24
+ console.log('');
25
+ console.log(` ${exports.orange}${exports.bold}firecrawl-agent${exports.reset}`);
26
+ console.log(` ${exports.dim}AI-powered web research agent${exports.reset}`);
27
+ console.log('');
28
+ }
29
+ function step(n, label) {
30
+ console.log(` ${exports.dim}${n}.${exports.reset} ${label}`);
31
+ }
32
+ function success(msg) {
33
+ console.log(` ${exports.green}✓${exports.reset} ${msg}`);
34
+ }
35
+ function warn(msg) {
36
+ console.log(` ${exports.yellow}!${exports.reset} ${msg}`);
37
+ }
38
+ function error(msg) {
39
+ console.log(` ${exports.red}✗${exports.reset} ${msg}`);
40
+ }
41
+ function info(msg) {
42
+ console.log(` ${exports.dim}${msg}${exports.reset}`);
43
+ }
44
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/utils/agent-scaffold/ui.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH,kCAKC;AAED,oBAEC;AAED,0BAEC;AAED,oBAEC;AAED,sBAEC;AAED,oBAEC;AAlCY,QAAA,MAAM,GAAG,gBAAgB,CAAC;AAC1B,QAAA,KAAK,GAAG,SAAS,CAAC;AAClB,QAAA,GAAG,GAAG,SAAS,CAAC;AAChB,QAAA,IAAI,GAAG,SAAS,CAAC;AACjB,QAAA,KAAK,GAAG,UAAU,CAAC;AACnB,QAAA,GAAG,GAAG,UAAU,CAAC;AACjB,QAAA,IAAI,GAAG,UAAU,CAAC;AAClB,QAAA,MAAM,GAAG,UAAU,CAAC;AAEjC,SAAgB,WAAW;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,cAAM,GAAG,YAAI,kBAAkB,aAAK,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,WAAG,gCAAgC,aAAK,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,IAAI,CAAC,CAAS,EAAE,KAAa;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,WAAG,GAAG,CAAC,IAAI,aAAK,IAAI,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,aAAK,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,cAAM,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,WAAG,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,WAAG,GAAG,GAAG,GAAG,aAAK,EAAE,CAAC,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firecrawl-cli",
3
- "version": "1.15.0",
3
+ "version": "1.15.2",
4
4
  "description": "Command-line interface for Firecrawl. Scrape, crawl, and extract data from any website directly from your terminal.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {