@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.
Files changed (56) hide show
  1. package/README.md +48 -20
  2. package/dist/client/EnriProxyClient.d.ts +143 -6
  3. package/dist/client/EnriProxyClient.d.ts.map +1 -1
  4. package/dist/client/EnriProxyClient.js +208 -33
  5. package/dist/client/EnriProxyClient.js.map +1 -1
  6. package/dist/index.js +58 -18
  7. package/dist/index.js.map +1 -1
  8. package/dist/package-info.d.ts +26 -0
  9. package/dist/package-info.d.ts.map +1 -1
  10. package/dist/package-info.js +29 -2
  11. package/dist/package-info.js.map +1 -1
  12. package/dist/server/EnriWebServer.d.ts +33 -0
  13. package/dist/server/EnriWebServer.d.ts.map +1 -1
  14. package/dist/server/EnriWebServer.js +322 -23
  15. package/dist/server/EnriWebServer.js.map +1 -1
  16. package/dist/shared/Utf8SafeTextSlicer.d.ts +47 -0
  17. package/dist/shared/Utf8SafeTextSlicer.d.ts.map +1 -0
  18. package/dist/shared/Utf8SafeTextSlicer.js +97 -0
  19. package/dist/shared/Utf8SafeTextSlicer.js.map +1 -0
  20. package/dist/shared/validation.d.ts +13 -1
  21. package/dist/shared/validation.d.ts.map +1 -1
  22. package/dist/shared/validation.js +27 -14
  23. package/dist/shared/validation.js.map +1 -1
  24. package/dist/tools/WebFetchNpmProjection.d.ts +143 -0
  25. package/dist/tools/WebFetchNpmProjection.d.ts.map +1 -0
  26. package/dist/tools/WebFetchNpmProjection.js +480 -0
  27. package/dist/tools/WebFetchNpmProjection.js.map +1 -0
  28. package/dist/tools/WebFetchParamsParser.d.ts +26 -0
  29. package/dist/tools/WebFetchParamsParser.d.ts.map +1 -0
  30. package/dist/tools/WebFetchParamsParser.js +157 -0
  31. package/dist/tools/WebFetchParamsParser.js.map +1 -0
  32. package/dist/tools/WebFetchRangesExecutor.d.ts +86 -0
  33. package/dist/tools/WebFetchRangesExecutor.d.ts.map +1 -0
  34. package/dist/tools/WebFetchRangesExecutor.js +277 -0
  35. package/dist/tools/WebFetchRangesExecutor.js.map +1 -0
  36. package/dist/tools/WebFetchTool.d.ts +186 -81
  37. package/dist/tools/WebFetchTool.d.ts.map +1 -1
  38. package/dist/tools/WebFetchTool.js +142 -425
  39. package/dist/tools/WebFetchTool.js.map +1 -1
  40. package/dist/tools/WebFetchToolTextFormatter.d.ts +57 -0
  41. package/dist/tools/WebFetchToolTextFormatter.d.ts.map +1 -0
  42. package/dist/tools/WebFetchToolTextFormatter.js +135 -0
  43. package/dist/tools/WebFetchToolTextFormatter.js.map +1 -0
  44. package/dist/tools/WebSearchRegistryHttpReader.d.ts +116 -0
  45. package/dist/tools/WebSearchRegistryHttpReader.d.ts.map +1 -0
  46. package/dist/tools/WebSearchRegistryHttpReader.js +157 -0
  47. package/dist/tools/WebSearchRegistryHttpReader.js.map +1 -0
  48. package/dist/tools/WebSearchRegistryVerifier.d.ts +103 -7
  49. package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
  50. package/dist/tools/WebSearchRegistryVerifier.js +375 -135
  51. package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
  52. package/dist/tools/WebSearchTool.d.ts +78 -0
  53. package/dist/tools/WebSearchTool.d.ts.map +1 -1
  54. package/dist/tools/WebSearchTool.js +191 -21
  55. package/dist/tools/WebSearchTool.js.map +1 -1
  56. package/package.json +3 -2
@@ -3,9 +3,16 @@
3
3
  *
4
4
  * Implements the `web_fetch` MCP tool by delegating to EnriProxy.
5
5
  *
