@j0hanz/superfetch 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +18 -204
  2. package/dist/config/constants.d.ts +0 -1
  3. package/dist/config/constants.js +0 -1
  4. package/dist/config/formatting.d.ts +0 -1
  5. package/dist/config/formatting.d.ts.map +1 -1
  6. package/dist/config/formatting.js +1 -3
  7. package/dist/config/formatting.js.map +1 -1
  8. package/dist/config/index.d.ts +1 -2
  9. package/dist/config/index.d.ts.map +1 -1
  10. package/dist/config/index.js +5 -11
  11. package/dist/config/index.js.map +1 -1
  12. package/dist/config/types/content.d.ts +0 -1
  13. package/dist/config/types/content.js +0 -1
  14. package/dist/config/types/runtime.d.ts +0 -1
  15. package/dist/config/types/runtime.js +0 -1
  16. package/dist/config/types/tools.d.ts +0 -1
  17. package/dist/config/types/tools.js +0 -1
  18. package/dist/errors/app-error.d.ts +0 -1
  19. package/dist/errors/app-error.js +0 -1
  20. package/dist/http/auth.d.ts +0 -1
  21. package/dist/http/auth.js +0 -1
  22. package/dist/http/cors.d.ts +0 -1
  23. package/dist/http/cors.js +0 -1
  24. package/dist/http/download-routes.d.ts +1 -2
  25. package/dist/http/download-routes.d.ts.map +1 -1
  26. package/dist/http/download-routes.js +2 -2
  27. package/dist/http/mcp-routes.d.ts +0 -1
  28. package/dist/http/mcp-routes.js +0 -1
  29. package/dist/http/mcp-session-helpers.d.ts +0 -1
  30. package/dist/http/mcp-session-helpers.js +0 -1
  31. package/dist/http/mcp-session.d.ts +1 -2
  32. package/dist/http/mcp-session.d.ts.map +1 -1
  33. package/dist/http/mcp-session.js +0 -1
  34. package/dist/http/mcp-validation.d.ts +1 -2
  35. package/dist/http/mcp-validation.d.ts.map +1 -1
  36. package/dist/http/mcp-validation.js +6 -27
  37. package/dist/http/mcp-validation.js.map +1 -1
  38. package/dist/http/rate-limit.d.ts +1 -2
  39. package/dist/http/rate-limit.d.ts.map +1 -1
  40. package/dist/http/rate-limit.js +0 -1
  41. package/dist/http/rate-limit.js.map +1 -1
  42. package/dist/http/server-middleware.d.ts +0 -1
  43. package/dist/http/server-middleware.d.ts.map +1 -1
  44. package/dist/http/server-middleware.js +60 -4
  45. package/dist/http/server-middleware.js.map +1 -1
  46. package/dist/http/server.d.ts +0 -1
  47. package/dist/http/server.js +0 -1
  48. package/dist/http/session-cleanup.d.ts +0 -1
  49. package/dist/http/session-cleanup.js +0 -1
  50. package/dist/http/sessions.d.ts +1 -2
  51. package/dist/http/sessions.d.ts.map +1 -1
  52. package/dist/http/sessions.js +0 -1
  53. package/dist/index.d.ts +0 -1
  54. package/dist/index.js +0 -1
  55. package/dist/middleware/error-handler.d.ts +0 -1
  56. package/dist/middleware/error-handler.js +0 -1
  57. package/dist/resources/cached-content.d.ts +0 -1
  58. package/dist/resources/cached-content.js +0 -1
  59. package/dist/resources/index.d.ts +0 -1
  60. package/dist/resources/index.js +0 -1
  61. package/dist/server.d.ts +0 -1
  62. package/dist/server.d.ts.map +1 -1
  63. package/dist/server.js +8 -3
  64. package/dist/server.js.map +1 -1
  65. package/dist/services/cache.d.ts +2 -2
  66. package/dist/services/cache.d.ts.map +1 -1
  67. package/dist/services/cache.js +4 -2
  68. package/dist/services/context.d.ts +2 -1
  69. package/dist/services/context.js +10 -1
  70. package/dist/services/extractor.d.ts +1 -2
  71. package/dist/services/extractor.d.ts.map +1 -1
  72. package/dist/services/extractor.js +0 -1
  73. package/dist/services/fetcher/agents.d.ts +0 -1
  74. package/dist/services/fetcher/agents.js +55 -2
  75. package/dist/services/fetcher/errors.d.ts +0 -1
  76. package/dist/services/fetcher/errors.js +0 -1
  77. package/dist/services/fetcher/interceptors.d.ts +0 -1
  78. package/dist/services/fetcher/interceptors.js +44 -24
  79. package/dist/services/fetcher/redirects.d.ts +0 -1
  80. package/dist/services/fetcher/redirects.js +2 -3
  81. package/dist/services/fetcher/response.d.ts +1 -2
  82. package/dist/services/fetcher/response.js +28 -16
  83. package/dist/services/fetcher/retry-policy.d.ts +0 -1
  84. package/dist/services/fetcher/retry-policy.js +0 -1
  85. package/dist/services/fetcher.d.ts +2 -2
  86. package/dist/services/fetcher.d.ts.map +1 -1
  87. package/dist/services/fetcher.js +9 -7
  88. package/dist/services/fetcher.js.map +1 -1
  89. package/dist/services/logger.d.ts +1 -2
  90. package/dist/services/logger.d.ts.map +1 -1
  91. package/dist/services/logger.js +0 -1
  92. package/dist/services/parser.d.ts +5 -2
  93. package/dist/services/parser.d.ts.map +1 -1
  94. package/dist/services/parser.js +72 -3
  95. package/dist/tools/handlers/fetch-markdown.tool.d.ts +1 -2
  96. package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
  97. package/dist/tools/handlers/fetch-markdown.tool.js +34 -3
  98. package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
  99. package/dist/tools/handlers/fetch-single.shared.d.ts +5 -3
  100. package/dist/tools/handlers/fetch-single.shared.d.ts.map +1 -1
  101. package/dist/tools/handlers/fetch-single.shared.js +8 -4
  102. package/dist/tools/handlers/fetch-single.shared.js.map +1 -1
  103. package/dist/tools/handlers/fetch-url.tool.d.ts +1 -2
  104. package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
  105. package/dist/tools/handlers/fetch-url.tool.js +36 -3
  106. package/dist/tools/index.d.ts +0 -1
  107. package/dist/tools/index.js +0 -1
  108. package/dist/tools/schemas.d.ts +32 -33
  109. package/dist/tools/schemas.js +21 -5
  110. package/dist/tools/utils/cache-vary.d.ts +0 -1
  111. package/dist/tools/utils/cache-vary.d.ts.map +1 -1
  112. package/dist/tools/utils/cache-vary.js +7 -25
  113. package/dist/tools/utils/cache-vary.js.map +1 -1
  114. package/dist/tools/utils/common.d.ts +2 -3
  115. package/dist/tools/utils/common.d.ts.map +1 -1
  116. package/dist/tools/utils/common.js +6 -7
  117. package/dist/tools/utils/common.js.map +1 -1
  118. package/dist/tools/utils/content-transform.d.ts +1 -3
  119. package/dist/tools/utils/content-transform.d.ts.map +1 -1
  120. package/dist/tools/utils/content-transform.js +73 -8
  121. package/dist/tools/utils/content-transform.js.map +1 -1
  122. package/dist/tools/utils/fetch-pipeline.d.ts +1 -2
  123. package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -1
  124. package/dist/tools/utils/fetch-pipeline.js +18 -22
  125. package/dist/tools/utils/inline-content.d.ts +0 -1
  126. package/dist/tools/utils/inline-content.js +0 -1
  127. package/dist/transformers/jsonl.transformer.d.ts +1 -2
  128. package/dist/transformers/jsonl.transformer.d.ts.map +1 -1
  129. package/dist/transformers/jsonl.transformer.js +0 -1
  130. package/dist/transformers/jsonl.transformer.js.map +1 -1
  131. package/dist/transformers/markdown.transformer.d.ts +1 -2
  132. package/dist/transformers/markdown.transformer.d.ts.map +1 -1
  133. package/dist/transformers/markdown.transformer.js +8 -1
  134. package/dist/utils/code-language.d.ts +0 -1
  135. package/dist/utils/code-language.js +0 -1
  136. package/dist/utils/content-cleaner.d.ts +0 -1
  137. package/dist/utils/content-cleaner.js +0 -1
  138. package/dist/utils/crypto.d.ts +0 -1
  139. package/dist/utils/crypto.js +0 -1
  140. package/dist/utils/download-url.d.ts +1 -2
  141. package/dist/utils/download-url.d.ts.map +1 -1
  142. package/dist/utils/download-url.js +0 -1
  143. package/dist/utils/error-utils.d.ts +0 -1
  144. package/dist/utils/error-utils.js +1 -3
  145. package/dist/utils/filename-generator.d.ts +0 -1
  146. package/dist/utils/filename-generator.js +0 -1
  147. package/dist/utils/header-normalizer.d.ts +0 -1
  148. package/dist/utils/header-normalizer.js +0 -1
  149. package/dist/utils/html-truncator.d.ts +0 -1
  150. package/dist/utils/html-truncator.js +0 -1
  151. package/dist/utils/sanitizer.d.ts +0 -1
  152. package/dist/utils/sanitizer.js +0 -1
  153. package/dist/utils/tool-error-handler.d.ts +1 -2
  154. package/dist/utils/tool-error-handler.d.ts.map +1 -1
  155. package/dist/utils/tool-error-handler.js +0 -1
  156. package/dist/utils/url-validator.d.ts +6 -3
  157. package/dist/utils/url-validator.d.ts.map +1 -1
  158. package/dist/utils/url-validator.js +49 -11
  159. package/dist/utils/url-validator.js.map +1 -1
  160. package/package.json +4 -4
