@framers/agentos-ext-deep-research 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +98 -0
  2. package/dist/ResearchService.d.ts +106 -0
  3. package/dist/ResearchService.d.ts.map +1 -0
  4. package/dist/ResearchService.js +450 -0
  5. package/dist/ResearchService.js.map +1 -0
  6. package/dist/engine/DeepResearchEngine.d.ts +40 -0
  7. package/dist/engine/DeepResearchEngine.d.ts.map +1 -0
  8. package/dist/engine/DeepResearchEngine.js +557 -0
  9. package/dist/engine/DeepResearchEngine.js.map +1 -0
  10. package/dist/engine/DeepResearchTool.d.ts +27 -0
  11. package/dist/engine/DeepResearchTool.d.ts.map +1 -0
  12. package/dist/engine/DeepResearchTool.js +118 -0
  13. package/dist/engine/DeepResearchTool.js.map +1 -0
  14. package/dist/engine/FirecrawlClient.d.ts +49 -0
  15. package/dist/engine/FirecrawlClient.d.ts.map +1 -0
  16. package/dist/engine/FirecrawlClient.js +101 -0
  17. package/dist/engine/FirecrawlClient.js.map +1 -0
  18. package/dist/engine/ResearchBudgetTracker.d.ts +36 -0
  19. package/dist/engine/ResearchBudgetTracker.d.ts.map +1 -0
  20. package/dist/engine/ResearchBudgetTracker.js +68 -0
  21. package/dist/engine/ResearchBudgetTracker.js.map +1 -0
  22. package/dist/engine/index.d.ts +9 -0
  23. package/dist/engine/index.d.ts.map +1 -0
  24. package/dist/engine/index.js +34 -0
  25. package/dist/engine/index.js.map +1 -0
  26. package/dist/engine/prompts.d.ts +14 -0
  27. package/dist/engine/prompts.d.ts.map +1 -0
  28. package/dist/engine/prompts.js +67 -0
  29. package/dist/engine/prompts.js.map +1 -0
  30. package/dist/engine/types.d.ts +133 -0
  31. package/dist/engine/types.d.ts.map +1 -0
  32. package/dist/engine/types.js +18 -0
  33. package/dist/engine/types.js.map +1 -0
  34. package/dist/index.d.ts +53 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +161 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/tools/academic.d.ts +41 -0
  39. package/dist/tools/academic.d.ts.map +1 -0
  40. package/dist/tools/academic.js +42 -0
  41. package/dist/tools/academic.js.map +1 -0
  42. package/dist/tools/aggregate.d.ts +44 -0
  43. package/dist/tools/aggregate.d.ts.map +1 -0
  44. package/dist/tools/aggregate.js +39 -0
  45. package/dist/tools/aggregate.js.map +1 -0
  46. package/dist/tools/investigate.d.ts +44 -0
  47. package/dist/tools/investigate.d.ts.map +1 -0
  48. package/dist/tools/investigate.js +39 -0
  49. package/dist/tools/investigate.js.map +1 -0
  50. package/dist/tools/scrape.d.ts +36 -0
  51. package/dist/tools/scrape.d.ts.map +1 -0
  52. package/dist/tools/scrape.js +38 -0
  53. package/dist/tools/scrape.js.map +1 -0
  54. package/dist/tools/trending.d.ts +35 -0
  55. package/dist/tools/trending.d.ts.map +1 -0
  56. package/dist/tools/trending.js +37 -0
  57. package/dist/tools/trending.js.map +1 -0
  58. package/manifest.json +25 -0
  59. package/package.json +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResearchService.js","sourceRoot":"","sources":["../src/ResearchService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Core orchestrator for the Deep Research Engine.
