firecrawl-cli 1.17.0 → 1.17.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.
Files changed (91) hide show
  1. package/README.md +13 -35
  2. package/dist/__tests__/commands/init.test.js +4 -2
  3. package/dist/__tests__/commands/init.test.js.map +1 -1
  4. package/dist/__tests__/commands/setup.test.js +6 -2
  5. package/dist/__tests__/commands/setup.test.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +27 -4
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/setup.d.ts +1 -1
  10. package/dist/commands/setup.d.ts.map +1 -1
  11. package/dist/commands/setup.js +9 -5
  12. package/dist/commands/setup.js.map +1 -1
  13. package/dist/commands/skills-install.d.ts +9 -1
  14. package/dist/commands/skills-install.d.ts.map +1 -1
  15. package/dist/commands/skills-install.js +13 -2
  16. package/dist/commands/skills-install.js.map +1 -1
  17. package/dist/index.js +4 -8
  18. package/dist/index.js.map +1 -1
  19. package/package.json +1 -1
  20. package/dist/commands/experimental/backends.d.ts +0 -19
  21. package/dist/commands/experimental/backends.d.ts.map +0 -1
  22. package/dist/commands/experimental/backends.js +0 -74
  23. package/dist/commands/experimental/backends.js.map +0 -1
  24. package/dist/commands/experimental/index.d.ts +0 -13
  25. package/dist/commands/experimental/index.d.ts.map +0 -1
  26. package/dist/commands/experimental/index.js +0 -200
  27. package/dist/commands/experimental/index.js.map +0 -1
  28. package/dist/commands/experimental/shared.d.ts +0 -17
  29. package/dist/commands/experimental/shared.d.ts.map +0 -1
  30. package/dist/commands/experimental/shared.js +0 -152
  31. package/dist/commands/experimental/shared.js.map +0 -1
  32. package/dist/commands/experimental/workflows/company-directories.d.ts +0 -11
  33. package/dist/commands/experimental/workflows/company-directories.d.ts.map +0 -1
  34. package/dist/commands/experimental/workflows/company-directories.js +0 -245
  35. package/dist/commands/experimental/workflows/company-directories.js.map +0 -1
  36. package/dist/commands/experimental/workflows/competitive-intel.d.ts +0 -11
  37. package/dist/commands/experimental/workflows/competitive-intel.d.ts.map +0 -1
  38. package/dist/commands/experimental/workflows/competitive-intel.js +0 -226
  39. package/dist/commands/experimental/workflows/competitive-intel.js.map +0 -1
  40. package/dist/commands/experimental/workflows/competitor-analysis.d.ts +0 -10
  41. package/dist/commands/experimental/workflows/competitor-analysis.d.ts.map +0 -1
  42. package/dist/commands/experimental/workflows/competitor-analysis.js +0 -196
  43. package/dist/commands/experimental/workflows/competitor-analysis.js.map +0 -1
  44. package/dist/commands/experimental/workflows/dashboard-reporting.d.ts +0 -11
  45. package/dist/commands/experimental/workflows/dashboard-reporting.d.ts.map +0 -1
  46. package/dist/commands/experimental/workflows/dashboard-reporting.js +0 -254
  47. package/dist/commands/experimental/workflows/dashboard-reporting.js.map +0 -1
  48. package/dist/commands/experimental/workflows/deep-research.d.ts +0 -11
  49. package/dist/commands/experimental/workflows/deep-research.d.ts.map +0 -1
  50. package/dist/commands/experimental/workflows/deep-research.js +0 -159
  51. package/dist/commands/experimental/workflows/deep-research.js.map +0 -1
  52. package/dist/commands/experimental/workflows/demo.d.ts +0 -11
  53. package/dist/commands/experimental/workflows/demo.d.ts.map +0 -1
  54. package/dist/commands/experimental/workflows/demo.js +0 -190
  55. package/dist/commands/experimental/workflows/demo.js.map +0 -1
  56. package/dist/commands/experimental/workflows/knowledge-base.d.ts +0 -11
  57. package/dist/commands/experimental/workflows/knowledge-base.d.ts.map +0 -1
  58. package/dist/commands/experimental/workflows/knowledge-base.js +0 -319
  59. package/dist/commands/experimental/workflows/knowledge-base.js.map +0 -1
  60. package/dist/commands/experimental/workflows/knowledge-ingest.d.ts +0 -12
  61. package/dist/commands/experimental/workflows/knowledge-ingest.d.ts.map +0 -1
  62. package/dist/commands/experimental/workflows/knowledge-ingest.js +0 -251
  63. package/dist/commands/experimental/workflows/knowledge-ingest.js.map +0 -1
  64. package/dist/commands/experimental/workflows/lead-gen.d.ts +0 -11
  65. package/dist/commands/experimental/workflows/lead-gen.d.ts.map +0 -1
  66. package/dist/commands/experimental/workflows/lead-gen.js +0 -257
  67. package/dist/commands/experimental/workflows/lead-gen.js.map +0 -1
  68. package/dist/commands/experimental/workflows/lead-research.d.ts +0 -11
  69. package/dist/commands/experimental/workflows/lead-research.d.ts.map +0 -1
  70. package/dist/commands/experimental/workflows/lead-research.js +0 -146
  71. package/dist/commands/experimental/workflows/lead-research.js.map +0 -1
  72. package/dist/commands/experimental/workflows/market-research.d.ts +0 -11
  73. package/dist/commands/experimental/workflows/market-research.d.ts.map +0 -1
  74. package/dist/commands/experimental/workflows/market-research.js +0 -260
  75. package/dist/commands/experimental/workflows/market-research.js.map +0 -1
  76. package/dist/commands/experimental/workflows/qa.d.ts +0 -11
  77. package/dist/commands/experimental/workflows/qa.d.ts.map +0 -1
  78. package/dist/commands/experimental/workflows/qa.js +0 -184
  79. package/dist/commands/experimental/workflows/qa.js.map +0 -1
  80. package/dist/commands/experimental/workflows/research-papers.d.ts +0 -11
  81. package/dist/commands/experimental/workflows/research-papers.d.ts.map +0 -1
  82. package/dist/commands/experimental/workflows/research-papers.js +0 -151
  83. package/dist/commands/experimental/workflows/research-papers.js.map +0 -1
  84. package/dist/commands/experimental/workflows/seo-audit.d.ts +0 -11
  85. package/dist/commands/experimental/workflows/seo-audit.d.ts.map +0 -1
  86. package/dist/commands/experimental/workflows/seo-audit.js +0 -155
  87. package/dist/commands/experimental/workflows/seo-audit.js.map +0 -1
  88. package/dist/commands/experimental/workflows/shop.d.ts +0 -11
  89. package/dist/commands/experimental/workflows/shop.d.ts.map +0 -1
  90. package/dist/commands/experimental/workflows/shop.js +0 -155
  91. package/dist/commands/experimental/workflows/shop.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"competitive-intel.js","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/competitive-intel.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Workflow: Competitor Analysis