6
+ * Size note (~610 lines, alert zone by design): this class owns the
7
+ * url/cursor/ranges/npm dispatch plus their result contracts in one
8
+ * readable place; the parser, ranges executor, npm projection and text
9
+ * formatter already live in dedicated modules. Splitting is tracked debt;
10
+ * any future edit must extract the touched unit instead of growing this
11
+ * file.
12
+ *
6
13
  * @module tools/WebFetchTool
7
14
  */
8
- import type { EnriProxyClient } from "../client/EnriProxyClient.js";
15
+ import { type EnriProxyClient } from "../client/EnriProxyClient.js";
9
16
  /**
10
17
  * Tool parameters for `web_fetch`.
11
18
  */
@@ -32,8 +39,8 @@ export interface WebFetchToolParams {
32
39
  */
33
40
  readonly format?: "text" | "markdown" | "html";
34
41
  /**
35
- * Content scope for HTML sources: main content region only, or the full
36
- * page (default).
42
+ * Content scope for HTML sources: main content region only (default), or
43
+ * the full page.
37
44
  */
38
45
  readonly content?: "main" | "full";
39
46
  /**
@@ -56,6 +63,27 @@ export interface WebFetchToolParams {
56
63
  * Limit in characters for cursor pagination.
57
64
  */
58
65
  readonly limitChars?: number;
66
+ /**
67
+ * Special cursor action: "delete" releases the server-side capture.
68
+ */
69
+ readonly action?: "delete";
70
+ /**
71
+ * Grouped character ranges read in one call (max 10).
72
+ */
73
+ readonly ranges?: readonly WebFetchRangeSpec[];
74
+ }
75
+ /**
76
+ * One grouped character range for `web_fetch`.
77
+ */
78
+ export interface WebFetchRangeSpec {
79
+ /**
80
+ * Zero-based start offset in characters.
81
+ */
82
+ readonly offsetChars: number;
83
+ /**
84
+ * Range length in characters; omitted falls back to the call budget.
85
+ */
86
+ readonly limitChars?: number;
59
87
  }
60
88
  /**
61
89
  * Tool result for `web_fetch`.
@@ -101,6 +129,18 @@ export interface WebFetchToolResult extends Record<string, unknown> {
101
129
  * Whether more content exists beyond this slice.
102
130
  */
103
131
  readonly has_more?: boolean;
132
+ /**
133
+ * Exact offset where the next page starts, when the proxy reports it
134
+ * (cursor reads).
135
+ */
136
+ readonly next_offset_chars?: number;
137
+ /**
138
+ * Budget applied to compose this result (npm stitching path). When the
139
+ * winning README sub-fetch issued a continuation cursor, that cursor (and
140
+ * the raw capture `total_chars`) propagates so pagination needs no
141
+ * re-download; otherwise retry with a larger `max_chars` for more content.
142
+ */
143
+ readonly applied_max_chars?: number;
104
144
  /**
105
145
  * Whether content was reduced into an excerpt pack.
106
146
  */
@@ -109,7 +149,126 @@ export interface WebFetchToolResult extends Record<string, unknown> {
109
149
  * Whether the upstream fetch was truncated.
110
150
  */
111
151
  readonly fetched_truncated?: boolean;
152
+ /**
153
+ * Zero-based offset inside `content` where the undecorated page starts
154
+ * (passthrough of the proxy's bounds for local range windows).
155
+ */
156
+ readonly page_offset_chars?: number;
157
+ /**
158
+ * Length of the undecorated page inside `content` (passthrough of the
159
+ * proxy's bounds for local range windows).
160
+ */
161
+ readonly page_chars?: number;
112
162
  }