3
+ *
4
+ * Three-phase algorithm:
5
+ * 1. **Decompose** — break query into sub-questions (cheap LLM)
6
+ * 2. **Iterate** — search → extract → gap-analysis loop
7
+ * 3. **Synthesize** — produce a structured report (mid-tier LLM)
8
+ *
9
+ * Budget tracking enforces cost/time limits at every step.
10
+ */
11
+ import type { DeepResearchEngineConfig, DeepResearchInput, DeepResearchOutput, ResearchProgressEvent } from './types.js';
12
+ export declare class DeepResearchEngine {
13
+ private readonly config;
14
+ /** Per-call progress override set by {@link research}. */
15
+ private activeProgressOverride;
16
+ /** Optional Firecrawl client for enhanced content extraction. */
17
+ private readonly firecrawlClient?;
18
+ constructor(config: DeepResearchEngineConfig);
19
+ /**
20
+ * Run the research pipeline.
21
+ * @param input Research query and options.
22
+ * @param onProgressOverride Optional per-call progress callback that takes
23
+ * priority over the one provided at construction time. This allows callers
24
+ * (like DeepResearchTool) to forward runtime progress to the tool-calling
25
+ * layer without rebuilding the engine.
26
+ */
27
+ research(input: DeepResearchInput, onProgressOverride?: (event: ResearchProgressEvent) => void): Promise<DeepResearchOutput>;
28
+ private createNode;
29
+ private getPendingLeaves;
30
+ private searchNode;
31
+ private extractUrl;
32
+ private buildFindings;
33
+ private collectAllFindings;
34
+ private collectAllContent;
35
+ private fallbackSynthesis;
36
+ private parseReport;
37
+ private buildSourceCitations;
38
+ private emitProgress;
39
+ }
40
+ //# sourceMappingURL=DeepResearchEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeepResearchEngine.d.ts","sourceRoot":"","sources":["../../src/engine/DeepResearchEngine.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAQlB,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAmDpB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,0DAA0D;IAC1D,OAAO,CAAC,sBAAsB,CAAyD;IACvF,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAiD;gBAEtE,MAAM,EAAE,wBAAwB;IAc5C;;;;;;;OAOG;IACG,QAAQ,CACZ,KAAK,EAAE,iBAAiB,EACxB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAC1D,OAAO,CAAC,kBAAkB,CAAC;IAoR9B,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,gBAAgB;YAQV,UAAU;YAgDV,UAAU;IAmCxB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,YAAY;CA8BrB"}
@@ -0,0 +1,557 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ /**
4
+ * @fileoverview Core orchestrator for the Deep Research Engine.
5
+ *
6
+ * Three-phase algorithm:
7
+ * 1. **Decompose** — break query into sub-questions (cheap LLM)
8
+ * 2. **Iterate** — search → extract → gap-analysis loop
9
+ * 3. **Synthesize** — produce a structured report (mid-tier LLM)
10
+ *
11
+ * Budget tracking enforces cost/time limits at every step.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.DeepResearchEngine = void 0;
15
+ const node_crypto_1 = require("node:crypto");
16
+ const types_js_1 = require("./types.js");
17
+ const prompts_js_1 = require("./prompts.js");
18
+ const ResearchBudgetTracker_js_1 = require("./ResearchBudgetTracker.js");
19
+ // ── Helpers ──
20
+ /** Limit concurrency for an array of async tasks. */
21
+ async function parallelLimit(tasks, limit) {
22
+ const results = [];
23
+ let idx = 0;
24
+ async function next() {
25
+ while (idx < tasks.length) {
26
+ const i = idx++;
27
+ results[i] = await tasks[i]();
28
+ }
29
+ }
30
+ const workers = Array.from({ length: Math.min(limit, tasks.length) }, () => next());
31
+ await Promise.allSettled(workers);
32
+ return results;
33
+ }
34
+ function normalizeUrl(url) {
35
+ try {
36
+ const u = new URL(url);
37
+ u.hash = '';
38
+ u.searchParams.delete('utm_source');
39
+ u.searchParams.delete('utm_medium');
40
+ u.searchParams.delete('utm_campaign');
41
+ return u.toString();
42
+ }
43
+ catch {
44
+ return url;
45
+ }
46
+ }
47
+ function detectUrlType(url) {
48
+ if (/youtube\.com|youtu\.be/i.test(url))
49
+ return 'youtube';
50
+ if (/wikipedia\.org/i.test(url))
51
+ return 'wikipedia';
52
+ if (/arxiv\.org|scholar\.google|semanticscholar\.org/i.test(url))
53
+ return 'academic';
54
+ if (/\.pdf(\?|$)/i.test(url))
55
+ return 'pdf';
56
+ return 'web';
57
+ }
58
+ function truncate(text, maxChars) {
59
+ return text.length <= maxChars ? text : text.slice(0, maxChars) + '...';
60
+ }
61
+ // ── Engine ──
62
+ class DeepResearchEngine {
63
+ constructor(config) {
64
+ /** Per-call progress override set by {@link research}. */
65
+ this.activeProgressOverride = null;
66
+ this.config = config;
67
+ if (config.firecrawlApiKey) {
68
+ // Lazy import to avoid hard dependency
69
+ try {
70
+ const { FirecrawlClient } = require('./FirecrawlClient.js');
71
+ this.firecrawlClient = new FirecrawlClient({
72
+ apiKey: config.firecrawlApiKey,
73
+ maxCrawlPages: config.firecrawl?.maxCrawlPages ?? 10,
74
+ });
75
+ }
76
+ catch { /* FirecrawlClient not available */ }
77
+ }
78
+ }
79
+ /**
80
+ * Run the research pipeline.
81
+ * @param input Research query and options.
82
+ * @param onProgressOverride Optional per-call progress callback that takes
83
+ * priority over the one provided at construction time. This allows callers
84
+ * (like DeepResearchTool) to forward runtime progress to the tool-calling
85
+ * layer without rebuilding the engine.
86
+ */
87
+ async research(input, onProgressOverride) {
88
+ this.activeProgressOverride = onProgressOverride ?? null;
89
+ try {
90
+ const depth = input.depth ?? 'moderate';
91
+ const maxIterations = input.maxIterations ?? types_js_1.ITERATION_DEFAULTS[depth];
92
+ const budgetConfig = { ...types_js_1.BUDGET_DEFAULTS[depth], ...input.budget };
93
+ const budget = new ResearchBudgetTracker_js_1.ResearchBudgetTracker(budgetConfig);
94
+ const seenUrls = new Set();
95
+ // ── Build tree ──
96
+ const rootId = (0, node_crypto_1.randomUUID)();
97
+ const tree = {
98
+ rootQuery: input.query,
99
+ rootId,
100
+ nodes: {
101
+ [rootId]: this.createNode(rootId, input.query, null, 0),
102
+ },
103
+ maxDepth: depth === 'quick' ? 1 : depth === 'moderate' ? 2 : 3,
104
+ iterations: 0,
105
+ };
106
+ // ── Phase 1: Decompose ──
107
+ this.emitProgress('decomposing', 0, maxIterations, budget, tree, input.query);
108
+ let subQueries;
109
+ if (budget.canCallLLM()) {
110
+ const focusSection = input.focusAreas?.length
111
+ ? `\nFocus especially on: ${input.focusAreas.join(', ')}`
112
+ : '';
113
+ const prompt = prompts_js_1.DECOMPOSITION_PROMPT
114
+ .replace('{query}', input.query)
115
+ .replace('{focusAreas}', focusSection);
116
+ try {
117
+ const raw = await this.config.smallInvoker(prompt);
118
+ budget.recordLLMCall();
119
+ subQueries = (0, prompts_js_1.parseJsonArray)(raw);
120
+ }
121
+ catch {
122
+ subQueries = [input.query];
123
+ }
124
+ }
125
+ else {
126
+ subQueries = [input.query];
127
+ }
128
+ // Add sub-queries as children of root
129
+ const rootNode = tree.nodes[rootId];
130
+ rootNode.subQueries = subQueries;
131
+ for (const sq of subQueries) {
132
+ const childId = (0, node_crypto_1.randomUUID)();
133
+ tree.nodes[childId] = this.createNode(childId, sq, rootId, 1);
134
+ rootNode.children.push(childId);
135
+ }
136
+ // ── Phase 2: Iterative Search/Extract/Gap loop ──
137
+ for (let iteration = 0; iteration < maxIterations; iteration++) {
138
+ if (budget.isExhausted())
139
+ break;
140
+ tree.iterations = iteration + 1;
141
+ // 2a — Search pending leaf nodes
142
+ const pendingNodes = this.getPendingLeaves(tree);
143
+ if (pendingNodes.length === 0)
144
+ break;
145
+ this.emitProgress('searching', iteration, maxIterations, budget, tree);
146
+ const searchTasks = pendingNodes
147
+ .filter(() => budget.canSearch())
148
+ .map((node) => async () => {
149
+ node.status = 'searching';
150
+ try {
151
+ const results = await this.searchNode(node, input.sources);
152
+ budget.recordSearch();
153
+ node.searchResults = results;
154
+ }
155
+ catch {
156
+ node.status = 'failed';
157
+ }
158
+ });
159
+ await parallelLimit(searchTasks, 5);
160
+ // 2b — Extract content from top URLs
161
+ this.emitProgress('extracting', iteration, maxIterations, budget, tree);
162
+ const extractableNodes = pendingNodes.filter((n) => n.searchResults.length > 0 && n.status !== 'failed');
163
+ for (const node of extractableNodes) {
164
+ if (!budget.canExtract())
165
+ break;
166
+ node.status = 'extracting';
167
+ // Take top 3 URLs per node that we haven't seen
168
+ const urls = node.searchResults
169
+ .map((r) => r.url)
170
+ .filter((url) => {
171
+ const norm = normalizeUrl(url);
172
+ if (seenUrls.has(norm))
173
+ return false;
174
+ seenUrls.add(norm);
175
+ return true;
176
+ })
177
+ .slice(0, 3);
178
+ for (const url of urls) {
179
+ if (!budget.canExtract())
180
+ break;
181
+ try {
182
+ const extracted = await this.extractUrl(url);
183
+ budget.recordExtraction();
184
+ node.extractedContent.push({
185
+ url,
186
+ title: extracted.title,
187
+ content: truncate(extracted.content, 2000),
188
+ wordCount: extracted.wordCount,
189
+ type: detectUrlType(url),
190
+ extractedAt: new Date().toISOString(),
191
+ });
192
+ }
193
+ catch {
194
+ // Skip failed extractions
195
+ }
196
+ }
197
+ // Build findings from extracted content
198
+ node.findings = this.buildFindings(node);
199
+ node.status = 'complete';
200
+ node.confidenceScore = node.findings.length > 0 ? Math.min(node.findings.length / 3, 1) : 0;
201
+ }
202
+ // 2c — Gap analysis (skip on last iteration)
203
+ if (iteration < maxIterations - 1 && budget.canCallLLM()) {
204
+ this.emitProgress('analyzing_gaps', iteration, maxIterations, budget, tree);
205
+ const allFindings = this.collectAllFindings(tree);
206
+ if (allFindings.length > 0) {
207
+ const findingsSummary = allFindings
208
+ .map((f) => `- ${f.claim} (sources: ${f.sources.join(', ')})`)
209
+ .join('\n');
210
+ const gapPrompt = prompts_js_1.GAP_ANALYSIS_PROMPT
211
+ .replace('{query}', input.query)
212
+ .replace('{findings}', truncate(findingsSummary, 3000));
213
+ try {
214
+ const raw = await this.config.smallInvoker(gapPrompt);
215
+ budget.recordLLMCall();
216
+ const gapQueries = (0, prompts_js_1.parseJsonArray)(raw);
217
+ // Add new leaf nodes for gaps
218
+ for (const gq of gapQueries.slice(0, 3)) {
219
+ if (!budget.canSearch())
220
+ break;
221
+ const gapId = (0, node_crypto_1.randomUUID)();
222
+ const parentId = rootId;
223
+ tree.nodes[gapId] = this.createNode(gapId, gq, parentId, 2);
224
+ tree.nodes[parentId].children.push(gapId);
225
+ }
226
+ }
227
+ catch {
228
+ // Skip gap analysis if LLM fails
229
+ }
230
+ }
231
+ }
232
+ }
233
+ // ── Phase 2b: Firecrawl deep crawl (deep depth only) ──
234
+ if (input.depth === 'deep' &&
235
+ this.firecrawlClient &&
236
+ this.config.firecrawl?.enableCrawl) {
237
+ this.emitProgress('extracting', tree.iterations, maxIterations, budget, tree);
238
+ const domainCounts = new Map();
239
+ for (const node of Object.values(tree.nodes)) {
240
+ for (const result of node.searchResults) {
241
+ try {
242
+ const domain = new URL(result.url).hostname;
243
+ domainCounts.set(domain, (domainCounts.get(domain) ?? 0) + 1);
244
+ }
245
+ catch { /* skip invalid URLs */ }
246
+ }
247
+ }
248
+ const topDomains = [...domainCounts.entries()]
249
+ .sort((a, b) => b[1] - a[1])
250
+ .slice(0, 3)
251
+ .map(([domain]) => domain);
252
+ for (const domain of topDomains) {
253
+ if (budget.isExhausted())
254
+ break;
255
+ try {
256
+ const crawlResult = await this.firecrawlClient.crawl(`https://${domain}`);
257
+ const rootNode = tree.nodes[tree.rootId];
258
+ for (const page of crawlResult.pages) {
259
+ if (budget.isExhausted())
260
+ break;
261
+ rootNode.extractedContent.push({
262
+ url: page.url,
263
+ title: page.title,
264
+ content: page.content.slice(0, 5000),
265
+ wordCount: page.wordCount,
266
+ type: 'web',
267
+ extractedAt: new Date().toISOString(),
268
+ });
269
+ budget.recordExtraction();
270
+ }
271
+ }
272
+ catch { /* crawl failed for this domain — continue */ }
273
+ }
274
+ }
275
+ // ── Phase 2c: Rerank findings before synthesis ──
276
+ if (this.config.rerankFindingsFn) {
277
+ const preRankFindings = this.collectAllFindings(tree);
278
+ if (preRankFindings.length > 0) {
279
+ try {
280
+ const reranked = await this.config.rerankFindingsFn(input.query, preRankFindings);
281
+ tree.nodes[tree.rootId].findings = reranked;
282
+ }
283
+ catch { /* reranking failed — proceed with unranked */ }
284
+ }
285
+ }
286
+ // ── Phase 3: Synthesize ──
287
+ this.emitProgress('synthesizing', maxIterations, maxIterations, budget, tree);
288
+ const allFindings = this.collectAllFindings(tree);
289
+ const allContent = this.collectAllContent(tree);
290
+ // Build evidence string for synthesis
291
+ const evidenceLines = allContent
292
+ .map((c) => `[Source: ${c.url}] ${c.title}\n${truncate(c.content, 1500)}`)
293
+ .join('\n\n');
294
+ const maxEvidenceChars = budgetConfig.maxOutputTokens * 2;
295
+ const evidenceTruncated = truncate(evidenceLines, maxEvidenceChars);
296
+ let report = '';
297
+ if (budget.canCallLLM() && allContent.length > 0) {
298
+ const synthPrompt = prompts_js_1.SYNTHESIS_PROMPT
299
+ .replace('{query}', input.query)
300
+ .replace('{evidence}', evidenceTruncated);
301
+ try {
302
+ report = await this.config.synthesisInvoker(synthPrompt);
303
+ budget.recordLLMCall();
304
+ }
305
+ catch {
306
+ report = this.fallbackSynthesis(input.query, allFindings);
307
+ }
308
+ }
309
+ else {
310
+ report = this.fallbackSynthesis(input.query, allFindings);
311
+ }
312
+ // Parse report sections
313
+ const { executiveSummary, knowledgeGaps } = this.parseReport(report);
314
+ // Build source citations
315
+ const sources = this.buildSourceCitations(tree, allFindings);
316
+ this.emitProgress('complete', maxIterations, maxIterations, budget, tree);
317
+ const used = budget.getUsed();
318
+ return {
319
+ executiveSummary,
320
+ detailedFindings: allFindings,
321
+ sources,
322
+ knowledgeGaps,
323
+ researchTree: tree,
324
+ metadata: {
325
+ query: input.query,
326
+ depth,
327
+ totalSearches: used.searchesUsed,
328
+ totalExtractions: used.extractionsUsed,
329
+ totalLLMCalls: used.llmCallsUsed,
330
+ totalTimeMs: budget.getElapsedMs(),
331
+ iterations: tree.iterations,
332
+ },
333
+ };
334
+ }
335
+ finally {
336
+ this.activeProgressOverride = null;
337
+ }
338
+ }
339
+ // ── Private: Node helpers ──
340
+ createNode(id, query, parentId, depth) {
341
+ return {
342
+ id,
343
+ query,
344
+ parentId,
345
+ depth,
346
+ status: 'pending',
347
+ searchResults: [],
348
+ extractedContent: [],
349
+ findings: [],
350
+ subQueries: [],
351
+ children: [],
352
+ confidenceScore: 0,
353
+ gapAnalysis: [],
354
+ };
355
+ }
356
+ getPendingLeaves(tree) {
357
+ return Object.values(tree.nodes).filter((n) => n.status === 'pending' && n.children.length === 0);
358
+ }
359
+ // ── Private: Search ──
360
+ async searchNode(node, sources) {
361
+ const searchFn = this.config.searchFn;
362
+ if (searchFn) {
363
+ return searchFn(node.query, 10);
364
+ }
365
+ // Fallback: use DuckDuckGo HTML scraping
366
+ const results = [];
367
+ try {
368
+ const resp = await fetch('https://html.duckduckgo.com/html/', {
369
+ method: 'POST',
370
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'AgentOS-DeepResearch/1.0' },
371
+ body: `q=${encodeURIComponent(node.query)}`,
372
+ });
373
+ const html = await resp.text();
374
+ const linkRegex = /<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi;
375
+ const snippetRegex = /<a[^>]*class="result__snippet"[^>]*>([\s\S]*?)<\/a>/gi;
376
+ const links = [];
377
+ let match;
378
+ while ((match = linkRegex.exec(html)) !== null) {
379
+ let url = match[1];
380
+ const uddgMatch = url.match(/[?&]uddg=([^&]+)/);
381
+ if (uddgMatch)
382
+ url = decodeURIComponent(uddgMatch[1]);
383
+ const title = match[2].replace(/<[^>]+>/g, '').trim();
384
+ links.push({ url, title });
385
+ }
386
+ const snippets = [];
387
+ while ((match = snippetRegex.exec(html)) !== null) {
388
+ snippets.push(match[1].replace(/<[^>]+>/g, '').trim());
389
+ }
390
+ for (let i = 0; i < links.length && i < 10; i++) {
391
+ results.push({
392
+ title: links[i].title,
393
+ url: links[i].url,
394
+ snippet: snippets[i] ?? '',
395
+ });
396
+ }
397
+ }
398
+ catch {
399
+ // Return empty results on failure
400
+ }
401
+ return results;
402
+ }
403
+ // ── Private: Extraction ──
404
+ async extractUrl(url) {
405
+ // Priority 1: Firecrawl scrape (JS-rendered, anti-bot, clean markdown)
406
+ if (this.firecrawlClient && this.config.firecrawl?.scrapeForIterate !== false) {
407
+ try {
408
+ const scraped = await this.firecrawlClient.scrape(url);
409
+ return { title: scraped.title, content: scraped.content, wordCount: scraped.wordCount };
410
+ }
411
+ catch { /* fall through to other methods */ }
412
+ }
413
+ // Priority 2: Custom extraction function
414
+ if (this.config.extractFn) {
415
+ return this.config.extractFn(url);
416
+ }
417
+ // Priority 3: Basic fetch + HTML strip
418
+ const resp = await fetch(url, {
419
+ headers: { 'User-Agent': 'AgentOS-DeepResearch/1.0', 'Accept': 'text/html' },
420
+ signal: AbortSignal.timeout(15000),
421
+ });
422
+ const html = await resp.text();
423
+ const title = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i)?.[1]?.trim() ?? '';
424
+ const bodyMatch = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
425
+ const bodyHtml = bodyMatch?.[1] ?? html;
426
+ const content = bodyHtml
427
+ .replace(/<script[\s\S]*?<\/script>/gi, '')
428
+ .replace(/<style[\s\S]*?<\/style>/gi, '')
429
+ .replace(/<[^>]+>/g, ' ')
430
+ .replace(/\s+/g, ' ')
431
+ .trim();
432
+ const wordCount = content.split(/\s+/).length;
433
+ return { title, content, wordCount };
434
+ }
435
+ // ── Private: Findings ──
436
+ buildFindings(node) {
437
+ const findings = [];
438
+ // From search results
439
+ for (const sr of node.searchResults) {
440
+ if (sr.snippet && sr.snippet.length > 20) {
441
+ findings.push({
442
+ claim: sr.snippet,
443
+ evidence: sr.snippet,
444
+ sources: [sr.url],
445
+ confidence: 0.5,
446
+ category: 'search',
447
+ });
448
+ }
449
+ }
450
+ // From extracted content — higher confidence
451
+ for (const ec of node.extractedContent) {
452
+ if (ec.content.length > 50) {
453
+ findings.push({
454
+ claim: ec.title || ec.content.slice(0, 100),
455
+ evidence: ec.content.slice(0, 500),
456
+ sources: [ec.url],
457
+ confidence: 0.8,
458
+ category: 'extracted',
459
+ });
460
+ }
461
+ }
462
+ return findings;
463
+ }
464
+ collectAllFindings(tree) {
465
+ const all = [];
466
+ for (const node of Object.values(tree.nodes)) {
467
+ all.push(...node.findings);
468
+ }
469
+ return all;
470
+ }
471
+ collectAllContent(tree) {
472
+ const all = [];
473
+ for (const node of Object.values(tree.nodes)) {
474
+ all.push(...node.extractedContent);
475
+ }
476
+ return all;
477
+ }
478
+ // ── Private: Synthesis helpers ──
479
+ fallbackSynthesis(query, findings) {
480
+ if (findings.length === 0) {
481
+ return `## Executive Summary\nNo substantial findings could be gathered for: "${query}"\n\n## Knowledge Gaps\n- Unable to find relevant sources`;
482
+ }
483
+ const body = findings
484
+ .slice(0, 10)
485
+ .map((f) => `- ${f.claim} [Source: ${f.sources[0]}]`)
486
+ .join('\n');
487
+ return `## Executive Summary\nResearch on "${query}" yielded ${findings.length} findings across multiple sources.\n\n## Detailed Findings\n${body}\n\n## Knowledge Gaps\n- Synthesis limited — no LLM budget remaining`;
488
+ }
489
+ parseReport(report) {
490
+ // Extract executive summary
491
+ const summaryMatch = report.match(/(?:\*\*)?Executive Summary(?:\*\*)?[:\s]*([\s\S]*?)(?=\n##|\n\*\*Detailed|\n\*\*Knowledge|$)/i);
492
+ const executiveSummary = summaryMatch?.[1]?.trim() || report.slice(0, 500);
493
+ // Extract knowledge gaps
494
+ const gapsMatch = report.match(/(?:\*\*)?Knowledge Gaps(?:\*\*)?[:\s]*([\s\S]*?)$/i);
495
+ const gapsText = gapsMatch?.[1]?.trim() || '';
496
+ const knowledgeGaps = gapsText
497
+ .split('\n')
498
+ .map((line) => line.replace(/^[\s\-*]+/, '').trim())
499
+ .filter((line) => line.length > 5);
500
+ return { executiveSummary, knowledgeGaps };
501
+ }
502
+ buildSourceCitations(tree, findings) {
503
+ const urlMap = new Map();
504
+ // From extracted content
505
+ for (const node of Object.values(tree.nodes)) {
506
+ for (const ec of node.extractedContent) {
507
+ const norm = normalizeUrl(ec.url);
508
+ if (!urlMap.has(norm)) {
509
+ urlMap.set(norm, {
510
+ url: ec.url,
511
+ title: ec.title,
512
+ relevance: 0.8,
513
+ confidence: 0.8,
514
+ citedInFindings: [],
515
+ });
516
+ }
517
+ }
518
+ }
519
+ // Link findings to sources
520
+ for (const f of findings) {
521
+ for (const src of f.sources) {
522
+ const norm = normalizeUrl(src);
523
+ const citation = urlMap.get(norm);
524
+ if (citation) {
525
+ citation.citedInFindings.push(f.claim.slice(0, 80));
526
+ citation.confidence = Math.min(1, citation.confidence + 0.1);
527
+ }
528
+ }
529
+ }
530
+ return Array.from(urlMap.values()).sort((a, b) => b.confidence - a.confidence);
531
+ }
532
+ // ── Private: Progress ──
533
+ emitProgress(phase, iteration, totalIterations, budget, tree, currentQuery) {
534
+ const cb = this.activeProgressOverride ?? this.config.onProgress;
535
+ if (!cb)
536
+ return;
537
+ const findings = this.collectAllFindings(tree);
538
+ const sources = new Set();
539
+ for (const node of Object.values(tree.nodes)) {
540
+ for (const ec of node.extractedContent)
541
+ sources.add(ec.url);
542
+ }
543
+ const event = {
544
+ phase,
545
+ iteration,
546
+ totalIterations,
547
+ currentQuery,
548
+ findingsCount: findings.length,
549
+ sourcesCount: sources.size,
550
+ elapsedMs: budget.getElapsedMs(),
551
+ budget: budget.getUsed(),
552
+ };
553
+ cb(event);
554
+ }
555
+ }
556
+ exports.DeepResearchEngine = DeepResearchEngine;
557
+ //# sourceMappingURL=DeepResearchEngine.js.map