@bedolla/enriweb 0.1.6 → 0.1.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/README.md +48 -20
- package/dist/client/EnriProxyClient.d.ts +143 -6
- package/dist/client/EnriProxyClient.d.ts.map +1 -1
- package/dist/client/EnriProxyClient.js +208 -33
- package/dist/client/EnriProxyClient.js.map +1 -1
- package/dist/index.js +58 -18
- package/dist/index.js.map +1 -1
- package/dist/package-info.d.ts +26 -0
- package/dist/package-info.d.ts.map +1 -1
- package/dist/package-info.js +29 -2
- package/dist/package-info.js.map +1 -1
- package/dist/server/EnriWebServer.d.ts +33 -0
- package/dist/server/EnriWebServer.d.ts.map +1 -1
- package/dist/server/EnriWebServer.js +322 -23
- package/dist/server/EnriWebServer.js.map +1 -1
- package/dist/shared/Utf8SafeTextSlicer.d.ts +47 -0
- package/dist/shared/Utf8SafeTextSlicer.d.ts.map +1 -0
- package/dist/shared/Utf8SafeTextSlicer.js +97 -0
- package/dist/shared/Utf8SafeTextSlicer.js.map +1 -0
- package/dist/shared/validation.d.ts +13 -1
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +27 -14
- package/dist/shared/validation.js.map +1 -1
- package/dist/tools/WebFetchNpmProjection.d.ts +143 -0
- package/dist/tools/WebFetchNpmProjection.d.ts.map +1 -0
- package/dist/tools/WebFetchNpmProjection.js +480 -0
- package/dist/tools/WebFetchNpmProjection.js.map +1 -0
- package/dist/tools/WebFetchParamsParser.d.ts +26 -0
- package/dist/tools/WebFetchParamsParser.d.ts.map +1 -0
- package/dist/tools/WebFetchParamsParser.js +157 -0
- package/dist/tools/WebFetchParamsParser.js.map +1 -0
- package/dist/tools/WebFetchRangesExecutor.d.ts +86 -0
- package/dist/tools/WebFetchRangesExecutor.d.ts.map +1 -0
- package/dist/tools/WebFetchRangesExecutor.js +277 -0
- package/dist/tools/WebFetchRangesExecutor.js.map +1 -0
- package/dist/tools/WebFetchTool.d.ts +186 -81
- package/dist/tools/WebFetchTool.d.ts.map +1 -1
- package/dist/tools/WebFetchTool.js +142 -425
- package/dist/tools/WebFetchTool.js.map +1 -1
- package/dist/tools/WebFetchToolTextFormatter.d.ts +57 -0
- package/dist/tools/WebFetchToolTextFormatter.d.ts.map +1 -0
- package/dist/tools/WebFetchToolTextFormatter.js +135 -0
- package/dist/tools/WebFetchToolTextFormatter.js.map +1 -0
- package/dist/tools/WebSearchRegistryHttpReader.d.ts +116 -0
- package/dist/tools/WebSearchRegistryHttpReader.d.ts.map +1 -0
- package/dist/tools/WebSearchRegistryHttpReader.js +157 -0
- package/dist/tools/WebSearchRegistryHttpReader.js.map +1 -0
- package/dist/tools/WebSearchRegistryVerifier.d.ts +103 -7
- package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
- package/dist/tools/WebSearchRegistryVerifier.js +375 -135
- package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
- package/dist/tools/WebSearchTool.d.ts +78 -0
- package/dist/tools/WebSearchTool.d.ts.map +1 -1
- package/dist/tools/WebSearchTool.js +191 -21
- package/dist/tools/WebSearchTool.js.map +1 -1
- package/package.json +3 -2
|
@@ -6,10 +6,75 @@
|
|
|
6
6
|
* - POST /v1/tools/web_fetch
|
|
7
7
|
*
|
|
8
8
|
* @module client/EnriProxyClient
|
|
9
|
+
*
|
|
10
|
+
* @remarks Size note (~950 lines, documented exception to the <=700 policy):
|
|
11
|
+
* one file currently owns the transport (dual-timeout raw HTTP, abort
|
|
12
|
+
* labeling, response-size ceilings), the wire payload builders, the typed
|
|
13
|
+
* response contracts, and the Spanish error mapping. The planned split is a
|
|
14
|
+
* dedicated `EnriProxyHttpTransport` module; until that batch, moving any
|
|
15
|
+
* single piece would duplicate the carefully paired timeout/abort/cap
|
|
16
|
+
* invariants that the tests pin together.
|
|
9
17
|
*/
|
|
10
18
|
import { request as httpRequest } from "node:http";
|
|
11
19
|
import { request as httpsRequest } from "node:https";
|
|
12
20
|
import { URL } from "node:url";
|
|
21
|
+
import { sliceUtf8Safe } from "../shared/Utf8SafeTextSlicer.js";
|
|
22
|
+
/**
|
|
23
|
+
* Default ceiling for one proxied response body.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Generous for the default 200k-char budget; larger `max_chars` budgets
|
|
27
|
+
* derive a higher ceiling via {@link resolveMaxResponseBytes}.
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_MAX_RESPONSE_BYTES = 20 * 1024 * 1024;
|
|
30
|
+
/**
|
|
31
|
+
* Derives the per-request response size ceiling from the content budget.
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* EnriProxy answers JSON, so every character may expand up to ~6 bytes
|
|
35
|
+
* (`\uXXXX` escapes, quotes, newlines). A known `maxChars` raises the
|
|
36
|
+
* ceiling to `6 × maxChars + 1MB` so a legitimate ~4M-char capture rich in
|
|
37
|
+
* escapes is not rejected mid-stream.
|
|
38
|
+
*
|
|
39
|
+
* @param maxChars - Requested content budget in characters, when known.
|
|
40
|
+
* @returns Maximum accepted response body in bytes.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveMaxResponseBytes(maxChars) {
|
|
43
|
+
if (maxChars === undefined) {
|
|
44
|
+
return DEFAULT_MAX_RESPONSE_BYTES;
|
|
45
|
+
}
|
|
46
|
+
return Math.max(DEFAULT_MAX_RESPONSE_BYTES, 6 * maxChars + 1024 * 1024);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Upper character budget accepted from one tool call.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* Single source of truth for the shared 4M wire ceiling: the client clamps
|
|
53
|
+
* every request payload with it and the tool layer imports the same constant
|
|
54
|
+
* so the documented ceiling cannot drift between modules.
|
|
55
|
+
*/
|
|
56
|
+
export const MAX_WIRE_MAX_CHARS = 4_000_000;
|
|
57
|
+
/**
|
|
58
|
+
* Detects a delete-cursor web fetch request.
|
|
59
|
+
*
|
|
60
|
+
* @param params - Web fetch request union member
|
|
61
|
+
* @returns True when the request deletes a cursor.
|
|
62
|
+
*/
|
|
63
|
+
function isDeleteRequest(params) {
|
|
64
|
+
return "action" in params && params.action === "delete";
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Normalizes one max_chars budget to a positive integer within the ceiling.
|
|
68
|
+
*
|
|
69
|
+
* @param value - Raw budget value.
|
|
70
|
+
* @returns Normalized budget, or undefined when unusable.
|
|
71
|
+
*/
|
|
72
|
+
function normalizeMaxChars(value) {
|
|
73
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
return Math.min(MAX_WIRE_MAX_CHARS, Math.max(1, Math.trunc(value)));
|
|
77
|
+
}
|
|
13
78
|
/**
|
|
14
79
|
* Error thrown when EnriProxy returns a non-2xx HTTP response.
|
|
15
80
|
*/
|
|
@@ -75,7 +140,7 @@ export class EnriProxyClient {
|
|
|
75
140
|
* @param signal - Optional caller abort signal
|
|
76
141
|
* @returns Search response
|
|
77
142
|
*/
|
|
78
|
-
async webSearch(params, signal) {
|
|
143
|
+
async webSearch(params, signal, options) {
|
|
79
144
|
const url = this.buildUrl("/v1/tools/web_search");
|
|
80
145
|
const payload = {
|
|
81
146
|
query: params.query
|
|
@@ -98,28 +163,29 @@ export class EnriProxyClient {
|
|
|
98
163
|
if (typeof params.searchPrompt === "string" && params.searchPrompt.trim()) {
|
|
99
164
|
payload["search_prompt"] = params.searchPrompt.trim();
|
|
100
165
|
}
|
|
101
|
-
const result = await this.requestJson("POST", url, payload, this.timeoutMs, signal);
|
|
166
|
+
const result = await this.requestJson("POST", url, payload, this.timeoutMs, signal, options);
|
|
102
167
|
if (result.status < 200 || result.status >= 300) {
|
|
103
|
-
throw new EnriProxyHttpError(`La búsqueda web falló (HTTP ${result.status})
|
|
168
|
+
throw new EnriProxyHttpError(`La búsqueda web falló (HTTP ${result.status}). ${EnriProxyClient.describeHttpStatus(result.status)}`.trimEnd(), result.status, result.headers, result.body.slice(0, 4000));
|
|
104
169
|
}
|
|
105
170
|
try {
|
|
106
171
|
return JSON.parse(result.body);
|
|
107
172
|
}
|
|
108
173
|
catch (error) {
|
|
109
|
-
throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_search (HTTP ${String(result.status)}): ${
|
|
174
|
+
throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_search (HTTP ${String(result.status)}): ${EnriProxyClient.describeUnparseableBody(error)}`);
|
|
110
175
|
}
|
|
111
176
|
}
|
|
112
|
-
|
|
113
|
-
* Executes a web fetch via EnriProxy.
|
|
114
|
-
*
|
|
115
|
-
* @param params - Fetch parameters
|
|
116
|
-
* @param signal - Optional caller abort signal
|
|
117
|
-
* @returns Fetch response
|
|
118
|
-
*/
|
|
119
|
-
async webFetch(params, signal) {
|
|
177
|
+
async webFetch(params, signal, options) {
|
|
120
178
|
const url = this.buildUrl("/v1/tools/web_fetch");
|
|
121
179
|
const payload = {};
|
|
122
|
-
if (
|
|
180
|
+
if (isDeleteRequest(params)) {
|
|
181
|
+
const cursor = params.cursor.trim();
|
|
182
|
+
if (!cursor) {
|
|
183
|
+
throw new Error("webFetch requiere un cursor no vacío.");
|
|
184
|
+
}
|
|
185
|
+
payload["cursor"] = cursor;
|
|
186
|
+
payload["action"] = "delete";
|
|
187
|
+
}
|
|
188
|
+
else if ("cursor" in params) {
|
|
123
189
|
const cursor = params.cursor.trim();
|
|
124
190
|
if (!cursor) {
|
|
125
191
|
throw new Error("webFetch requiere un cursor no vacío.");
|
|
@@ -129,10 +195,16 @@ export class EnriProxyClient {
|
|
|
129
195
|
payload["offset_chars"] = Math.max(0, Math.trunc(params.offsetChars));
|
|
130
196
|
}
|
|
131
197
|
if (typeof params.limitChars === "number" && Number.isFinite(params.limitChars)) {
|
|
132
|
-
|
|
198
|
+
const limitChars = Math.trunc(params.limitChars);
|
|
199
|
+
// A zero limit means "no explicit limit" (tool contract); only send
|
|
200
|
+
// positive limits so direct callers agree with the tool layer.
|
|
201
|
+
if (limitChars !== 0) {
|
|
202
|
+
payload["limit_chars"] = Math.max(1, limitChars);
|
|
203
|
+
}
|
|
133
204
|
}
|
|
134
|
-
|
|
135
|
-
|
|
205
|
+
const cursorMaxChars = normalizeMaxChars(params.maxChars);
|
|
206
|
+
if (cursorMaxChars !== undefined) {
|
|
207
|
+
payload["max_chars"] = cursorMaxChars;
|
|
136
208
|
}
|
|
137
209
|
}
|
|
138
210
|
else {
|
|
@@ -140,8 +212,9 @@ export class EnriProxyClient {
|
|
|
140
212
|
if (typeof params.prompt === "string" && params.prompt.trim()) {
|
|
141
213
|
payload["prompt"] = params.prompt.trim();
|
|
142
214
|
}
|
|
143
|
-
|
|
144
|
-
|
|
215
|
+
const urlMaxChars = normalizeMaxChars(params.maxChars);
|
|
216
|
+
if (urlMaxChars !== undefined) {
|
|
217
|
+
payload["max_chars"] = urlMaxChars;
|
|
145
218
|
}
|
|
146
219
|
if (params.format === "markdown" || params.format === "text" || params.format === "html") {
|
|
147
220
|
payload["format"] = params.format;
|
|
@@ -162,19 +235,72 @@ export class EnriProxyClient {
|
|
|
162
235
|
payload["include_metadata"] = false;
|
|
163
236
|
}
|
|
164
237
|
if (typeof params.anchor === "string" && params.anchor.trim()) {
|
|
165
|
-
|
|
238
|
+
const anchor = sliceUtf8Safe(params.anchor.trim().replace(/^#+/, "").trim(), 0, 300);
|
|
239
|
+
if (anchor) {
|
|
240
|
+
payload["anchor"] = anchor;
|
|
241
|
+
}
|
|
166
242
|
}
|
|
167
243
|
}
|
|
168
|
-
const
|
|
244
|
+
const requestMaxChars = isDeleteRequest(params)
|
|
245
|
+
? undefined
|
|
246
|
+
: normalizeMaxChars(params.maxChars);
|
|
247
|
+
const transportOptions = {
|
|
248
|
+
...options,
|
|
249
|
+
maxResponseBytes: options?.maxResponseBytes ?? resolveMaxResponseBytes(requestMaxChars)
|
|
250
|
+
};
|
|
251
|
+
const result = await this.requestJson("POST", url, payload, this.timeoutMs, signal, transportOptions);
|
|
169
252
|
if (result.status < 200 || result.status >= 300) {
|
|
170
|
-
throw new EnriProxyHttpError(`El fetch web falló (HTTP ${result.status})
|
|
253
|
+
throw new EnriProxyHttpError(`El fetch web falló (HTTP ${result.status}). ${EnriProxyClient.describeHttpStatus(result.status)}`.trimEnd(), result.status, result.headers, result.body.slice(0, 4000));
|
|
171
254
|
}
|
|
255
|
+
let parsed;
|
|
172
256
|
try {
|
|
173
|
-
|
|
257
|
+
parsed = JSON.parse(result.body);
|
|
174
258
|
}
|
|
175
259
|
catch (error) {
|
|
176
|
-
throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_fetch (HTTP ${String(result.status)}): ${
|
|
260
|
+
throw new Error(`Respuesta no JSON de EnriProxy en /v1/tools/web_fetch (HTTP ${String(result.status)}): ${EnriProxyClient.describeUnparseableBody(error)}`);
|
|
261
|
+
}
|
|
262
|
+
if (isDeleteRequest(params)) {
|
|
263
|
+
const record = typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
|
|
264
|
+
? parsed
|
|
265
|
+
: {};
|
|
266
|
+
return {
|
|
267
|
+
deleted: record["deleted"] === true,
|
|
268
|
+
cursor: typeof record["cursor"] === "string" ? record["cursor"] : params.cursor
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
return parsed;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Summarizes a response-body parse failure as a bounded Spanish tail.
|
|
275
|
+
*
|
|
276
|
+
* @remarks
|
|
277
|
+
* V8's parser message ("Unexpected token …") is English jargon that would
|
|
278
|
+
* reach the model verbatim through the tool result; it is reduced to a
|
|
279
|
+
* Spanish label plus at most 80 characters of raw parser detail.
|
|
280
|
+
*
|
|
281
|
+
* @param error - Failure thrown while parsing the proxy response body.
|
|
282
|
+
* @returns Short Spanish summary for a model-facing error message.
|
|
283
|
+
*/
|
|
284
|
+
static describeUnparseableBody(error) {
|
|
285
|
+
const raw = error instanceof Error ? error.message : String(error);
|
|
286
|
+
return `cuerpo de respuesta no parseable (${sliceUtf8Safe(raw, 0, 80)})`;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Summarizes one non-2xx HTTP status as bounded Spanish guidance.
|
|
290
|
+
*
|
|
291
|
+
* @remarks
|
|
292
|
+
* The raw HTTP client does not follow redirects: an `ENRIPROXY_URL` behind
|
|
293
|
+
* a 301/302/303/307/308 would otherwise surface as a bare status code with
|
|
294
|
+
* no hint that the server configuration (not the call) must change.
|
|
295
|
+
*
|
|
296
|
+
* @param status - HTTP status returned by the server.
|
|
297
|
+
* @returns Spanish guidance suffix (may be empty).
|
|
298
|
+
*/
|
|
299
|
+
static describeHttpStatus(status) {
|
|
300
|
+
if (status === 301 || status === 302 || status === 303 || status === 307 || status === 308) {
|
|
301
|
+
return "El servidor respondió con una redirección que este cliente no sigue: configure ENRIPROXY_URL con la URL final (sin redirección) y reintente.";
|
|
177
302
|
}
|
|
303
|
+
return "";
|
|
178
304
|
}
|
|
179
305
|
/**
|
|
180
306
|
* Builds an absolute URL relative to the configured base URL.
|
|
@@ -201,13 +327,13 @@ export class EnriProxyClient {
|
|
|
201
327
|
* @param signal - Optional caller abort signal
|
|
202
328
|
* @returns HTTP result
|
|
203
329
|
*/
|
|
204
|
-
async requestJson(method, url, jsonBody, timeoutMs, signal) {
|
|
330
|
+
async requestJson(method, url, jsonBody, timeoutMs, signal, options) {
|
|
205
331
|
const body = JSON.stringify(jsonBody);
|
|
206
332
|
const headers = {
|
|
207
333
|
"Content-Type": "application/json",
|
|
208
334
|
"Content-Length": String(Buffer.byteLength(body))
|
|
209
335
|
};
|
|
210
|
-
return this.requestRaw(method, url, headers, Buffer.from(body, "utf8"), timeoutMs, signal);
|
|
336
|
+
return this.requestRaw(method, url, headers, Buffer.from(body, "utf8"), timeoutMs, signal, options);
|
|
211
337
|
}
|
|
212
338
|
/**
|
|
213
339
|
* Sends an HTTP request with optional headers and body.
|
|
@@ -217,19 +343,43 @@ export class EnriProxyClient {
|
|
|
217
343
|
* @param headers - Request headers
|
|
218
344
|
* @param body - Request body
|
|
219
345
|
* @param timeoutMs - Timeout in milliseconds
|
|
220
|
-
* @param signal - Optional
|
|
346
|
+
* @param signal - Optional abort signal (destroys the request on abort)
|
|
347
|
+
* @param options - Optional transport options (caller signal labeling, size ceiling)
|
|
221
348
|
* @returns HTTP result
|
|
222
349
|
*/
|
|
223
|
-
async requestRaw(method, url, headers, body, timeoutMs, signal) {
|
|
350
|
+
async requestRaw(method, url, headers, body, timeoutMs, signal, options) {
|
|
224
351
|
const isHttps = url.protocol === "https:";
|
|
225
352
|
const reqFn = isHttps ? httpsRequest : httpRequest;
|
|
226
353
|
const requestHeaders = {
|
|
227
354
|
Authorization: `Bearer ${this.apiKey}`,
|
|
228
355
|
...(headers ?? {})
|
|
229
356
|
};
|
|
357
|
+
// When the caller wraps its signal (caller abort + subfetch timeout) it
|
|
358
|
+
// also passes `callerSignal`: an abort with a live caller signal means
|
|
359
|
+
// the subfetch timeout fired, not a client cancellation.
|
|
360
|
+
const callerSignal = options?.callerSignal;
|
|
361
|
+
const abortMessage = () => {
|
|
362
|
+
if (callerSignal !== undefined && !callerSignal.aborted) {
|
|
363
|
+
return `La petición expiró después de ${String(options?.subfetchTimeoutMs ?? timeoutMs)}ms`;
|
|
364
|
+
}
|
|
365
|
+
return "La petición fue cancelada por el cliente.";
|
|
366
|
+
};
|
|
230
367
|
return await new Promise((resolve, reject) => {
|
|
368
|
+
let settled = false;
|
|
369
|
+
const settleResolve = (result) => {
|
|
370
|
+
if (!settled) {
|
|
371
|
+
settled = true;
|
|
372
|
+
resolve(result);
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
const settleReject = (error) => {
|
|
376
|
+
if (!settled) {
|
|
377
|
+
settled = true;
|
|
378
|
+
reject(error);
|
|
379
|
+
}
|
|
380
|
+
};
|
|
231
381
|
if (signal?.aborted) {
|
|
232
|
-
|
|
382
|
+
settleReject(new Error(abortMessage()));
|
|
233
383
|
return;
|
|
234
384
|
}
|
|
235
385
|
const req = reqFn(url, {
|
|
@@ -238,19 +388,25 @@ export class EnriProxyClient {
|
|
|
238
388
|
}, (res) => {
|
|
239
389
|
const chunks = [];
|
|
240
390
|
let received = 0;
|
|
241
|
-
const maxResponseBytes =
|
|
391
|
+
const maxResponseBytes = options?.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
|
|
242
392
|
res.on("data", (chunk) => {
|
|
243
393
|
received += chunk.length;
|
|
244
394
|
if (received > maxResponseBytes) {
|
|
245
395
|
cleanupAbort();
|
|
246
|
-
|
|
396
|
+
settleReject(new Error("La respuesta excedió el tamaño máximo permitido."));
|
|
397
|
+
req.destroy();
|
|
247
398
|
return;
|
|
248
399
|
}
|
|
249
400
|
chunks.push(chunk);
|
|
250
401
|
});
|
|
402
|
+
res.on("error", (error) => {
|
|
403
|
+
cleanupAbort();
|
|
404
|
+
req.destroy();
|
|
405
|
+
settleReject(error);
|
|
406
|
+
});
|
|
251
407
|
res.on("end", () => {
|
|
252
408
|
cleanupAbort();
|
|
253
|
-
|
|
409
|
+
settleResolve({
|
|
254
410
|
status: res.statusCode ?? 0,
|
|
255
411
|
headers: res.headers,
|
|
256
412
|
body: Buffer.concat(chunks).toString("utf8")
|
|
@@ -258,16 +414,25 @@ export class EnriProxyClient {
|
|
|
258
414
|
});
|
|
259
415
|
});
|
|
260
416
|
const cleanupAbort = () => {
|
|
417
|
+
try {
|
|
418
|
+
req.setTimeout(0);
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// Best-effort timer disarm on finished sockets.
|
|
422
|
+
}
|
|
423
|
+
if (totalBudgetTimer !== undefined) {
|
|
424
|
+
clearTimeout(totalBudgetTimer);
|
|
425
|
+
}
|
|
261
426
|
if (signal !== undefined) {
|
|
262
427
|
signal.removeEventListener("abort", onAbort);
|
|
263
428
|
}
|
|
264
429
|
};
|
|
265
430
|
const onAbort = () => {
|
|
266
|
-
req.destroy(new Error(
|
|
431
|
+
req.destroy(new Error(abortMessage()));
|
|
267
432
|
};
|
|
268
433
|
const onError = (error) => {
|
|
269
434
|
cleanupAbort();
|
|
270
|
-
|
|
435
|
+
settleReject(error);
|
|
271
436
|
};
|
|
272
437
|
const onTimeout = () => {
|
|
273
438
|
cleanupAbort();
|
|
@@ -277,7 +442,17 @@ export class EnriProxyClient {
|
|
|
277
442
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
278
443
|
}
|
|
279
444
|
req.on("error", onError);
|
|
445
|
+
// Socket-inactivity timeout (per-chunk deadline): a slow-drip response
|
|
446
|
+
// could otherwise extend the documented budget indefinitely.
|
|
280
447
|
req.setTimeout(timeoutMs, onTimeout);
|
|
448
|
+
// Total-budget timer: bounds the whole request wall-clock time so the
|
|
449
|
+
// documented ENRIWEB_TIMEOUT_MS / ENRIWEB_SEARCH_TIMEOUT_MS budgets
|
|
450
|
+
// hold even when chunks keep arriving (matching EnriCode's
|
|
451
|
+
// AbortSignal.timeout semantics).
|
|
452
|
+
const totalBudgetTimer = setTimeout(() => {
|
|
453
|
+
req.destroy(new Error(`La petición expiró después de ${timeoutMs}ms (presupuesto total)`));
|
|
454
|
+
}, timeoutMs);
|
|
455
|
+
totalBudgetTimer.unref?.();
|
|
281
456
|
if (body && body.length > 0) {
|
|
282
457
|
req.write(body);
|
|
283
458
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnriProxyClient.js","sourceRoot":"","sources":["../../src/client/EnriProxyClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EnriProxyClient.js","sourceRoot":"","sources":["../../src/client/EnriProxyClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
* @module index
|
|
8
8
|
*/
|
|
9
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
|
-
import { EnriProxyClient } from "./client/EnriProxyClient.js";
|
|
10
|
+
import { EnriProxyClient, MAX_WIRE_MAX_CHARS } from "./client/EnriProxyClient.js";
|
|
11
11
|
import { WebSearchTool } from "./tools/WebSearchTool.js";
|
|
12
12
|
import { WebFetchTool } from "./tools/WebFetchTool.js";
|
|
13
13
|
import { WebSearchRegistryVerifier } from "./tools/WebSearchRegistryVerifier.js";
|
|
14
14
|
import { EnriWebServer } from "./server/EnriWebServer.js";
|
|
15
15
|
import { packageInfoService } from "./package-info.js";
|
|
16
|
+
import { assertHttpUrl } from "./shared/validation.js";
|
|
16
17
|
/**
|
|
17
18
|
* Environment variable for EnriProxy base URL.
|
|
18
19
|
*/
|
|
@@ -25,6 +26,10 @@ const ENRIPROXY_API_KEY_ENV = "ENRIPROXY_API_KEY";
|
|
|
25
26
|
* Environment variable for default request timeout in milliseconds.
|
|
26
27
|
*/
|
|
27
28
|
const ENRIWEB_TIMEOUT_MS_ENV = "ENRIWEB_TIMEOUT_MS";
|
|
29
|
+
/**
|
|
30
|
+
* Environment variable for the `web_search` request timeout in milliseconds.
|
|
31
|
+
*/
|
|
32
|
+
const ENRIWEB_SEARCH_TIMEOUT_MS_ENV = "ENRIWEB_SEARCH_TIMEOUT_MS";
|
|
28
33
|
/**
|
|
29
34
|
* Environment variable for the default `web_fetch` max_chars limit.
|
|
30
35
|
*/
|
|
@@ -39,9 +44,23 @@ const ENRIWEB_GITHUB_TOKEN_ENV = "ENRIWEB_GITHUB_TOKEN";
|
|
|
39
44
|
*/
|
|
40
45
|
const DEFAULT_ENRIPROXY_URL = "http://127.0.0.1:8787";
|
|
41
46
|
/**
|
|
42
|
-
* Default request timeout in milliseconds.
|
|
47
|
+
* Default `web_fetch` request timeout in milliseconds.
|
|
48
|
+
*
|
|
49
|
+
* @remarks
|
|
50
|
+
* Exceeds EnriProxy's total fetch budget (150 s) so slow tier chains
|
|
51
|
+
* (CycleTLS floor ~35 s, stealth renders, embedding-reducer cold start)
|
|
52
|
+
* finish before the client gives up; matches EnriCode's 180 s remote fetch
|
|
53
|
+
* budget.
|
|
43
54
|
*/
|
|
44
|
-
const
|
|
55
|
+
const DEFAULT_FETCH_TIMEOUT_MS = 180 * 1000;
|
|
56
|
+
/**
|
|
57
|
+
* Default `web_search` request timeout in milliseconds.
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* Covers the SearXNG budget plus batched queries and server-side auto-fetch,
|
|
61
|
+
* matching EnriCode's remote search budget.
|
|
62
|
+
*/
|
|
63
|
+
const DEFAULT_SEARCH_TIMEOUT_MS = 320 * 1000;
|
|
45
64
|
/**
|
|
46
65
|
* Default maximum `web_fetch` content length.
|
|
47
66
|
*
|
|
@@ -54,6 +73,14 @@ const DEFAULT_TIMEOUT_MS = 60 * 1000;
|
|
|
54
73
|
* truncated by the client or written to a tool-results file for paging.
|
|
55
74
|
*/
|
|
56
75
|
const DEFAULT_WEB_FETCH_MAX_CHARS = 200_000;
|
|
76
|
+
/**
|
|
77
|
+
* Upper character budget accepted for the `web_fetch` default.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* The shared 4M wire ceiling (single source in the client) so the
|
|
81
|
+
* environment cannot configure an unbounded default.
|
|
82
|
+
*/
|
|
83
|
+
const MAX_DEFAULT_WEB_FETCH_MAX_CHARS = MAX_WIRE_MAX_CHARS;
|
|
57
84
|
/**
|
|
58
85
|
* Default timeout (ms) for registry enrichment requests.
|
|
59
86
|
*/
|
|
@@ -66,6 +93,21 @@ const DEFAULT_REGISTRY_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
|
66
93
|
* Default maximum entities verified per `web_search` call.
|
|
67
94
|
*/
|
|
68
95
|
const DEFAULT_REGISTRY_MAX_ENTITIES_PER_CALL = 6;
|
|
96
|
+
/**
|
|
97
|
+
* Parses one positive-integer environment value with strict digits.
|
|
98
|
+
*
|
|
99
|
+
* @param raw - Raw environment value, if set.
|
|
100
|
+
* @param fallback - Default used when unset, blank, or invalid.
|
|
101
|
+
* @returns Parsed value or the fallback.
|
|
102
|
+
*/
|
|
103
|
+
function parsePositiveIntEnv(raw, fallback) {
|
|
104
|
+
const trimmed = (raw ?? "").trim();
|
|
105
|
+
if (!/^\d+$/u.test(trimmed)) {
|
|
106
|
+
return fallback;
|
|
107
|
+
}
|
|
108
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
109
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
110
|
+
}
|
|
69
111
|
/**
|
|
70
112
|
* Entry point for the MCP server.
|
|
71
113
|
*/
|
|
@@ -84,8 +126,9 @@ async function main() {
|
|
|
84
126
|
console.log("Variables de entorno:");
|
|
85
127
|
console.log(" ENRIPROXY_URL (opcional, default: http://127.0.0.1:8787)");
|
|
86
128
|
console.log(" ENRIPROXY_API_KEY (requerida)");
|
|
87
|
-
console.log(" ENRIWEB_TIMEOUT_MS (opcional, default:
|
|
88
|
-
console.log("
|
|
129
|
+
console.log(" ENRIWEB_TIMEOUT_MS (opcional, default: 180000, timeout de web_fetch)");
|
|
130
|
+
console.log(" ENRIWEB_SEARCH_TIMEOUT_MS (opcional, default: 320000, timeout de web_search)");
|
|
131
|
+
console.log(" ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS (opcional, default: 200000, máximo 4000000)");
|
|
89
132
|
console.log(" ENRIWEB_GITHUB_TOKEN (opcional, mejora los límites de la API de GitHub)");
|
|
90
133
|
process.exit(0);
|
|
91
134
|
}
|
|
@@ -95,27 +138,24 @@ async function main() {
|
|
|
95
138
|
}
|
|
96
139
|
const serverUrl = (process.env[ENRIPROXY_URL_ENV] ?? DEFAULT_ENRIPROXY_URL).trim();
|
|
97
140
|
const apiKey = (process.env[ENRIPROXY_API_KEY_ENV] ?? "").trim();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
141
|
+
if (!apiKey) {
|
|
142
|
+
throw new Error("Falta ENRIPROXY_API_KEY: configure la API key de EnriProxy antes de iniciar el MCP.");
|
|
143
|
+
}
|
|
144
|
+
assertHttpUrl(serverUrl, ENRIPROXY_URL_ENV);
|
|
145
|
+
const timeoutMs = parsePositiveIntEnv(process.env[ENRIWEB_TIMEOUT_MS_ENV], DEFAULT_FETCH_TIMEOUT_MS);
|
|
146
|
+
const searchTimeoutMs = parsePositiveIntEnv(process.env[ENRIWEB_SEARCH_TIMEOUT_MS_ENV], DEFAULT_SEARCH_TIMEOUT_MS);
|
|
147
|
+
const defaultWebFetchMaxChars = Math.min(parsePositiveIntEnv(process.env[ENRIWEB_WEB_FETCH_DEFAULT_MAX_CHARS_ENV], DEFAULT_WEB_FETCH_MAX_CHARS), MAX_DEFAULT_WEB_FETCH_MAX_CHARS);
|
|
104
148
|
const githubToken = (process.env[ENRIWEB_GITHUB_TOKEN_ENV] ?? "").trim();
|
|
105
149
|
const createClient = (baseUrl, key, timeout) => new EnriProxyClient({
|
|
106
150
|
baseUrl,
|
|
107
151
|
apiKey: key,
|
|
108
152
|
timeoutMs: timeout
|
|
109
153
|
});
|
|
110
|
-
const resolvedTimeoutMs = Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : DEFAULT_TIMEOUT_MS;
|
|
111
|
-
const resolvedDefaultWebFetchMaxChars = Number.isFinite(defaultWebFetchMaxChars) && defaultWebFetchMaxChars > 0
|
|
112
|
-
? defaultWebFetchMaxChars
|
|
113
|
-
: DEFAULT_WEB_FETCH_MAX_CHARS;
|
|
114
154
|
const webSearchTool = new WebSearchTool({
|
|
115
155
|
createClient,
|
|
116
156
|
defaultServerUrl: serverUrl,
|
|
117
157
|
defaultApiKey: apiKey,
|
|
118
|
-
defaultTimeoutMs:
|
|
158
|
+
defaultTimeoutMs: searchTimeoutMs,
|
|
119
159
|
registryVerifier: new WebSearchRegistryVerifier({
|
|
120
160
|
fetchImpl: fetch,
|
|
121
161
|
timeoutMs: DEFAULT_REGISTRY_TIMEOUT_MS,
|
|
@@ -128,8 +168,8 @@ async function main() {
|
|
|
128
168
|
createClient,
|
|
129
169
|
defaultServerUrl: serverUrl,
|
|
130
170
|
defaultApiKey: apiKey,
|
|
131
|
-
defaultTimeoutMs:
|
|
132
|
-
defaultMaxChars:
|
|
171
|
+
defaultTimeoutMs: timeoutMs,
|
|
172
|
+
defaultMaxChars: defaultWebFetchMaxChars
|
|
133
173
|
});
|
|
134
174
|
const server = new EnriWebServer({
|
|
135
175
|
name: "EnriWeb",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/package-info.d.ts
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the installed package version for MCP server metadata.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* The manifest is resolved relative to this module (not the process cwd), so
|
|
6
|
+
* global installs and dev checkouts both resolve their own package.json. The
|
|
7
|
+
* first successful read is cached for the process lifetime; an unreadable
|
|
8
|
+
* manifest degrades to "0.0.0" instead of failing server startup.
|
|
9
|
+
*/
|
|
1
10
|
export declare class PackageInfoService {
|
|
11
|
+
/**
|
|
12
|
+
* Manifest require function bound to this module's location.
|
|
13
|
+
*/
|
|
2
14
|
private readonly require;
|
|
15
|
+
/**
|
|
16
|
+
* Cached version string, or null before the first resolution.
|
|
17
|
+
*/
|
|
3
18
|
private cachedVersion;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new {@link PackageInfoService}.
|
|
21
|
+
*/
|
|
4
22
|
constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Gets the installed package version.
|
|
25
|
+
*
|
|
26
|
+
* @returns Manifest version, or "0.0.0" when the manifest is unreadable.
|
|
27
|
+
*/
|
|
5
28
|
getVersion(): string;
|
|
6
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Process-wide package info service instance.
|
|
32
|
+
*/
|
|
7
33
|
export declare const packageInfoService: PackageInfoService;
|
|
8
34
|
//# sourceMappingURL=package-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-info.d.ts","sourceRoot":"","sources":["../src/package-info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-info.d.ts","sourceRoot":"","sources":["../src/package-info.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAuB;IAE5C;;OAEG;;IAKH;;;;OAIG;IACI,UAAU,IAAI,MAAM;CAoB5B;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAA6C,CAAC"}
|