@j0hanz/superfetch 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -36
- package/dist/config/index.d.ts +10 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +41 -17
- 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 +31 -46
- 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 +31 -14
- 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 -2
- package/dist/resources/cached-content.d.ts.map +1 -1
- package/dist/resources/cached-content.js +3 -34
- 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 +12 -11
- 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 -166
- package/dist/services/cache.js.map +1 -1
- package/dist/services/card-extractor.d.ts +0 -4
- package/dist/services/card-extractor.d.ts.map +1 -1
- package/dist/services/card-extractor.js +6 -1
- package/dist/services/card-extractor.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 +79 -79
- 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 -27
- 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 +3 -0
- 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 +141 -108
- 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 +60 -63
- 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 +14 -171
- 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 +16 -41
- package/dist/utils/tool-error-handler.js.map +1 -1
- package/dist/utils/url-validator.d.ts +1 -0
- package/dist/utils/url-validator.d.ts.map +1 -1
- package/dist/utils/url-validator.js +42 -23
- package/dist/utils/url-validator.js.map +1 -1
- package/package.json +9 -8
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type { FetchUrlInput } from '../../config/types.js';
|
|
1
|
+
import type { FetchUrlInput, ToolResponseBase } from '../../config/types.js';
|
|
2
2
|
export declare const FETCH_URL_TOOL_NAME = "fetch-url";
|
|
3
3
|
export declare 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.";
|
|
4
|
-
export declare function fetchUrlToolHandler(input: FetchUrlInput): Promise<
|
|
5
|
-
content: {
|
|
6
|
-
type: 'text';
|
|
7
|
-
text: string;
|
|
8
|
-
}[];
|
|
9
|
-
structuredContent?: Record<string, unknown>;
|
|
10
|
-
isError?: boolean;
|
|
11
|
-
}>;
|
|
4
|
+
export declare function fetchUrlToolHandler(input: FetchUrlInput): Promise<ToolResponseBase>;
|
|
12
5
|
//# sourceMappingURL=fetch-url.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fetch-url.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEb,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAmB/B,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,6JACqH,CAAC;AAoC7J,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA+D3B"}
|
|
@@ -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,87 +1,108 @@
|
|
|
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 {
|
|
11
|
-
import { createBatchResponse } from '../utils/response-builder.js';
|
|
8
|
+
import { createContentMetadataBlock, determineContentExtractionSource, enforceContentLengthLimit, } from '../utils/common.js';
|
|
12
9
|
import { toJsonl } from '../../transformers/jsonl.transformer.js';
|
|
13
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
14
|
export const FETCH_URLS_TOOL_NAME = 'fetch-urls';
|
|
15
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.';
|
|
16
|
-
|
|
17
|
-
const
|
|
16
|
+
function createBatchResponse(results) {
|
|
17
|
+
const summary = {
|
|
18
|
+
total: results.length,
|
|
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),
|
|
23
|
+
};
|
|
24
|
+
const structuredContent = {
|
|
25
|
+
results,
|
|
26
|
+
summary,
|
|
27
|
+
fetchedAt: new Date().toISOString(),
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: JSON.stringify(structuredContent, null, 2),
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
structuredContent,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
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
|
+
}
|
|
18
86
|
async function processSingleUrl(url, options) {
|
|
19
87
|
try {
|
|
20
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);
|
|
21
96
|
const cacheNamespace = options.format === 'markdown' ? 'markdown' : 'url';
|
|
22
97
|
const cacheKey = cache.createCacheKey(cacheNamespace, normalizedUrl);
|
|
23
98
|
if (cacheKey) {
|
|
24
|
-
|
|
25
|
-
if (cached) {
|
|
26
|
-
logDebug('Batch cache hit', { url: normalizedUrl });
|
|
27
|
-
return {
|
|
28
|
-
url: normalizedUrl,
|
|
29
|
-
success: true,
|
|
30
|
-
content: cached.content,
|
|
31
|
-
cached: true,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
const fetchResult = await fetchUrlWithRetry(normalizedUrl);
|
|
36
|
-
let sourceHtml;
|
|
37
|
-
let title;
|
|
38
|
-
let metadata;
|
|
39
|
-
// Fast path: Skip JSDOM entirely when extractMainContent is false
|
|
40
|
-
if (!options.extractMainContent) {
|
|
41
|
-
sourceHtml = fetchResult.html;
|
|
42
|
-
const $ = cheerio.load(fetchResult.html);
|
|
43
|
-
const extractedMeta = extractMetadataWithCheerio($);
|
|
44
|
-
({ title } = extractedMeta);
|
|
45
|
-
if (options.includeMetadata) {
|
|
46
|
-
metadata = {
|
|
47
|
-
type: 'metadata',
|
|
48
|
-
url: normalizedUrl,
|
|
49
|
-
fetchedAt: new Date().toISOString(),
|
|
50
|
-
title: extractedMeta.title,
|
|
51
|
-
description: extractedMeta.description,
|
|
52
|
-
author: extractedMeta.author,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
// Slow path: Use JSDOM only when article extraction is needed
|
|
58
|
-
const { article, metadata: extractedMeta } = extractContent(fetchResult.html, normalizedUrl, {
|
|
59
|
-
extractArticle: true,
|
|
60
|
-
});
|
|
61
|
-
const useArticle = shouldUseArticle(true, article);
|
|
62
|
-
metadata = buildMetadata(normalizedUrl, article, extractedMeta, useArticle, options.includeMetadata);
|
|
63
|
-
sourceHtml = useArticle ? article.content : fetchResult.html;
|
|
64
|
-
title = useArticle ? article.title : extractedMeta.title;
|
|
65
|
-
}
|
|
66
|
-
let content;
|
|
67
|
-
let contentBlocks;
|
|
68
|
-
if (options.format === 'markdown') {
|
|
69
|
-
content = htmlToMarkdown(sourceHtml, metadata);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const blocks = parseHtml(sourceHtml);
|
|
73
|
-
contentBlocks = blocks.length;
|
|
74
|
-
content = toJsonl(blocks, metadata);
|
|
99
|
+
cache.set(cacheKey, finalContent);
|
|
75
100
|
}
|
|
76
|
-
const { content: truncatedContent } = truncateContent(content, options.maxContentLength);
|
|
77
|
-
content = truncatedContent;
|
|
78
|
-
if (cacheKey)
|
|
79
|
-
cache.set(cacheKey, content);
|
|
80
101
|
return {
|
|
81
102
|
url: normalizedUrl,
|
|
82
103
|
success: true,
|
|
83
104
|
title,
|
|
84
|
-
content,
|
|
105
|
+
content: finalContent,
|
|
85
106
|
contentBlocks,
|
|
86
107
|
cached: false,
|
|
87
108
|
};
|
|
@@ -103,22 +124,43 @@ async function processSingleUrl(url, options) {
|
|
|
103
124
|
};
|
|
104
125
|
}
|
|
105
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
|
+
}
|
|
106
156
|
export async function fetchUrlsToolHandler(input) {
|
|
107
157
|
try {
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
return
|
|
158
|
+
const validationResult = validateBatchInput(input);
|
|
159
|
+
if (!Array.isArray(validationResult)) {
|
|
160
|
+
return validationResult;
|
|
111
161
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return createToolErrorResponse(`Maximum ${MAX_URLS} URLs allowed per batch`, '', 'VALIDATION_ERROR');
|
|
115
|
-
}
|
|
116
|
-
// Filter out empty URLs
|
|
117
|
-
const validUrls = input.urls.filter((url) => typeof url === 'string' && url.trim().length > 0);
|
|
118
|
-
if (validUrls.length === 0) {
|
|
119
|
-
return createToolErrorResponse('No valid URLs provided', '', 'VALIDATION_ERROR');
|
|
120
|
-
}
|
|
121
|
-
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);
|
|
122
164
|
const continueOnError = input.continueOnError ?? true;
|
|
123
165
|
const format = input.format ?? 'jsonl';
|
|
124
166
|
logDebug('Starting batch URL fetch', {
|
|
@@ -126,49 +168,40 @@ export async function fetchUrlsToolHandler(input) {
|
|
|
126
168
|
concurrency,
|
|
127
169
|
format,
|
|
128
170
|
});
|
|
129
|
-
|
|
130
|
-
const tasks = validUrls.map((url) => async () => processSingleUrl(url, {
|
|
171
|
+
const processOptions = {
|
|
131
172
|
extractMainContent: input.extractMainContent ?? true,
|
|
132
173
|
includeMetadata: input.includeMetadata ?? true,
|
|
133
174
|
maxContentLength: input.maxContentLength,
|
|
134
175
|
format,
|
|
135
|
-
}));
|
|
136
|
-
// Execute with concurrency control
|
|
137
|
-
const settledResults = await runWithConcurrency(concurrency, tasks, {
|
|
138
|
-
onProgress: (completed, total) => {
|
|
139
|
-
logDebug('Batch progress', {
|
|
140
|
-
completed,
|
|
141
|
-
total,
|
|
142
|
-
percentage: Math.round((completed / total) * 100),
|
|
143
|
-
});
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
// Helper to safely extract error message from rejected promise
|
|
147
|
-
const getErrorMessage = ({ reason }) => {
|
|
148
|
-
const typedReason = reason;
|
|
149
|
-
return typedReason instanceof Error
|
|
150
|
-
? typedReason.message
|
|
151
|
-
: String(typedReason);
|
|
152
176
|
};
|
|
153
|
-
// Process
|
|
154
|
-
const results =
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
+
}
|
|
160
193
|
return {
|
|
161
|
-
url:
|
|
194
|
+
url: batch[index] ?? 'unknown',
|
|
162
195
|
success: false,
|
|
163
196
|
cached: false,
|
|
164
|
-
error:
|
|
197
|
+
error: extractRejectionMessage(result),
|
|
165
198
|
errorCode: 'PROMISE_REJECTED',
|
|
166
199
|
};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
200
|
+
});
|
|
201
|
+
results.push(...batchResults);
|
|
202
|
+
}
|
|
170
203
|
if (!continueOnError) {
|
|
171
|
-
const firstError = results.find((
|
|
204
|
+
const firstError = results.find((result) => !result.success);
|
|
172
205
|
if (firstError && !firstError.success) {
|
|
173
206
|
const errorMsg = firstError.error ?? 'Unknown error';
|
|
174
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":"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,MAAM,oBAAoB,GAAG;IAC3B,aAAa,EAAE,CAAC;SACb,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACnD,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SAC3B,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,eAAe,CAAC;IAC5B,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChE,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,wBAAwB,CAAC;IACrC,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,wBAAwB,CAAC;IACrC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,0CAA0C,CAAC;IACvD,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,wBAAwB,GAAG;IAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACnD,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,mCAAmC,CAAC;IAChD,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,0CAA0C,CAAC;IACvD,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,oCAAoC,CAAC;IACjD,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SAC3B,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,4BAA4B,CAAC;IACzC,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,mCAAmC,CAAC;IAChD,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,uCAAuC,CAAC;IACpD,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACxE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACrE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC9E,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACjE,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;KACtE,CAAC,CACH;SACA,QAAQ,CAAC,0BAA0B,CAAC;IACvC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC9E,CAAC;AAEF,MAAM,yBAAyB,GAAG;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzE,GAAG,EAAE,CAAC;SACH,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACtD,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxE,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC9E,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,CAAC;SACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAChE,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KAClE,CAAC,CACH;SACA,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACvD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC1E,CAAC;SACD,QAAQ,CAAC,oBAAoB,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,oBAAoB;KACnC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAC1C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,sBAAsB;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAC5C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE,yBAAyB;KACxC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,qBAAqB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|