@j0hanz/fetch-url-mcp 1.10.6 → 1.10.8
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/dist/http/auth.d.ts.map +1 -1
- package/dist/http/auth.js +26 -36
- package/dist/http/helpers.d.ts +1 -1
- package/dist/http/helpers.d.ts.map +1 -1
- package/dist/http/native.js +17 -17
- package/dist/lib/core.d.ts.map +1 -1
- package/dist/lib/core.js +23 -8
- package/dist/lib/dom-prep.d.ts +1 -0
- package/dist/lib/dom-prep.d.ts.map +1 -1
- package/dist/lib/dom-prep.js +26 -5
- package/dist/lib/fetch-pipeline.d.ts +2 -4
- package/dist/lib/fetch-pipeline.d.ts.map +1 -1
- package/dist/lib/fetch-pipeline.js +37 -23
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +2 -5
- package/dist/lib/mcp-tools.d.ts +6 -6
- package/dist/lib/mcp-tools.d.ts.map +1 -1
- package/dist/lib/mcp-tools.js +3 -1
- package/dist/lib/md-cleanup.d.ts.map +1 -1
- package/dist/lib/md-cleanup.js +4 -3
- package/dist/lib/progress.d.ts.map +1 -1
- package/dist/lib/progress.js +10 -12
- package/dist/lib/url.js +2 -5
- package/dist/lib/utils.d.ts +2 -3
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +19 -20
- package/dist/schemas.d.ts +13 -17
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +31 -11
- package/dist/tasks/owner.d.ts +0 -3
- package/dist/tasks/owner.d.ts.map +1 -1
- package/dist/tasks/owner.js +13 -8
- package/dist/tasks/waiters.d.ts.map +1 -1
- package/dist/tasks/waiters.js +62 -62
- package/dist/tools/fetch-url-progress.d.ts +0 -1
- package/dist/tools/fetch-url-progress.d.ts.map +1 -1
- package/dist/tools/fetch-url-progress.js +1 -1
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +24 -26
- package/dist/transform/metadata.d.ts.map +1 -1
- package/dist/transform/metadata.js +8 -13
- package/dist/transform/title-policy.d.ts +0 -1
- package/dist/transform/title-policy.d.ts.map +1 -1
- package/dist/transform/title-policy.js +5 -14
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +19 -44
- package/dist/transform/types.d.ts +10 -10
- package/dist/transform/types.d.ts.map +1 -1
- package/dist/transform/worker-pool.d.ts.map +1 -1
- package/dist/transform/worker-pool.js +41 -34
- package/package.json +1 -1
package/dist/http/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAElB,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/http/auth.js
CHANGED
|
@@ -3,8 +3,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
3
3
|
import { InvalidTokenError, ServerError, } from '@modelcontextprotocol/sdk/server/auth/errors.js';
|
|
4
4
|
import { config } from '../lib/core.js';
|
|
5
5
|
import { normalizeHost } from '../lib/url.js';
|
|
6
|
-
import { hmacSha256Hex, timingSafeEqualUtf8 } from '../lib/utils.js';
|
|
7
|
-
import { isObject } from '../lib/utils.js';
|
|
6
|
+
import { composeAbortSignal, hmacSha256Hex, isObject, parseUrlOrNull, timingSafeEqualUtf8, } from '../lib/utils.js';
|
|
8
7
|
import { getHeaderValue, sendEmpty, sendError, sendJson, } from './helpers.js';
|
|
9
8
|
// ---------------------------------------------------------------------------
|
|
10
9
|
// CORS
|
|
@@ -110,42 +109,36 @@ class HostOriginPolicy {
|
|
|
110
109
|
return null;
|
|
111
110
|
const isEncrypted = req.socket.encrypted === true;
|
|
112
111
|
const scheme = isEncrypted ? 'https' : 'http';
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const normalizedHost = normalizeHost(parsed.host);
|
|
116
|
-
if (!normalizedHost)
|
|
117
|
-
return null;
|
|
118
|
-
return {
|
|
119
|
-
scheme,
|
|
120
|
-
host: normalizedHost,
|
|
121
|
-
port: parsed.port || this.defaultPortForScheme(scheme),
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
112
|
+
const parsed = parseUrlOrNull(`${scheme}://${hostHeader}`);
|
|
113
|
+
if (!parsed)
|
|
125
114
|
return null;
|
|
126
|
-
|
|
115
|
+
const normalizedHost = normalizeHost(parsed.host);
|
|
116
|
+
if (!normalizedHost)
|
|
117
|
+
return null;
|
|
118
|
+
return {
|
|
119
|
+
scheme,
|
|
120
|
+
host: normalizedHost,
|
|
121
|
+
port: parsed.port || this.defaultPortForScheme(scheme),
|
|
122
|
+
};
|
|
127
123
|
}
|
|
128
124
|
resolveOrigin(origin) {
|
|
129
125
|
if (origin === 'null')
|
|
130
126
|
return null;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
const normalizedHost = normalizeHost(parsed.host);
|
|
138
|
-
if (!normalizedHost)
|
|
139
|
-
return null;
|
|
140
|
-
return {
|
|
141
|
-
scheme,
|
|
142
|
-
host: normalizedHost,
|
|
143
|
-
port: parsed.port || this.defaultPortForScheme(scheme),
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
127
|
+
const parsed = parseUrlOrNull(origin);
|
|
128
|
+
if (!parsed)
|
|
129
|
+
return null;
|
|
130
|
+
const scheme = parsed.protocol === 'https:' ? 'https' : 'http';
|
|
131
|
+
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
147
132
|
return null;
|
|
148
133
|
}
|
|
134
|
+
const normalizedHost = normalizeHost(parsed.host);
|
|
135
|
+
if (!normalizedHost)
|
|
136
|
+
return null;
|
|
137
|
+
return {
|
|
138
|
+
scheme,
|
|
139
|
+
host: normalizedHost,
|
|
140
|
+
port: parsed.port || this.defaultPortForScheme(scheme),
|
|
141
|
+
};
|
|
149
142
|
}
|
|
150
143
|
defaultPortForScheme(scheme) {
|
|
151
144
|
return scheme === 'https' ? '443' : '80';
|
|
@@ -351,15 +344,12 @@ class AuthService {
|
|
|
351
344
|
return { body, headers };
|
|
352
345
|
}
|
|
353
346
|
async requestIntrospection(url, request, timeoutMs, signal) {
|
|
354
|
-
const
|
|
355
|
-
const combinedSignal = signal
|
|
356
|
-
? AbortSignal.any([signal, timeoutSignal])
|
|
357
|
-
: timeoutSignal;
|
|
347
|
+
const introspectionSignal = composeAbortSignal(signal, timeoutMs);
|
|
358
348
|
const response = await fetch(url, {
|
|
359
349
|
method: 'POST',
|
|
360
350
|
headers: request.headers,
|
|
361
351
|
body: request.body,
|
|
362
|
-
signal:
|
|
352
|
+
...(introspectionSignal ? { signal: introspectionSignal } : {}),
|
|
363
353
|
});
|
|
364
354
|
if (!response.ok) {
|
|
365
355
|
if (response.body) {
|
package/dist/http/helpers.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export declare function closeTransportBestEffort(transport: {
|
|
|
36
36
|
}, context: string): Promise<void>;
|
|
37
37
|
export declare function closeMcpServerBestEffort(server: McpServer, context: string): Promise<void>;
|
|
38
38
|
export declare function createTransportAdapter(transportImpl: StreamableHTTPServerTransport): Transport;
|
|
39
|
-
|
|
39
|
+
type JsonBodyErrorKind = 'payload-too-large' | 'invalid-json' | 'read-failed';
|
|
40
40
|
export declare class JsonBodyError extends Error {
|
|
41
41
|
readonly kind: JsonBodyErrorKind;
|
|
42
42
|
constructor(kind: JsonBodyErrorKind, message: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/http/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAKxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAK/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQrD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAcjD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,eAAe,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,IAAI,EAAE,QAAQ,CAAC;CAChB;AAWD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACZ,IAAI,CAKN;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,SAAM,EACZ,EAAE,GAAE,SAAgB,GACnB,IAAI,CAMN;AAMD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAKnE;AAkBD,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,eAAe,GACnB,MAAM,GAAG,IAAI,CAKf;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAOvD;AAMD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG;IAC9D,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA2CA;AAgBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAoBpE;AAMD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,GAAG,IAAI,CAkBvB;AAMD,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EAC5C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,6BAA6B,GAC3C,SAAS,CA4CX;AAMD,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/http/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/http/native.js
CHANGED
|
@@ -633,17 +633,17 @@ function createNetworkServer(listener) {
|
|
|
633
633
|
return createHttpsServer(tlsOptions, listener);
|
|
634
634
|
}
|
|
635
635
|
async function listen(server, host, port) {
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
});
|
|
636
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
637
|
+
function onError(err) {
|
|
638
|
+
server.off('error', onError);
|
|
639
|
+
reject(err);
|
|
640
|
+
}
|
|
641
|
+
server.once('error', onError);
|
|
642
|
+
server.listen(port, host, () => {
|
|
643
|
+
server.off('error', onError);
|
|
644
|
+
resolve(undefined);
|
|
646
645
|
});
|
|
646
|
+
await promise;
|
|
647
647
|
}
|
|
648
648
|
function resolveListeningPort(server, fallback) {
|
|
649
649
|
const addr = server.address();
|
|
@@ -672,14 +672,14 @@ function createShutdownHandler(options) {
|
|
|
672
672
|
});
|
|
673
673
|
}));
|
|
674
674
|
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
});
|
|
675
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
676
|
+
options.server.close((err) => {
|
|
677
|
+
if (err)
|
|
678
|
+
reject(err);
|
|
679
|
+
else
|
|
680
|
+
resolve(undefined);
|
|
682
681
|
});
|
|
682
|
+
await promise;
|
|
683
683
|
};
|
|
684
684
|
}
|
|
685
685
|
export async function startHttpServer() {
|
package/dist/lib/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/lib/core.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/lib/core.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/core.js
CHANGED
|
@@ -6,6 +6,7 @@ import { isIP } from 'node:net';
|
|
|
6
6
|
import process from 'node:process';
|
|
7
7
|
import { getSystemErrorMessage, inspect, stripVTControlCharacters, } from 'node:util';
|
|
8
8
|
import {} from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
import { z } from 'zod';
|
|
9
10
|
import { buildIpv4, normalizeHostname, stripTrailingDots, } from './net-utils.js';
|
|
10
11
|
import { getErrorMessage, isAbortError, sha256Hex, stableStringify as stableJsonStringify, startAbortableIntervalLoop, } from './utils.js';
|
|
11
12
|
export const serverVersion = readServerVersion(import.meta.url);
|
|
@@ -55,6 +56,10 @@ function loadEnvFileIfAvailable() {
|
|
|
55
56
|
}
|
|
56
57
|
loadEnvFileIfAvailable();
|
|
57
58
|
const { env } = process;
|
|
59
|
+
const ENV_BOOLEAN_SCHEMA = z.stringbool({
|
|
60
|
+
truthy: ['true', '1', 'yes', 'on'],
|
|
61
|
+
falsy: ['false', '0', 'no', 'off'],
|
|
62
|
+
});
|
|
58
63
|
const EnvParser = {
|
|
59
64
|
integerValue(envValue, min, max, envName) {
|
|
60
65
|
if (!envValue)
|
|
@@ -81,10 +86,20 @@ const EnvParser = {
|
|
|
81
86
|
integer(envValue, defaultValue, min, max, envName) {
|
|
82
87
|
return EnvParser.integerValue(envValue, min, max, envName) ?? defaultValue;
|
|
83
88
|
},
|
|
84
|
-
boolean(envValue, defaultValue) {
|
|
89
|
+
boolean(envValue, defaultValue, envName) {
|
|
85
90
|
if (!envValue)
|
|
86
91
|
return defaultValue;
|
|
87
|
-
|
|
92
|
+
const trimmed = envValue.trim();
|
|
93
|
+
if (!trimmed)
|
|
94
|
+
return defaultValue;
|
|
95
|
+
const parsed = ENV_BOOLEAN_SCHEMA.safeParse(trimmed);
|
|
96
|
+
if (!parsed.success) {
|
|
97
|
+
if (envName) {
|
|
98
|
+
process.stderr.write(`Warning: ignoring invalid ${envName} value "${envValue}" (expected true/false, 1/0, yes/no, or on/off)\n`);
|
|
99
|
+
}
|
|
100
|
+
return defaultValue;
|
|
101
|
+
}
|
|
102
|
+
return parsed.data;
|
|
88
103
|
},
|
|
89
104
|
list(envValue, defaultValue) {
|
|
90
105
|
if (!envValue)
|
|
@@ -293,7 +308,7 @@ const port = env['PORT']?.trim() === '0'
|
|
|
293
308
|
? 0
|
|
294
309
|
: EnvParser.integer(env['PORT'], 3000, 1024, 65535, 'PORT');
|
|
295
310
|
const httpsConfig = buildHttpsConfig();
|
|
296
|
-
const allowRemote = EnvParser.boolean(env['ALLOW_REMOTE'], false);
|
|
311
|
+
const allowRemote = EnvParser.boolean(env['ALLOW_REMOTE'], false, 'ALLOW_REMOTE');
|
|
297
312
|
const baseUrl = new URL(`${httpsConfig.enabled ? 'https' : 'http'}://${EnvParser.formatHostForUrl(host)}:${port}`);
|
|
298
313
|
const runtimeState = {
|
|
299
314
|
httpMode: false,
|
|
@@ -315,7 +330,7 @@ function buildServerConfig() {
|
|
|
315
330
|
keepAliveTimeoutBufferMs: EnvParser.optionalInteger(env['SERVER_KEEP_ALIVE_TIMEOUT_BUFFER_MS'], 0, undefined, 'SERVER_KEEP_ALIVE_TIMEOUT_BUFFER_MS'),
|
|
316
331
|
maxHeadersCount: EnvParser.optionalInteger(env['SERVER_MAX_HEADERS_COUNT'], 1, undefined, 'SERVER_MAX_HEADERS_COUNT'),
|
|
317
332
|
maxConnections: EnvParser.integer(env['SERVER_MAX_CONNECTIONS'], 0, 0, undefined, 'SERVER_MAX_CONNECTIONS'),
|
|
318
|
-
blockPrivateConnections: EnvParser.boolean(env['SERVER_BLOCK_PRIVATE_CONNECTIONS'], false),
|
|
333
|
+
blockPrivateConnections: EnvParser.boolean(env['SERVER_BLOCK_PRIVATE_CONNECTIONS'], false, 'SERVER_BLOCK_PRIVATE_CONNECTIONS'),
|
|
319
334
|
shutdownCloseIdleConnections: true,
|
|
320
335
|
shutdownCloseAllConnections: false,
|
|
321
336
|
},
|
|
@@ -344,13 +359,13 @@ function buildTasksConfig() {
|
|
|
344
359
|
return {
|
|
345
360
|
maxTotal: DEFAULT_TASKS_MAX_TOTAL,
|
|
346
361
|
maxPerOwner: RESOLVED_TASKS_MAX_PER_OWNER,
|
|
347
|
-
emitStatusNotifications: EnvParser.boolean(env['TASKS_STATUS_NOTIFICATIONS'], false),
|
|
348
|
-
requireInterception: EnvParser.boolean(env['TASKS_REQUIRE_INTERCEPTION'], true),
|
|
362
|
+
emitStatusNotifications: EnvParser.boolean(env['TASKS_STATUS_NOTIFICATIONS'], false, 'TASKS_STATUS_NOTIFICATIONS'),
|
|
363
|
+
requireInterception: EnvParser.boolean(env['TASKS_REQUIRE_INTERCEPTION'], true, 'TASKS_REQUIRE_INTERCEPTION'),
|
|
349
364
|
};
|
|
350
365
|
}
|
|
351
366
|
function buildCacheConfig() {
|
|
352
367
|
return {
|
|
353
|
-
enabled: EnvParser.boolean(env['CACHE_ENABLED'], true),
|
|
368
|
+
enabled: EnvParser.boolean(env['CACHE_ENABLED'], true, 'CACHE_ENABLED'),
|
|
354
369
|
ttl: 86400,
|
|
355
370
|
maxKeys: 100,
|
|
356
371
|
maxSizeBytes: 50 * 1024 * 1024,
|
|
@@ -422,7 +437,7 @@ export const config = {
|
|
|
422
437
|
allowedHosts: EnvParser.allowedHosts(env['ALLOWED_HOSTS']),
|
|
423
438
|
apiKey: env['API_KEY'],
|
|
424
439
|
allowRemote,
|
|
425
|
-
allowLocalFetch: EnvParser.boolean(env['ALLOW_LOCAL_FETCH'], false),
|
|
440
|
+
allowLocalFetch: EnvParser.boolean(env['ALLOW_LOCAL_FETCH'], false, 'ALLOW_LOCAL_FETCH'),
|
|
426
441
|
},
|
|
427
442
|
auth: buildAuthConfig(baseUrl),
|
|
428
443
|
rateLimit: {
|
package/dist/lib/dom-prep.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare function resolveDocumentBody(document: Document): Element;
|
|
1
2
|
export declare function serializeDocumentForMarkdown(document: Document, fallback: string): string;
|
|
2
3
|
/** Surface hidden tab panels, then strip unselected tab triggers. */
|
|
3
4
|
export declare function normalizeTabContent(document: Document): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-prep.d.ts","sourceRoot":"","sources":["../../src/lib/dom-prep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom-prep.d.ts","sourceRoot":"","sources":["../../src/lib/dom-prep.ts"],"names":[],"mappings":"AAimBA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAc/D;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AA0CD,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG5D;AAiTD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,IAAI,CAMN;AA4BD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,MAAM,CAcR"}
|
package/dist/lib/dom-prep.js
CHANGED
|
@@ -20,10 +20,10 @@ const NOISE_PATTERNS = [
|
|
|
20
20
|
/[\s"']role\s*=\s*['"]?(?:navigation|banner|complementary|contentinfo|tree|menubar|menu)['"]?/i,
|
|
21
21
|
/[\s"'](?:aria-hidden\s*=\s*['"]?true['"]?|hidden)/i,
|
|
22
22
|
/[\s"'](?:banner|promo|announcement|cta|advert|newsletter|subscribe|cookie|consent|popup|modal|overlay|toast)\b/i,
|
|
23
|
-
/[\s"'](?:fixed|sticky|z-50|z-4|
|
|
23
|
+
/[\s"'](?:fixed|sticky|z-50|z-4|breadcrumbs?|pagination)\b/i,
|
|
24
24
|
];
|
|
25
25
|
const HEADER_NOISE_PATTERN = /\b(site-header|masthead|topbar|navbar|nav(?:bar)?|menu|header-nav)\b/i;
|
|
26
|
-
const FIXED_OR_HIGH_Z_PATTERN = /\b(?:fixed|sticky|z-(?:4\d|50)
|
|
26
|
+
const FIXED_OR_HIGH_Z_PATTERN = /\b(?:fixed|sticky|z-(?:4\d|50))\b/;
|
|
27
27
|
const HEADING_PERMALINK_TEXT_PATTERN = /^(?:#|¶|§|¤|🔗)$/u;
|
|
28
28
|
const HEADING_PERMALINK_CLASS_PATTERN = /\b(?:mark|permalink|hash-link|anchor(?:js)?-?link|header-?link|heading-anchor|deep-link)\b/i;
|
|
29
29
|
const HIDDEN_STYLE_REGEX = /\b(?:display\s*:\s*none|visibility\s*:\s*hidden)\b/i;
|
|
@@ -349,8 +349,10 @@ function isNoiseElement(element, context) {
|
|
|
349
349
|
// Hidden elements
|
|
350
350
|
if (hidden && !interactive)
|
|
351
351
|
return true;
|
|
352
|
-
// Sticky/fixed positioned elements
|
|
353
|
-
if (FIXED_OR_HIGH_Z_PATTERN.test(className)
|
|
352
|
+
// Sticky/fixed positioned elements — skip content-heavy wrappers
|
|
353
|
+
if (FIXED_OR_HIGH_Z_PATTERN.test(className) &&
|
|
354
|
+
(element.textContent || '').trim().length <
|
|
355
|
+
NAV_FOOTER_MIN_CHARS_FOR_PRESERVATION)
|
|
354
356
|
return true;
|
|
355
357
|
// Promotional/noise content
|
|
356
358
|
if (isPromoMatch(className, id, element, context))
|
|
@@ -522,7 +524,7 @@ function resolveUrls(document, baseUrlStr) {
|
|
|
522
524
|
processUrlElement(el, 'srcset', base, true);
|
|
523
525
|
}
|
|
524
526
|
}
|
|
525
|
-
function resolveDocumentBody(document) {
|
|
527
|
+
export function resolveDocumentBody(document) {
|
|
526
528
|
const { body } = document;
|
|
527
529
|
if (body.innerHTML.trim().length > MIN_BODY_CONTENT_LENGTH)
|
|
528
530
|
return body;
|
|
@@ -736,7 +738,26 @@ function normalizeHighlightedCodeLines(document) {
|
|
|
736
738
|
}
|
|
737
739
|
}
|
|
738
740
|
}
|
|
741
|
+
const COPY_BUTTON_SELECTOR = 'button,a[href="#copy"],a[href="#"],span[class*="copy"]';
|
|
742
|
+
const COPY_BUTTON_TEXT_PATTERN = /^copy(?: code)?$/i;
|
|
743
|
+
function stripCodeBlockCopyButtons(document) {
|
|
744
|
+
for (const pre of document.querySelectorAll('pre')) {
|
|
745
|
+
const candidates = pre.querySelectorAll(COPY_BUTTON_SELECTOR);
|
|
746
|
+
for (let i = candidates.length - 1; i >= 0; i--) {
|
|
747
|
+
const el = candidates[i];
|
|
748
|
+
if (!el)
|
|
749
|
+
continue;
|
|
750
|
+
const text = (el.textContent || '').trim();
|
|
751
|
+
if (el.tagName === 'BUTTON' ||
|
|
752
|
+
COPY_BUTTON_TEXT_PATTERN.test(text) ||
|
|
753
|
+
(el.getAttribute('href') ?? '').includes('#copy')) {
|
|
754
|
+
el.remove();
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
}
|
|
739
759
|
function cleanCodeExamples(document) {
|
|
760
|
+
stripCodeBlockCopyButtons(document);
|
|
740
761
|
pruneFigurePreviewPanes(document);
|
|
741
762
|
pruneDemoInstructionBlocks(document);
|
|
742
763
|
normalizeHighlightedCodeLines(document);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type MarkdownTransformResult } from '../transform/types.js';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
4
|
-
export declare const TRUNCATION_MARKER = "...[truncated]";
|
|
2
|
+
import { withSignal } from './utils.js';
|
|
3
|
+
export { withSignal };
|
|
5
4
|
export interface InlineContentResult {
|
|
6
5
|
content?: string;
|
|
7
6
|
contentSize: number;
|
|
@@ -12,7 +11,6 @@ interface FetchTransformInput {
|
|
|
12
11
|
encoding: string;
|
|
13
12
|
truncated?: boolean;
|
|
14
13
|
}
|
|
15
|
-
export declare function appendTruncationMarker(content: string, marker: string): string;
|
|
16
14
|
export declare function finalizeInlineMarkdown(markdown: string | undefined, options?: {
|
|
17
15
|
maxChars?: number;
|
|
18
16
|
}): string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/fetch-pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/fetch-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { cachedPayloadValueSchema, extractedMetadataSchema, normalizeExtractedMetadata, normalizePageTitle, parseCachedPayload, stringifyCachedPayload, } from '../schemas.js';
|
|
2
3
|
import { transformBufferToMarkdown } from '../transform/transform.js';
|
|
3
4
|
import {} from '../transform/types.js';
|
|
4
5
|
import { config, createCacheKey, get, isEnabled, logDebug, logError, logWarn, set, } from './core.js';
|
|
5
6
|
import { fetchNormalizedUrlBuffer, normalizeUrl, transformToRawUrl, } from './http.js';
|
|
6
|
-
import { getErrorMessage,
|
|
7
|
-
export {
|
|
8
|
-
|
|
7
|
+
import { getErrorMessage, isObject, withSignal } from './utils.js';
|
|
8
|
+
export { withSignal };
|
|
9
|
+
const TRUNCATION_MARKER = '...[truncated]';
|
|
9
10
|
function getOpenCodeFence(content) {
|
|
10
11
|
const FENCE_PATTERN = /^([ \t]*)(`{3,}|~{3,})/gm;
|
|
11
12
|
let match;
|
|
@@ -66,7 +67,7 @@ function truncateWithMarker(content, limit, marker) {
|
|
|
66
67
|
}
|
|
67
68
|
return `${tentativeContent}${marker}`.slice(0, limit);
|
|
68
69
|
}
|
|
69
|
-
|
|
70
|
+
function appendTruncationMarker(content, marker) {
|
|
70
71
|
if (!content)
|
|
71
72
|
return marker;
|
|
72
73
|
if (content.endsWith(marker))
|
|
@@ -188,7 +189,10 @@ function restoreCachedPipelineResult(options, resolvedUrl, cacheKey) {
|
|
|
188
189
|
}
|
|
189
190
|
function persistCacheEntry(cacheKey, data, serialize, normalizedUrl, cacheNamespace) {
|
|
190
191
|
const serializer = serialize ?? JSON.stringify;
|
|
191
|
-
const
|
|
192
|
+
const dataRecord = isObject(data)
|
|
193
|
+
? data
|
|
194
|
+
: undefined;
|
|
195
|
+
const title = typeof dataRecord?.title === 'string' ? dataRecord.title : undefined;
|
|
192
196
|
const metadata = {
|
|
193
197
|
url: normalizedUrl,
|
|
194
198
|
...(title === undefined ? {} : { title }),
|
|
@@ -258,6 +262,13 @@ export async function executeFetchPipeline(options) {
|
|
|
258
262
|
cacheKey,
|
|
259
263
|
};
|
|
260
264
|
}
|
|
265
|
+
const markdownPipelineResultSchema = z.strictObject({
|
|
266
|
+
markdown: z.string(),
|
|
267
|
+
content: z.string(),
|
|
268
|
+
title: z.union([z.string(), z.undefined()]),
|
|
269
|
+
metadata: extractedMetadataSchema.optional(),
|
|
270
|
+
truncated: z.boolean(),
|
|
271
|
+
});
|
|
261
272
|
function createMarkdownPipelineResult(params) {
|
|
262
273
|
const markdown = normalizeMarkdownForTruncation(params.markdown, params.truncated);
|
|
263
274
|
return {
|
|
@@ -268,20 +279,29 @@ function createMarkdownPipelineResult(params) {
|
|
|
268
279
|
truncated: params.truncated,
|
|
269
280
|
};
|
|
270
281
|
}
|
|
282
|
+
const markdownPipelineCacheCodec = z.codec(cachedPayloadValueSchema, markdownPipelineResultSchema, {
|
|
283
|
+
decode: (payload) => createMarkdownPipelineResult({
|
|
284
|
+
markdown: payload.markdown,
|
|
285
|
+
title: payload.title,
|
|
286
|
+
metadata: payload.metadata,
|
|
287
|
+
truncated: payload.truncated ?? false,
|
|
288
|
+
}),
|
|
289
|
+
encode: (result) => {
|
|
290
|
+
const title = normalizePageTitle(result.title);
|
|
291
|
+
const metadata = normalizeExtractedMetadata(result.metadata);
|
|
292
|
+
return {
|
|
293
|
+
markdown: normalizeMarkdownForTruncation(result.markdown, result.truncated),
|
|
294
|
+
...(title !== undefined ? { title } : {}),
|
|
295
|
+
...(metadata ? { metadata } : {}),
|
|
296
|
+
truncated: result.truncated,
|
|
297
|
+
};
|
|
298
|
+
},
|
|
299
|
+
});
|
|
271
300
|
export function parseCachedMarkdownResult(cached) {
|
|
272
301
|
const payload = parseCachedPayload(cached);
|
|
273
302
|
if (!payload)
|
|
274
303
|
return undefined;
|
|
275
|
-
|
|
276
|
-
if (typeof markdown !== 'string')
|
|
277
|
-
return undefined;
|
|
278
|
-
const metadata = normalizeExtractedMetadata(payload.metadata);
|
|
279
|
-
return createMarkdownPipelineResult({
|
|
280
|
-
markdown,
|
|
281
|
-
title: payload.title,
|
|
282
|
-
metadata,
|
|
283
|
-
truncated: payload.truncated ?? false,
|
|
284
|
-
});
|
|
304
|
+
return z.decode(markdownPipelineCacheCodec, payload);
|
|
285
305
|
}
|
|
286
306
|
export const markdownTransform = async (input, url, signal) => {
|
|
287
307
|
const result = await transformBufferToMarkdown(input.buffer, url, {
|
|
@@ -298,13 +318,7 @@ export const markdownTransform = async (input, url, signal) => {
|
|
|
298
318
|
});
|
|
299
319
|
};
|
|
300
320
|
export function serializeMarkdownResult(result) {
|
|
301
|
-
|
|
302
|
-
markdown: normalizeMarkdownForTruncation(result.markdown, result.truncated),
|
|
303
|
-
title: result.title,
|
|
304
|
-
metadata: result.metadata,
|
|
305
|
-
truncated: result.truncated,
|
|
306
|
-
};
|
|
307
|
-
return JSON.stringify(payload);
|
|
321
|
+
return stringifyCachedPayload(z.encode(markdownPipelineCacheCodec, result));
|
|
308
322
|
}
|
|
309
323
|
function buildSharedFetchPipelineOptions(options) {
|
|
310
324
|
const opts = {
|
package/dist/lib/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAWhD,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAchD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAWhD,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAchD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;AAsElB,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,SAAQ,GAChB,MAAM,CAIR;AAkBD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,IAAI,CA6CN;AAstCD,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgKD,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6ND,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AACD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAEA;AACD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AACD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAE9D;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,qBAAqB,CAEvB;AACD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAEN;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AACD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAE7D;AACD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAUzC;AACD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AACD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAED"}
|
package/dist/lib/http.js
CHANGED
|
@@ -16,7 +16,7 @@ import { z } from 'zod';
|
|
|
16
16
|
import { parseCachedPayload, resolveCachedPayloadContent } from '../schemas.js';
|
|
17
17
|
import { get as cacheGet, config, getOperationId, getRequestId, logDebug, logError, logWarn, redactUrl, } from './core.js';
|
|
18
18
|
import { BLOCKED_HOST_SUFFIXES, createDnsPreflight, IpBlocker, RawUrlTransformer, SafeDnsResolver, UrlNormalizer, VALIDATION_ERROR_CODE, } from './url.js';
|
|
19
|
-
import { createErrorWithCode, FetchError, isAbortError, isError, isObject, isSystemError, toError, } from './utils.js';
|
|
19
|
+
import { composeAbortSignal, createErrorWithCode, FetchError, isAbortError, isError, isObject, isSystemError, toError, } from './utils.js';
|
|
20
20
|
import { formatZodError } from './zod.js';
|
|
21
21
|
// ═══════════════════════════════════════════════════════════════════
|
|
22
22
|
// FILENAME GENERATION & DOWNLOAD
|
|
@@ -1161,10 +1161,7 @@ const DEFAULT_HEADERS = {
|
|
|
1161
1161
|
// decompression transparently per the Fetch spec.
|
|
1162
1162
|
};
|
|
1163
1163
|
function buildRequestSignal(timeoutMs, external) {
|
|
1164
|
-
|
|
1165
|
-
return external;
|
|
1166
|
-
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
1167
|
-
return external ? AbortSignal.any([external, timeoutSignal]) : timeoutSignal;
|
|
1164
|
+
return composeAbortSignal(external, timeoutMs);
|
|
1168
1165
|
}
|
|
1169
1166
|
function buildRequestInit(headers, signal) {
|
|
1170
1167
|
return {
|
package/dist/lib/mcp-tools.d.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
export type JsonRpcId = string | number | null;
|
|
4
|
-
interface McpRequestParams {
|
|
5
|
-
_meta?: Record<string, unknown>;
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}
|
|
8
4
|
declare const jsonRpcRequestSchema: z.ZodObject<{
|
|
9
5
|
jsonrpc: z.ZodLiteral<"2.0">;
|
|
10
6
|
method: z.ZodString;
|
|
11
7
|
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
12
|
-
params: z.ZodOptional<z.
|
|
8
|
+
params: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
_meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
10
|
+
}, z.core.$loose>>;
|
|
13
11
|
}, z.core.$strict>;
|
|
14
12
|
declare const jsonRpcResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
15
13
|
jsonrpc: z.ZodLiteral<"2.0">;
|
|
@@ -28,7 +26,9 @@ declare const jsonRpcMessageSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
28
26
|
jsonrpc: z.ZodLiteral<"2.0">;
|
|
29
27
|
method: z.ZodString;
|
|
30
28
|
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
31
|
-
params: z.ZodOptional<z.
|
|
29
|
+
params: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
_meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
31
|
+
}, z.core.$loose>>;
|
|
32
32
|
}, z.core.$strict>, z.ZodUnion<readonly [z.ZodObject<{
|
|
33
33
|
jsonrpc: z.ZodLiteral<"2.0">;
|
|
34
34
|
id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAK/C,QAAA,MAAM,oBAAoB;;;;;;;kBAKxB,CAAC;AAeH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;oBAGzB,CAAC;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;sBAGxB,CAAC;AACH,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAC3D,KAAK,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACjE,KAAK,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAC/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAE5D;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAEtE;AACD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,GACZ,IAAI,IAAI,mBAAmB,CAE7B;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAE1E;AAUD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG7E;AACD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,OAAO,CAUT;AAMD,KAAK,iBAAiB,GAAG,cAAc,GAAG;IACxC,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AA6BF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GACA,iBAAiB,CAenB;AAQD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,eAAe,SAAqB,GACnC,iBAAiB,CA2BnB"}
|
package/dist/lib/mcp-tools.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {} from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { FetchError, isAbortError, isSystemError } from './utils.js';
|
|
4
|
-
const paramsSchema = z.looseObject({
|
|
4
|
+
const paramsSchema = z.looseObject({
|
|
5
|
+
_meta: z.record(z.string(), z.unknown()).optional(),
|
|
6
|
+
});
|
|
5
7
|
const jsonRpcRequestIdSchema = z.union([z.string(), z.number()]);
|
|
6
8
|
const jsonRpcRequestSchema = z.strictObject({
|
|
7
9
|
jsonrpc: z.literal('2.0'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"md-cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/md-cleanup.ts"],"names":[],"mappings":"AA0GA,UAAU,cAAc;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA8eD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC3C,MAAM,CAuCR;
|
|
1
|
+
{"version":3,"file":"md-cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/md-cleanup.ts"],"names":[],"mappings":"AA0GA,UAAU,cAAc;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA8eD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC3C,MAAM,CAuCR;AAaD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAqBR"}
|
package/dist/lib/md-cleanup.js
CHANGED
|
@@ -524,15 +524,16 @@ export function processFencedContent(content, processTextSegment) {
|
|
|
524
524
|
return segments.join('\n');
|
|
525
525
|
}
|
|
526
526
|
function stripLeadingBreadcrumbNoise(text) {
|
|
527
|
-
// Remove a single short plain-text line at the very start if followed
|
|
528
|
-
// (within one optional blank line) by an H1 or H2 heading.
|
|
529
527
|
return text.replace(/^([^\n#>|`\-*+\d[\]()]{1,40})\n(\s*\n)?(?=#{1,2}\s)/, '');
|
|
530
528
|
}
|
|
529
|
+
function stripCopyButtonText(text) {
|
|
530
|
+
return text.replace(/\[Copy\]\(#copy\)\s*/gi, '');
|
|
531
|
+
}
|
|
531
532
|
export function cleanupMarkdownArtifacts(content, options) {
|
|
532
533
|
if (!content)
|
|
533
534
|
return '';
|
|
534
535
|
throwIfAborted(options?.signal, options?.url ?? '', 'markdown:cleanup:begin');
|
|
535
|
-
let result = processFencedContent(content, (text) => processTextBuffer(text.split('\n'), options)).trim();
|
|
536
|
+
let result = stripCopyButtonText(processFencedContent(content, (text) => processTextBuffer(text.split('\n'), options)).trim());
|
|
536
537
|
if (!options?.preserveEmptyHeadings) {
|
|
537
538
|
throwIfAborted(options?.signal, options?.url ?? '', 'markdown:cleanup:empty-headings');
|
|
538
539
|
result = removeEmptyHeadingSections(result);
|