163
+ /**
164
+ * Result for `action: "delete"` cursor release.
165
+ */
166
+ export interface WebFetchToolDeleteResult extends Record<string, unknown> {
167
+ /**
168
+ * Whether the cursor existed and was deleted server-side.
169
+ */
170
+ readonly deleted: boolean;
171
+ /**
172
+ * Cursor the deletion addressed.
173
+ */
174
+ readonly cursor: string;
175
+ }
176
+ /**
177
+ * One slice produced for a grouped-ranges read.
178
+ */
179
+ export interface WebFetchRangeSlice {
180
+ /**
181
+ * One-based range index in request order.
182
+ */
183
+ readonly index: number;
184
+ /**
185
+ * Requested zero-based character offset.
186
+ */
187
+ readonly offset_chars: number;
188
+ /**
189
+ * Requested maximum character count.
190
+ */
191
+ readonly limit_chars: number;
192
+ /**
193
+ * Slice content.
194
+ */
195
+ readonly content: string;
196
+ /**
197
+ * HTTP status of the underlying read.
198
+ */
199
+ readonly status: number;
200
+ /**
201
+ * Content type of the underlying read.
202
+ */
203
+ readonly content_type: string;
204
+ /**
205
+ * Whether this slice was truncated.
206
+ */
207
+ readonly truncated: boolean;
208
+ /**
209
+ * Spanish error row when this range's read failed; the slice carries no
210
+ * content in that case.
211
+ */
212
+ readonly error?: string;
213
+ /**
214
+ * Spanish model-facing note explaining an empty slice (offset beyond the
215
+ * captured content).
216
+ */
217
+ readonly note?: string;
218
+ /**
219
+ * Whether more content exists beyond this slice (cursor reads).
220
+ */
221
+ readonly has_more?: boolean;
222
+ /**
223
+ * Total captured characters for this cursor.
224
+ */
225
+ readonly total_chars?: number;
226
+ /**
227
+ * Continuation cursor (cursor reads).
228
+ */
229
+ readonly cursor?: string;
230
+ }
231
+ /**
232
+ * Grouped result for a `ranges` call (cursor fan-out or local slicing).
233
+ */
234
+ export interface WebFetchToolRangesResult extends Record<string, unknown> {
235
+ /**
236
+ * Marker distinguishing grouped-range results.
237
+ */
238
+ readonly range_applied: true;
239
+ /**
240
+ * Number of returned ranges.
241
+ */
242
+ readonly range_count: number;
243
+ /**
244
+ * Range slices in request order.
245
+ */
246
+ readonly ranges: readonly WebFetchRangeSlice[];
247
+ /**
248
+ * Whether at least one slice was truncated.
249
+ */
250
+ readonly truncated: boolean;
251
+ /**
252
+ * Spanish continuation hint for the model.
253
+ */
254
+ readonly range_hint: string;
255
+ /**
256
+ * URL the ranges were read from.
257
+ */
258
+ readonly url: string;
259
+ /**
260
+ * Cursor backing the capture, when one exists.
261
+ */
262
+ readonly cursor?: string;
263
+ /**
264
+ * Total capture size in characters, when the base read reported it.
265
+ */
266
+ readonly total_chars?: number;
267
+ }
268
+ /**
269
+ * Result union for {@link WebFetchTool.execute}.
270
+ */
271
+ export type WebFetchToolExecuteResult = WebFetchToolResult | WebFetchToolDeleteResult | WebFetchToolRangesResult;
113
272
  /**
114
273
  * Dependencies for {@link WebFetchTool}.
115
274
  */
@@ -141,18 +300,34 @@ export interface WebFetchToolDeps {
141
300
  */
142
301
  readonly defaultMaxChars: number;
143
302
  }
303
+ /**
304
+ * Maximum grouped ranges honored per call (parity with EnriCode).
305
+ */
306
+ export declare const MAX_TOOL_RANGES = 10;
307
+ /**
308
+ * Maximum anchor-selector characters honored per call (parity with
309
+ * EnriCode's `WebFetchToolInputSchemaRecord.MAX_ANCHOR_CHARS` and
310
+ * EnriProxy's `WEB_FETCH_MAX_ANCHOR_CHARS`).
311
+ *
312
+ * @remarks
313
+ * The clamp is surrogate-safe through `sliceUtf8Safe`, so the unit is
314
+ * UTF-16 code units with pair safety at the cut. Single source for the
315
+ * parser clamp and the inputSchema `maxLength`/description so they can
316
+ * never drift apart.
317
+ */
318
+ export declare const MAX_ANCHOR_CHARS = 300;
144
319
  /**
145
320
  * MCP tool that fetches URL content via EnriProxy.
146
321
  */
