@j0hanz/superfetch 1.0.6 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +228 -36
- package/dist/config/index.d.ts +10 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +73 -19
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +98 -57
- package/dist/config/types.d.ts.map +1 -1
- package/dist/errors/app-error.d.ts +4 -28
- package/dist/errors/app-error.d.ts.map +1 -1
- package/dist/errors/app-error.js +10 -51
- package/dist/errors/app-error.js.map +1 -1
- package/dist/index.js +10 -55
- package/dist/index.js.map +1 -1
- package/dist/middleware/error-handler.d.ts +2 -2
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +12 -14
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +0 -8
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/parsers/base-html-element-parser.d.ts +43 -0
- package/dist/parsers/base-html-element-parser.d.ts.map +1 -0
- package/dist/parsers/base-html-element-parser.js +59 -0
- package/dist/parsers/base-html-element-parser.js.map +1 -0
- package/dist/parsers/heading-element-parser.d.ts +14 -0
- package/dist/parsers/heading-element-parser.d.ts.map +1 -0
- package/dist/parsers/heading-element-parser.js +26 -0
- package/dist/parsers/heading-element-parser.js.map +1 -0
- package/dist/parsers/image-element-parser.d.ts +16 -0
- package/dist/parsers/image-element-parser.d.ts.map +1 -0
- package/dist/parsers/image-element-parser.js +33 -0
- package/dist/parsers/image-element-parser.js.map +1 -0
- package/dist/parsers/link-element-parser.d.ts +15 -0
- package/dist/parsers/link-element-parser.d.ts.map +1 -0
- package/dist/parsers/link-element-parser.js +28 -0
- package/dist/parsers/link-element-parser.js.map +1 -0
- package/dist/parsers/open-graph-parser.d.ts +17 -0
- package/dist/parsers/open-graph-parser.d.ts.map +1 -0
- package/dist/parsers/open-graph-parser.js +41 -0
- package/dist/parsers/open-graph-parser.js.map +1 -0
- package/dist/parsers/schema-org-parser.d.ts +17 -0
- package/dist/parsers/schema-org-parser.d.ts.map +1 -0
- package/dist/parsers/schema-org-parser.js +32 -0
- package/dist/parsers/schema-org-parser.js.map +1 -0
- package/dist/parsers/standard-meta-parser.d.ts +18 -0
- package/dist/parsers/standard-meta-parser.d.ts.map +1 -0
- package/dist/parsers/standard-meta-parser.js +32 -0
- package/dist/parsers/standard-meta-parser.js.map +1 -0
- package/dist/parsers/twitter-card-parser.d.ts +17 -0
- package/dist/parsers/twitter-card-parser.d.ts.map +1 -0
- package/dist/parsers/twitter-card-parser.js +41 -0
- package/dist/parsers/twitter-card-parser.js.map +1 -0
- package/dist/resources/cached-content.d.ts +0 -1
- package/dist/resources/cached-content.d.ts.map +1 -1
- package/dist/resources/cached-content.js +3 -9
- package/dist/resources/cached-content.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +8 -8
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -10
- package/dist/server.js.map +1 -1
- package/dist/services/cache.d.ts +0 -28
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +10 -173
- package/dist/services/cache.js.map +1 -1
- package/dist/services/extractor.d.ts +1 -11
- package/dist/services/extractor.d.ts.map +1 -1
- package/dist/services/extractor.js +86 -84
- package/dist/services/extractor.js.map +1 -1
- package/dist/services/fetcher.d.ts +2 -13
- package/dist/services/fetcher.d.ts.map +1 -1
- package/dist/services/fetcher.js +195 -211
- package/dist/services/fetcher.js.map +1 -1
- package/dist/services/logger.d.ts +5 -4
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +27 -42
- package/dist/services/logger.js.map +1 -1
- package/dist/services/parser.d.ts.map +1 -1
- package/dist/services/parser.js +35 -26
- package/dist/services/parser.js.map +1 -1
- package/dist/services/session-manager.d.ts +18 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +73 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/strategies/exponential-backoff-strategy.d.ts +13 -0
- package/dist/strategies/exponential-backoff-strategy.d.ts.map +1 -0
- package/dist/strategies/exponential-backoff-strategy.js +32 -0
- package/dist/strategies/exponential-backoff-strategy.js.map +1 -0
- package/dist/tools/handlers/fetch-links.tool.d.ts +2 -9
- package/dist/tools/handlers/fetch-links.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-links.tool.js +0 -1
- package/dist/tools/handlers/fetch-links.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.d.ts +5 -2
- package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.js +23 -33
- package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.d.ts +2 -9
- package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.js +15 -20
- package/dist/tools/handlers/fetch-url.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-urls.tool.d.ts +2 -9
- package/dist/tools/handlers/fetch-urls.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-urls.tool.js +124 -105
- package/dist/tools/handlers/fetch-urls.tool.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/utils/common.d.ts +6 -7
- package/dist/tools/utils/common.d.ts.map +1 -1
- package/dist/tools/utils/common.js +8 -8
- package/dist/tools/utils/common.js.map +1 -1
- package/dist/tools/utils/fetch-pipeline.d.ts +8 -0
- package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -1
- package/dist/tools/utils/fetch-pipeline.js +47 -79
- package/dist/tools/utils/fetch-pipeline.js.map +1 -1
- package/dist/transformers/jsonl.transformer.d.ts +1 -1
- package/dist/transformers/jsonl.transformer.d.ts.map +1 -1
- package/dist/transformers/jsonl.transformer.js +15 -10
- package/dist/transformers/jsonl.transformer.js.map +1 -1
- package/dist/transformers/markdown.transformer.d.ts.map +1 -1
- package/dist/transformers/markdown.transformer.js +58 -62
- package/dist/transformers/markdown.transformer.js.map +1 -1
- package/dist/utils/concurrency.d.ts +2 -5
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js +19 -19
- package/dist/utils/concurrency.js.map +1 -1
- package/dist/utils/content-cleaner.d.ts +0 -25
- package/dist/utils/content-cleaner.d.ts.map +1 -1
- package/dist/utils/content-cleaner.js +12 -187
- package/dist/utils/content-cleaner.js.map +1 -1
- package/dist/utils/html-truncator.d.ts +2 -0
- package/dist/utils/html-truncator.d.ts.map +1 -0
- package/dist/utils/html-truncator.js +14 -0
- package/dist/utils/html-truncator.js.map +1 -0
- package/dist/utils/language-detector.d.ts +0 -3
- package/dist/utils/language-detector.d.ts.map +1 -1
- package/dist/utils/language-detector.js +0 -11
- package/dist/utils/language-detector.js.map +1 -1
- package/dist/utils/sanitizer.d.ts.map +1 -1
- package/dist/utils/sanitizer.js +7 -5
- package/dist/utils/sanitizer.js.map +1 -1
- package/dist/utils/tool-error-handler.d.ts.map +1 -1
- package/dist/utils/tool-error-handler.js +15 -42
- package/dist/utils/tool-error-handler.js.map +1 -1
- package/dist/utils/url-validator.d.ts +0 -6
- package/dist/utils/url-validator.d.ts.map +1 -1
- package/dist/utils/url-validator.js +12 -81
- package/dist/utils/url-validator.js.map +1 -1
- package/package.json +5 -6
|
@@ -2,21 +2,20 @@ import { extractContent } from '../../services/extractor.js';
|
|
|
2
2
|
import { logDebug, logError } from '../../services/logger.js';
|
|
3
3
|
import { parseHtml } from '../../services/parser.js';
|
|
4
4
|
import { createToolErrorResponse, handleToolError, } from '../../utils/tool-error-handler.js';
|
|
5
|
-
import {
|
|
5
|
+
import { createContentMetadataBlock, determineContentExtractionSource, enforceContentLengthLimit, } from '../utils/common.js';
|
|
6
6
|
import { executeFetchPipeline } from '../utils/fetch-pipeline.js';
|
|
7
7
|
import { toJsonl } from '../../transformers/jsonl.transformer.js';
|
|
8
8
|
export const FETCH_URL_TOOL_NAME = 'fetch-url';
|
|
9
9
|
export const FETCH_URL_TOOL_DESCRIPTION = 'Fetches a webpage and converts it to AI-readable JSONL format with semantic content blocks. Supports custom headers, retries, and content length limits.';
|
|
10
10
|
function transformToJsonl(html, url, options) {
|
|
11
|
-
// Only invoke JSDOM when extractMainContent is true (lazy loading optimization)
|
|
12
11
|
const { article, metadata: extractedMeta } = extractContent(html, url, {
|
|
13
12
|
extractArticle: options.extractMainContent,
|
|
14
13
|
});
|
|
15
|
-
const
|
|
16
|
-
const sourceHtml =
|
|
14
|
+
const shouldExtractFromArticle = determineContentExtractionSource(options.extractMainContent, article);
|
|
15
|
+
const sourceHtml = shouldExtractFromArticle ? article.content : html;
|
|
17
16
|
const contentBlocks = parseHtml(sourceHtml);
|
|
18
|
-
const metadata =
|
|
19
|
-
const title =
|
|
17
|
+
const metadata = createContentMetadataBlock(url, article, extractedMeta, shouldExtractFromArticle, options.includeMetadata);
|
|
18
|
+
const title = shouldExtractFromArticle ? article.title : extractedMeta.title;
|
|
20
19
|
return {
|
|
21
20
|
content: toJsonl(contentBlocks, metadata),
|
|
22
21
|
contentBlocks: contentBlocks.length,
|
|
@@ -27,14 +26,14 @@ export async function fetchUrlToolHandler(input) {
|
|
|
27
26
|
if (!input.url) {
|
|
28
27
|
return createToolErrorResponse('URL is required', '', 'VALIDATION_ERROR');
|
|
29
28
|
}
|
|
29
|
+
const extractMainContent = input.extractMainContent ?? true;
|
|
30
|
+
const includeMetadata = input.includeMetadata ?? true;
|
|
31
|
+
logDebug('Fetching URL', {
|
|
32
|
+
url: input.url,
|
|
33
|
+
extractMainContent,
|
|
34
|
+
includeMetadata,
|
|
35
|
+
});
|
|
30
36
|
try {
|
|
31
|
-
const extractMainContent = input.extractMainContent ?? true;
|
|
32
|
-
const includeMetadata = input.includeMetadata ?? true;
|
|
33
|
-
logDebug('Fetching URL', {
|
|
34
|
-
url: input.url,
|
|
35
|
-
extractMainContent,
|
|
36
|
-
includeMetadata,
|
|
37
|
-
});
|
|
38
37
|
const result = await executeFetchPipeline({
|
|
39
38
|
url: input.url,
|
|
40
39
|
cacheNamespace: 'url',
|
|
@@ -48,7 +47,7 @@ export async function fetchUrlToolHandler(input) {
|
|
|
48
47
|
title: undefined,
|
|
49
48
|
}),
|
|
50
49
|
});
|
|
51
|
-
const { content, truncated } =
|
|
50
|
+
const { content, truncated } = enforceContentLengthLimit(result.data.content, input.maxContentLength);
|
|
52
51
|
const structuredContent = {
|
|
53
52
|
url: result.url,
|
|
54
53
|
title: result.data.title,
|
|
@@ -59,13 +58,9 @@ export async function fetchUrlToolHandler(input) {
|
|
|
59
58
|
cached: result.fromCache,
|
|
60
59
|
...(truncated && { truncated }),
|
|
61
60
|
};
|
|
61
|
+
const jsonOutput = JSON.stringify(structuredContent, result.fromCache ? undefined : null, result.fromCache ? undefined : 2);
|
|
62
62
|
return {
|
|
63
|
-
content: [
|
|
64
|
-
{
|
|
65
|
-
type: 'text',
|
|
66
|
-
text: JSON.stringify(structuredContent, result.fromCache ? undefined : null, result.fromCache ? undefined : 2),
|
|
67
|
-
},
|
|
68
|
-
],
|
|
63
|
+
content: [{ type: 'text', text: jsonOutput }],
|
|
69
64
|
structuredContent,
|
|
70
65
|
};
|
|
71
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-url.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type { FetchUrlsInput } from '../../config/types.js';
|
|
1
|
+
import type { FetchUrlsInput, ToolResponseBase } from '../../config/types.js';
|
|
2
2
|
export declare const FETCH_URLS_TOOL_NAME = "fetch-urls";
|
|
3
3
|
export declare const FETCH_URLS_TOOL_DESCRIPTION = "Fetches multiple URLs in parallel and converts them to AI-readable format (JSONL or Markdown). Supports concurrency control and continues on individual failures.";
|
|
4
|
-
export declare function fetchUrlsToolHandler(input: FetchUrlsInput): Promise<
|
|
5
|
-
content: {
|
|
6
|
-
type: 'text';
|
|
7
|
-
text: string;
|
|
8
|
-
}[];
|
|
9
|
-
structuredContent?: Record<string, unknown>;
|
|
10
|
-
isError?: boolean;
|
|
11
|
-
}>;
|
|
4
|
+
export declare function fetchUrlsToolHandler(input: FetchUrlsInput): Promise<ToolResponseBase>;
|
|
12
5
|
//# sourceMappingURL=fetch-urls.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-urls.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-urls.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-urls.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-urls.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,cAAc,EAGd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAuB/B,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,2BAA2B,sKAC6H,CAAC;AAuQtK,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import * as cheerio from 'cheerio';
|
|
2
1
|
import * as cache from '../../services/cache.js';
|
|
3
|
-
import { extractContent
|
|
2
|
+
import { extractContent } from '../../services/extractor.js';
|
|
4
3
|
import { fetchUrlWithRetry } from '../../services/fetcher.js';
|
|
5
4
|
import { logDebug, logError, logWarn } from '../../services/logger.js';
|
|
6
5
|
import { parseHtml } from '../../services/parser.js';
|
|
7
|
-
import { runWithConcurrency } from '../../utils/concurrency.js';
|
|
8
6
|
import { createToolErrorResponse } from '../../utils/tool-error-handler.js';
|
|
9
7
|
import { validateAndNormalizeUrl } from '../../utils/url-validator.js';
|
|
10
|
-
import {
|
|
8
|
+
import { createContentMetadataBlock, determineContentExtractionSource, enforceContentLengthLimit, } from '../utils/common.js';
|
|
11
9
|
import { toJsonl } from '../../transformers/jsonl.transformer.js';
|
|
12
10
|
import { htmlToMarkdown } from '../../transformers/markdown.transformer.js';
|
|
11
|
+
const MAX_URLS_PER_BATCH = 10;
|
|
12
|
+
const DEFAULT_CONCURRENCY = 3;
|
|
13
|
+
const MAX_CONCURRENCY = 5;
|
|
14
|
+
export const FETCH_URLS_TOOL_NAME = 'fetch-urls';
|
|
15
|
+
export const FETCH_URLS_TOOL_DESCRIPTION = 'Fetches multiple URLs in parallel and converts them to AI-readable format (JSONL or Markdown). Supports concurrency control and continues on individual failures.';
|
|
13
16
|
function createBatchResponse(results) {
|
|
14
17
|
const summary = {
|
|
15
18
|
total: results.length,
|
|
16
|
-
successful: results.filter((
|
|
17
|
-
failed: results.filter((
|
|
18
|
-
cached: results.filter((
|
|
19
|
-
totalContentBlocks: results.reduce((sum,
|
|
19
|
+
successful: results.filter((result) => result.success).length,
|
|
20
|
+
failed: results.filter((result) => !result.success).length,
|
|
21
|
+
cached: results.filter((result) => result.cached).length,
|
|
22
|
+
totalContentBlocks: results.reduce((sum, result) => sum + (result.contentBlocks ?? 0), 0),
|
|
20
23
|
};
|
|
21
24
|
const structuredContent = {
|
|
22
25
|
results,
|
|
@@ -33,69 +36,73 @@ function createBatchResponse(results) {
|
|
|
33
36
|
structuredContent,
|
|
34
37
|
};
|
|
35
38
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
39
|
+
function attemptCacheRetrievalForUrl(normalizedUrl, format) {
|
|
40
|
+
const cacheNamespace = format === 'markdown' ? 'markdown' : 'url';
|
|
41
|
+
const cacheKey = cache.createCacheKey(cacheNamespace, normalizedUrl);
|
|
42
|
+
if (!cacheKey)
|
|
43
|
+
return null;
|
|
44
|
+
const cached = cache.get(cacheKey);
|
|
45
|
+
if (!cached)
|
|
46
|
+
return null;
|
|
47
|
+
logDebug('Batch cache hit', { url: normalizedUrl });
|
|
48
|
+
return {
|
|
49
|
+
url: normalizedUrl,
|
|
50
|
+
success: true,
|
|
51
|
+
content: cached.content,
|
|
52
|
+
cached: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function transformContentForFormat(html, normalizedUrl, metadata, format) {
|
|
56
|
+
if (format === 'markdown') {
|
|
57
|
+
return {
|
|
58
|
+
content: htmlToMarkdown(html, metadata),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const blocks = parseHtml(html);
|
|
62
|
+
return {
|
|
63
|
+
content: toJsonl(blocks, metadata),
|
|
64
|
+
contentBlocks: blocks.length,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function processContentExtraction(html, normalizedUrl, options) {
|
|
68
|
+
if (!options.extractMainContent) {
|
|
69
|
+
const { metadata: extractedMeta } = extractContent(html, normalizedUrl, {
|
|
70
|
+
extractArticle: false,
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
sourceHtml: html,
|
|
74
|
+
title: extractedMeta.title,
|
|
75
|
+
metadata: createContentMetadataBlock(normalizedUrl, null, extractedMeta, false, options.includeMetadata),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const { article, metadata: extractedMeta } = extractContent(html, normalizedUrl, { extractArticle: true });
|
|
79
|
+
const shouldExtractFromArticle = determineContentExtractionSource(true, article);
|
|
80
|
+
return {
|
|
81
|
+
sourceHtml: shouldExtractFromArticle ? article.content : html,
|
|
82
|
+
title: shouldExtractFromArticle ? article.title : extractedMeta.title,
|
|
83
|
+
metadata: createContentMetadataBlock(normalizedUrl, article, extractedMeta, shouldExtractFromArticle, options.includeMetadata),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
40
86
|
async function processSingleUrl(url, options) {
|
|
41
87
|
try {
|
|
42
88
|
const normalizedUrl = validateAndNormalizeUrl(url);
|
|
89
|
+
const cachedResult = attemptCacheRetrievalForUrl(normalizedUrl, options.format);
|
|
90
|
+
if (cachedResult)
|
|
91
|
+
return cachedResult;
|
|
92
|
+
const html = await fetchUrlWithRetry(normalizedUrl);
|
|
93
|
+
const { sourceHtml, title, metadata } = processContentExtraction(html, normalizedUrl, options);
|
|
94
|
+
const { content, contentBlocks } = transformContentForFormat(sourceHtml, normalizedUrl, metadata, options.format);
|
|
95
|
+
const { content: finalContent } = enforceContentLengthLimit(content, options.maxContentLength);
|
|
43
96
|
const cacheNamespace = options.format === 'markdown' ? 'markdown' : 'url';
|
|
44
97
|
const cacheKey = cache.createCacheKey(cacheNamespace, normalizedUrl);
|
|
45
98
|
if (cacheKey) {
|
|
46
|
-
|
|
47
|
-
if (cached) {
|
|
48
|
-
logDebug('Batch cache hit', { url: normalizedUrl });
|
|
49
|
-
return {
|
|
50
|
-
url: normalizedUrl,
|
|
51
|
-
success: true,
|
|
52
|
-
content: cached.content,
|
|
53
|
-
cached: true,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const fetchResult = await fetchUrlWithRetry(normalizedUrl);
|
|
58
|
-
let sourceHtml;
|
|
59
|
-
let title;
|
|
60
|
-
let metadata;
|
|
61
|
-
// Fast path: Skip JSDOM entirely when extractMainContent is false
|
|
62
|
-
if (!options.extractMainContent) {
|
|
63
|
-
sourceHtml = fetchResult.html;
|
|
64
|
-
const $ = cheerio.load(fetchResult.html);
|
|
65
|
-
const extractedMeta = extractMetadataWithCheerio($);
|
|
66
|
-
({ title } = extractedMeta);
|
|
67
|
-
// Use buildMetadata helper for consistency
|
|
68
|
-
metadata = buildMetadata(normalizedUrl, null, extractedMeta, false, options.includeMetadata);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
// Slow path: Use JSDOM only when article extraction is needed
|
|
72
|
-
const { article, metadata: extractedMeta } = extractContent(fetchResult.html, normalizedUrl, {
|
|
73
|
-
extractArticle: true,
|
|
74
|
-
});
|
|
75
|
-
const useArticle = shouldUseArticle(true, article);
|
|
76
|
-
metadata = buildMetadata(normalizedUrl, article, extractedMeta, useArticle, options.includeMetadata);
|
|
77
|
-
sourceHtml = useArticle ? article.content : fetchResult.html;
|
|
78
|
-
title = useArticle ? article.title : extractedMeta.title;
|
|
79
|
-
}
|
|
80
|
-
let content;
|
|
81
|
-
let contentBlocks;
|
|
82
|
-
if (options.format === 'markdown') {
|
|
83
|
-
content = htmlToMarkdown(sourceHtml, metadata);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const blocks = parseHtml(sourceHtml);
|
|
87
|
-
contentBlocks = blocks.length;
|
|
88
|
-
content = toJsonl(blocks, metadata);
|
|
99
|
+
cache.set(cacheKey, finalContent);
|
|
89
100
|
}
|
|
90
|
-
const { content: truncatedContent } = truncateContent(content, options.maxContentLength);
|
|
91
|
-
content = truncatedContent;
|
|
92
|
-
if (cacheKey)
|
|
93
|
-
cache.set(cacheKey, content);
|
|
94
101
|
return {
|
|
95
102
|
url: normalizedUrl,
|
|
96
103
|
success: true,
|
|
97
104
|
title,
|
|
98
|
-
content,
|
|
105
|
+
content: finalContent,
|
|
99
106
|
contentBlocks,
|
|
100
107
|
cached: false,
|
|
101
108
|
};
|
|
@@ -117,22 +124,43 @@ async function processSingleUrl(url, options) {
|
|
|
117
124
|
};
|
|
118
125
|
}
|
|
119
126
|
}
|
|
127
|
+
function extractRejectionMessage({ reason }) {
|
|
128
|
+
if (reason instanceof Error) {
|
|
129
|
+
return reason.message;
|
|
130
|
+
}
|
|
131
|
+
if (typeof reason === 'string') {
|
|
132
|
+
return reason;
|
|
133
|
+
}
|
|
134
|
+
if (reason &&
|
|
135
|
+
typeof reason === 'object' &&
|
|
136
|
+
'message' in reason &&
|
|
137
|
+
typeof reason.message === 'string') {
|
|
138
|
+
const msg = reason.message;
|
|
139
|
+
return msg;
|
|
140
|
+
}
|
|
141
|
+
return 'Unknown error';
|
|
142
|
+
}
|
|
143
|
+
function validateBatchInput(input) {
|
|
144
|
+
if (input.urls.length === 0) {
|
|
145
|
+
return createToolErrorResponse('At least one URL is required', '', 'VALIDATION_ERROR');
|
|
146
|
+
}
|
|
147
|
+
if (input.urls.length > MAX_URLS_PER_BATCH) {
|
|
148
|
+
return createToolErrorResponse(`Maximum ${MAX_URLS_PER_BATCH} URLs allowed per batch`, '', 'VALIDATION_ERROR');
|
|
149
|
+
}
|
|
150
|
+
const validUrls = input.urls.filter((url) => typeof url === 'string' && url.trim().length > 0);
|
|
151
|
+
if (validUrls.length === 0) {
|
|
152
|
+
return createToolErrorResponse('No valid URLs provided', '', 'VALIDATION_ERROR');
|
|
153
|
+
}
|
|
154
|
+
return validUrls;
|
|
155
|
+
}
|
|
120
156
|
export async function fetchUrlsToolHandler(input) {
|
|
121
157
|
try {
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
return
|
|
125
|
-
}
|
|
126
|
-
// Enforce max URLs limit
|
|
127
|
-
if (input.urls.length > MAX_URLS) {
|
|
128
|
-
return createToolErrorResponse(`Maximum ${MAX_URLS} URLs allowed per batch`, '', 'VALIDATION_ERROR');
|
|
158
|
+
const validationResult = validateBatchInput(input);
|
|
159
|
+
if (!Array.isArray(validationResult)) {
|
|
160
|
+
return validationResult;
|
|
129
161
|
}
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
if (validUrls.length === 0) {
|
|
133
|
-
return createToolErrorResponse('No valid URLs provided', '', 'VALIDATION_ERROR');
|
|
134
|
-
}
|
|
135
|
-
const concurrency = Math.min(Math.max(1, input.concurrency ?? DEFAULT_CONCURRENCY), 5);
|
|
162
|
+
const validUrls = validationResult;
|
|
163
|
+
const concurrency = Math.min(Math.max(1, input.concurrency ?? DEFAULT_CONCURRENCY), MAX_CONCURRENCY);
|
|
136
164
|
const continueOnError = input.continueOnError ?? true;
|
|
137
165
|
const format = input.format ?? 'jsonl';
|
|
138
166
|
logDebug('Starting batch URL fetch', {
|
|
@@ -140,49 +168,40 @@ export async function fetchUrlsToolHandler(input) {
|
|
|
140
168
|
concurrency,
|
|
141
169
|
format,
|
|
142
170
|
});
|
|
143
|
-
|
|
144
|
-
const tasks = validUrls.map((url) => async () => processSingleUrl(url, {
|
|
171
|
+
const processOptions = {
|
|
145
172
|
extractMainContent: input.extractMainContent ?? true,
|
|
146
173
|
includeMetadata: input.includeMetadata ?? true,
|
|
147
174
|
maxContentLength: input.maxContentLength,
|
|
148
175
|
format,
|
|
149
|
-
}));
|
|
150
|
-
// Execute with concurrency control
|
|
151
|
-
const settledResults = await runWithConcurrency(concurrency, tasks, {
|
|
152
|
-
onProgress: (completed, total) => {
|
|
153
|
-
logDebug('Batch progress', {
|
|
154
|
-
completed,
|
|
155
|
-
total,
|
|
156
|
-
percentage: Math.round((completed / total) * 100),
|
|
157
|
-
});
|
|
158
|
-
},
|
|
159
|
-
});
|
|
160
|
-
// Helper to safely extract error message from rejected promise
|
|
161
|
-
const getErrorMessage = ({ reason }) => {
|
|
162
|
-
const typedReason = reason;
|
|
163
|
-
return typedReason instanceof Error
|
|
164
|
-
? typedReason.message
|
|
165
|
-
: String(typedReason);
|
|
166
176
|
};
|
|
167
|
-
// Process
|
|
168
|
-
const results =
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
177
|
+
// Process URLs in batches using native Promise.allSettled
|
|
178
|
+
const results = [];
|
|
179
|
+
const batchSize = Math.min(concurrency, validUrls.length);
|
|
180
|
+
for (let i = 0; i < validUrls.length; i += batchSize) {
|
|
181
|
+
const batch = validUrls.slice(i, i + batchSize);
|
|
182
|
+
const batchTasks = batch.map((url) => processSingleUrl(url, processOptions));
|
|
183
|
+
logDebug('Processing batch', {
|
|
184
|
+
batch: i / batchSize + 1,
|
|
185
|
+
urls: batch.length,
|
|
186
|
+
total: validUrls.length,
|
|
187
|
+
});
|
|
188
|
+
const settledResults = await Promise.allSettled(batchTasks);
|
|
189
|
+
const batchResults = settledResults.map((result, index) => {
|
|
190
|
+
if (result.status === 'fulfilled') {
|
|
191
|
+
return result.value;
|
|
192
|
+
}
|
|
174
193
|
return {
|
|
175
|
-
url:
|
|
194
|
+
url: batch[index] ?? 'unknown',
|
|
176
195
|
success: false,
|
|
177
196
|
cached: false,
|
|
178
|
-
error:
|
|
197
|
+
error: extractRejectionMessage(result),
|
|
179
198
|
errorCode: 'PROMISE_REJECTED',
|
|
180
199
|
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
200
|
+
});
|
|
201
|
+
results.push(...batchResults);
|
|
202
|
+
}
|
|
184
203
|
if (!continueOnError) {
|
|
185
|
-
const firstError = results.find((
|
|
204
|
+
const firstError = results.find((result) => !result.success);
|
|
186
205
|
if (firstError && !firstError.success) {
|
|
187
206
|
const errorMsg = firstError.error ?? 'Unknown error';
|
|
188
207
|
return createToolErrorResponse(`Batch failed: ${errorMsg}`, firstError.url, firstError.errorCode ?? 'BATCH_ERROR');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-urls.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-urls.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-urls.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-urls.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiQzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4CrD"}
|
package/dist/tools/index.js
CHANGED
|
@@ -3,8 +3,6 @@ import { FETCH_LINKS_TOOL_DESCRIPTION, FETCH_LINKS_TOOL_NAME, fetchLinksToolHand
|
|
|
3
3
|
import { FETCH_MARKDOWN_TOOL_DESCRIPTION, FETCH_MARKDOWN_TOOL_NAME, fetchMarkdownToolHandler, } from './handlers/fetch-markdown.tool.js';
|
|
4
4
|
import { FETCH_URL_TOOL_DESCRIPTION, FETCH_URL_TOOL_NAME, fetchUrlToolHandler, } from './handlers/fetch-url.tool.js';
|
|
5
5
|
import { FETCH_URLS_TOOL_DESCRIPTION, FETCH_URLS_TOOL_NAME, fetchUrlsToolHandler, } from './handlers/fetch-urls.tool.js';
|
|
6
|
-
// Zod schemas for runtime validation - single source of truth
|
|
7
|
-
// Common request options shared across tools
|
|
8
6
|
const RequestOptionsSchema = {
|
|
9
7
|
customHeaders: z
|
|
10
8
|
.record(z.string())
|
|
@@ -23,7 +21,6 @@ const RequestOptionsSchema = {
|
|
|
23
21
|
.optional()
|
|
24
22
|
.describe('Number of retry attempts (1-10)'),
|
|
25
23
|
};
|
|
26
|
-
// Input schemas
|
|
27
24
|
const FetchUrlInputSchema = {
|
|
28
25
|
url: z.string().min(1).describe('The URL to fetch'),
|
|
29
26
|
extractMainContent: z
|
|
@@ -141,7 +138,6 @@ const FetchUrlsInputSchema = {
|
|
|
141
138
|
.describe('Continue processing if some URLs fail'),
|
|
142
139
|
...RequestOptionsSchema,
|
|
143
140
|
};
|
|
144
|
-
// Output schemas for structured content validation
|
|
145
141
|
const FetchUrlOutputSchema = {
|
|
146
142
|
url: z.string().describe('The fetched URL'),
|
|
147
143
|
title: z.string().optional().describe('Page title'),
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAEvC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { ExtractedArticle, ExtractedMetadata, MetadataBlock } from '../../config/types.js';
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export declare function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
1
|
+
import type { ExtractedArticle, ExtractedMetadata, MetadataBlock, TruncationResult } from '../../config/types.js';
|
|
2
|
+
import type { ContentTransformOptions } from '../../config/types.js';
|
|
3
|
+
export type { ContentTransformOptions };
|
|
4
|
+
export declare function determineContentExtractionSource(extractMainContent: boolean, article: ExtractedArticle | null): article is ExtractedArticle;
|
|
5
|
+
export declare function createContentMetadataBlock(url: string, article: ExtractedArticle | null, extractedMeta: ExtractedMetadata, shouldExtractFromArticle: boolean, includeMetadata: boolean): MetadataBlock | undefined;
|
|
6
|
+
export declare function enforceContentLengthLimit(content: string, maxLength?: number): TruncationResult;
|
|
8
7
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,wBAAgB,gCAAgC,CAC9C,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,IAAI,gBAAgB,CAE7B;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,aAAa,EAAE,iBAAiB,EAChC,wBAAwB,EAAE,OAAO,EACjC,eAAe,EAAE,OAAO,GACvB,aAAa,GAAG,SAAS,CAmB3B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAYlB"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (extractMainContent && config.extraction.extractMainContent && !!article);
|
|
1
|
+
export function determineContentExtractionSource(extractMainContent, article) {
|
|
2
|
+
return extractMainContent && !!article;
|
|
4
3
|
}
|
|
5
|
-
export function
|
|
6
|
-
if (!includeMetadata
|
|
4
|
+
export function createContentMetadataBlock(url, article, extractedMeta, shouldExtractFromArticle, includeMetadata) {
|
|
5
|
+
if (!includeMetadata)
|
|
7
6
|
return undefined;
|
|
8
7
|
const now = new Date().toISOString();
|
|
9
|
-
return
|
|
8
|
+
return shouldExtractFromArticle && article
|
|
10
9
|
? {
|
|
11
10
|
type: 'metadata',
|
|
12
11
|
title: article.title,
|
|
@@ -23,8 +22,9 @@ export function buildMetadata(url, article, extractedMeta, useArticle, includeMe
|
|
|
23
22
|
fetchedAt: now,
|
|
24
23
|
};
|
|
25
24
|
}
|
|
26
|
-
export function
|
|
27
|
-
|
|
25
|
+
export function enforceContentLengthLimit(content, maxLength) {
|
|
26
|
+
const shouldTruncate = maxLength !== undefined && maxLength > 0 && content.length > maxLength;
|
|
27
|
+
if (!shouldTruncate) {
|
|
28
28
|
return { content, truncated: false };
|
|
29
29
|
}
|
|
30
30
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,gCAAgC,CAC9C,kBAA2B,EAC3B,OAAgC;IAEhC,OAAO,kBAAkB,IAAI,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,OAAgC,EAChC,aAAgC,EAChC,wBAAiC,EACjC,eAAwB;IAExB,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,wBAAwB,IAAI,OAAO;QACxC,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG;YACH,SAAS,EAAE,GAAG;SACf;QACH,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,GAAG;YACH,SAAS,EAAE,GAAG;SACf,CAAC;AACR,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,SAAkB;IAElB,MAAM,cAAc,GAClB,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB;QAC7D,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { FetchPipelineOptions, PipelineResult } from '../../config/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Unified fetch pipeline that handles caching, fetching, and transformation.
|
|
4
|
+
* Implements cache-first strategy with automatic serialization.
|
|
5
|
+
*
|
|
6
|
+
* @template T - Type of the transformed result
|
|
7
|
+
* @param options - Pipeline configuration options
|
|
8
|
+
* @returns Promise resolving to the pipeline result
|
|
9
|
+
*/
|
|
2
10
|
export declare function executeFetchPipeline<T>(options: FetchPipelineOptions<T>): Promise<PipelineResult<T>>;
|
|
3
11
|
//# sourceMappingURL=fetch-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAoD/B;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAiD5B"}
|