mcp-researchpowerpack 3.6.9

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 (119) hide show
  1. package/README.md +635 -0
  2. package/dist/clients/reddit.d.ts +74 -0
  3. package/dist/clients/reddit.d.ts.map +1 -0
  4. package/dist/clients/reddit.js +305 -0
  5. package/dist/clients/reddit.js.map +1 -0
  6. package/dist/clients/research.d.ts +67 -0
  7. package/dist/clients/research.d.ts.map +1 -0
  8. package/dist/clients/research.js +252 -0
  9. package/dist/clients/research.js.map +1 -0
  10. package/dist/clients/scraper.d.ts +71 -0
  11. package/dist/clients/scraper.d.ts.map +1 -0
  12. package/dist/clients/scraper.js +321 -0
  13. package/dist/clients/scraper.js.map +1 -0
  14. package/dist/clients/search.d.ts +62 -0
  15. package/dist/clients/search.d.ts.map +1 -0
  16. package/dist/clients/search.js +219 -0
  17. package/dist/clients/search.js.map +1 -0
  18. package/dist/config/index.d.ts +62 -0
  19. package/dist/config/index.d.ts.map +1 -0
  20. package/dist/config/index.js +142 -0
  21. package/dist/config/index.js.map +1 -0
  22. package/dist/config/loader.d.ts +40 -0
  23. package/dist/config/loader.d.ts.map +1 -0
  24. package/dist/config/loader.js +305 -0
  25. package/dist/config/loader.js.map +1 -0
  26. package/dist/config/types.d.ts +81 -0
  27. package/dist/config/types.d.ts.map +1 -0
  28. package/dist/config/types.js +6 -0
  29. package/dist/config/types.js.map +1 -0
  30. package/dist/config/yaml/tools.yaml +130 -0
  31. package/dist/index.d.ts +7 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +271 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/schemas/deep-research.d.ts +64 -0
  36. package/dist/schemas/deep-research.d.ts.map +1 -0
  37. package/dist/schemas/deep-research.js +224 -0
  38. package/dist/schemas/deep-research.js.map +1 -0
  39. package/dist/schemas/scrape-links.d.ts +32 -0
  40. package/dist/schemas/scrape-links.d.ts.map +1 -0
  41. package/dist/schemas/scrape-links.js +34 -0
  42. package/dist/schemas/scrape-links.js.map +1 -0
  43. package/dist/schemas/web-search.d.ts +22 -0
  44. package/dist/schemas/web-search.d.ts.map +1 -0
  45. package/dist/schemas/web-search.js +21 -0
  46. package/dist/schemas/web-search.js.map +1 -0
  47. package/dist/services/file-attachment.d.ts +30 -0
  48. package/dist/services/file-attachment.d.ts.map +1 -0
  49. package/dist/services/file-attachment.js +199 -0
  50. package/dist/services/file-attachment.js.map +1 -0
  51. package/dist/services/llm-processor.d.ts +27 -0
  52. package/dist/services/llm-processor.d.ts.map +1 -0
  53. package/dist/services/llm-processor.js +179 -0
  54. package/dist/services/llm-processor.js.map +1 -0
  55. package/dist/services/markdown-cleaner.d.ts +8 -0
  56. package/dist/services/markdown-cleaner.d.ts.map +1 -0
  57. package/dist/services/markdown-cleaner.js +44 -0
  58. package/dist/services/markdown-cleaner.js.map +1 -0
  59. package/dist/tools/definitions.d.ts +16 -0
  60. package/dist/tools/definitions.d.ts.map +1 -0
  61. package/dist/tools/definitions.js +17 -0
  62. package/dist/tools/definitions.js.map +1 -0
  63. package/dist/tools/reddit.d.ts +14 -0
  64. package/dist/tools/reddit.d.ts.map +1 -0
  65. package/dist/tools/reddit.js +213 -0
  66. package/dist/tools/reddit.js.map +1 -0
  67. package/dist/tools/registry.d.ts +71 -0
  68. package/dist/tools/registry.d.ts.map +1 -0
  69. package/dist/tools/registry.js +242 -0
  70. package/dist/tools/registry.js.map +1 -0
  71. package/dist/tools/research.d.ts +14 -0
  72. package/dist/tools/research.d.ts.map +1 -0
  73. package/dist/tools/research.js +194 -0
  74. package/dist/tools/research.js.map +1 -0
  75. package/dist/tools/scrape.d.ts +14 -0
  76. package/dist/tools/scrape.d.ts.map +1 -0
  77. package/dist/tools/scrape.js +201 -0
  78. package/dist/tools/scrape.js.map +1 -0
  79. package/dist/tools/search.d.ts +10 -0
  80. package/dist/tools/search.d.ts.map +1 -0
  81. package/dist/tools/search.js +137 -0
  82. package/dist/tools/search.js.map +1 -0
  83. package/dist/tools/utils.d.ts +105 -0
  84. package/dist/tools/utils.d.ts.map +1 -0
  85. package/dist/tools/utils.js +159 -0
  86. package/dist/tools/utils.js.map +1 -0
  87. package/dist/utils/concurrency.d.ts +29 -0
  88. package/dist/utils/concurrency.d.ts.map +1 -0
  89. package/dist/utils/concurrency.js +73 -0
  90. package/dist/utils/concurrency.js.map +1 -0
  91. package/dist/utils/errors.d.ts +77 -0
  92. package/dist/utils/errors.d.ts.map +1 -0
  93. package/dist/utils/errors.js +335 -0
  94. package/dist/utils/errors.js.map +1 -0
  95. package/dist/utils/logger.d.ts +39 -0
  96. package/dist/utils/logger.d.ts.map +1 -0
  97. package/dist/utils/logger.js +57 -0
  98. package/dist/utils/logger.js.map +1 -0
  99. package/dist/utils/markdown-formatter.d.ts +5 -0
  100. package/dist/utils/markdown-formatter.d.ts.map +1 -0
  101. package/dist/utils/markdown-formatter.js +15 -0
  102. package/dist/utils/markdown-formatter.js.map +1 -0
  103. package/dist/utils/response.d.ts +88 -0
  104. package/dist/utils/response.d.ts.map +1 -0
  105. package/dist/utils/response.js +151 -0
  106. package/dist/utils/response.js.map +1 -0
  107. package/dist/utils/url-aggregator.d.ts +90 -0
  108. package/dist/utils/url-aggregator.d.ts.map +1 -0
  109. package/dist/utils/url-aggregator.js +502 -0
  110. package/dist/utils/url-aggregator.js.map +1 -0
  111. package/dist/version.d.ts +30 -0
  112. package/dist/version.d.ts.map +1 -0
  113. package/dist/version.js +60 -0
  114. package/dist/version.js.map +1 -0
  115. package/dist/worker.d.ts +17 -0
  116. package/dist/worker.d.ts.map +1 -0
  117. package/dist/worker.js +53 -0
  118. package/dist/worker.js.map +1 -0
  119. package/package.json +73 -0