@@ -1,5 +1,4 @@
1
- export declare function readResponseText(response: Response, url: string, maxBytes: number): Promise<{
1
+ export declare function readResponseText(response: Response, url: string, maxBytes: number, signal?: AbortSignal): Promise<{
2
2
  text: string;
3
3
  size: number;
4
4
  }>;
5
- //# sourceMappingURL=response.d.ts.map
@@ -9,31 +9,43 @@ function assertContentLengthWithinLimit(response, url, maxBytes) {
9
9
  }
10
10
  throw new FetchError(`Response exceeds maximum size of ${maxBytes} bytes`, url);
11
11
  }
12
- async function readStreamWithLimit(stream, url, maxBytes) {
12
+ function throwIfReadAborted(url, signal) {
13
+ if (!signal?.aborted)
14
+ return;
15
+ throw new FetchError('Request was aborted during response read', url, 499, {
16
+ reason: 'aborted',
17
+ });
18
+ }
19
+ async function readStreamWithLimit(stream, url, maxBytes, signal) {
13
20
  const reader = stream.getReader();
14
21
  const decoder = new TextDecoder();
15
22
  let total = 0;
16
- let text = '';
17
- for (;;) {
18
- const { value, done } = await reader.read();
19
- if (done)
20
- break;
21
- total += value.byteLength;
22
- if (total > maxBytes) {
23
- await reader.cancel();
24
- throw new FetchError(`Response exceeds maximum size of ${maxBytes} bytes`, url);
23
+ const chunks = [];
24
+ try {
25
+ for (;;) {
26
+ throwIfReadAborted(url, signal);
27
+ const { value, done } = await reader.read();
28
+ if (done)
29
+ break;
30
+ total += value.byteLength;
31
+ if (total > maxBytes) {
32
+ await reader.cancel();
33
+ throw new FetchError(`Response exceeds maximum size of ${maxBytes} bytes`, url);
34
+ }
35
+ chunks.push(decoder.decode(value, { stream: true }));
25
36
  }
26
- text += decoder.decode(value, { stream: true });
37
+ chunks.push(decoder.decode());
38
+ return { text: chunks.join(''), size: total };
39
+ }
40
+ finally {
41
+ reader.releaseLock();
27
42
  }
28
- text += decoder.decode();
29
- return { text, size: total };
30
43
  }
31
- export async function readResponseText(response, url, maxBytes) {
44
+ export async function readResponseText(response, url, maxBytes, signal) {
32
45
  assertContentLengthWithinLimit(response, url, maxBytes);
33
46
  if (!response.body) {
34
47
  const text = await response.text();
35
48
  return { text, size: Buffer.byteLength(text) };
36
49
  }
37
- return readStreamWithLimit(response.body, url, maxBytes);
50
+ return readStreamWithLimit(response.body, url, maxBytes, signal);
38
51
  }
39
- //# sourceMappingURL=response.js.map
@@ -1,2 +1 @@
1
1
  export declare function executeWithRetry<T>(url: string, maxRetries: number, operation: () => Promise<T>, signal?: AbortSignal): Promise<T>;
2
- //# sourceMappingURL=retry-policy.d.ts.map
@@ -129,4 +129,3 @@ function getRateLimitDelay(error) {
129
129
  : 60;
130
130
  return Math.min(retryAfter * 1000, 30000);
131
131
  }
132
- //# sourceMappingURL=retry-policy.js.map
@@ -1,5 +1,5 @@
1
- import type { FetchOptions } from '../config/types.js';
1
+ import type { FetchOptions } from '../config/types/runtime.js';
2
2
  import { destroyAgents } from './fetcher/agents.js';
3
3
  export { destroyAgents };
4
4
  export declare function fetchUrlWithRetry(url: string, options?: FetchOptions, maxRetries?: number): Promise<string>;
5
- //# sourceMappingURL=fetcher.d.ts.map
5
+ export declare function fetchNormalizedUrlWithRetry(normalizedUrl: string, options?: FetchOptions, maxRetries?: number): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAgBhE,OAAO,EAAE,aAAa,EAAE,CAAC;AA2FzB,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,SAAI,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAehE,OAAO,EAAE,aAAa,EAAE,CAAC;AA8FzB,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,SAAI,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB"}
@@ -1,8 +1,8 @@
1
1
  import { config } from '../config/index.js';
2
+ import { normalizeHeaderRecord } from '../utils/header-normalizer.js';
2
3
  import { validateAndNormalizeUrl } from '../utils/url-validator.js';
3
4
  import { destroyAgents, dispatcher } from './fetcher/agents.js';
4
5
  import { createHttpError, createRateLimitError, mapFetchError, } from './fetcher/errors.js';
5
- import { sanitizeHeaders } from './fetcher/headers.js';
6
6
  import { recordFetchError, recordFetchResponse, startFetchTelemetry, } from './fetcher/interceptors.js';
7
7
  import { fetchWithRedirects } from './fetcher/redirects.js';
8
8
  import { readResponseText } from './fetcher/response.js';
@@ -17,7 +17,7 @@ const DEFAULT_HEADERS = {
17
17
  };
18
18
  function buildHeaders(customHeaders) {
19
19
  const headers = new Headers(DEFAULT_HEADERS);
20
- const sanitized = sanitizeHeaders(customHeaders);
20
+ const sanitized = normalizeHeaderRecord(customHeaders, config.security.blockedHeaders);
21
21
  if (sanitized) {
22
22
  for (const [key, value] of Object.entries(sanitized)) {
23
23
  headers.set(key, value);
@@ -39,7 +39,7 @@ function buildRequestInit(headers, signal) {
39
39
  dispatcher,
40
40
  };
41
41
  }
42
- async function handleFetchResponse(response, finalUrl, telemetry) {
42
+ async function handleFetchResponse(response, finalUrl, telemetry, signal) {
43
43
  if (response.status === 429) {
44
44
  void response.body?.cancel();
45
45
  throw createRateLimitError(finalUrl, response.headers.get('retry-after'));
@@ -48,7 +48,7 @@ async function handleFetchResponse(response, finalUrl, telemetry) {
48
48
  void response.body?.cancel();
49
49
  throw createHttpError(finalUrl, response.status, response.statusText);
50
50
  }
51
- const { text, size } = await readResponseText(response, finalUrl, config.fetcher.maxContentLength);
51
+ const { text, size } = await readResponseText(response, finalUrl, config.fetcher.maxContentLength, signal);
52
52
  recordFetchResponse(telemetry, response, size);
53
53
  return text;
54
54
  }
@@ -57,7 +57,7 @@ async function fetchWithTelemetry(normalizedUrl, requestInit, timeoutMs) {
57
57
  try {
58
58
  const { response, url: finalUrl } = await fetchWithRedirects(normalizedUrl, requestInit, config.fetcher.maxRedirects);
59
59
  telemetry.url = finalUrl;
60
- return await handleFetchResponse(response, finalUrl, telemetry);
60
+ return await handleFetchResponse(response, finalUrl, telemetry, requestInit.signal ?? undefined);
61
61
  }
62
62
  catch (error) {
63
63
  const mapped = mapFetchError(error, normalizedUrl, timeoutMs);
@@ -67,7 +67,10 @@ async function fetchWithTelemetry(normalizedUrl, requestInit, timeoutMs) {
67
67
  }
68
68
  }
69
69
  export async function fetchUrlWithRetry(url, options, maxRetries = 3) {
70
- const normalizedUrl = validateAndNormalizeUrl(url);
70
+ const normalizedUrl = await validateAndNormalizeUrl(url);
71
+ return fetchNormalizedUrlWithRetry(normalizedUrl, options, maxRetries);
72
+ }
73
+ export async function fetchNormalizedUrlWithRetry(normalizedUrl, options, maxRetries = 3) {
71
74
  const context = buildRequestContext(options);
72
75
  return executeWithRetry(normalizedUrl, maxRetries, async () => runFetch(normalizedUrl, context), context.signal);
73
76
  }
@@ -83,4 +86,3 @@ async function runFetch(normalizedUrl, context) {
83
86
  const requestInit = buildRequestInit(context.headers, signal);
84
87
  return fetchWithTelemetry(normalizedUrl, requestInit, context.timeoutMs);
85
88
  }
86
- //# sourceMappingURL=fetcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,eAAe,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;IACtC,MAAM,EACJ,4EAA4E;IAC9E,iBAAiB,EAAE,gBAAgB;IACnC,iBAAiB,EAAE,mBAAmB;IACtC,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,SAAS,YAAY,CAAC,aAAsC;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,qBAAqB,CACrC,aAAa,EACb,MAAM,CAAC,QAAQ,CAAC,cAAc,CAC/B,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CACzB,SAAiB,EACjB,QAAsB;IAEtB,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC;IACpC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAgB,EAChB,MAAmB;IAEnB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,OAAO;QACP,MAAM;QACN,UAAU;KACX,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAkB,EAClB,QAAgB,EAChB,SAAiD;IAEjD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAC3C,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAChC,CAAC;IACF,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,aAAqB,EACrB,WAAwB,EACxB,SAAiB;IAEjB,MAAM,SAAS,GAAG,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,kBAAkB,CAC1D,aAAa,EACb,WAAW,EACX,MAAM,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAC;QAEF,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;QACzB,OAAO,MAAM,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAC9D,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAC3B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,OAAsB,EACtB,UAAU,GAAG,CAAC;IAEd,MAAM,aAAa,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,gBAAgB,CACrB,aAAa,EACb,UAAU,EACV,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,EAC5C,OAAO,CAAC,MAAM,CACf,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAsB;IAKjD,OAAO;QACL,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO;QACrD,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC;QAC7C,MAAM,EAAE,OAAO,EAAE,MAAM;KACxB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,aAAqB,EACrB,OAAsE;IAEtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,kBAAkB,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,6 +1,5 @@
1
- import type { LogMetadata } from '../config/types.js';
1
+ import type { LogMetadata } from '../config/types/runtime.js';
2
2
  export declare function logInfo(message: string, meta?: LogMetadata): void;
3
3
  export declare function logDebug(message: string, meta?: LogMetadata): void;
4
4
  export declare function logWarn(message: string, meta?: LogMetadata): void;
5
5
  export declare function logError(message: string, error?: Error | LogMetadata): void;
6
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAkChE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIlE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CAS3E"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAkCxE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIlE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CAS3E"}
@@ -47,4 +47,3 @@ export function logError(message, error) {
47
47
  : (error ?? {});
48
48
  process.stderr.write(`${formatLogEntry('error', message, errorMeta)}\n`);
49
49
  }
50
- //# sourceMappingURL=logger.js.map
@@ -1,3 +1,6 @@
1
- import type { ContentBlockUnion } from '../config/types.js';
1
+ import type { ContentBlockUnion, ExtractedMetadata } from '../config/types/content.js';
2
2
  export declare function parseHtml(html: string): ContentBlockUnion[];
3
- //# sourceMappingURL=parser.d.ts.map
3
+ export declare function parseHtmlWithMetadata(html: string): {
4
+ blocks: ContentBlockUnion[];
5
+ metadata: ExtractedMetadata;
6
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/services/parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,iBAAiB,EAOlB,MAAM,oBAAoB,CAAC;AAoP5B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAS3D"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/services/parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,iBAAiB,EAOlB,MAAM,4BAA4B,CAAC;AAoPpC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAS3D"}
@@ -7,6 +7,60 @@ import { truncateHtml } from '../utils/html-truncator.js';
7
7
  import { sanitizeText } from '../utils/sanitizer.js';
8
8
  import { logWarn } from './logger.js';
9
9
  const CONTENT_SELECTOR = 'h1, h2, h3, h4, h5, h6, p, ul, ol, pre, code:not(pre code), table, img, blockquote';
10
+ function createMetaCollectorState() {
11
+ return {
12
+ title: {},
13
+ description: {},
14
+ author: {},
15
+ };
16
+ }
17
+ function resolveMetaField(state, field) {
18
+ const sources = state[field];
19
+ return sources.og ?? sources.twitter ?? sources.standard;
20
+ }
21
+ function extractMetadata($) {
22
+ const state = createMetaCollectorState();
23
+ $('meta').each((_, element) => {
24
+ const content = $(element).attr('content')?.trim();
25
+ if (!content)
26
+ return;
27
+ const property = $(element).attr('property');
28
+ if (property?.startsWith('og:')) {
29
+ const key = property.replace('og:', '');
30
+ if (key === 'title')
31
+ state.title.og = content;
32
+ if (key === 'description')
33
+ state.description.og = content;
34
+ return;
35
+ }
36
+ const name = $(element).attr('name');
37
+ if (name?.startsWith('twitter:')) {
38
+ const key = name.replace('twitter:', '');
39
+ if (key === 'title')
40
+ state.title.twitter = content;
41
+ if (key === 'description')
42
+ state.description.twitter = content;
43
+ return;
44
+ }
45
+ if (name === 'description') {
46
+ state.description.standard = content;
47
+ }
48
+ if (name === 'author') {
49
+ state.author.standard = content;
50
+ }
51
+ });
52
+ if (!state.title.standard) {
53
+ const titleText = $('title').first().text().trim();
54
+ if (titleText) {
55
+ state.title.standard = titleText;
56
+ }
57
+ }
58
+ return {
59
+ title: resolveMetaField(state, 'title'),
60
+ description: resolveMetaField(state, 'description'),
61
+ author: resolveMetaField(state, 'author'),
62
+ };
63
+ }
10
64
  function parseHeading($, element) {
11
65
  const rawText = sanitizeText($(element).text());
12
66
  const text = cleanHeading(rawText);
@@ -173,6 +227,10 @@ function loadHtml(html) {
173
227
  return null;
174
228
  }
175
229
  }
230
+ function prepareCheerio(html) {
231
+ const processedHtml = truncateHtml(html);
232
+ return loadHtml(processedHtml);
233
+ }
176
234
  function removeNoiseElements($) {
177
235
  $('script, style, noscript, iframe, svg').remove();
178
236
  }
@@ -198,11 +256,22 @@ function safeParseElement($, element) {
198
256
  export function parseHtml(html) {
199
257
  if (!html || typeof html !== 'string')
200
258
  return [];
201
- const processedHtml = truncateHtml(html);
202
- const $ = loadHtml(processedHtml);
259
+ const $ = prepareCheerio(html);
203
260
  if (!$)
204
261
  return [];
205
262
  removeNoiseElements($);
206
263
  return filterBlocks(collectBlocks($));
207
264
  }
208
- //# sourceMappingURL=parser.js.map
265
+ export function parseHtmlWithMetadata(html) {
266
+ if (!html || typeof html !== 'string') {
267
+ return { blocks: [], metadata: {} };
268
+ }
269
+ const $ = prepareCheerio(html);
270
+ if (!$) {
271
+ return { blocks: [], metadata: {} };
272
+ }
273
+ const metadata = extractMetadata($);
274
+ removeNoiseElements($);
275
+ const blocks = filterBlocks(collectBlocks($));
276
+ return { blocks, metadata };
277
+ }
@@ -1,5 +1,4 @@
1
- import type { FetchMarkdownInput, ToolResponseBase } from '../../config/types.js';
1
+ import type { FetchMarkdownInput, ToolResponseBase } from '../../config/types/tools.js';
2
2
  export declare const FETCH_MARKDOWN_TOOL_NAME = "fetch-markdown";
3
3
  export declare const FETCH_MARKDOWN_TOOL_DESCRIPTION = "Fetches a webpage and converts it to clean Markdown format with optional frontmatter and content length limits";
4
4
  export declare function fetchMarkdownToolHandler(input: FetchMarkdownInput): Promise<ToolResponseBase>;
5
- //# sourceMappingURL=fetch-markdown.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-markdown.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAIlB,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC;AAuB/B,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,mHACsE,CAAC;AA0GnH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
1
+ {"version":3,"file":"fetch-markdown.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAElB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAuBrC,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,mHACsE,CAAC;AA0GnH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
@@ -1,13 +1,44 @@
1
+ import { config } from '../../config/index.js';
1
2
  import { logDebug, logError } from '../../services/logger.js';
2
3
  import { createToolErrorResponse, handleToolError, } from '../../utils/tool-error-handler.js';
3
4
  import { transformHtmlToMarkdown } from '../utils/content-transform.js';
4
5
  import { applyInlineResultToStructuredContent, buildToolContentBlocks, getFileDownloadInfo, getInlineErrorResponse, performSharedFetch, } from './fetch-single.shared.js';
5
6
  export const FETCH_MARKDOWN_TOOL_NAME = 'fetch-markdown';
6
7
  export const FETCH_MARKDOWN_TOOL_DESCRIPTION = 'Fetches a webpage and converts it to clean Markdown format with optional frontmatter and content length limits';
8
+ function isRecord(value) {
9
+ return value !== null && typeof value === 'object';
10
+ }
11
+ function deserializeMarkdownPipelineResult(cached) {
12
+ try {
13
+ const parsed = JSON.parse(cached);
14
+ if (!isRecord(parsed))
15
+ return undefined;
16
+ const { content, markdown, title, truncated } = parsed;
17
+ if (typeof content !== 'string')
18
+ return undefined;
19
+ if (typeof markdown !== 'string')
20
+ return undefined;
21
+ if (title !== undefined && typeof title !== 'string')
22
+ return undefined;
23
+ if (truncated !== undefined && typeof truncated !== 'boolean') {
24
+ return undefined;
25
+ }
26
+ const resolvedTitle = typeof title === 'string' ? title : undefined;
27
+ return {
28
+ content,
29
+ markdown,
30
+ title: resolvedTitle,
31
+ truncated: truncated ?? false,
32
+ };
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
7
38
  function resolveMarkdownOptions(input) {
8
39
  return {
9
- extractMainContent: input.extractMainContent ?? true,
10
- includeMetadata: input.includeMetadata ?? true,
40
+ extractMainContent: input.extractMainContent ?? config.extraction.extractMainContent,
41
+ includeMetadata: input.includeMetadata ?? config.extraction.includeMetadata,
11
42
  maxContentLength: input.maxContentLength,
12
43
  };
13
44
  }
@@ -48,6 +79,7 @@ async function fetchMarkdownPipeline(url, input, options, transformOptions) {
48
79
  retries: input.retries,
49
80
  timeout: input.timeout,
50
81
  transform: buildMarkdownTransform(transformOptions),
82
+ deserialize: deserializeMarkdownPipelineResult,
51
83
  });
52
84
  }
53
85
  function buildMarkdownResponse(pipeline, inlineResult, fileDownload) {
@@ -87,4 +119,3 @@ async function executeFetchMarkdown(input) {
87
119
  : null;
88
120
  return buildMarkdownResponse(pipeline, inlineResult, fileDownload);
89
121
  }
90
- //# sourceMappingURL=fetch-markdown.tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-markdown.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-markdown.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { PipelineResult, ToolContentBlock, ToolResponseBase } from '../../config/types.js';
2
- import type { FileDownloadInfo } from '../../config/types.js';
1
+ import type { PipelineResult, ToolContentBlock } from '../../config/types/runtime.js';
2
+ import type { FileDownloadInfo, ToolResponseBase } from '../../config/types/tools.js';
3
3
  import { applyInlineContentLimit } from '../utils/inline-content.js';
4
4
  type SharedFetchFormat = 'jsonl' | 'markdown';
5
5
  interface SharedFetchOptions<T extends {
@@ -10,10 +10,13 @@ interface SharedFetchOptions<T extends {
10
10
  readonly extractMainContent: boolean;
11
11
  readonly includeMetadata: boolean;
12
12
  readonly maxContentLength?: number;
13
+ readonly cacheVariant?: string;
13
14
  readonly customHeaders?: Record<string, string>;
14
15
  readonly retries?: number;
15
16
  readonly timeout?: number;
16
17
  readonly transform: (html: string, normalizedUrl: string) => T;
18
+ readonly serialize?: (result: T) => string;
19
+ readonly deserialize?: (cached: string) => T | undefined;
17
20
  }
18
21
  export declare function performSharedFetch<T extends {
19
22
  content: string;
@@ -32,4 +35,3 @@ export declare function getInlineErrorResponse(inlineResult: InlineResult, url:
32
35
  export declare function applyInlineResultToStructuredContent(structuredContent: Record<string, unknown>, inlineResult: InlineResult, contentKey: string): void;
33
36
  export declare function buildToolContentBlocks(structuredContent: Record<string, unknown>, fromCache: boolean, inlineResult: InlineResult, resourceName: string, cacheKey?: string | null, fullContent?: string, format?: SharedFetchFormat, url?: string, title?: string): ToolContentBlock[];
34
37
  export {};
35
- //# sourceMappingURL=fetch-single.shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-single.shared.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAO9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9C,UAAU,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC,CAAC;CAChE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EACpE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAC1D,CAAC,CA8BD;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,gBAAgB,GAAG,IAAI,CAMzB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,GACV,gBAAgB,GAAG,IAAI,CAGzB;AAED,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,GACjB,IAAI,CAaN;AAyDD,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,gBAAgB,EAAE,CA+BpB"}
1
+ {"version":3,"file":"fetch-single.shared.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9C,UAAU,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC,CAAC;CAChE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EACpE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAC1D,CAAC,CA8BD;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,gBAAgB,GAAG,IAAI,CAMzB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,GACV,gBAAgB,GAAG,IAAI,CAGzB;AAED,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,GACjB,IAAI,CAaN;AAyDD,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,gBAAgB,EAAE,CA+BpB"}
@@ -12,6 +12,7 @@ export async function performSharedFetch(options) {
12
12
  extractMainContent: options.extractMainContent,
13
13
  includeMetadata: options.includeMetadata,
14
14
  maxContentLength: options.maxContentLength,
15
+ ...(options.cacheVariant ? { variant: options.cacheVariant } : {}),
15
16
  ...(options.format === 'markdown' ? {} : { contentBlocks: true }),
16
17
  }, options.customHeaders);
17
18
  const pipeline = await executeFetchPipeline({
@@ -22,6 +23,8 @@ export async function performSharedFetch(options) {
22
23
  timeout: options.timeout,
23
24
  cacheVary,
24
25
  transform: options.transform,
26
+ serialize: options.serialize,
27
+ deserialize: options.deserialize,
25
28
  });
26
29
  const inlineResult = applyInlineContentLimit(pipeline.data.content, pipeline.cacheKey ?? null, options.format);
27
30
  return { pipeline, inlineResult };
@@ -89,10 +92,12 @@ export function buildToolContentBlocks(structuredContent, fromCache, inlineResul
89
92
  text: serializeStructuredContent(structuredContent, fromCache),
90
93
  };
91
94
  const blocks = [textBlock];
92
- // Always add embedded resource for saveable content (works in stdio mode)
95
+ // Embed full content in stdio mode; HTTP mode relies on inline content or links.
93
96
  const mimeType = format === 'markdown' ? 'text/markdown' : 'application/jsonl';
94
- const contentToEmbed = fullContent ?? inlineResult.content;
95
- if (contentToEmbed && url) {
97
+ const contentToEmbed = config.runtime.httpMode
98
+ ? inlineResult.content
99
+ : (fullContent ?? inlineResult.content);
100
+ if (typeof contentToEmbed === 'string' && url) {
96
101
  const embeddedResource = buildEmbeddedResource(contentToEmbed, mimeType, url, title);
97
102
  if (embeddedResource) {
98
103
  blocks.push(embeddedResource);
@@ -105,4 +110,3 @@ export function buildToolContentBlocks(structuredContent, fromCache, inlineResul
105
110
  }
106
111
  return blocks;
107
112
  }
108
- //# sourceMappingURL=fetch-single.shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-single.shared.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-single.shared.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import type { FetchUrlInput, ToolResponseBase } from '../../config/types.js';
1
+ import type { FetchUrlInput, ToolResponseBase } from '../../config/types/tools.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
4
  export declare function fetchUrlToolHandler(input: FetchUrlInput): Promise<ToolResponseBase>;
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,EACV,aAAa,EAGb,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAqB/B,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,6JACqH,CAAC;AAoH7J,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
1
+ {"version":3,"file":"fetch-url.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAqBrC,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,6JACqH,CAAC;AAoH7J,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
@@ -1,13 +1,45 @@
1
+ import { config } from '../../config/index.js';
1
2
  import { logDebug, logError } from '../../services/logger.js';
2
3
  import { createToolErrorResponse, handleToolError, } from '../../utils/tool-error-handler.js';
3
4
  import { transformHtmlToJsonl, transformHtmlToMarkdownWithBlocks, } from '../utils/content-transform.js';
4
5
  import { applyInlineResultToStructuredContent, buildToolContentBlocks, getInlineErrorResponse, performSharedFetch, } from './fetch-single.shared.js';
5
6
  export const FETCH_URL_TOOL_NAME = 'fetch-url';
6
7
  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.';
8
+ function isRecord(value) {
9
+ return value !== null && typeof value === 'object';
10
+ }
11
+ function deserializeJsonlTransformResult(cached) {
12
+ try {
13
+ const parsed = JSON.parse(cached);
14
+ if (!isRecord(parsed))
15
+ return undefined;
16
+ const { content, contentBlocks, title, truncated } = parsed;
17
+ if (typeof content !== 'string')
18
+ return undefined;
19
+ if (typeof contentBlocks !== 'number' || !Number.isFinite(contentBlocks)) {
20
+ return undefined;
21
+ }
22
+ if (title !== undefined && typeof title !== 'string')
23
+ return undefined;
24
+ if (truncated !== undefined && typeof truncated !== 'boolean') {
25
+ return undefined;
26
+ }
27
+ const resolvedTitle = typeof title === 'string' ? title : undefined;
28
+ return {
29
+ content,
30
+ contentBlocks,
31
+ title: resolvedTitle,
32
+ ...(truncated !== undefined ? { truncated } : {}),
33
+ };
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
7
39
  function resolveFetchUrlOptions(input) {
8
40
  return {
9
- extractMainContent: input.extractMainContent ?? true,
10
- includeMetadata: input.includeMetadata ?? true,
41
+ extractMainContent: input.extractMainContent ?? config.extraction.extractMainContent,
42
+ includeMetadata: input.includeMetadata ?? config.extraction.includeMetadata,
11
43
  maxContentLength: input.maxContentLength,
12
44
  format: input.format ?? 'jsonl',
13
45
  };
@@ -54,7 +86,9 @@ async function fetchUrlPipeline(url, input, options) {
54
86
  customHeaders: input.customHeaders,
55
87
  retries: input.retries,
56
88
  timeout: input.timeout,
89
+ cacheVariant: options.format === 'markdown' ? 'markdown-with-blocks' : undefined,
57
90
  transform: buildFetchUrlTransform(options),
91
+ deserialize: deserializeJsonlTransformResult,
58
92
  });
59
93
  }
60
94
  function buildFetchUrlResponse(pipeline, inlineResult, format) {
@@ -86,4 +120,3 @@ async function executeFetchUrl(input) {
86
120
  return inlineError;
87
121
  return buildFetchUrlResponse(pipeline, inlineResult, options.format);
88
122
  }
89
- //# sourceMappingURL=fetch-url.tool.js.map
@@ -1,3 +1,2 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  export declare function registerTools(server: McpServer): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -29,4 +29,3 @@ export function registerTools(server) {
29
29
  }, tool.handler);
30
30
  }
31
31
  }
32
- //# sourceMappingURL=index.js.map