@kenkaiiii/ggcoder 5.49.0 → 5.49.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/agent-session-verification-flow.test.d.ts +2 -0
- package/dist/core/agent-session-verification-flow.test.d.ts.map +1 -0
- package/dist/core/agent-session-verification-flow.test.js +125 -0
- package/dist/core/agent-session-verification-flow.test.js.map +1 -0
- package/dist/core/agent-session-verification-gate.test.js +6 -4
- package/dist/core/agent-session-verification-gate.test.js.map +1 -1
- package/dist/core/agent-session.d.ts +9 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +33 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/event-bus.d.ts +6 -6
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/process-manager-notifications.test.js +31 -13
- package/dist/core/process-manager-notifications.test.js.map +1 -1
- package/dist/core/process-manager.d.ts +11 -0
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +1 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/sandbox.d.ts.map +1 -1
- package/dist/core/sandbox.js +66 -1
- package/dist/core/sandbox.js.map +1 -1
- package/dist/core/sandbox.test.js +64 -0
- package/dist/core/sandbox.test.js.map +1 -1
- package/dist/core/verification-gate.d.ts +22 -12
- package/dist/core/verification-gate.d.ts.map +1 -1
- package/dist/core/verification-gate.js +126 -27
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verification-gate.test.js +40 -4
- package/dist/core/verification-gate.test.js.map +1 -1
- package/dist/tools/path-utils.d.ts +28 -1
- package/dist/tools/path-utils.d.ts.map +1 -1
- package/dist/tools/path-utils.js +44 -2
- package/dist/tools/path-utils.js.map +1 -1
- package/dist/tools/path-utils.test.js +57 -1
- package/dist/tools/path-utils.test.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +7 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +284 -20
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +137 -0
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +15 -4
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +3 -0
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +3 -0
- package/dist/ui/app-items.js.map +1 -1
- package/package.json +4 -4
package/dist/tools/web-fetch.js
CHANGED
|
@@ -142,6 +142,184 @@ export function htmlToCleanText(html) {
|
|
|
142
142
|
.replace(/\n{3,}/g, "\n\n")
|
|
143
143
|
.trim();
|
|
144
144
|
}
|
|
145
|
+
// ── Outline rendering (compact numbered view) ────────────────
|
|
146
|
+
/** Hard cap on how many links one tool call will number. */
|
|
147
|
+
const MAX_OUTLINE_LINKS = 100;
|
|
148
|
+
/** ~500 tokens of body: the whole point of the outline format. */
|
|
149
|
+
const OUTLINE_DEFAULT_MAX_LENGTH = 2000;
|
|
150
|
+
/** Per-session render cache size (pages, not bytes). */
|
|
151
|
+
const MAX_CACHED_PAGES = 32;
|
|
152
|
+
const OUTLINE_INDEX_HEADER = "Links (fetch one with `follow`):";
|
|
153
|
+
const BLOCKED_URL_MESSAGE = "Error: URL blocked — requests to private/internal network addresses are not allowed.";
|
|
154
|
+
/**
|
|
155
|
+
* Allocates the small stable numbers that replace hyperlinks in an outline
|
|
156
|
+
* render. Scoped to a single tool call, deduped by absolute URL, and capped at
|
|
157
|
+
* {@link MAX_OUTLINE_LINKS} so a link-farm page cannot grow the index (or the
|
|
158
|
+
* session's follow map) without bound.
|
|
159
|
+
*/
|
|
160
|
+
class LinkNumbers {
|
|
161
|
+
byUrl = new Map();
|
|
162
|
+
used = new Set();
|
|
163
|
+
ordered = [];
|
|
164
|
+
next = 1;
|
|
165
|
+
get size() {
|
|
166
|
+
return this.byUrl.size;
|
|
167
|
+
}
|
|
168
|
+
/** Adopt the numbers baked into a cached render so they stay resolvable. */
|
|
169
|
+
reserve(links) {
|
|
170
|
+
for (const link of links) {
|
|
171
|
+
if (this.used.has(link.number))
|
|
172
|
+
continue;
|
|
173
|
+
this.used.add(link.number);
|
|
174
|
+
this.byUrl.set(link.url, link.number);
|
|
175
|
+
this.ordered.push(link);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/** Number for `url`, or null once the per-call cap is reached. */
|
|
179
|
+
numberFor(url) {
|
|
180
|
+
const existing = this.byUrl.get(url);
|
|
181
|
+
if (existing !== undefined)
|
|
182
|
+
return existing;
|
|
183
|
+
if (this.byUrl.size >= MAX_OUTLINE_LINKS)
|
|
184
|
+
return null;
|
|
185
|
+
while (this.used.has(this.next))
|
|
186
|
+
this.next++;
|
|
187
|
+
const number = this.next++;
|
|
188
|
+
this.used.add(number);
|
|
189
|
+
this.byUrl.set(url, number);
|
|
190
|
+
this.ordered.push({ number, url });
|
|
191
|
+
return number;
|
|
192
|
+
}
|
|
193
|
+
all() {
|
|
194
|
+
return this.ordered;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Absolute http(s) form of `href` relative to `base`, or null if unusable. */
|
|
198
|
+
function absoluteHttpUrl(href, base) {
|
|
199
|
+
const trimmed = href.trim();
|
|
200
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
201
|
+
return null;
|
|
202
|
+
let resolved;
|
|
203
|
+
try {
|
|
204
|
+
resolved = new URL(trimmed, base);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
if (resolved.protocol !== "http:" && resolved.protocol !== "https:")
|
|
210
|
+
return null;
|
|
211
|
+
// Fragments only move within a page we already have: drop them so anchors
|
|
212
|
+
// into the same document collapse onto one number, and spend no number at
|
|
213
|
+
// all on links back into the page being rendered.
|
|
214
|
+
resolved.hash = "";
|
|
215
|
+
let self;
|
|
216
|
+
try {
|
|
217
|
+
self = new URL(base);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return resolved.toString();
|
|
221
|
+
}
|
|
222
|
+
self.hash = "";
|
|
223
|
+
if (resolved.href === self.href)
|
|
224
|
+
return null;
|
|
225
|
+
return resolved.href;
|
|
226
|
+
}
|
|
227
|
+
const MARKDOWN_LINK = /(!?)\[([^\]]*)\]\(\s*<?([^)<>\s]*)>?(?:\s+"[^"]*")?\s*\)/g;
|
|
228
|
+
const HTML_ANCHOR = /<a\b[^>]*\bhref\s*=\s*["']([^"']*)["'][^>]*>([\s\S]*?)<\/a>/gi;
|
|
229
|
+
/** Rewrite markdown links to `text [n]`; drop images, which carry no text. */
|
|
230
|
+
function numberMarkdownLinks(markdown, base, numbers) {
|
|
231
|
+
return markdown.replace(MARKDOWN_LINK, (_match, image, text, href) => {
|
|
232
|
+
if (image)
|
|
233
|
+
return "";
|
|
234
|
+
const url = absoluteHttpUrl(href, base);
|
|
235
|
+
if (!url)
|
|
236
|
+
return text;
|
|
237
|
+
const number = numbers.numberFor(url);
|
|
238
|
+
return number === null ? text : `${text} [${number}]`;
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/** Same rewrite for raw HTML, used when the markdown extractor is unavailable. */
|
|
242
|
+
function numberHtmlAnchors(html, base, numbers) {
|
|
243
|
+
return html.replace(HTML_ANCHOR, (_match, href, inner) => {
|
|
244
|
+
const url = absoluteHttpUrl(decodeHTMLEntities(href), base);
|
|
245
|
+
if (!url)
|
|
246
|
+
return inner;
|
|
247
|
+
const number = numbers.numberFor(url);
|
|
248
|
+
return number === null ? inner : `${inner} [${number}]`;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function compactBlankLines(text) {
|
|
252
|
+
return text
|
|
253
|
+
.split("\n")
|
|
254
|
+
.map((line) => line.replace(/[ \t]+$/, ""))
|
|
255
|
+
.join("\n")
|
|
256
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
257
|
+
.trim();
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Render a fetched document as main content with every hyperlink replaced by a
|
|
261
|
+
* number, followed by a compact number → absolute URL index. The body reuses
|
|
262
|
+
* the existing `max_length` budget; only links still visible in the (possibly
|
|
263
|
+
* truncated) body are indexed.
|
|
264
|
+
*/
|
|
265
|
+
async function renderOutline(text, isHtml, finalUrl, opts) {
|
|
266
|
+
const numbers = opts.numbers ?? new LinkNumbers();
|
|
267
|
+
let heading = "";
|
|
268
|
+
let body;
|
|
269
|
+
if (!isHtml) {
|
|
270
|
+
body = numberMarkdownLinks(text, finalUrl, numbers);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
let extracted;
|
|
274
|
+
try {
|
|
275
|
+
extracted = await extractToMarkdown(text, finalUrl);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
extracted = null;
|
|
279
|
+
}
|
|
280
|
+
if (extracted) {
|
|
281
|
+
heading = extracted.title ? `# ${extracted.title}\n\n` : "";
|
|
282
|
+
body = numberMarkdownLinks(extracted.markdown, finalUrl, numbers);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
body = htmlToCleanText(numberHtmlAnchors(removeBoilerplateElements(text), finalUrl, numbers));
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const rendered = truncate(compactBlankLines(heading + body), opts.maxLength);
|
|
289
|
+
const shown = numbers.all().filter((link) => rendered.includes(`[${link.number}]`));
|
|
290
|
+
let output = rendered;
|
|
291
|
+
if (shown.length > 0) {
|
|
292
|
+
const index = shown.map((link) => `[${link.number}] ${link.url}`).join("\n");
|
|
293
|
+
output += `\n\n${OUTLINE_INDEX_HEADER}\n${index}`;
|
|
294
|
+
if (numbers.size >= MAX_OUTLINE_LINKS) {
|
|
295
|
+
output += `\n[link index truncated at ${MAX_OUTLINE_LINKS}; further links left as plain text]`;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
opts.onRender?.(finalUrl, output, [...shown]);
|
|
299
|
+
return output;
|
|
300
|
+
}
|
|
301
|
+
function cacheKey(url, maxLength) {
|
|
302
|
+
return `${maxLength}\u0000${url}`;
|
|
303
|
+
}
|
|
304
|
+
function cacheGet(cache, key) {
|
|
305
|
+
const hit = cache.get(key);
|
|
306
|
+
if (!hit)
|
|
307
|
+
return undefined;
|
|
308
|
+
// Re-insert so Map iteration order stays least-recently-used first.
|
|
309
|
+
cache.delete(key);
|
|
310
|
+
cache.set(key, hit);
|
|
311
|
+
return hit;
|
|
312
|
+
}
|
|
313
|
+
function cacheSet(cache, key, entry) {
|
|
314
|
+
cache.delete(key);
|
|
315
|
+
cache.set(key, entry);
|
|
316
|
+
while (cache.size > MAX_CACHED_PAGES) {
|
|
317
|
+
const oldest = cache.keys().next();
|
|
318
|
+
if (oldest.done)
|
|
319
|
+
break;
|
|
320
|
+
cache.delete(oldest.value);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
145
323
|
// ── Fetch configuration ──────────────────────────────────────
|
|
146
324
|
const MAX_REDIRECTS = 5;
|
|
147
325
|
const MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -165,7 +343,7 @@ const DEFAULT_LLMS_CANDIDATE_LIMIT = 6;
|
|
|
165
343
|
* error string describing why the fetch could not complete.
|
|
166
344
|
*/
|
|
167
345
|
function headersForFormat(format, honestUserAgent = false) {
|
|
168
|
-
const accept = format === "html"
|
|
346
|
+
const accept = format === "html" || format === "outline"
|
|
169
347
|
? "text/html,application/xhtml+xml;q=0.9,*/*;q=0.5"
|
|
170
348
|
: format === "markdown"
|
|
171
349
|
? "text/markdown,text/plain;q=0.9,text/html;q=0.8,*/*;q=0.5"
|
|
@@ -324,6 +502,9 @@ async function processHtmlOrText(response, text, opts) {
|
|
|
324
502
|
/application\/octet-stream|binary\/octet-stream|text\/plain/i.test(response.contentType);
|
|
325
503
|
const isHtml = response.contentType.includes("html") ||
|
|
326
504
|
(genericContentType && /^(?:<!doctype\s+html|<html\b|<head\b|<body\b)/i.test(prefix));
|
|
505
|
+
if (opts.format === "outline") {
|
|
506
|
+
return await renderOutline(text, isHtml, response.finalUrl, opts);
|
|
507
|
+
}
|
|
327
508
|
if (opts.format === "html") {
|
|
328
509
|
return truncate(text, opts.maxLength);
|
|
329
510
|
}
|
|
@@ -352,7 +533,7 @@ async function processHtmlOrText(response, text, opts) {
|
|
|
352
533
|
*/
|
|
353
534
|
async function fetchAndProcess(url, opts, signal) {
|
|
354
535
|
if (isBlockedUrl(url)) {
|
|
355
|
-
return
|
|
536
|
+
return BLOCKED_URL_MESSAGE;
|
|
356
537
|
}
|
|
357
538
|
try {
|
|
358
539
|
const result = await fetchOne(url, signal, opts.format, opts.getNetworkPolicy);
|
|
@@ -519,27 +700,98 @@ async function tryLlmsResource(url, opts, signal) {
|
|
|
519
700
|
return probes.find((probe) => probe !== null) ?? null;
|
|
520
701
|
}
|
|
521
702
|
async function fetchWithPreferredDocs(url, opts, signal) {
|
|
522
|
-
if (opts.format !== "html" &&
|
|
703
|
+
if (opts.format !== "html" &&
|
|
704
|
+
opts.format !== "outline" &&
|
|
705
|
+
opts.preferLlmsTxt &&
|
|
706
|
+
!isBlockedUrl(url) &&
|
|
707
|
+
isDocish(url)) {
|
|
523
708
|
const llms = await tryLlmsResource(url, opts, signal);
|
|
524
709
|
if (llms)
|
|
525
710
|
return llms;
|
|
526
711
|
}
|
|
527
712
|
return await fetchAndProcess(url, opts, signal);
|
|
528
713
|
}
|
|
714
|
+
/**
|
|
715
|
+
* Outline-mode wrapper around {@link fetchWithPreferredDocs} that serves
|
|
716
|
+
* repeat views of a page from the per-session cache. The URL is re-validated
|
|
717
|
+
* *before* the cache is consulted, so a cached render can never resurrect a
|
|
718
|
+
* host the current SSRF/allowlist policy forbids.
|
|
719
|
+
*/
|
|
720
|
+
async function fetchPage(url, opts, signal, cache) {
|
|
721
|
+
if (opts.format !== "outline")
|
|
722
|
+
return await fetchWithPreferredDocs(url, opts, signal);
|
|
723
|
+
if (isBlockedUrl(url))
|
|
724
|
+
return BLOCKED_URL_MESSAGE;
|
|
725
|
+
const policyError = checkUrlPolicy(url, opts.getNetworkPolicy);
|
|
726
|
+
if (policyError)
|
|
727
|
+
return `Error: ${policyError}`;
|
|
728
|
+
const requestKey = cacheKey(url, opts.maxLength);
|
|
729
|
+
const hit = cacheGet(cache, requestKey);
|
|
730
|
+
if (hit) {
|
|
731
|
+
opts.numbers?.reserve(hit.links);
|
|
732
|
+
return hit.text;
|
|
733
|
+
}
|
|
734
|
+
let rendered;
|
|
735
|
+
const result = await fetchWithPreferredDocs(url, {
|
|
736
|
+
...opts,
|
|
737
|
+
onRender: (finalUrl, text, links) => {
|
|
738
|
+
rendered = { text, links };
|
|
739
|
+
// Keyed by the post-redirect URL, plus the requested URL below.
|
|
740
|
+
cacheSet(cache, cacheKey(finalUrl, opts.maxLength), rendered);
|
|
741
|
+
},
|
|
742
|
+
}, signal);
|
|
743
|
+
if (rendered)
|
|
744
|
+
cacheSet(cache, requestKey, rendered);
|
|
745
|
+
return result;
|
|
746
|
+
}
|
|
529
747
|
export function createWebFetchTool(getNetworkPolicy) {
|
|
748
|
+
// Per-session state, both bounded: the render cache evicts least-recently
|
|
749
|
+
// used pages past MAX_CACHED_PAGES, and the follow map is replaced (not
|
|
750
|
+
// grown) by each outline call, itself capped at MAX_OUTLINE_LINKS entries.
|
|
751
|
+
const pageCache = new Map();
|
|
752
|
+
let followTargets = new Map();
|
|
530
753
|
return {
|
|
531
754
|
name: "web_fetch",
|
|
532
755
|
description: "Fetch and read web page content. Accepts a single `url` or a `urls` array (up to 10, " +
|
|
533
|
-
"fetched concurrently). Returns clean Markdown by default (`format`: markdown|text|html)
|
|
534
|
-
"main-content extraction. Extracts text from PDFs, follows safe redirects automatically, and " +
|
|
535
|
-
"prefers a site's curated /llms.txt for docs pages when available
|
|
756
|
+
"fetched concurrently). Returns clean Markdown by default (`format`: markdown|text|html|outline) " +
|
|
757
|
+
"via main-content extraction. Extracts text from PDFs, follows safe redirects automatically, and " +
|
|
758
|
+
"prefers a site's curated /llms.txt for docs pages when available.\n" +
|
|
759
|
+
'`format: "outline"` is the cheap mode: main content only, every hyperlink replaced by a ' +
|
|
760
|
+
"number (`anchor text [12]`) with a numbered URL index at the end, and a small default " +
|
|
761
|
+
"`max_length`. Use it when hunting for the right page; then pass `follow: 12` " +
|
|
762
|
+
"(instead of `url`) to fetch link 12 from the last outline. Repeat views of a page in the " +
|
|
763
|
+
"same session are served from cache. Outline mode skips the /llms.txt probe.",
|
|
536
764
|
parameters,
|
|
537
765
|
async execute(args, context) {
|
|
538
|
-
const maxLength = args.max_length ?? 10000;
|
|
539
766
|
const format = args.format ?? "markdown";
|
|
767
|
+
const maxLength = args.max_length ?? (format === "outline" ? OUTLINE_DEFAULT_MAX_LENGTH : 10000);
|
|
540
768
|
const preferLlmsTxt = args.prefer_llms_txt !== false;
|
|
769
|
+
const numbers = format === "outline" ? new LinkNumbers() : undefined;
|
|
770
|
+
// A followed link is attacker-controlled page content: it resolves to a
|
|
771
|
+
// plain URL here and then travels the exact same validation path as a
|
|
772
|
+
// user-supplied one (isBlockedUrl + allowlist + per-redirect-hop checks).
|
|
773
|
+
let followUrl;
|
|
774
|
+
if (args.follow !== undefined) {
|
|
775
|
+
followUrl = followTargets.get(args.follow);
|
|
776
|
+
if (!followUrl) {
|
|
777
|
+
return followTargets.size === 0
|
|
778
|
+
? 'Error: no numbered links available — fetch a page with format: "outline" first.'
|
|
779
|
+
: `Error: link [${args.follow}] is not in the last outline (known: ${[...followTargets.keys()].join(", ")}).`;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
// Every outline render replaces the follow map, even when the page had no
|
|
783
|
+
// links: keeping the previous page's numbers would make `follow: 3` fetch
|
|
784
|
+
// from a page the user already moved past, while the error text and the
|
|
785
|
+
// tool description both promise "the last outline". Non-outline fetches
|
|
786
|
+
// leave the map alone, so a markdown read does not discard usable numbers.
|
|
787
|
+
const remember = (output) => {
|
|
788
|
+
if (numbers) {
|
|
789
|
+
followTargets = new Map(numbers.all().map((link) => [link.number, link.url]));
|
|
790
|
+
}
|
|
791
|
+
return output;
|
|
792
|
+
};
|
|
541
793
|
// Multi-URL path: bounded-concurrency pool, per-URL budget, ordered output.
|
|
542
|
-
if (args.urls && args.urls.length > 0) {
|
|
794
|
+
if (!followUrl && args.urls && args.urls.length > 0) {
|
|
543
795
|
const urls = args.urls;
|
|
544
796
|
const perUrlBudget = Math.max(PER_URL_MIN_BUDGET, Math.floor(maxLength / urls.length));
|
|
545
797
|
const opts = {
|
|
@@ -547,16 +799,17 @@ export function createWebFetchTool(getNetworkPolicy) {
|
|
|
547
799
|
format,
|
|
548
800
|
preferLlmsTxt,
|
|
549
801
|
getNetworkPolicy,
|
|
802
|
+
numbers,
|
|
550
803
|
};
|
|
551
|
-
const sections = await runPool(urls, MAX_CONCURRENCY, (u) =>
|
|
552
|
-
return urls.map((u, i) => `## ${u}\n${sections[i]}`).join("\n\n");
|
|
804
|
+
const sections = await runPool(urls, MAX_CONCURRENCY, (u) => fetchPage(u, opts, context.signal, pageCache));
|
|
805
|
+
return remember(urls.map((u, i) => `## ${u}\n${sections[i]}`).join("\n\n"));
|
|
553
806
|
}
|
|
554
|
-
const url = args.url;
|
|
807
|
+
const url = followUrl ?? args.url;
|
|
555
808
|
if (!url) {
|
|
556
|
-
return "Error: provide either `url` or `
|
|
809
|
+
return "Error: provide either `url`, `urls`, or `follow`.";
|
|
557
810
|
}
|
|
558
|
-
const opts = { maxLength, format, preferLlmsTxt, getNetworkPolicy };
|
|
559
|
-
return await
|
|
811
|
+
const opts = { maxLength, format, preferLlmsTxt, getNetworkPolicy, numbers };
|
|
812
|
+
return remember(await fetchPage(url, opts, context.signal, pageCache));
|
|
560
813
|
},
|
|
561
814
|
};
|
|
562
815
|
}
|
|
@@ -585,17 +838,28 @@ const parameters = z
|
|
|
585
838
|
.max(MAX_URLS)
|
|
586
839
|
.optional()
|
|
587
840
|
.describe(`Fetch multiple URLs concurrently (up to ${MAX_URLS}); returns a sectioned digest`),
|
|
588
|
-
|
|
841
|
+
follow: z
|
|
842
|
+
.number()
|
|
843
|
+
.int()
|
|
844
|
+
.positive()
|
|
845
|
+
.optional()
|
|
846
|
+
.describe("Fetch link N from the most recent outline render, instead of `url`. " +
|
|
847
|
+
"Followed links are SSRF/allowlist-checked exactly like a supplied URL."),
|
|
848
|
+
max_length: z
|
|
849
|
+
.number()
|
|
850
|
+
.optional()
|
|
851
|
+
.describe(`Maximum characters to return (default: 10000; ${OUTLINE_DEFAULT_MAX_LENGTH} for outline)`),
|
|
589
852
|
format: z
|
|
590
|
-
.enum(["markdown", "text", "html"])
|
|
853
|
+
.enum(["markdown", "text", "html", "outline"])
|
|
591
854
|
.optional()
|
|
592
|
-
.describe("Output format: markdown (default, main-content extraction), text, or
|
|
855
|
+
.describe("Output format: markdown (default, main-content extraction), text, html, or outline " +
|
|
856
|
+
`(compact main content with each link replaced by a number plus a numbered URL index, ` +
|
|
857
|
+
`capped at ${MAX_OUTLINE_LINKS} links — cheapest; follow links with \`follow\`)`),
|
|
593
858
|
prefer_llms_txt: z
|
|
594
859
|
.boolean()
|
|
595
860
|
.optional()
|
|
596
861
|
.describe("Prefer a site's curated /llms.txt for documentation pages (default: true)"),
|
|
597
862
|
})
|
|
598
|
-
.refine((v) => Boolean(v.url)
|
|
599
|
-
message: "Provide exactly one of `url` or `
|
|
600
|
-
});
|
|
863
|
+
.refine((v) => [Boolean(v.url), Boolean(v.urls && v.urls.length > 0), v.follow !== undefined].filter(Boolean)
|
|
864
|
+
.length === 1, { message: "Provide exactly one of `url`, `urls`, or `follow`." });
|
|
601
865
|
//# sourceMappingURL=web-fetch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -502,6 +502,143 @@ describe("createWebFetchTool", () => {
|
|
|
502
502
|
expect(result).toContain("Fallback page");
|
|
503
503
|
});
|
|
504
504
|
});
|
|
505
|
+
describe("web_fetch outline format", () => {
|
|
506
|
+
const article = (links) => `
|
|
507
|
+
<html><head><title>Outline Docs</title></head>
|
|
508
|
+
<body>
|
|
509
|
+
<nav><a href="/nav-noise">Navigation noise</a></nav>
|
|
510
|
+
<article>
|
|
511
|
+
<h1>Outline Docs</h1>
|
|
512
|
+
<p>This introductory paragraph is deliberately long enough that the Readability
|
|
513
|
+
extractor treats the page as a genuine article and emits structured markdown
|
|
514
|
+
containing the hyperlinks that outline mode is expected to number for us.</p>
|
|
515
|
+
<p>${links}</p>
|
|
516
|
+
<p>Another descriptive paragraph that adds enough body length to clear the minimum
|
|
517
|
+
article-length threshold comfortably during extraction in this unit test.</p>
|
|
518
|
+
</article>
|
|
519
|
+
<footer>Terms Privacy</footer>
|
|
520
|
+
</body></html>`;
|
|
521
|
+
function htmlResponse(body) {
|
|
522
|
+
return new Response(body, { status: 200, headers: { "content-type": "text/html" } });
|
|
523
|
+
}
|
|
524
|
+
it("numbers links, resolves relative URLs, and appends a numbered index", async () => {
|
|
525
|
+
const html = article(`See the <a href="guide/intro">Intro Guide</a>, the
|
|
526
|
+
<a href="https://other.example.com/spec">External Spec</a>, and
|
|
527
|
+
<a href="#section">this section</a>.`);
|
|
528
|
+
globalThis.fetch = vi.fn(async () => htmlResponse(html));
|
|
529
|
+
const result = (await createWebFetchTool().execute({ url: "https://docs.example.com/reference/api", format: "outline" }, context()));
|
|
530
|
+
expect(result).toContain("Intro Guide [1]");
|
|
531
|
+
expect(result).toContain("External Spec [2]");
|
|
532
|
+
// Relative href resolved against the page URL; fragment-only link left as text.
|
|
533
|
+
expect(result).toContain("[1] https://docs.example.com/reference/guide/intro");
|
|
534
|
+
expect(result).toContain("[2] https://other.example.com/spec");
|
|
535
|
+
expect(result).toContain("Links (fetch one with `follow`):");
|
|
536
|
+
expect(result).not.toContain("[3]");
|
|
537
|
+
expect(result).not.toContain("](");
|
|
538
|
+
expect(result).not.toContain("Terms Privacy");
|
|
539
|
+
});
|
|
540
|
+
it("is far more compact than the markdown render of the same page", async () => {
|
|
541
|
+
const html = article(`<a href="/a">A</a> <a href="/b">B</a>`);
|
|
542
|
+
globalThis.fetch = vi.fn(async () => htmlResponse(html));
|
|
543
|
+
const tool = createWebFetchTool();
|
|
544
|
+
const outline = (await tool.execute({ url: "https://docs.example.com/page", format: "outline" }, context()));
|
|
545
|
+
expect(outline.length).toBeLessThanOrEqual(2000 + 200);
|
|
546
|
+
});
|
|
547
|
+
it("caps the link index at 100 and says so", async () => {
|
|
548
|
+
const links = Array.from({ length: 120 }, (_, i) => `<a href="/page-${i}">Link number ${i}</a>`).join(" ");
|
|
549
|
+
globalThis.fetch = vi.fn(async () => htmlResponse(article(links)));
|
|
550
|
+
const result = (await createWebFetchTool().execute({ url: "https://docs.example.com/many", format: "outline", max_length: 50000 }, context()));
|
|
551
|
+
expect(result).toContain("[100] https://docs.example.com/page-99");
|
|
552
|
+
expect(result).not.toContain("[101]");
|
|
553
|
+
expect(result).toContain("link index truncated at 100");
|
|
554
|
+
// Links past the cap keep their anchor text, just without a number.
|
|
555
|
+
expect(result).toContain("Link number 119");
|
|
556
|
+
});
|
|
557
|
+
it("serves a repeat fetch of the same URL from the session cache", async () => {
|
|
558
|
+
const fetchMock = vi.fn(async () => htmlResponse(article(`<a href="/a">A</a>`)));
|
|
559
|
+
globalThis.fetch = fetchMock;
|
|
560
|
+
const tool = createWebFetchTool();
|
|
561
|
+
const first = await tool.execute({ url: "https://docs.example.com/cached", format: "outline" }, context());
|
|
562
|
+
const second = await tool.execute({ url: "https://docs.example.com/cached", format: "outline" }, context());
|
|
563
|
+
expect(second).toBe(first);
|
|
564
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
565
|
+
});
|
|
566
|
+
it("caches under the post-redirect URL too", async () => {
|
|
567
|
+
const fetchMock = vi.fn(async (input) => {
|
|
568
|
+
if (String(input) === "https://docs.example.com/old") {
|
|
569
|
+
return new Response(null, {
|
|
570
|
+
status: 301,
|
|
571
|
+
headers: { location: "https://docs.example.com/new" },
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
return htmlResponse(article(`<a href="/a">A</a>`));
|
|
575
|
+
});
|
|
576
|
+
globalThis.fetch = fetchMock;
|
|
577
|
+
const tool = createWebFetchTool();
|
|
578
|
+
await tool.execute({ url: "https://docs.example.com/old", format: "outline" }, context());
|
|
579
|
+
const callsAfterFirst = fetchMock.mock.calls.length;
|
|
580
|
+
await tool.execute({ url: "https://docs.example.com/new", format: "outline" }, context());
|
|
581
|
+
expect(callsAfterFirst).toBe(2);
|
|
582
|
+
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
583
|
+
});
|
|
584
|
+
it("evicts least-recently-used pages so the cache stays bounded", async () => {
|
|
585
|
+
const fetchMock = vi.fn(async () => htmlResponse(article(`<a href="/a">A</a>`)));
|
|
586
|
+
globalThis.fetch = fetchMock;
|
|
587
|
+
const tool = createWebFetchTool();
|
|
588
|
+
// 33 distinct pages > the 32-entry cap, so page 0 must be evicted.
|
|
589
|
+
for (let i = 0; i < 33; i++) {
|
|
590
|
+
await tool.execute({ url: `https://docs.example.com/p${i}`, format: "outline" }, context());
|
|
591
|
+
}
|
|
592
|
+
expect(fetchMock).toHaveBeenCalledTimes(33);
|
|
593
|
+
await tool.execute({ url: "https://docs.example.com/p32", format: "outline" }, context());
|
|
594
|
+
expect(fetchMock).toHaveBeenCalledTimes(33); // still hot
|
|
595
|
+
await tool.execute({ url: "https://docs.example.com/p0", format: "outline" }, context());
|
|
596
|
+
expect(fetchMock).toHaveBeenCalledTimes(34); // evicted, refetched
|
|
597
|
+
});
|
|
598
|
+
it("fetches a link by number from the last outline", async () => {
|
|
599
|
+
const fetchMock = vi.fn(async (input) => {
|
|
600
|
+
if (String(input) === "https://docs.example.com/reference/guide/intro") {
|
|
601
|
+
return htmlResponse(article(`<a href="/deeper">Deeper</a>`).replace("Outline Docs", "Intro Page"));
|
|
602
|
+
}
|
|
603
|
+
return htmlResponse(article(`<a href="guide/intro">Intro Guide</a>`));
|
|
604
|
+
});
|
|
605
|
+
globalThis.fetch = fetchMock;
|
|
606
|
+
const tool = createWebFetchTool();
|
|
607
|
+
const first = (await tool.execute({ url: "https://docs.example.com/reference/api", format: "outline" }, context()));
|
|
608
|
+
expect(first).toContain("[1] https://docs.example.com/reference/guide/intro");
|
|
609
|
+
const followed = (await tool.execute({ follow: 1, format: "outline" }, context()));
|
|
610
|
+
expect(followed).toContain("Intro Page");
|
|
611
|
+
expect(fetchMock.mock.calls.map(([input]) => String(input))).toContain("https://docs.example.com/reference/guide/intro");
|
|
612
|
+
});
|
|
613
|
+
it("reports an unknown link number without fetching", async () => {
|
|
614
|
+
const fetchMock = vi.fn();
|
|
615
|
+
globalThis.fetch = fetchMock;
|
|
616
|
+
const result = await createWebFetchTool().execute({ follow: 7 }, context());
|
|
617
|
+
expect(result).toContain("no numbered links available");
|
|
618
|
+
expect(fetchMock).not.toHaveBeenCalled();
|
|
619
|
+
});
|
|
620
|
+
it("still blocks a followed link that points at a private/metadata address", async () => {
|
|
621
|
+
const fetchMock = vi.fn(async () => htmlResponse(article(`<a href="http://169.254.169.254/latest/meta-data/iam/">Cloud metadata</a>`)));
|
|
622
|
+
globalThis.fetch = fetchMock;
|
|
623
|
+
const tool = createWebFetchTool();
|
|
624
|
+
const page = (await tool.execute({ url: "https://docs.example.com/evil", format: "outline" }, context()));
|
|
625
|
+
expect(page).toContain("[1] http://169.254.169.254/latest/meta-data/iam/");
|
|
626
|
+
const fetchesBefore = fetchMock.mock.calls.length;
|
|
627
|
+
const followed = await tool.execute({ follow: 1, format: "outline" }, context());
|
|
628
|
+
expect(followed).toContain("URL blocked");
|
|
629
|
+
expect(fetchMock).toHaveBeenCalledTimes(fetchesBefore);
|
|
630
|
+
});
|
|
631
|
+
it("applies the network allowlist to followed links", async () => {
|
|
632
|
+
const fetchMock = vi.fn(async () => htmlResponse(article(`<a href="https://evil.example/payload">Payload</a>`)));
|
|
633
|
+
globalThis.fetch = fetchMock;
|
|
634
|
+
const tool = createWebFetchTool(() => ({ mode: "allowlist", allow: ["docs.example.com"] }));
|
|
635
|
+
await tool.execute({ url: "https://docs.example.com/start", format: "outline" }, context());
|
|
636
|
+
const fetchesBefore = fetchMock.mock.calls.length;
|
|
637
|
+
const followed = await tool.execute({ follow: 1, format: "outline" }, context());
|
|
638
|
+
expect(followed).toContain("network allowlist");
|
|
639
|
+
expect(fetchMock).toHaveBeenCalledTimes(fetchesBefore);
|
|
640
|
+
});
|
|
641
|
+
});
|
|
505
642
|
describe("web_fetch network allowlist", () => {
|
|
506
643
|
const allowlist = () => ({ mode: "allowlist", allow: ["docs.example.com"] });
|
|
507
644
|
it("is a no-op when the policy is off", async () => {
|