@@ -0,0 +1,502 @@
1
+ /**
2
+ * URL Aggregator Utility
3
+ * Aggregates search results across multiple queries, calculates CTR-weighted scores,
4
+ * and generates consensus-based rankings.
5
+ */
6
+ import { CTR_WEIGHTS } from '../config/index.js';
7
+ /**
8
+ * Get CTR weight for a position (1-10)
9
+ * Positions beyond 10 get minimal weight
10
+ */
11
+ function getCtrWeight(position) {
12
+ if (position >= 1 && position <= 10) {
13
+ return CTR_WEIGHTS[position] ?? 0;
14
+ }
15
+ // Positions beyond 10 get diminishing returns
16
+ return Math.max(0, 10 - (position - 10) * 0.5);
17
+ }
18
+ /**
19
+ * Aggregate results from multiple searches
20
+ * Flattens all results, deduplicates by URL, and tracks frequency/positions
21
+ */
22
+ function aggregateResults(searches) {
23
+ const urlMap = new Map();
24
+ for (const search of searches) {
25
+ for (const result of search.results) {
26
+ const normalizedUrl = normalizeUrl(result.link);
27
+ const existing = urlMap.get(normalizedUrl);
28
+ if (existing) {
29
+ existing.frequency += 1;
30
+ existing.positions.push(result.position);
31
+ existing.queries.push(search.keyword);
32
+ const prevBest = existing.bestPosition;
33
+ existing.bestPosition = Math.min(existing.bestPosition, result.position);
34
+ existing.totalScore += getCtrWeight(result.position);
35
+ // Keep best title/snippet (from highest ranking position)
36
+ if (result.position < prevBest) {
37
+ existing.title = result.title;
38
+ existing.snippet = result.snippet;
39
+ }
40
+ }
41
+ else {
42
+ urlMap.set(normalizedUrl, {
43
+ url: result.link,
44
+ title: result.title,
45
+ snippet: result.snippet,
46
+ frequency: 1,
47
+ positions: [result.position],
48
+ queries: [search.keyword],
49
+ bestPosition: result.position,
50
+ totalScore: getCtrWeight(result.position),
51
+ });
52
+ }
53
+ }
54
+ }
55
+ return urlMap;
56
+ }
57
+ /**
58
+ * Normalize URL for deduplication
59
+ * Removes trailing slashes, www prefix, and normalizes protocol
60
+ */
61
+ function normalizeUrl(url) {
62
+ try {
63
+ const parsed = new URL(url);
64
+ let host = parsed.hostname.replace(/^www\./, '');
65
+ let path = parsed.pathname.replace(/\/$/, '') || '/';
66
+ return `${host}${path}${parsed.search}`.toLowerCase();
67
+ }
68
+ catch {
69
+ return url.toLowerCase().replace(/\/$/, '');
70
+ }
71
+ }
72
+ /**
73
+ * Filter URLs by minimum frequency
74
+ * Returns URLs appearing in at least minFrequency searches
75
+ */
76
+ function filterByFrequency(urlMap, minFrequency) {
77
+ const filtered = [];
78
+ for (const url of urlMap.values()) {
79
+ if (url.frequency >= minFrequency) {
80
+ filtered.push(url);
81
+ }
82
+ }
83
+ return filtered;
84
+ }
85
+ /**
86
+ * Calculate weighted scores and normalize to 100.0
87
+ * Returns sorted array with rank assignments
88
+ */
89
+ function calculateWeightedScores(urls) {
90
+ if (urls.length === 0)
91
+ return [];
92
+ // Sort by total score descending
93
+ const sorted = [...urls].sort((a, b) => b.totalScore - a.totalScore);
94
+ // Find max score for normalization
95
+ const maxScore = sorted[0].totalScore;
96
+ // Map to ranked URLs with normalized scores
97
+ return sorted.map((url, index) => ({
98
+ url: url.url,
99
+ title: url.title,
100
+ snippet: url.snippet,
101
+ rank: index + 1,
102
+ score: maxScore > 0 ? (url.totalScore / maxScore) * 100 : 0,
103
+ frequency: url.frequency,
104
+ positions: url.positions,
105
+ queries: url.queries,
106
+ bestPosition: url.bestPosition,
107
+ isConsensus: url.frequency >= 3,
108
+ }));
109
+ }
110
+ /**
111
+ * Mark consensus status for a URL
112
+ * Returns "✓" if frequency >= 3, else "✗"
113
+ */
114
+ export function markConsensus(frequency) {
115
+ return frequency >= 3 ? '✓' : '✗';
116
+ }
117
+ /**
118
+ * Generate justification for why a URL is ranked at its position
119
+ */
120
+ function generateJustification(url, rank) {
121
+ const parts = [];
122
+ if (url.frequency >= 4) {
123
+ parts.push(`Appeared in ${url.frequency} different searches showing strong cross-query relevance`);
124
+ }
125
+ else if (url.frequency >= 3) {
126
+ parts.push(`Found across ${url.frequency} searches indicating solid topical coverage`);
127
+ }
128
+ else {
129
+ parts.push(`Appeared in ${url.frequency} search${url.frequency > 1 ? 'es' : ''}`);
130
+ }
131
+ if (url.bestPosition === 1) {
132
+ parts.push('ranked #1 in at least one search');
133
+ }
134
+ else if (url.bestPosition <= 3) {
135
+ parts.push(`best position was top-3 (#${url.bestPosition})`);
136
+ }
137
+ return parts.join(', ') + '.';
138
+ }
139
+ /**
140
+ * Generate enhanced narrative output for consensus URLs
141
+ */
142
+ export function generateEnhancedOutput(rankedUrls, allKeywords, totalUniqueUrls, frequencyThreshold, thresholdNote) {
143
+ const lines = [];
144
+ // Header
145
+ lines.push(`## The Perfect Search Results (Aggregated from ${allKeywords.length} Queries)`);
146
+ lines.push('');
147
+ lines.push(`Based on ${allKeywords.length} distinct searches, we identified **${rankedUrls.length} high-consensus resources**. Here's what the data reveals:`);
148
+ lines.push('');
149
+ if (thresholdNote) {
150
+ lines.push(`> ${thresholdNote}`);
151
+ lines.push('');
152
+ }
153
+ // Top Consensus Resources
154
+ lines.push('### 🥇 Top Consensus Resources');
155
+ lines.push('');
156
+ for (const url of rankedUrls.slice(0, 20)) {
157
+ const highConsensus = url.frequency >= 4 ? ' ⭐ HIGHEST CONSENSUS' : '';
158
+ lines.push(`#### #${url.rank}: ${url.title} (Score: ${url.score.toFixed(1)})${highConsensus}`);
159
+ // Appeared in queries
160
+ const queriesList = url.queries.map(q => `"${q}"`).join(', ');
161
+ lines.push(`- **Appeared in:** ${url.frequency} queries (${queriesList})`);
162
+ // Best ranking
163
+ lines.push(`- **Best ranking:** Position ${url.bestPosition}`);
164
+ // Description (truncated snippet)
165
+ const description = url.snippet.length > 200
166
+ ? url.snippet.substring(0, 197) + '...'
167
+ : url.snippet;
168
+ lines.push(`- **Description:** ${description}`);
169
+ // Justification
170
+ lines.push(`- **Why it's #${url.rank}:** ${generateJustification(url, url.rank)}`);
171
+ // URL
172
+ lines.push(`- **URL:** ${url.url}`);
173
+ lines.push('');
174
+ }
175
+ // Metadata section
176
+ lines.push('---');
177
+ lines.push('');
178
+ lines.push('### 📈 Metadata');
179
+ lines.push('');
180
+ lines.push(`- **Total Queries:** ${allKeywords.length} (${allKeywords.join(', ')})`);
181
+ // Sort all URLs by frequency for the unique URLs list
182
+ const sortedByFreq = [...rankedUrls].sort((a, b) => b.frequency - a.frequency);
183
+ const urlFreqList = sortedByFreq
184
+ .slice(0, 30)
185
+ .map(u => {
186
+ const shortUrl = u.url.length > 40 ? u.url.substring(0, 37) + '...' : u.url;
187
+ return `${shortUrl} (${u.frequency}x)`;
188
+ })
189
+ .join(', ');
190
+ lines.push(`- **Unique URLs Found:** ${totalUniqueUrls} — top by frequency: ${urlFreqList}`);
191
+ lines.push(`- **Consensus Threshold:** ≥${frequencyThreshold} appearances`);
192
+ lines.push('');
193
+ // Next Steps - actionable follow-up commands
194
+ lines.push('---');
195
+ lines.push('');
196
+ lines.push('### ➡️ Next Steps');
197
+ lines.push('');
198
+ // Generate URL list for scrape_links command
199
+ const topUrls = rankedUrls.slice(0, Math.min(5, rankedUrls.length));
200
+ if (topUrls.length > 0) {
201
+ const urlList = topUrls.map(u => `"${u.url}"`).join(', ');
202
+ lines.push(`**Scrape top consensus URLs for full content:**`);
203
+ lines.push('```');
204
+ lines.push(`scrape_links(urls=[${urlList}], use_llm=true, what_to_extract="Extract key insights, recommendations, and actionable information")`);
205
+ lines.push('```');
206
+ lines.push('');
207
+ }
208
+ // Reddit follow-up
209
+ lines.push(`**Get community perspective from Reddit:**`);
210
+ lines.push('```');
211
+ lines.push(`search_reddit(queries=["${allKeywords[0] || 'topic'} reddit", "${allKeywords[0] || 'topic'} recommendations", "${allKeywords[0] || 'topic'} best practices"])`);
212
+ lines.push('```');
213
+ lines.push('');
214
+ // Deep research follow-up
215
+ lines.push(`**Synthesize findings with deep research:**`);
216
+ lines.push('```');
217
+ lines.push(`deep_research(questions=[{question: "Based on web search results, what are the key findings, best practices, and recommendations for [topic]?"}])`);
218
+ lines.push('```');
219
+ lines.push('');
220
+ return lines.join('\n');
221
+ }
222
+ /**
223
+ * Full aggregation pipeline with fallback thresholds
224
+ * Tries ≥3, falls back to ≥2, then ≥1 if needed
225
+ */
226
+ export function aggregateAndRank(searches, minConsensusUrls = 5) {
227
+ const urlMap = aggregateResults(searches);
228
+ const totalUniqueUrls = urlMap.size;
229
+ const totalQueries = searches.length;
230
+ // Try thresholds in order: 3, 2, 1
231
+ const thresholds = [3, 2, 1];
232
+ let rankedUrls = [];
233
+ let usedThreshold = 3;
234
+ let thresholdNote;
235
+ for (const threshold of thresholds) {
236
+ const filtered = filterByFrequency(urlMap, threshold);
237
+ rankedUrls = calculateWeightedScores(filtered);
238
+ if (rankedUrls.length >= minConsensusUrls || threshold === 1) {
239
+ usedThreshold = threshold;
240
+ if (threshold < 3) {
241
+ thresholdNote = `Note: Frequency filter lowered to ≥${threshold} due to result diversity.`;
242
+ }
243
+ break;
244
+ }
245
+ }
246
+ return {
247
+ rankedUrls,
248
+ totalUniqueUrls,
249
+ totalQueries,
250
+ frequencyThreshold: usedThreshold,
251
+ thresholdNote,
252
+ };
253
+ }
254
+ /**
255
+ * Build URL lookup map for quick consensus checking during result formatting
256
+ */
257
+ export function buildUrlLookup(rankedUrls) {
258
+ const lookup = new Map();
259
+ for (const url of rankedUrls) {
260
+ const normalized = normalizeUrl(url.url);
261
+ lookup.set(normalized, url);
262
+ // Also store original URL
263
+ lookup.set(url.url.toLowerCase(), url);
264
+ }
265
+ return lookup;
266
+ }
267
+ /**
268
+ * Look up a URL in the ranked results
269
+ */
270
+ export function lookupUrl(url, lookup) {
271
+ const normalized = normalizeUrl(url);
272
+ return lookup.get(normalized) || lookup.get(url.toLowerCase());
273
+ }
274
+ /**
275
+ * Aggregate Reddit search results from multiple queries
276
+ */
277
+ function aggregateRedditResults(searches) {
278
+ const urlMap = new Map();
279
+ for (const [query, results] of searches) {
280
+ for (let i = 0; i < results.length; i++) {
281
+ const result = results[i];
282
+ const position = i + 1;
283
+ const normalizedUrl = normalizeUrl(result.url);
284
+ const existing = urlMap.get(normalizedUrl);
285
+ if (existing) {
286
+ existing.frequency += 1;
287
+ existing.positions.push(position);
288
+ existing.queries.push(query);
289
+ const prevBest = existing.bestPosition;
290
+ existing.bestPosition = Math.min(existing.bestPosition, position);
291
+ existing.totalScore += getCtrWeight(position);
292
+ // Keep best title/snippet (from highest ranking position)
293
+ if (position < prevBest) {
294
+ existing.title = result.title;
295
+ existing.snippet = result.snippet;
296
+ existing.date = result.date;
297
+ }
298
+ }
299
+ else {
300
+ urlMap.set(normalizedUrl, {
301
+ url: result.url,
302
+ title: result.title,
303
+ snippet: result.snippet,
304
+ date: result.date,
305
+ frequency: 1,
306
+ positions: [position],
307
+ queries: [query],
308
+ bestPosition: position,
309
+ totalScore: getCtrWeight(position),
310
+ });
311
+ }
312
+ }
313
+ }
314
+ return urlMap;
315
+ }
316
+ /**
317
+ * Filter Reddit URLs by minimum frequency
318
+ */
319
+ function filterRedditByFrequency(urlMap, minFrequency) {
320
+ const filtered = [];
321
+ for (const url of urlMap.values()) {
322
+ if (url.frequency >= minFrequency) {
323
+ filtered.push(url);
324
+ }
325
+ }
326
+ return filtered;
327
+ }
328
+ /**
329
+ * Calculate weighted scores for Reddit URLs
330
+ */
331
+ function calculateRedditWeightedScores(urls) {
332
+ if (urls.length === 0)
333
+ return [];
334
+ // Sort by total score descending
335
+ const sorted = [...urls].sort((a, b) => b.totalScore - a.totalScore);
336
+ // Find max score for normalization
337
+ const maxScore = sorted[0].totalScore;
338
+ // Map to ranked URLs with normalized scores
339
+ return sorted.map((url, index) => ({
340
+ url: url.url,
341
+ title: url.title,
342
+ snippet: url.snippet,
343
+ date: url.date,
344
+ rank: index + 1,
345
+ score: maxScore > 0 ? (url.totalScore / maxScore) * 100 : 0,
346
+ frequency: url.frequency,
347
+ positions: url.positions,
348
+ queries: url.queries,
349
+ bestPosition: url.bestPosition,
350
+ isConsensus: url.frequency >= 2, // Lower threshold for Reddit (often fewer results)
351
+ }));
352
+ }
353
+ /**
354
+ * Full Reddit aggregation pipeline with fallback thresholds
355
+ */
356
+ export function aggregateAndRankReddit(searches, minConsensusUrls = 3) {
357
+ const urlMap = aggregateRedditResults(searches);
358
+ const totalUniqueUrls = urlMap.size;
359
+ const totalQueries = searches.size;
360
+ // Try thresholds in order: 2, 1 (Reddit often has less overlap than web search)
361
+ const thresholds = [2, 1];
362
+ let rankedUrls = [];
363
+ let usedThreshold = 2;
364
+ let thresholdNote;
365
+ for (const threshold of thresholds) {
366
+ const filtered = filterRedditByFrequency(urlMap, threshold);
367
+ rankedUrls = calculateRedditWeightedScores(filtered);
368
+ if (rankedUrls.length >= minConsensusUrls || threshold === 1) {
369
+ usedThreshold = threshold;
370
+ if (threshold < 2 && totalQueries > 1) {
371
+ thresholdNote = `Note: Frequency filter set to ≥${threshold} due to result diversity across queries.`;
372
+ }
373
+ break;
374
+ }
375
+ }
376
+ return {
377
+ rankedUrls,
378
+ totalUniqueUrls,
379
+ totalQueries,
380
+ frequencyThreshold: usedThreshold,
381
+ thresholdNote,
382
+ };
383
+ }
384
+ /**
385
+ * Generate enhanced output for Reddit aggregated results
386
+ * Now includes both aggregated view AND per-query raw results
387
+ */
388
+ export function generateRedditEnhancedOutput(aggregation, allQueries, rawResults) {
389
+ const { rankedUrls, totalUniqueUrls, frequencyThreshold, thresholdNote } = aggregation;
390
+ const lines = [];
391
+ // Header
392
+ lines.push(`# 🔍 Reddit Search Results (Aggregated from ${allQueries.length} Queries)`);
393
+ lines.push('');
394
+ lines.push(`**Total Unique Posts:** ${totalUniqueUrls} | **Consensus Threshold:** ≥${frequencyThreshold} appearances`);
395
+ lines.push('');
396
+ if (thresholdNote) {
397
+ lines.push(`> ${thresholdNote}`);
398
+ lines.push('');
399
+ }
400
+ // Consensus section (URLs appearing in multiple queries)
401
+ const consensusUrls = rankedUrls.filter(u => u.frequency >= frequencyThreshold && u.frequency > 1);
402
+ if (consensusUrls.length > 0) {
403
+ lines.push('## ⭐ High-Consensus Posts (Multiple Queries)');
404
+ lines.push('');
405
+ lines.push('*These posts appeared across multiple search queries, indicating high relevance:*');
406
+ lines.push('');
407
+ for (const url of consensusUrls) {
408
+ const dateStr = url.date ? ` • 📅 ${url.date}` : '';
409
+ const queriesList = url.queries.map(q => `"${q}"`).join(', ');
410
+ lines.push(`### #${url.rank}: ${url.title}`);
411
+ lines.push(`**Score:** ${url.score.toFixed(1)} | **Found in:** ${url.frequency} queries (${queriesList})${dateStr}`);
412
+ lines.push(`${url.url}`);
413
+ lines.push(`> ${url.snippet}`);
414
+ lines.push('');
415
+ }
416
+ lines.push('---');
417
+ lines.push('');
418
+ }
419
+ // All results ranked by CTR score
420
+ lines.push('## 📊 All Results (CTR-Ranked)');
421
+ lines.push('');
422
+ for (const url of rankedUrls) {
423
+ const dateStr = url.date ? ` • 📅 ${url.date}` : '';
424
+ const consensusMarker = url.frequency > 1 ? ' ⭐' : '';
425
+ lines.push(`**${url.rank}. ${url.title}**${consensusMarker}${dateStr}`);
426
+ lines.push(`${url.url}`);
427
+ lines.push(`> ${url.snippet}`);
428
+ if (url.frequency > 1) {
429
+ lines.push(`_Found in ${url.frequency} queries: ${url.queries.map(q => `"${q}"`).join(', ')}_`);
430
+ }
431
+ lines.push('');
432
+ }
433
+ // Per-Query Raw Results Section (NEW)
434
+ if (rawResults && rawResults.size > 0) {
435
+ lines.push('---');
436
+ lines.push('');
437
+ lines.push('## 📋 Per-Query Raw Results');
438
+ lines.push('');
439
+ lines.push('*Complete results for each individual query before aggregation:*');
440
+ lines.push('');
441
+ for (const [query, results] of rawResults) {
442
+ lines.push(`### 🔎 Query: "${query}"`);
443
+ lines.push(`**Results:** ${results.length} posts`);
444
+ lines.push('');
445
+ if (results.length === 0) {
446
+ lines.push('_No results found for this query._');
447
+ lines.push('');
448
+ continue;
449
+ }
450
+ for (let i = 0; i < results.length; i++) {
451
+ const result = results[i];
452
+ const position = i + 1;
453
+ const dateStr = result.date ? ` • 📅 ${result.date}` : '';
454
+ lines.push(`${position}. **${result.title}**${dateStr}`);
455
+ lines.push(` ${result.url}`);
456
+ lines.push(` > ${result.snippet}`);
457
+ lines.push('');
458
+ }
459
+ }
460
+ }
461
+ // Metadata
462
+ lines.push('---');
463
+ lines.push('');
464
+ lines.push('### 📈 Search Metadata');
465
+ lines.push('');
466
+ lines.push(`- **Queries:** ${allQueries.map(q => `"${q}"`).join(', ')}`);
467
+ lines.push(`- **Unique Posts Found:** ${totalUniqueUrls}`);
468
+ lines.push(`- **High-Consensus Posts:** ${consensusUrls.length}`);
469
+ lines.push('');
470
+ // Next Steps - actionable follow-up commands
471
+ lines.push('---');
472
+ lines.push('');
473
+ lines.push('### ➡️ Next Steps');
474
+ lines.push('');
475
+ // Generate URL list for get_reddit_post command
476
+ const topUrls = rankedUrls.slice(0, Math.min(10, rankedUrls.length));
477
+ if (topUrls.length >= 2) {
478
+ const urlList = topUrls.map(u => `"${u.url}"`).join(', ');
479
+ lines.push(`**Fetch full posts with comments:**`);
480
+ lines.push('```');
481
+ lines.push(`get_reddit_post(urls=[${urlList}], fetch_comments=true)`);
482
+ lines.push('```');
483
+ lines.push('');
484
+ }
485
+ // Suggest LLM extraction if there are consensus posts
486
+ if (consensusUrls.length > 0) {
487
+ const consensusUrlList = consensusUrls.slice(0, 5).map(u => `"${u.url}"`).join(', ');
488
+ lines.push(`**Extract insights with AI (recommended for consensus posts):**`);
489
+ lines.push('```');
490
+ lines.push(`get_reddit_post(urls=[${consensusUrlList}], fetch_comments=true, use_llm=true, what_to_extract="Extract key recommendations, consensus opinions, and practical advice")`);
491
+ lines.push('```');
492
+ lines.push('');
493
+ }
494
+ // Deep research follow-up
495
+ lines.push(`**Synthesize findings with deep research:**`);
496
+ lines.push('```');
497
+ lines.push(`deep_research(questions=[{question: "Based on these Reddit discussions about [topic], what are the main recommendations, common issues, and best practices?"}])`);
498
+ lines.push('```');
499
+ lines.push('');
500
+ return lines.join('\n');
501
+ }
502
+ //# sourceMappingURL=url-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-aggregator.js","sourceRoot":"","sources":["../../src/utils/url-aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Version Module - Single Source of Truth
3
+ *
4
+ * This module reads the version from package.json at runtime.
5
+ * All version references in the codebase should import from here.
6
+ *
7
+ * Usage:
8
+ * import { VERSION, PACKAGE_NAME } from './version.js';
9
+ *
10
+ * The version is automatically synced with package.json - no manual updates needed.
11
+ */
12
+ /**
13
+ * Package version from package.json
14
+ * This is the single source of truth for versioning
15
+ */
16
+ export declare const VERSION: string;
17
+ /**
18
+ * Package name from package.json
19
+ */
20
+ export declare const PACKAGE_NAME: string;
21
+ /**
22
+ * Package description from package.json
23
+ */
24
+ export declare const PACKAGE_DESCRIPTION: string;
25
+ /**
26
+ * Formatted version string for user agents and logging
27
+ * Example: "research-powerpack-mcp/3.2.0"
28
+ */
29
+ export declare const USER_AGENT_VERSION: string;
30
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkCH;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAyB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAgC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAqC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Version Module - Single Source of Truth
3
+ *
4
+ * This module reads the version from package.json at runtime.
5
+ * All version references in the codebase should import from here.
6
+ *
7
+ * Usage:
8
+ * import { VERSION, PACKAGE_NAME } from './version.js';
9
+ *
10
+ * The version is automatically synced with package.json - no manual updates needed.
11
+ */
12
+ import { createRequire } from 'module';
13
+ import { fileURLToPath } from 'url';
14
+ import { dirname, join } from 'path';
15
+ // Create a require function for ESM to import JSON
16
+ const require = createRequire(import.meta.url);
17
+ // Get the directory of this file to find package.json
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+ // Load package.json - works from both src/ and dist/
21
+ let packageJson;
22
+ try {
23
+ // Try loading from project root (when running from dist/)
24
+ packageJson = require(join(__dirname, '..', 'package.json'));
25
+ }
26
+ catch {
27
+ try {
28
+ // Try loading from two levels up (when running from src/)
29
+ packageJson = require(join(__dirname, '..', '..', 'package.json'));
30
+ }
31
+ catch {
32
+ // Fallback if package.json can't be found (should never happen)
33
+ console.error('[Version] Warning: Could not load package.json, using fallback version');
34
+ packageJson = {
35
+ version: '0.0.0-unknown',
36
+ name: 'research-powerpack-mcp',
37
+ description: 'Research Powerpack MCP Server',
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * Package version from package.json
43
+ * This is the single source of truth for versioning
44
+ */
45
+ export const VERSION = packageJson.version;
46
+ /**
47
+ * Package name from package.json
48
+ */
49
+ export const PACKAGE_NAME = packageJson.name;
50
+ /**
51
+ * Package description from package.json
52
+ */
53
+ export const PACKAGE_DESCRIPTION = packageJson.description;
54
+ /**
55
+ * Formatted version string for user agents and logging
56
+ * Example: "research-powerpack-mcp/3.2.0"
57
+ */
58
+ export const USER_AGENT_VERSION = `${PACKAGE_NAME}/${VERSION}`;
59
+ // VERSION_INFO removed - unused, individual exports sufficient
60
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,mDAAmD;AACnD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,sDAAsD;AACtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,qDAAqD;AACrD,IAAI,WAAmE,CAAC;AAExE,IAAI,CAAC;IACH,0DAA0D;IAC1D,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AAC/D,CAAC;AAAC,MAAM,CAAC;IACP,IAAI,CAAC;QACH,0DAA0D;QAC1D,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QACxF,WAAW,GAAG;YACZ,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,+BAA+B;SAC7C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAW,WAAW,CAAC,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAW,WAAW,CAAC,WAAW,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAW,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC;AAEvE,+DAA+D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Cloudflare Workers entry point for Research Powerpack MCP
3
+ * Uses the `agents` package McpAgent pattern for Durable Object-backed MCP sessions
4
+ */
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import { McpAgent } from 'agents/mcp';
7
+ export declare class ResearchPowerpackMCP extends McpAgent {
8
+ server: McpServer;
9
+ init(): Promise<void>;
10
+ }
11
+ declare const _default: {
12
+ fetch(request: Request, env: unknown, ctx: {
13
+ waitUntil(p: Promise<unknown>): void;
14
+ }): Response | Promise<Response>;
15
+ };
16
+ export default _default;
17
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,MAAM,YAGH;IAEG,IAAI;CA8BX;;mBAGgB,OAAO,OAAO,OAAO,OAAO;QAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE;;AADrF,wBAiBE"}