firecrawl-cli 1.14.9 → 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.
- package/README.md +7 -7
- package/dist/commands/create.d.ts +18 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +98 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/agent-scaffold/create-flow.d.ts +23 -0
- package/dist/utils/agent-scaffold/create-flow.d.ts.map +1 -0
- package/dist/utils/agent-scaffold/create-flow.js +515 -0
- package/dist/utils/agent-scaffold/create-flow.js.map +1 -0
- package/dist/utils/agent-scaffold/credentials.d.ts +20 -0
- package/dist/utils/agent-scaffold/credentials.d.ts.map +1 -0
- package/dist/utils/agent-scaffold/credentials.js +84 -0
- package/dist/utils/agent-scaffold/credentials.js.map +1 -0
- package/dist/utils/agent-scaffold/manifest.d.ts +57 -0
- package/dist/utils/agent-scaffold/manifest.d.ts.map +1 -0
- package/dist/utils/agent-scaffold/manifest.js +176 -0
- package/dist/utils/agent-scaffold/manifest.js.map +1 -0
- package/dist/utils/agent-scaffold/scaffold.d.ts +21 -0
- package/dist/utils/agent-scaffold/scaffold.d.ts.map +1 -0
- package/dist/utils/agent-scaffold/scaffold.js +213 -0
- package/dist/utils/agent-scaffold/scaffold.js.map +1 -0
- package/dist/utils/agent-scaffold/ui.d.ts +20 -0
- package/dist/utils/agent-scaffold/ui.d.ts.map +1 -0
- package/dist/utils/agent-scaffold/ui.js +44 -0
- package/dist/utils/agent-scaffold/ui.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendored from firecrawl/firecrawl-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/firecrawl-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/firecrawl-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/firecrawl-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/firecrawl-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":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgIH,0CAgHC;AA9OD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AAEzC,yCAA2C;AAC3C,6BAA2C;AAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;IACnB,cAAc;IACd,OAAO;IACP,MAAM;IACN,WAAW;IACX,WAAW;CACZ,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,MAAM;IACN,gBAAgB;IAChB,eAAe;IACf,cAAc;CACf,CAAC,CAAC;AAEH,SAAS,gBAAgB,CACvB,GAAW,EACX,IAAY,EACZ,SAAqC;IAErC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,IAAI,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,kDAAkD;QAClD,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE;gBAAE,SAAS;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,aAAa;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,eAAe,CAAC,GAAW;IAClC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAChD,OAAO,GAAG,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;gBACjD,EAAE,CAAC,aAAa,CACd,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACnC,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAA4B;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAeD,SAAS,6BAA6B,CACpC,UAAkB,EAClB,UAAkB,EAClB,YAAgC,EAChC,SAA6B,EAC7B,WAA+B,EAC/B,QAA4B;IAE5B,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO;IAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEvC,MAAM,oBAAoB,GAAG,WAAW,IAAI,YAAY,CAAC;IACzD,MAAM,iBAAiB,GAAG,QAAQ,IAAI,SAAS,CAAC;IAEhD,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,GAAG,OAAO;SACd,OAAO,CACN,qFAAqF,EACrF,gCAAgC,YAAY,cAAc,SAAS,yBAAyB,CAC7F;SACA,OAAO,CACN,iFAAiF,EACjF,gCAAgC,oBAAoB,cAAc,iBAAiB,yBAAyB,CAC7G;SACA,OAAO,CACN,mFAAmF,EACnF,gCAAgC,YAAY,cAAc,SAAS,yBAAyB,CAC7F,CAAC;IAEJ,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,MAAM,EACJ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,GAAG,IAAI,CAAC;IACT,MAAM,UAAU,GAAG,IAAA,wBAAa,GAAE,CAAC;IAEnC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,iEAAiE;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,gBAAgB,CACd,YAAY,EACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC,CACF,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACzE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,qDAAqD;QACrD,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE;gBAAE,SAAS;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,aAAa;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,eAAe,CAAC,UAAU,CAAC,CAAC;IAE5B,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,6CAA6C;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;gBACxD,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACzC,CAAC;QACH,CAAC;QACD,gDAAgD;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CACzC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAC/B,EAAE,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;gBACxD,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACzC,CAAC;QACH,CAAC;QACD,EAAE,CAAC,aAAa,CACd,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC;IAED,6BAA6B,CAC3B,UAAU,EACV,QAAQ,CAAC,EAAE,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,CAChB,CAAC;IACF,IAAA,YAAO,EAAC,GAAG,QAAQ,CAAC,IAAI,sBAAsB,CAAC,CAAC;IAEhD,kBAAkB;IAClB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAA,YAAO,EAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IAElC,uBAAuB;IACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAA,SAAI,EAAC,4BAA4B,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,aAAa,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5D,IAAA,YAAO,EAAC,wBAAwB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GACV,GAAG,YAAY,KAAK,IAAI,QAAQ,IAAI,GAAG;gBACrC,CAAC,CAAE,GAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;YACT,IAAA,SAAI,EAAC,+DAA+D,CAAC,CAAC;YACtE,IAAI,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendored from firecrawl/firecrawl-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/firecrawl-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