@bedolla/enriweb 0.1.5 → 0.1.7

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 +176 -5
  3. package/dist/client/EnriProxyClient.d.ts.map +1 -1
  4. package/dist/client/EnriProxyClient.js +255 -31
  5. package/dist/client/EnriProxyClient.js.map +1 -1
  6. package/dist/index.js +65 -25
  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 +338 -28
  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 +41 -17
  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 +187 -71
  37. package/dist/tools/WebFetchTool.d.ts.map +1 -1
  38. package/dist/tools/WebFetchTool.js +145 -367
  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 +111 -6
  49. package/dist/tools/WebSearchRegistryVerifier.d.ts.map +1 -1
  50. package/dist/tools/WebSearchRegistryVerifier.js +406 -125
  51. package/dist/tools/WebSearchRegistryVerifier.js.map +1 -1
  52. package/dist/tools/WebSearchTool.d.ts +85 -2
  53. package/dist/tools/WebSearchTool.d.ts.map +1 -1
  54. package/dist/tools/WebSearchTool.js +197 -19
  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;
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;
112
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
  */
@@ -180,75 +355,16 @@ export declare class WebFetchTool {
180
355
  * Executes the web fetch tool.
181
356
  *
182
357
  * @param params - Validated parameters
183
- * @returns Tool result
184
- */
185
- execute(params: WebFetchToolParams): Promise<WebFetchToolResult>;
186
- /**
187
- * Attempts to provide a higher-quality fetch for npm package pages.
188
- *
189
- * @param params - Tool parameters
190
- * @param client - EnriProxy client
191
- * @param maxChars - Maximum content length to return
192
- * @returns Tool result if the URL is an npm package page, otherwise null
193
- */
194
- private tryExecuteNpmPackageFetch;
195
- /**
196
- * Attempts to parse an npm package name from an npmjs.com package page URL.
197
- *
198
- * @param url - Parsed URL
199
- * @returns npm package name (e.g. "chalk" or "@scope/name") or null
200
- */
201
- private tryParseNpmPackageName;
202
- /**
203
- * Tries to parse a JSON object from a string.
204
- *
205
- * @param input - JSON string
206
- * @returns Parsed object or null
207
- */
208
- private tryParseJsonObject;
209
- /**
210
- * Extracts a string from an unknown value if possible.
211
- *
212
- * @param value - Unknown input
213
- * @returns Trimmed string or null
214
- */
215
- private tryGetString;
216
- /**
217
- * Extracts a repository URL from npm metadata.
218
- *
219
- * @param repository - Repository field value
220
- * @returns Normalized URL string or null
221
- */
222
- private tryGetRepositoryUrl;
223
- /**
224
- * Normalizes common git repository URL schemes into an https URL.
225
- *
226
- * @param rawUrl - Raw repository URL from metadata
227
- * @returns Normalized URL string or null
228
- */
229
- private normalizeRepositoryUrl;
230
- /**
231
- * Normalizes a GitHub repository URL to the canonical https form.
232
- *
233
- * @param repositoryUrl - Repository URL
234
- * @returns Canonical GitHub repo URL (https://github.com/{owner}/{repo}) or null
235
- */
236
- private tryNormalizeGitHubRepoUrl;
237
- /**
238
- * Attempts to fetch a GitHub repository README via raw.githubusercontent.com.
239
- *
240
- * @param client - EnriProxy client
241
- * @param githubRepoUrl - Canonical GitHub repo URL
242
- * @param maxChars - Maximum content length
243
- * @returns README content if found, otherwise null
358
+ * @param signal - Optional caller abort signal
359
+ * @returns Tool result (single read, delete outcome, or grouped ranges)
244
360
  */
245
- private tryFetchGitHubReadme;
361
+ execute(params: WebFetchToolParams, signal?: AbortSignal): Promise<WebFetchToolExecuteResult>;
246
362
  /**
247
363
  * Formats results for MCP text output.
248
364
  *
249
- * @param result - Tool result
365
+ * @param result - Tool result (single read, delete outcome, or ranges)
250
366
  * @returns Formatted text
251
367
  */
252
- formatOutput(result: WebFetchToolResult): string;
368
+ formatOutput(result: WebFetchToolExecuteResult): string;
253
369
  }
254
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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"}