147
322
  export declare class WebFetchTool {
148
323
  /**
149
- * Readme file candidates commonly used in GitHub repositories.
324
+ * npm package-page projection collaborator.
150
325
  */
151
- private static readonly README_FILENAMES;
326
+ private readonly npmProjection;
152
327
  /**
153
- * Default branches to try when resolving GitHub raw README URLs.
328
+ * Grouped-ranges execution collaborator.
154
329
  */
155
- private static readonly README_BRANCHES;
330
+ private readonly rangesExecutor;
156
331
  /**
157
332
  * Tool dependencies.
158
333
  */
@@ -181,85 +356,15 @@ export declare class WebFetchTool {
181
356
  *
182
357
  * @param params - Validated parameters
183
358
  * @param signal - Optional caller abort signal
184
- * @returns Tool result
185
- */
186
- execute(params: WebFetchToolParams, signal?: AbortSignal): Promise<WebFetchToolResult>;
187
- /**
188
- * Attempts to provide a higher-quality fetch for npm package pages.
189
- *
190
- * @param params - Tool parameters
191
- * @param client - EnriProxy client
192
- * @param maxChars - Maximum content length to return
193
- * @param signal - Optional caller abort signal
194
- * @returns Tool result if the URL is an npm package page, otherwise null
195
- */
196
- private tryExecuteNpmPackageFetch;
197
- /**
198
- * Attempts to parse an npm package name from an npmjs.com package page URL.
199
- *
200
- * @param url - Parsed URL
201
- * @returns npm package name (e.g. "chalk" or "@scope/name") or null
202
- */
203
- private tryParseNpmPackageName;
204
- /**
205
- * Tries to parse a JSON object from a string.
206
- *
207
- * @param input - JSON string
208
- * @returns Parsed object or null
209
- */
210
- private tryParseJsonObject;
211
- /**
212
- * Extracts a string from an unknown value if possible.
213
- *
214
- * @param value - Unknown input
215
- * @returns Trimmed string or null
216
- */
217
- private tryGetString;
218
- /**
219
- * Extracts a repository URL from npm metadata.
220
- *
221
- * @param repository - Repository field value
222
- * @returns Normalized URL string or null
223
- */
224
- private tryGetRepositoryUrl;
225
- /**
226
- * Normalizes common git repository URL schemes into an https URL.
227
- *
228
- * @param rawUrl - Raw repository URL from metadata
229
- * @returns Normalized URL string or null
230
- */
231
- private normalizeRepositoryUrl;
232
- /**
233
- * Normalizes a GitHub repository URL to the canonical https form.
234
- *
235
- * @param repositoryUrl - Repository URL
236
- * @returns Canonical GitHub repo URL (https://github.com/{owner}/{repo}) or null
237
- */
238
- private tryNormalizeGitHubRepoUrl;
239
- /**
240
- * Attempts to fetch a GitHub repository README via raw.githubusercontent.com.
241
- *
242
- * @remarks
243
- * All branch/filename candidates run in parallel and the first hit in
244
- * preference order wins, so the worst case costs one timeout instead of
245
- * one per candidate. Projection fields travel to the README sub-fetches;
246
- * the registry metadata fetch stays raw because its JSON is parsed.
247
- *
248
- * @param client - EnriProxy client
249
- * @param githubRepoUrl - Canonical GitHub repo URL
250
- * @param maxChars - Maximum content length
251
- * @param format - Optional content flavor for the README page
252
- * @param content - Optional content scope for the README page
253
- * @param signal - Optional caller abort signal
254
- * @returns README content if found, otherwise null
359
+ * @returns Tool result (single read, delete outcome, or grouped ranges)
255
360
  */
256
- private tryFetchGitHubReadme;
361
+ execute(params: WebFetchToolParams, signal?: AbortSignal): Promise<WebFetchToolExecuteResult>;
257
362
  /**
258
363
  * Formats results for MCP text output.
259
364
  *
260
- * @param result - Tool result
365
+ * @param result - Tool result (single read, delete outcome, or ranges)
261
366
  * @returns Formatted text
262
367
  */
263
- formatOutput(result: WebFetchToolResult): string;
368
+ formatOutput(result: WebFetchToolExecuteResult): string;
264
369
  }
265
370
  //# sourceMappingURL=WebFetchTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebFetchTool.d.ts","sourceRoot":"","sources":["../../src/tools/WebFetchTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebFetchTool.d.ts","sourceRoot":"","sources":["../../src/tools/WebFetchTool.ts"],"names":[],"mappings":"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"}