mcp-researchpowerpack 3.9.4 → 4.3.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.
- package/README.md +116 -208
- package/dist/index.js +280 -337
- package/dist/index.js.map +7 -1
- package/dist/mcp-use.json +7 -0
- package/dist/src/clients/reddit.js +278 -0
- package/dist/src/clients/reddit.js.map +7 -0
- package/dist/src/clients/scraper.js +326 -0
- package/dist/src/clients/scraper.js.map +7 -0
- package/dist/src/clients/search.js +217 -0
- package/dist/src/clients/search.js.map +7 -0
- package/dist/src/config/index.js +138 -0
- package/dist/src/config/index.js.map +7 -0
- package/dist/src/prompts/deep-research.js +41 -0
- package/dist/src/prompts/deep-research.js.map +7 -0
- package/dist/src/prompts/reddit-sentiment.js +47 -0
- package/dist/src/prompts/reddit-sentiment.js.map +7 -0
- package/dist/src/schemas/reddit.js +21 -0
- package/dist/src/schemas/reddit.js.map +7 -0
- package/dist/src/schemas/scrape-links.js +26 -0
- package/dist/src/schemas/scrape-links.js.map +7 -0
- package/dist/src/schemas/start-research.js +17 -0
- package/dist/src/schemas/start-research.js.map +7 -0
- package/dist/src/schemas/web-search.js +53 -0
- package/dist/src/schemas/web-search.js.map +7 -0
- package/dist/src/services/llm-processor.js +675 -0
- package/dist/src/services/llm-processor.js.map +7 -0
- package/dist/src/services/markdown-cleaner.js +62 -0
- package/dist/src/services/markdown-cleaner.js.map +7 -0
- package/dist/src/services/workflow-state.js +116 -0
- package/dist/src/services/workflow-state.js.map +7 -0
- package/dist/src/tools/mcp-helpers.js +50 -0
- package/dist/src/tools/mcp-helpers.js.map +7 -0
- package/dist/src/tools/reddit.js +277 -0
- package/dist/src/tools/reddit.js.map +7 -0
- package/dist/src/tools/registry.js +18 -0
- package/dist/src/tools/registry.js.map +7 -0
- package/dist/src/tools/scrape.js +334 -0
- package/dist/src/tools/scrape.js.map +7 -0
- package/dist/src/tools/search.js +423 -0
- package/dist/src/tools/search.js.map +7 -0
- package/dist/src/tools/start-research.js +199 -0
- package/dist/src/tools/start-research.js.map +7 -0
- package/dist/src/tools/utils.js +29 -0
- package/dist/src/tools/utils.js.map +7 -0
- package/dist/src/utils/bootstrap-guard.js +27 -0
- package/dist/src/utils/bootstrap-guard.js.map +7 -0
- package/dist/src/utils/concurrency.js +62 -0
- package/dist/src/utils/concurrency.js.map +7 -0
- package/dist/src/utils/content-extractor.js +61 -0
- package/dist/src/utils/content-extractor.js.map +7 -0
- package/dist/src/utils/errors.js +211 -0
- package/dist/src/utils/errors.js.map +7 -0
- package/dist/src/utils/logger.js +25 -0
- package/dist/src/utils/logger.js.map +7 -0
- package/dist/src/utils/markdown-formatter.js +15 -0
- package/dist/src/utils/markdown-formatter.js.map +7 -0
- package/dist/src/utils/reddit-keyword-guard.js +29 -0
- package/dist/src/utils/reddit-keyword-guard.js.map +7 -0
- package/dist/src/utils/response.js +81 -0
- package/dist/src/utils/response.js.map +7 -0
- package/dist/src/utils/retry.js +13 -0
- package/dist/src/utils/retry.js.map +7 -0
- package/dist/src/utils/sanitize.js +10 -0
- package/dist/src/utils/sanitize.js.map +7 -0
- package/dist/src/utils/source-type.js +41 -0
- package/dist/src/utils/source-type.js.map +7 -0
- package/dist/src/utils/url-aggregator.js +227 -0
- package/dist/src/utils/url-aggregator.js.map +7 -0
- package/dist/src/utils/workflow-key.js +14 -0
- package/dist/src/utils/workflow-key.js.map +7 -0
- package/dist/src/version.js +32 -0
- package/dist/src/version.js.map +7 -0
- package/package.json +33 -28
- package/dist/clients/reddit.d.ts +0 -69
- package/dist/clients/reddit.d.ts.map +0 -1
- package/dist/clients/reddit.js +0 -369
- package/dist/clients/reddit.js.map +0 -1
- package/dist/clients/research.d.ts +0 -67
- package/dist/clients/research.d.ts.map +0 -1
- package/dist/clients/research.js +0 -290
- package/dist/clients/research.js.map +0 -1
- package/dist/clients/scraper.d.ts +0 -72
- package/dist/clients/scraper.d.ts.map +0 -1
- package/dist/clients/scraper.js +0 -338
- package/dist/clients/scraper.js.map +0 -1
- package/dist/clients/search.d.ts +0 -57
- package/dist/clients/search.d.ts.map +0 -1
- package/dist/clients/search.js +0 -223
- package/dist/clients/search.js.map +0 -1
- package/dist/config/index.d.ts +0 -78
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -201
- package/dist/config/index.js.map +0 -1
- package/dist/config/loader.d.ts +0 -40
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -322
- package/dist/config/loader.js.map +0 -1
- package/dist/config/types.d.ts +0 -81
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -6
- package/dist/config/types.js.map +0 -1
- package/dist/config/yaml/tools.yaml +0 -146
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/schemas/deep-research.d.ts +0 -64
- package/dist/schemas/deep-research.d.ts.map +0 -1
- package/dist/schemas/deep-research.js +0 -224
- package/dist/schemas/deep-research.js.map +0 -1
- package/dist/schemas/scrape-links.d.ts +0 -32
- package/dist/schemas/scrape-links.d.ts.map +0 -1
- package/dist/schemas/scrape-links.js +0 -34
- package/dist/schemas/scrape-links.js.map +0 -1
- package/dist/schemas/web-search.d.ts +0 -22
- package/dist/schemas/web-search.d.ts.map +0 -1
- package/dist/schemas/web-search.js +0 -21
- package/dist/schemas/web-search.js.map +0 -1
- package/dist/services/file-attachment.d.ts +0 -30
- package/dist/services/file-attachment.d.ts.map +0 -1
- package/dist/services/file-attachment.js +0 -207
- package/dist/services/file-attachment.js.map +0 -1
- package/dist/services/llm-processor.d.ts +0 -29
- package/dist/services/llm-processor.d.ts.map +0 -1
- package/dist/services/llm-processor.js +0 -244
- package/dist/services/llm-processor.js.map +0 -1
- package/dist/services/markdown-cleaner.d.ts +0 -8
- package/dist/services/markdown-cleaner.d.ts.map +0 -1
- package/dist/services/markdown-cleaner.js +0 -74
- package/dist/services/markdown-cleaner.js.map +0 -1
- package/dist/tools/definitions.d.ts +0 -16
- package/dist/tools/definitions.d.ts.map +0 -1
- package/dist/tools/definitions.js +0 -17
- package/dist/tools/definitions.js.map +0 -1
- package/dist/tools/reddit.d.ts +0 -14
- package/dist/tools/reddit.d.ts.map +0 -1
- package/dist/tools/reddit.js +0 -265
- package/dist/tools/reddit.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -71
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -252
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/research.d.ts +0 -14
- package/dist/tools/research.d.ts.map +0 -1
- package/dist/tools/research.js +0 -196
- package/dist/tools/research.js.map +0 -1
- package/dist/tools/scrape.d.ts +0 -14
- package/dist/tools/scrape.d.ts.map +0 -1
- package/dist/tools/scrape.js +0 -234
- package/dist/tools/scrape.js.map +0 -1
- package/dist/tools/search.d.ts +0 -10
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -158
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/utils.d.ts +0 -105
- package/dist/tools/utils.d.ts.map +0 -1
- package/dist/tools/utils.js +0 -159
- package/dist/tools/utils.js.map +0 -1
- package/dist/utils/concurrency.d.ts +0 -28
- package/dist/utils/concurrency.d.ts.map +0 -1
- package/dist/utils/concurrency.js +0 -92
- package/dist/utils/concurrency.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -95
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -390
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -39
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -57
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/markdown-formatter.d.ts +0 -5
- package/dist/utils/markdown-formatter.d.ts.map +0 -1
- package/dist/utils/markdown-formatter.js +0 -15
- package/dist/utils/markdown-formatter.js.map +0 -1
- package/dist/utils/response.d.ts +0 -93
- package/dist/utils/response.d.ts.map +0 -1
- package/dist/utils/response.js +0 -170
- package/dist/utils/response.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -43
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -57
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/url-aggregator.d.ts +0 -90
- package/dist/utils/url-aggregator.d.ts.map +0 -1
- package/dist/utils/url-aggregator.js +0 -538
- package/dist/utils/url-aggregator.js.map +0 -1
- package/dist/version.d.ts +0 -29
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -55
- package/dist/version.js.map +0 -1
package/dist/utils/response.js
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Response Formatters - 70/20/10 Pattern
|
|
3
|
-
*
|
|
4
|
-
* All tool responses should follow this structure:
|
|
5
|
-
* - 70% Summary: Key insights, status, metrics
|
|
6
|
-
* - 20% Data: Structured results (lists, tables)
|
|
7
|
-
* - 10% Next Steps: Actionable follow-up commands
|
|
8
|
-
*/
|
|
9
|
-
/** Default maximum items to display in list formatting */
|
|
10
|
-
export const DEFAULT_MAX_ITEMS = 20;
|
|
11
|
-
/** Maximum snippet length before truncation in URL aggregator output */
|
|
12
|
-
export const MAX_SNIPPET_LENGTH = 200;
|
|
13
|
-
/** Duration thresholds in milliseconds */
|
|
14
|
-
const SECONDS_MS = 1_000;
|
|
15
|
-
const MINUTES_MS = 60_000;
|
|
16
|
-
/**
|
|
17
|
-
* Format a successful response using 70/20/10 pattern
|
|
18
|
-
*/
|
|
19
|
-
export function formatSuccess(opts) {
|
|
20
|
-
const parts = [];
|
|
21
|
-
// Title
|
|
22
|
-
parts.push(`✓ ${opts.title}`);
|
|
23
|
-
parts.push('');
|
|
24
|
-
// Summary (70%)
|
|
25
|
-
parts.push(opts.summary);
|
|
26
|
-
// Data section (20%)
|
|
27
|
-
if (opts.data) {
|
|
28
|
-
parts.push('');
|
|
29
|
-
parts.push('---');
|
|
30
|
-
parts.push(opts.data);
|
|
31
|
-
}
|
|
32
|
-
// Next steps (10%)
|
|
33
|
-
if (opts.nextSteps?.length) {
|
|
34
|
-
parts.push('');
|
|
35
|
-
parts.push('---');
|
|
36
|
-
parts.push('**Next Steps:**');
|
|
37
|
-
opts.nextSteps.forEach(step => parts.push(`→ ${step}`));
|
|
38
|
-
}
|
|
39
|
-
// Metadata footer
|
|
40
|
-
if (opts.metadata && Object.keys(opts.metadata).length > 0) {
|
|
41
|
-
parts.push('');
|
|
42
|
-
parts.push('---');
|
|
43
|
-
const metaStr = Object.entries(opts.metadata)
|
|
44
|
-
.map(([k, v]) => `${k}: ${v}`)
|
|
45
|
-
.join(' | ');
|
|
46
|
-
parts.push(`*${metaStr}*`);
|
|
47
|
-
}
|
|
48
|
-
return parts.join('\n');
|
|
49
|
-
}
|
|
50
|
-
/** Maximum length for error messages before truncation */
|
|
51
|
-
const MAX_ERROR_MSG_LENGTH = 500;
|
|
52
|
-
/**
|
|
53
|
-
* Format an error response with recovery guidance
|
|
54
|
-
* Designed to keep agents moving — every error includes actionable alternatives
|
|
55
|
-
*/
|
|
56
|
-
export function formatError(opts) {
|
|
57
|
-
const parts = [];
|
|
58
|
-
// Truncate error message to prevent unbounded output
|
|
59
|
-
const message = opts.message.length > MAX_ERROR_MSG_LENGTH
|
|
60
|
-
? opts.message.slice(0, MAX_ERROR_MSG_LENGTH - 3) + '...'
|
|
61
|
-
: opts.message;
|
|
62
|
-
// Error header
|
|
63
|
-
const prefix = opts.toolName ? `[${opts.toolName}] ` : '';
|
|
64
|
-
parts.push(`❌ ${prefix}${opts.code}: ${message}`);
|
|
65
|
-
// Retryable hint — be specific about what to do while waiting
|
|
66
|
-
if (opts.retryable) {
|
|
67
|
-
parts.push('');
|
|
68
|
-
parts.push('*This error is retryable. Wait a moment and try again — but use the alternatives below in the meantime so research continues.*');
|
|
69
|
-
}
|
|
70
|
-
// How to fix
|
|
71
|
-
if (opts.howToFix?.length) {
|
|
72
|
-
parts.push('');
|
|
73
|
-
parts.push('**How to Fix:**');
|
|
74
|
-
opts.howToFix.forEach((step, i) => parts.push(`${i + 1}. ${step}`));
|
|
75
|
-
}
|
|
76
|
-
// Alternatives — directive, not optional
|
|
77
|
-
if (opts.alternatives?.length) {
|
|
78
|
-
parts.push('');
|
|
79
|
-
parts.push('**DO THIS INSTEAD (don\'t stop researching):**');
|
|
80
|
-
opts.alternatives.forEach((alt, i) => parts.push(`${i + 1}. ${alt}`));
|
|
81
|
-
}
|
|
82
|
-
// Continuation footer — push agents to keep going
|
|
83
|
-
if (opts.alternatives?.length) {
|
|
84
|
-
parts.push('');
|
|
85
|
-
parts.push('> This tool failed but your research should NOT stop. Use the alternatives above to continue gathering information from other sources.');
|
|
86
|
-
}
|
|
87
|
-
return parts.join('\n');
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Format a batch operation header with stats
|
|
91
|
-
*/
|
|
92
|
-
export function formatBatchHeader(opts) {
|
|
93
|
-
const parts = [];
|
|
94
|
-
// Title with emoji based on success rate
|
|
95
|
-
const successRate = opts.totalItems > 0 ? opts.successful / opts.totalItems : 0;
|
|
96
|
-
const emoji = successRate === 1 ? '✓' : successRate >= 0.5 ? '⚠️' : '❌';
|
|
97
|
-
parts.push(`${emoji} ${opts.title}`);
|
|
98
|
-
parts.push('');
|
|
99
|
-
// Stats
|
|
100
|
-
parts.push(`• Total: ${opts.totalItems}`);
|
|
101
|
-
parts.push(`• Successful: ${opts.successful}`);
|
|
102
|
-
if (opts.failed > 0) {
|
|
103
|
-
parts.push(`• Failed: ${opts.failed}`);
|
|
104
|
-
}
|
|
105
|
-
if (opts.tokensPerItem) {
|
|
106
|
-
parts.push(`• Tokens/item: ~${opts.tokensPerItem.toLocaleString()}`);
|
|
107
|
-
}
|
|
108
|
-
if (opts.batches) {
|
|
109
|
-
parts.push(`• Batches: ${opts.batches}`);
|
|
110
|
-
}
|
|
111
|
-
// Extra stats
|
|
112
|
-
if (opts.extras) {
|
|
113
|
-
Object.entries(opts.extras).forEach(([key, val]) => {
|
|
114
|
-
parts.push(`• ${key}: ${val}`);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return parts.join('\n');
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Format a numbered list with optional metadata
|
|
121
|
-
*/
|
|
122
|
-
export function formatList(items, options) {
|
|
123
|
-
const max = options?.maxItems ?? DEFAULT_MAX_ITEMS;
|
|
124
|
-
const numbered = options?.numbered ?? true;
|
|
125
|
-
const toShow = items.slice(0, max);
|
|
126
|
-
const remaining = items.length - max;
|
|
127
|
-
const lines = toShow.map((item, i) => {
|
|
128
|
-
const prefix = numbered ? `${i + 1}. ` : '• ';
|
|
129
|
-
let line = `${prefix}**${item.title}**`;
|
|
130
|
-
if (item.meta) {
|
|
131
|
-
line += ` (${item.meta})`;
|
|
132
|
-
}
|
|
133
|
-
if (item.description) {
|
|
134
|
-
line += `\n ${item.description}`;
|
|
135
|
-
}
|
|
136
|
-
if (item.url) {
|
|
137
|
-
line += `\n ${item.url}`;
|
|
138
|
-
}
|
|
139
|
-
return line;
|
|
140
|
-
});
|
|
141
|
-
if (remaining > 0) {
|
|
142
|
-
lines.push(`\n*...and ${remaining} more*`);
|
|
143
|
-
}
|
|
144
|
-
return lines.join('\n');
|
|
145
|
-
}
|
|
146
|
-
// ============================================================================
|
|
147
|
-
// Duration Formatter
|
|
148
|
-
// ============================================================================
|
|
149
|
-
/**
|
|
150
|
-
* Format duration in human-readable form
|
|
151
|
-
*/
|
|
152
|
-
export function formatDuration(ms) {
|
|
153
|
-
if (ms < SECONDS_MS)
|
|
154
|
-
return `${ms}ms`;
|
|
155
|
-
if (ms < MINUTES_MS)
|
|
156
|
-
return `${(ms / SECONDS_MS).toFixed(1)}s`;
|
|
157
|
-
return `${(ms / MINUTES_MS).toFixed(1)}m`;
|
|
158
|
-
}
|
|
159
|
-
// ============================================================================
|
|
160
|
-
// Text Truncation
|
|
161
|
-
// ============================================================================
|
|
162
|
-
/**
|
|
163
|
-
* Truncate text to max length with ellipsis
|
|
164
|
-
*/
|
|
165
|
-
export function truncateText(text, maxLength) {
|
|
166
|
-
if (text.length <= maxLength)
|
|
167
|
-
return text;
|
|
168
|
-
return text.slice(0, maxLength - 3) + '...';
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=response.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/retry.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared retry and backoff utilities
|
|
3
|
-
* Eliminates duplication across client modules
|
|
4
|
-
*/
|
|
5
|
-
/** Base delay for exponential backoff (ms) */
|
|
6
|
-
export declare const RETRY_BASE_DELAY_MS: 1000;
|
|
7
|
-
/** Maximum backoff delay cap (ms) */
|
|
8
|
-
export declare const RETRY_MAX_DELAY_MS: 30000;
|
|
9
|
-
/** Jitter factor to prevent thundering herd */
|
|
10
|
-
export declare const JITTER_FACTOR: 0.3;
|
|
11
|
-
/** Exponential base for backoff calculation */
|
|
12
|
-
export declare const EXPONENTIAL_BASE: 2;
|
|
13
|
-
/** HTTP status codes that indicate a retryable server error */
|
|
14
|
-
export declare const RETRYABLE_STATUS_CODES: readonly [429, 500, 502, 503, 504];
|
|
15
|
-
export type RetryableStatusCode = typeof RETRYABLE_STATUS_CODES[number];
|
|
16
|
-
/** Network-level error codes that are retryable */
|
|
17
|
-
export declare const NETWORK_ERROR_CODES: readonly ["ECONNREFUSED", "ENOTFOUND", "ECONNRESET", "ECONNABORTED", "ETIMEDOUT", "EPIPE", "EAI_AGAIN"];
|
|
18
|
-
export type NetworkErrorCode = typeof NETWORK_ERROR_CODES[number];
|
|
19
|
-
/** Timeout-related error message substrings */
|
|
20
|
-
export declare const TIMEOUT_ERROR_PATTERNS: readonly ["timeout", "timed out", "deadline exceeded"];
|
|
21
|
-
/**
|
|
22
|
-
* Calculate exponential backoff delay with jitter.
|
|
23
|
-
* Formula: min(base * 2^attempt + random_jitter, maxDelay)
|
|
24
|
-
*
|
|
25
|
-
* @param attempt - Zero-based retry attempt number
|
|
26
|
-
* @param baseDelayMs - Base delay in milliseconds (default: 1000)
|
|
27
|
-
* @param maxDelayMs - Maximum delay cap in milliseconds (default: 30000)
|
|
28
|
-
* @returns Delay in milliseconds with jitter applied
|
|
29
|
-
*/
|
|
30
|
-
export declare function calculateBackoff(attempt: number, baseDelayMs?: number, maxDelayMs?: number): number;
|
|
31
|
-
/**
|
|
32
|
-
* Check if an HTTP status code is retryable
|
|
33
|
-
*/
|
|
34
|
-
export declare function isRetryableStatus(status: number): boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Check if an error code indicates a network-level failure
|
|
37
|
-
*/
|
|
38
|
-
export declare function isNetworkError(code: string | undefined): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Check if an error message indicates a timeout
|
|
41
|
-
*/
|
|
42
|
-
export declare function isTimeoutError(message: string): boolean;
|
|
43
|
-
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAG,IAAc,CAAC;AAElD,qCAAqC;AACrC,eAAO,MAAM,kBAAkB,EAAG,KAAe,CAAC;AAElD,+CAA+C;AAC/C,eAAO,MAAM,aAAa,EAAG,GAAY,CAAC;AAE1C,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAI3C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,oCAAqC,CAAC;AACzE,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,yGAA0G,CAAC;AAC3I,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElE,+CAA+C;AAC/C,eAAO,MAAM,sBAAsB,wDAAyD,CAAC;AAI7F;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAA4B,EACzC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD"}
|
package/dist/utils/retry.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared retry and backoff utilities
|
|
3
|
-
* Eliminates duplication across client modules
|
|
4
|
-
*/
|
|
5
|
-
// ── Retry Constants ──
|
|
6
|
-
/** Base delay for exponential backoff (ms) */
|
|
7
|
-
export const RETRY_BASE_DELAY_MS = 1_000;
|
|
8
|
-
/** Maximum backoff delay cap (ms) */
|
|
9
|
-
export const RETRY_MAX_DELAY_MS = 30_000;
|
|
10
|
-
/** Jitter factor to prevent thundering herd */
|
|
11
|
-
export const JITTER_FACTOR = 0.3;
|
|
12
|
-
/** Exponential base for backoff calculation */
|
|
13
|
-
export const EXPONENTIAL_BASE = 2;
|
|
14
|
-
// ── HTTP Status Constants ──
|
|
15
|
-
/** HTTP status codes that indicate a retryable server error */
|
|
16
|
-
export const RETRYABLE_STATUS_CODES = [429, 500, 502, 503, 504];
|
|
17
|
-
/** Network-level error codes that are retryable */
|
|
18
|
-
export const NETWORK_ERROR_CODES = ['ECONNREFUSED', 'ENOTFOUND', 'ECONNRESET', 'ECONNABORTED', 'ETIMEDOUT', 'EPIPE', 'EAI_AGAIN'];
|
|
19
|
-
/** Timeout-related error message substrings */
|
|
20
|
-
export const TIMEOUT_ERROR_PATTERNS = ['timeout', 'timed out', 'deadline exceeded'];
|
|
21
|
-
// ── Backoff Calculation ──
|
|
22
|
-
/**
|
|
23
|
-
* Calculate exponential backoff delay with jitter.
|
|
24
|
-
* Formula: min(base * 2^attempt + random_jitter, maxDelay)
|
|
25
|
-
*
|
|
26
|
-
* @param attempt - Zero-based retry attempt number
|
|
27
|
-
* @param baseDelayMs - Base delay in milliseconds (default: 1000)
|
|
28
|
-
* @param maxDelayMs - Maximum delay cap in milliseconds (default: 30000)
|
|
29
|
-
* @returns Delay in milliseconds with jitter applied
|
|
30
|
-
*/
|
|
31
|
-
export function calculateBackoff(attempt, baseDelayMs = RETRY_BASE_DELAY_MS, maxDelayMs = RETRY_MAX_DELAY_MS) {
|
|
32
|
-
const exponentialDelay = baseDelayMs * Math.pow(EXPONENTIAL_BASE, attempt);
|
|
33
|
-
const jitter = JITTER_FACTOR * exponentialDelay * Math.random();
|
|
34
|
-
return Math.min(exponentialDelay + jitter, maxDelayMs);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Check if an HTTP status code is retryable
|
|
38
|
-
*/
|
|
39
|
-
export function isRetryableStatus(status) {
|
|
40
|
-
return RETRYABLE_STATUS_CODES.includes(status);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Check if an error code indicates a network-level failure
|
|
44
|
-
*/
|
|
45
|
-
export function isNetworkError(code) {
|
|
46
|
-
if (!code)
|
|
47
|
-
return false;
|
|
48
|
-
return NETWORK_ERROR_CODES.includes(code);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if an error message indicates a timeout
|
|
52
|
-
*/
|
|
53
|
-
export function isTimeoutError(message) {
|
|
54
|
-
const lower = message.toLowerCase();
|
|
55
|
-
return TIMEOUT_ERROR_PATTERNS.some(pattern => lower.includes(pattern));
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=retry.js.map
|
package/dist/utils/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAwB;AAExB,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAc,CAAC;AAElD,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAe,CAAC;AAElD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAE3C,8BAA8B;AAE9B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAGzE,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAU,CAAC;AAG3I,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,mBAAmB,CAAU,CAAC;AAE7F,4BAA4B;AAE5B;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,cAAsB,mBAAmB,EACzC,aAAqB,kBAAkB;IAEvC,MAAM,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -1,90 +0,0 @@
|
|
|
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 type { KeywordSearchResult, RedditSearchResult } from '../clients/search.js';
|
|
7
|
-
/**
|
|
8
|
-
* Ranked URL with normalized score
|
|
9
|
-
*/
|
|
10
|
-
interface RankedUrl {
|
|
11
|
-
readonly url: string;
|
|
12
|
-
readonly title: string;
|
|
13
|
-
readonly snippet: string;
|
|
14
|
-
readonly rank: number;
|
|
15
|
-
readonly score: number;
|
|
16
|
-
readonly frequency: number;
|
|
17
|
-
readonly positions: number[];
|
|
18
|
-
readonly queries: string[];
|
|
19
|
-
readonly bestPosition: number;
|
|
20
|
-
readonly isConsensus: boolean;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Aggregation result containing all processed data
|
|
24
|
-
*/
|
|
25
|
-
interface AggregationResult {
|
|
26
|
-
readonly rankedUrls: RankedUrl[];
|
|
27
|
-
readonly totalUniqueUrls: number;
|
|
28
|
-
readonly totalQueries: number;
|
|
29
|
-
readonly frequencyThreshold: number;
|
|
30
|
-
readonly thresholdNote?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Mark consensus status for a URL
|
|
34
|
-
* Returns "✓" if frequency >= threshold, else "✗"
|
|
35
|
-
*/
|
|
36
|
-
export declare function markConsensus(frequency: number): string;
|
|
37
|
-
/**
|
|
38
|
-
* Generate enhanced narrative output for consensus URLs
|
|
39
|
-
*/
|
|
40
|
-
export declare function generateEnhancedOutput(rankedUrls: RankedUrl[], allKeywords: string[], totalUniqueUrls: number, frequencyThreshold: number, thresholdNote?: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* Full aggregation pipeline with fallback thresholds
|
|
43
|
-
* Tries ≥3, falls back to ≥2, then ≥1 if needed
|
|
44
|
-
*/
|
|
45
|
-
export declare function aggregateAndRank(searches: KeywordSearchResult[], minConsensusUrls?: number): AggregationResult;
|
|
46
|
-
/**
|
|
47
|
-
* Build URL lookup map for quick consensus checking during result formatting
|
|
48
|
-
*/
|
|
49
|
-
export declare function buildUrlLookup(rankedUrls: RankedUrl[]): Map<string, RankedUrl>;
|
|
50
|
-
/**
|
|
51
|
-
* Look up a URL in the ranked results
|
|
52
|
-
*/
|
|
53
|
-
export declare function lookupUrl(url: string, lookup: Map<string, RankedUrl>): RankedUrl | undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Ranked Reddit URL with normalized score
|
|
56
|
-
*/
|
|
57
|
-
interface RankedRedditUrl {
|
|
58
|
-
readonly url: string;
|
|
59
|
-
readonly title: string;
|
|
60
|
-
readonly snippet: string;
|
|
61
|
-
readonly date?: string;
|
|
62
|
-
readonly rank: number;
|
|
63
|
-
readonly score: number;
|
|
64
|
-
readonly frequency: number;
|
|
65
|
-
readonly positions: number[];
|
|
66
|
-
readonly queries: string[];
|
|
67
|
-
readonly bestPosition: number;
|
|
68
|
-
readonly isConsensus: boolean;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Reddit aggregation result
|
|
72
|
-
*/
|
|
73
|
-
interface RedditAggregationResult {
|
|
74
|
-
readonly rankedUrls: RankedRedditUrl[];
|
|
75
|
-
readonly totalUniqueUrls: number;
|
|
76
|
-
readonly totalQueries: number;
|
|
77
|
-
readonly frequencyThreshold: number;
|
|
78
|
-
readonly thresholdNote?: string;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Full Reddit aggregation pipeline with fallback thresholds
|
|
82
|
-
*/
|
|
83
|
-
export declare function aggregateAndRankReddit(searches: Map<string, RedditSearchResult[]>, minConsensusUrls?: number): RedditAggregationResult;
|
|
84
|
-
/**
|
|
85
|
-
* Generate enhanced output for Reddit aggregated results
|
|
86
|
-
* Now includes both aggregated view AND per-query raw results
|
|
87
|
-
*/
|
|
88
|
-
export declare function generateRedditEnhancedOutput(aggregation: RedditAggregationResult, allQueries: string[], rawResults?: Map<string, RedditSearchResult[]>): string;
|
|
89
|
-
export {};
|
|
90
|
-
//# sourceMappingURL=url-aggregator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url-aggregator.d.ts","sourceRoot":"","sources":["../../src/utils/url-aggregator.ts"],"names":[],"mappings":"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"}
|