3
- *
4
- * Spawns parallel agents -- one per company -- to scrape and profile the target
5
- * and each competitor simultaneously. Synthesizes into a full competitive report.
6
- */
7
- import { Command } from 'commander';
8
- import { type Backend } from '../backends';
9
- export declare function register(parentCmd: Command, backend: Backend): void;
10
- //# sourceMappingURL=competitor-analysis.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"competitor-analysis.d.ts","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/competitor-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,aAAa,CAAC;AAuKlE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAyBnE"}
@@ -1,196 +0,0 @@
1
- "use strict";
2
- /**
3
- * Workflow: Competitor Analysis
4
- *
5
- * Spawns parallel agents -- one per company -- to scrape and profile the target
6
- * and each competitor simultaneously. Synthesizes into a full competitive report.
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.register = register;
43
- const backends_1 = require("../backends");
44
- const shared_1 = require("../shared");
45
- // ─── Input gathering ────────────────────────────────────────────────────────
46
- async function gatherInputs(prefill) {
47
- const { input, select } = await Promise.resolve().then(() => __importStar(require('@inquirer/prompts')));
48
- const rawUrl = prefill?.url ||
49
- (await input({
50
- message: "What's the URL of the site you want to analyze?",
51
- validate: shared_1.validateUrl,
52
- }));
53
- const competitors = await input({
54
- message: 'Are there particular competitors you want to flag? (leave blank to auto-discover)',
55
- default: '',
56
- });
57
- const context = await input({
58
- message: 'Anything else I should know? (leave blank to skip)',
59
- default: '',
60
- });
61
- const output = await select({
62
- message: 'How should the report be delivered?',
63
- choices: [
64
- { name: 'Print to terminal', value: 'terminal' },
65
- { name: 'Save as Markdown file', value: 'markdown' },
66
- { name: 'Save as JSON (structured data)', value: 'json' },
67
- ],
68
- });
69
- return { url: (0, shared_1.normalizeUrl)(rawUrl), competitors, context, output };
70
- }
71
- // ─── System prompt ──────────────────────────────────────────────────────────
72
- function buildSystemPrompt(opts) {
73
- const outputInstructions = {
74
- terminal: 'Print the full report to the terminal in well-formatted markdown.',
75
- markdown: 'Save the report to a file called `competitor-analysis.md` in the current directory. Tell the user the file path when done.',
76
- json: `Save the report as structured JSON to \`competitor-analysis.json\` in the current directory. Tell the user the file path when done.
77
-
78
- Use this exact schema:
79
- \`\`\`json
80
- {
81
- "target": {
82
- "name": "string",
83
- "url": "string",
84
- "description": "string",
85
- "features": ["string"],
86
- "pricing": { "model": "string", "tiers": [{ "name": "string", "price": "string", "features": ["string"] }] },
87
- "targetAudience": "string",
88
- "valueProposition": "string",
89
- "sources": ["url"]
90
- },
91
- "competitors": [
92
- {
93
- "name": "string",
94
- "url": "string",
95
- "description": "string",
96
- "features": ["string"],
97
- "pricing": { "model": "string", "tiers": [{ "name": "string", "price": "string", "features": ["string"] }] },
98
- "targetAudience": "string",
99
- "sources": ["url"]
100
- }
101
- ],
102
- "featureMatrix": {
103
- "features": ["string"],
104
- "comparison": { "companyName": { "featureName": "yes | no | partial | string" } }
105
- },
106
- "positioning": [{ "company": "string", "tone": "string", "keyClaims": ["string"], "differentiators": ["string"] }],
107
- "strengths": ["string"],
108
- "weaknesses": ["string"],
109
- "opportunities": ["string"],
110
- "sources": [{ "url": "string", "title": "string", "usedFor": "string" }]
111
- }
112
- \`\`\``,
113
- };
114
- return `You are a competitive analysis team lead powered by Firecrawl. You orchestrate parallel research agents to analyze a target company and its competitors simultaneously.
115
-
116
- ${shared_1.FIRECRAWL_TOOLS_BLOCK}
117
-
118
- ## Your Strategy
119
-
120
- You are a **team lead**, not a solo researcher. Your job is to:
121
-
122
- 1. **Identify the landscape** -- Do a quick search yourself to find competitors if not provided. Search for "<product> alternatives", "<product> vs", "<industry> tools".
123
- 2. **Spawn parallel subagents** -- Launch one agent per company (target + each competitor). Each agent scrapes and profiles one company in depth.
124
- 3. **Collect results** -- Each agent reports back structured company data with source URLs.
125
- 4. **Synthesize** -- Build the comparative analysis, feature matrix, positioning breakdown, and recommendations from all agent findings.
126
-
127
- ## Agent Assignments
128
-
129
- Spawn these agents in parallel:
130
- 1. **Target Company Agent** -- Scrape the target site thoroughly. Extract: features, pricing, positioning, messaging, target audience, value proposition, content strategy. Return all findings with source URLs.
131
- 2. **Competitor Agent** (one per competitor) -- Each agent scrapes one competitor's site. Extract: company name, URL, what they do, key features, pricing (if public), target audience, value proposition. Return findings with source URLs.
132
-
133
- ${shared_1.SUBAGENT_INSTRUCTIONS}
134
-
135
- ## Output Format
136
-
137
- ${outputInstructions[opts.output]}
138
-
139
- Produce a comprehensive competitive analysis report with:
140
-
141
- ### 1. Target Company Overview
142
- - What they do (one paragraph)
143
- - Key features / product offerings
144
- - Pricing model (if public)
145
- - Target audience
146
- - Unique value proposition
147
-
148
- ### 2. Competitor Profiles
149
- For each competitor:
150
- - Company name & URL
151
- - What they do
152
- - Key features
153
- - Pricing (if public)
154
- - Target audience
155
-
156
- ### 3. Feature Comparison Matrix
157
- A markdown table comparing features across all companies.
158
-
159
- ### 4. Positioning & Messaging Analysis
160
- How each company positions itself -- tone, key claims, differentiators.
161
-
162
- ### 5. Strengths & Weaknesses
163
- For the target company relative to competitors.
164
-
165
- ### 6. Opportunities & Recommendations
166
- Actionable insights based on competitive gaps.
167
-
168
- ### 7. Sources & Citations
169
- For every claim, cite the source URL where you found the information. List all URLs scraped at the end with a one-line note on what was found there.
170
-
171
- ---
172
-
173
- Be thorough. Scrape real pages, extract real data. Do not make things up -- if pricing isn't public, say so. If a page fails to scrape, try an alternative URL or note the limitation.
174
-
175
- Start working immediately when given a target.`;
176
- }
177
- // ─── Command registration ───────────────────────────────────────────────────
178
- function register(parentCmd, backend) {
179
- const config = backends_1.BACKENDS[backend];
180
- parentCmd
181
- .command('competitor-analysis')
182
- .description('Analyze a website and its competitive landscape')
183
- .argument('[url]', 'URL to analyze')
184
- .option('-y, --yes', 'Auto-approve all tool permissions')
185
- .action(async (url, options) => {
186
- const inputs = await gatherInputs(url ? { url } : undefined);
187
- const skipPermissions = options.yes || (await (0, shared_1.askPermissionMode)(backend));
188
- console.log(`\nLaunching ${config.displayName}...\n`);
189
- (0, backends_1.launchAgent)(backend, buildSystemPrompt({ output: inputs.output }), (0, shared_1.buildMessage)([
190
- `Analyze ${inputs.url}`,
191
- inputs.competitors && `Competitors to include: ${inputs.competitors}`,
192
- inputs.context,
193
- ]), skipPermissions);
194
- });
195
- }
196
- //# sourceMappingURL=competitor-analysis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"competitor-analysis.js","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/competitor-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Workflow: Dashboard Reporting
3
- *
4
- * Uses saved browser profiles to log into analytics platforms and internal
5
- * tools, navigate dashboards, extract metrics, trigger exports, and compile
6
- * cross-platform reports. Supports any login-gated web dashboard.
7
- */
8
- import { Command } from 'commander';
9
- import { type Backend } from '../backends';
10
- export declare function register(parentCmd: Command, backend: Backend): void;
11
- //# sourceMappingURL=dashboard-reporting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-reporting.d.ts","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/dashboard-reporting.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,aAAa,CAAC;AA6NlE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAuCnE"}
@@ -1,254 +0,0 @@
1
- "use strict";
2
- /**
3
- * Workflow: Dashboard Reporting
4
- *
5
- * Uses saved browser profiles to log into analytics platforms and internal
6
- * tools, navigate dashboards, extract metrics, trigger exports, and compile
7
- * cross-platform reports. Supports any login-gated web dashboard.
8
- */
9
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- var desc = Object.getOwnPropertyDescriptor(m, k);
12
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
- desc = { enumerable: true, get: function() { return m[k]; } };
14
- }
15
- Object.defineProperty(o, k2, desc);
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || (function () {
26
- var ownKeys = function(o) {
27
- ownKeys = Object.getOwnPropertyNames || function (o) {
28
- var ar = [];
29
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
- return ar;
31
- };
32
- return ownKeys(o);
33
- };
34
- return function (mod) {
35
- if (mod && mod.__esModule) return mod;
36
- var result = {};
37
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
- __setModuleDefault(result, mod);
39
- return result;
40
- };
41
- })();
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.register = register;
44
- const backends_1 = require("../backends");
45
- const shared_1 = require("../shared");
46
- // ─── Input gathering ────────────────────────────────────────────────────────
47
- async function gatherInputs(prefill) {
48
- if (prefill?.dashboards) {
49
- return {
50
- dashboards: prefill.dashboards,
51
- profile: '',
52
- metrics: '',
53
- dateRange: 'last 7 days',
54
- output: 'json',
55
- context: '',
56
- };
57
- }
58
- const { input, select } = await Promise.resolve().then(() => __importStar(require('@inquirer/prompts')));
59
- const dashboards = await input({
60
- message: 'Which dashboards to pull from? (URLs, comma-separated -- e.g., "analytics.google.com, app.mixpanel.com")',
61
- validate: (0, shared_1.validateRequired)('At least one dashboard URL'),
62
- });
63
- const profile = await input({
64
- message: 'Browser profile for auth? (required for most dashboards)',
65
- default: '',
66
- });
67
- const metrics = await input({
68
- message: 'What metrics or data to extract? (leave blank for "everything visible")',
69
- default: '',
70
- });
71
- const dateRange = await select({
72
- message: 'Date range?',
73
- choices: [
74
- { name: 'Last 7 days', value: 'last 7 days' },
75
- { name: 'Last 30 days', value: 'last 30 days' },
76
- { name: 'Last 90 days', value: 'last 90 days' },
77
- { name: 'Month to date', value: 'month to date' },
78
- { name: 'Year to date', value: 'year to date' },
79
- { name: 'Custom (specify in context)', value: 'custom' },
80
- ],
81
- });
82
- const output = await select({
83
- message: 'Output format?',
84
- choices: [
85
- { name: 'JSON (structured metrics)', value: 'json' },
86
- { name: 'Markdown report', value: 'markdown' },
87
- { name: 'Print to terminal', value: 'terminal' },
88
- ],
89
- });
90
- const context = await input({
91
- message: 'Any other instructions? (e.g., "compare to previous period", "focus on conversion funnel")',
92
- default: '',
93
- });
94
- return { dashboards, profile, metrics, dateRange, output, context };
95
- }
96
- // ─── System prompt ──────────────────────────────────────────────────────────
97
- function buildSystemPrompt(opts) {
98
- const profileBlock = opts.profile
99
- ? `\n### Authentication\n\nUse the saved browser profile \`${opts.profile}\` to access dashboards:\n\`\`\`bash\nfirecrawl browser "open <url>" --profile ${opts.profile}\n\`\`\`\nAfter the first \`open\` with \`--profile\`, subsequent browser commands don't need the flag.\n\nIf you encounter a login page, use the profile's saved cookies/session. If those have expired, tell the user and ask them to re-authenticate the profile.`
100
- : `\n### Authentication\n\nNo browser profile was specified. If dashboards require login, tell the user they need to provide a browser profile with saved auth. You can still attempt to access public dashboards or demo instances.`;
101
- const outputInstructions = {
102
- terminal: 'Print the full dashboard report to the terminal in well-formatted markdown with data tables.',
103
- json: `Save the report to \`dashboard-report.json\` in the current directory. Tell the user the file path when done.
104
-
105
- Use this schema:
106
- \`\`\`json
107
- {
108
- "reportedAt": "ISO-8601",
109
- "dateRange": "string",
110
- "dashboards": [
111
- {
112
- "name": "string (platform name)",
113
- "url": "string",
114
- "metrics": [
115
- {
116
- "name": "string",
117
- "value": "string | number",
118
- "unit": "string (e.g. %, users, $)",
119
- "change": "string (e.g. +12% vs previous period)",
120
- "period": "string"
121
- }
122
- ],
123
- "tables": [
124
- {
125
- "title": "string",
126
- "headers": ["string"],
127
- "rows": [["string"]]
128
- }
129
- ],
130
- "exports": [{ "filename": "string", "description": "string" }],
131
- "notes": "string"
132
- }
133
- ],
134
- "summary": {
135
- "highlights": ["string"],
136
- "alerts": ["string"],
137
- "trends": ["string"]
138
- }
139
- }
140
- \`\`\``,
141
- markdown: 'Save the report to `dashboard-report.md` in the current directory. Tell the user the file path when done.',
142
- };
143
- return `You are a dashboard reporting agent powered by Firecrawl. You use a real cloud browser to log into analytics platforms and internal tools, navigate dashboards, extract metrics, and compile cross-platform reports.
144
-
145
- ## STEP 1: Launch Browser and Open Live View
146
-
147
- Before anything else, launch a browser session so the user can watch:
148
-
149
- \`\`\`bash
150
- firecrawl browser launch-session --json
151
- \`\`\`
152
-
153
- Extract the \`interactiveLiveViewUrl\` from the JSON output and open it (NOT the regular \`liveViewUrl\` -- the interactive one lets the user click and interact):
154
-
155
- \`\`\`bash
156
- open "<interactiveLiveViewUrl>" # macOS
157
- xdg-open "<interactiveLiveViewUrl>" # Linux
158
- \`\`\`
159
-
160
- If the \`open\` command fails, print the URL clearly.
161
- ${profileBlock}
162
-
163
- ## STEP 2: Visit Each Dashboard
164
-
165
- For each dashboard URL the user provides:
166
-
167
- 1. **Navigate** to the dashboard
168
- 2. **Snapshot** to see the current state
169
- 3. **Set the date range** to "${opts.dateRange}" -- look for date pickers, dropdowns, or preset buttons and click them
170
- 4. **Extract visible metrics** -- KPIs, summary cards, headline numbers
171
- 5. **Explore data tables** -- click through tabs, expand sections, scroll tables
172
- 6. **Look for exports** -- if there's a "Download CSV", "Export", or "Report" button, click it
173
- 7. **Screenshot key views** by scraping the page content
174
-
175
- ### Browser commands:
176
- \`\`\`bash
177
- firecrawl browser "open <url>"
178
- firecrawl browser "snapshot"
179
- firecrawl browser "click @<ref>"
180
- firecrawl browser "type @<ref> <text>"
181
- firecrawl browser "scroll down"
182
- firecrawl browser "scrape"
183
- \`\`\`
184
-
185
- ### Common dashboard patterns:
186
- - **Google Analytics**: Navigate to Reports > Engagement, Acquisition, etc.
187
- - **Mixpanel / Amplitude**: Click through funnels, retention, user flows
188
- - **Stripe / Billing dashboards**: Revenue, MRR, churn, customer counts
189
- - **Internal tools**: Look for nav menus, sidebar items, tab strips
190
- - **Grafana / Datadog**: Expand panels, hover charts for values, adjust time range
191
-
192
- ### Handling charts and visualizations:
193
- - Charts can't be "read" visually -- instead, look for:
194
- - Data tables below/beside charts
195
- - Hover tooltips (snapshot after hovering)
196
- - "View as table" or "Show data" toggles
197
- - Export/download buttons for raw data
198
- - If a metric is only in a chart, describe what you can see from the page content
199
-
200
- ## STEP 3: Compile Report
201
-
202
- After visiting all dashboards, compile findings into a unified report:
203
-
204
- ### Dashboard-by-Dashboard Breakdown
205
- For each platform:
206
- - Platform name and URL
207
- - All metrics extracted with values and units
208
- - Any data tables captured
209
- - Files exported (if any)
210
-
211
- ### Cross-Platform Summary
212
- - Key highlights across all dashboards
213
- - Alerts (metrics that changed significantly)
214
- - Trends (patterns across platforms)
215
-
216
- ## Output Format
217
-
218
- ${outputInstructions[opts.output]}
219
-
220
- ---
221
-
222
- Do everything sequentially -- visit one dashboard at a time. Be thorough: click through tabs, expand sections, scroll to load lazy content. Extract actual numbers, not just labels.
223
-
224
- Start immediately.`;
225
- }
226
- // ─── Command registration ───────────────────────────────────────────────────
227
- function register(parentCmd, backend) {
228
- const config = backends_1.BACKENDS[backend];
229
- parentCmd
230
- .command('dashboard-reporting')
231
- .description('Pull metrics from analytics dashboards and internal tools via browser')
232
- .argument('[dashboards...]', 'Dashboard URLs to pull from')
233
- .option('-y, --yes', 'Auto-approve all tool permissions')
234
- .action(async (dashboardParts, options) => {
235
- const prefillDashboards = dashboardParts.length > 0 ? dashboardParts.join(' ') : undefined;
236
- const inputs = await gatherInputs(prefillDashboards ? { dashboards: prefillDashboards } : undefined);
237
- const parts = [`Pull reports from: ${inputs.dashboards}`];
238
- if (inputs.metrics)
239
- parts.push(`Focus on these metrics: ${inputs.metrics}`);
240
- if (inputs.dateRange !== 'custom')
241
- parts.push(`Date range: ${inputs.dateRange}`);
242
- if (inputs.context)
243
- parts.push(inputs.context);
244
- const userMessage = parts.join('. ') + '.';
245
- const skipPermissions = true;
246
- console.log(`\nLaunching ${config.displayName}...\n`);
247
- (0, backends_1.launchAgent)(backend, buildSystemPrompt({
248
- profile: inputs.profile,
249
- dateRange: inputs.dateRange,
250
- output: inputs.output,
251
- }), userMessage, skipPermissions);
252
- });
253
- }
254
- //# sourceMappingURL=dashboard-reporting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-reporting.js","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/dashboard-reporting.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Workflow: Deep Research
3
- *
4
- * Breaks a topic into research angles, then spawns parallel agents -- one per
5
- * angle (overview, technical, market, contrarian). Results are cross-referenced
6
- * and synthesized into a structured report.
7
- */
8
- import { Command } from 'commander';
9
- import { type Backend } from '../backends';
10
- export declare function register(parentCmd: Command, backend: Backend): void;
11
- //# sourceMappingURL=deep-research.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deep-research.d.ts","sourceRoot":"","sources":["../../../../src/commands/experimental/workflows/deep-research.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,aAAa,CAAC;AAuIlE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBnE"}