@kenkaiiii/ggcoder 4.3.231 → 4.3.232

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 (91) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +1 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +7 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/config.test.d.ts +2 -0
  9. package/dist/config.test.d.ts.map +1 -0
  10. package/dist/config.test.js +29 -0
  11. package/dist/config.test.js.map +1 -0
  12. package/dist/core/ideal-review.d.ts +20 -0
  13. package/dist/core/ideal-review.d.ts.map +1 -0
  14. package/dist/core/ideal-review.js +55 -0
  15. package/dist/core/ideal-review.js.map +1 -0
  16. package/dist/core/ideal-review.test.d.ts +2 -0
  17. package/dist/core/ideal-review.test.d.ts.map +1 -0
  18. package/dist/core/ideal-review.test.js +59 -0
  19. package/dist/core/ideal-review.test.js.map +1 -0
  20. package/dist/core/settings-manager.d.ts +1 -0
  21. package/dist/core/settings-manager.d.ts.map +1 -1
  22. package/dist/core/settings-manager.js +2 -0
  23. package/dist/core/settings-manager.js.map +1 -1
  24. package/dist/tools/html-extract.d.ts +58 -0
  25. package/dist/tools/html-extract.d.ts.map +1 -0
  26. package/dist/tools/html-extract.js +130 -0
  27. package/dist/tools/html-extract.js.map +1 -0
  28. package/dist/tools/html-extract.test.d.ts +2 -0
  29. package/dist/tools/html-extract.test.d.ts.map +1 -0
  30. package/dist/tools/html-extract.test.js +60 -0
  31. package/dist/tools/html-extract.test.js.map +1 -0
  32. package/dist/tools/pdf-extract.d.ts +18 -0
  33. package/dist/tools/pdf-extract.d.ts.map +1 -0
  34. package/dist/tools/pdf-extract.js +43 -0
  35. package/dist/tools/pdf-extract.js.map +1 -0
  36. package/dist/tools/pdf-extract.test.d.ts +2 -0
  37. package/dist/tools/pdf-extract.test.d.ts.map +1 -0
  38. package/dist/tools/pdf-extract.test.js +15 -0
  39. package/dist/tools/pdf-extract.test.js.map +1 -0
  40. package/dist/tools/prompt-hints.d.ts.map +1 -1
  41. package/dist/tools/prompt-hints.js +2 -1
  42. package/dist/tools/prompt-hints.js.map +1 -1
  43. package/dist/tools/web-fetch.d.ts +16 -1
  44. package/dist/tools/web-fetch.d.ts.map +1 -1
  45. package/dist/tools/web-fetch.js +357 -45
  46. package/dist/tools/web-fetch.js.map +1 -1
  47. package/dist/tools/web-fetch.test.js +263 -2
  48. package/dist/tools/web-fetch.test.js.map +1 -1
  49. package/dist/tools/web-search.d.ts +14 -0
  50. package/dist/tools/web-search.d.ts.map +1 -1
  51. package/dist/tools/web-search.js +321 -35
  52. package/dist/tools/web-search.js.map +1 -1
  53. package/dist/tools/web-search.test.js +144 -1
  54. package/dist/tools/web-search.test.js.map +1 -1
  55. package/dist/ui/App.d.ts +2 -0
  56. package/dist/ui/App.d.ts.map +1 -1
  57. package/dist/ui/App.js +54 -1
  58. package/dist/ui/App.js.map +1 -1
  59. package/dist/ui/app-items.d.ts +14 -1
  60. package/dist/ui/app-items.d.ts.map +1 -1
  61. package/dist/ui/app-items.js +2 -0
  62. package/dist/ui/app-items.js.map +1 -1
  63. package/dist/ui/components/IdealHookMessage.d.ts +12 -0
  64. package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
  65. package/dist/ui/components/IdealHookMessage.js +24 -0
  66. package/dist/ui/components/IdealHookMessage.js.map +1 -0
  67. package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
  68. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  69. package/dist/ui/hooks/useAgentLoop.js +45 -1
  70. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  71. package/dist/ui/render.d.ts +3 -0
  72. package/dist/ui/render.d.ts.map +1 -1
  73. package/dist/ui/render.js +2 -0
  74. package/dist/ui/render.js.map +1 -1
  75. package/dist/ui/terminal-history.d.ts.map +1 -1
  76. package/dist/ui/terminal-history.js +8 -0
  77. package/dist/ui/terminal-history.js.map +1 -1
  78. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  79. package/dist/ui/transcript/TranscriptRenderer.js +3 -0
  80. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  81. package/dist/ui/transcript/spacing.d.ts +2 -2
  82. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  83. package/dist/ui/transcript/spacing.js +1 -0
  84. package/dist/ui/transcript/spacing.js.map +1 -1
  85. package/dist/ui/transcript/spacing.test.js +2 -0
  86. package/dist/ui/transcript/spacing.test.js.map +1 -1
  87. package/dist/ui/tui-history-parity.test.js +8 -0
  88. package/dist/ui/tui-history-parity.test.js.map +1 -1
  89. package/dist/utils/format.js +7 -0
  90. package/dist/utils/format.js.map +1 -1
  91. package/package.json +10 -4
@@ -1,5 +1,5 @@
1
1
  import { afterEach, describe, expect, it, vi } from "vitest";
2
- import { createWebFetchTool, htmlToCleanText } from "./web-fetch.js";
2
+ import { buildLlmsCandidates, createWebFetchTool, htmlToCleanText } from "./web-fetch.js";
3
3
  const originalFetch = globalThis.fetch;
4
4
  function context() {
5
5
  return { signal: new AbortController().signal, toolCallId: "test" };
@@ -53,6 +53,15 @@ describe("htmlToCleanText", () => {
53
53
  expect(result).not.toContain("Skip to search");
54
54
  });
55
55
  });
56
+ describe("buildLlmsCandidates", () => {
57
+ it("includes origin, docs subpath, and page markdown candidates", () => {
58
+ const candidates = buildLlmsCandidates("https://example.com/docs/guide/page.html?x=1", 10000);
59
+ const urls = candidates.map((candidate) => candidate.url);
60
+ expect(urls).toContain("https://example.com/llms.txt");
61
+ expect(urls).toContain("https://example.com/docs/llms.txt");
62
+ expect(urls).toContain("https://example.com/docs/guide/page.html.md?x=1");
63
+ });
64
+ });
56
65
  describe("createWebFetchTool", () => {
57
66
  it("returns sanitized HTML content from fetched pages", async () => {
58
67
  const html = `
@@ -79,7 +88,60 @@ describe("createWebFetchTool", () => {
79
88
  expect(result).not.toContain("Advertisement");
80
89
  expect(result).not.toContain("Terms Privacy");
81
90
  });
82
- it("blocks redirects to private/internal URLs without following them", async () => {
91
+ it("returns markdown with a heading and fenced code by default", async () => {
92
+ const html = `
93
+ <html><head><title>Guide</title></head>
94
+ <body>
95
+ <article>
96
+ <h1>Setup Guide</h1>
97
+ <p>This is a sufficiently long introductory paragraph so the
98
+ Readability extractor treats the page as a genuine article and emits
99
+ structured markdown for the agent to consume in tests.</p>
100
+ <pre><code>npm install thing</code></pre>
101
+ <p>Another descriptive paragraph that adds enough body length to clear
102
+ the minimum article-length threshold comfortably during extraction.</p>
103
+ </article>
104
+ </body></html>
105
+ `;
106
+ globalThis.fetch = vi.fn(async () => new Response(html, { status: 200, headers: { "content-type": "text/html" } }));
107
+ const result = await createWebFetchTool().execute({ url: "https://example.com/guide", format: "markdown" }, context());
108
+ expect(result).toContain("# Guide");
109
+ expect(result).toContain("Setup Guide");
110
+ expect(result).toContain("```");
111
+ expect(result).toContain("npm install thing");
112
+ });
113
+ it("falls back to clean text when the extractor is unavailable", async () => {
114
+ const html = `<html><body><article><h1>Fallback</h1><p>Body content for fallback.</p></article></body></html>`;
115
+ globalThis.fetch = vi.fn(async () => new Response(html, { status: 200, headers: { "content-type": "text/html" } }));
116
+ // Force the markdown extractor to throw so the tool degrades to text.
117
+ const extract = await import("./html-extract.js");
118
+ const spy = vi
119
+ .spyOn(extract, "extractToMarkdown")
120
+ .mockRejectedValue(new extract.ExtractorUnavailable("stubbed missing"));
121
+ const result = await createWebFetchTool().execute({ url: "https://example.com/page", format: "markdown" }, context());
122
+ expect(spy).toHaveBeenCalled();
123
+ expect(result).toContain("Fallback");
124
+ expect(result).toContain("Body content for fallback.");
125
+ spy.mockRestore();
126
+ });
127
+ it("follows a safe same-host redirect and returns the final content", async () => {
128
+ const finalHtml = `<html><body><article><h1>Final Page</h1><p>Redirect target body.</p></article></body></html>`;
129
+ globalThis.fetch = vi
130
+ .fn()
131
+ .mockResolvedValueOnce(new Response(null, {
132
+ status: 301,
133
+ headers: { location: "https://example.com/final/" },
134
+ }))
135
+ .mockResolvedValueOnce(new Response(finalHtml, {
136
+ status: 200,
137
+ headers: { "content-type": "text/html" },
138
+ }));
139
+ const result = await createWebFetchTool().execute({ url: "https://example.com/redirect", format: "text" }, context());
140
+ expect(result).toContain("Final Page");
141
+ expect(result).toContain("Redirect target body.");
142
+ expect(result).not.toContain("Redirects are not followed");
143
+ });
144
+ it("blocks redirects to private/internal URLs", async () => {
83
145
  globalThis.fetch = vi.fn(async () => new Response(null, {
84
146
  status: 302,
85
147
  headers: { location: "http://127.0.0.1:3000/secret" },
@@ -88,6 +150,15 @@ describe("createWebFetchTool", () => {
88
150
  expect(result).toContain("Redirect blocked");
89
151
  expect(globalThis.fetch).toHaveBeenCalledWith("https://example.com/redirect", expect.objectContaining({ redirect: "manual" }));
90
152
  });
153
+ it("stops after too many redirects", async () => {
154
+ let hop = 0;
155
+ globalThis.fetch = vi.fn(async () => new Response(null, {
156
+ status: 302,
157
+ headers: { location: `https://example.com/hop${hop++}` },
158
+ }));
159
+ const result = await createWebFetchTool().execute({ url: "https://example.com/loop" }, context());
160
+ expect(result).toContain("too many redirects");
161
+ });
91
162
  it("blocks private/internal URLs before fetching", async () => {
92
163
  const fetchMock = vi.fn();
93
164
  globalThis.fetch = fetchMock;
@@ -95,5 +166,195 @@ describe("createWebFetchTool", () => {
95
166
  expect(result).toContain("URL blocked");
96
167
  expect(fetchMock).not.toHaveBeenCalled();
97
168
  });
169
+ it("fetches multiple URLs into ordered sections, reporting per-URL failures", async () => {
170
+ globalThis.fetch = vi.fn(async (input) => {
171
+ const url = String(input);
172
+ if (url.includes("page-a")) {
173
+ return new Response(`<html><body><article><h1>Alpha</h1><p>Alpha body.</p></article></body></html>`, { status: 200, headers: { "content-type": "text/html" } });
174
+ }
175
+ return new Response("not found", { status: 404, statusText: "Not Found" });
176
+ });
177
+ const result = (await createWebFetchTool().execute({
178
+ urls: ["https://example.com/page-a", "https://example.com/page-b"],
179
+ format: "text",
180
+ }, context()));
181
+ const idxA = result.indexOf("## https://example.com/page-a");
182
+ const idxB = result.indexOf("## https://example.com/page-b");
183
+ expect(idxA).toBeGreaterThanOrEqual(0);
184
+ expect(idxB).toBeGreaterThan(idxA);
185
+ expect(result).toContain("Alpha");
186
+ expect(result).toContain("HTTP 404");
187
+ });
188
+ it("reports a blocked private URL only within its own section", async () => {
189
+ globalThis.fetch = vi.fn(async () => new Response(`<html><body><article><h1>Public</h1><p>Public body text.</p></article></body></html>`, { status: 200, headers: { "content-type": "text/html" } }));
190
+ const result = await createWebFetchTool().execute({
191
+ urls: ["https://example.com/public", "http://127.0.0.1/secret"],
192
+ format: "text",
193
+ }, context());
194
+ expect(result).toContain("## http://127.0.0.1/secret");
195
+ expect(result).toContain("URL blocked");
196
+ expect(result).toContain("Public");
197
+ });
198
+ it("extracts text from a PDF response", async () => {
199
+ const { readFile } = await import("node:fs/promises");
200
+ const { fileURLToPath } = await import("node:url");
201
+ const fixturePath = fileURLToPath(new URL("./__fixtures__/sample.pdf", import.meta.url));
202
+ const bytes = await readFile(fixturePath);
203
+ globalThis.fetch = vi.fn(async () => new Response(bytes, {
204
+ status: 200,
205
+ headers: { "content-type": "application/pdf" },
206
+ }));
207
+ const result = await createWebFetchTool().execute({ url: "https://example.com/file.pdf" }, context());
208
+ expect(result).toContain("[PDF");
209
+ expect(result).toContain("Hello PDF World");
210
+ });
211
+ it("prefers a site's llms.txt for doc-ish pages and skips scraping the page", async () => {
212
+ const fetchMock = vi.fn(async (input) => {
213
+ const url = String(input);
214
+ if (url.endsWith("/llms.txt")) {
215
+ return new Response("# Docs Index\n\n" + "This is the curated llms.txt content. ".repeat(10), { status: 200, headers: { "content-type": "text/plain" } });
216
+ }
217
+ return new Response("<html><body>page</body></html>", {
218
+ status: 200,
219
+ headers: { "content-type": "text/html" },
220
+ });
221
+ });
222
+ globalThis.fetch = fetchMock;
223
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/reference/api" }, context());
224
+ expect(result).toContain("[llms.txt for docs.example.com]");
225
+ expect(result).toContain("curated llms.txt content");
226
+ expect(fetchMock).toHaveBeenCalledTimes(1);
227
+ });
228
+ it("follows safe redirects while probing llms resources", async () => {
229
+ const fetchMock = vi.fn(async (input) => {
230
+ const url = String(input);
231
+ if (url === "https://docs.example.com/llms.txt") {
232
+ return new Response(null, {
233
+ status: 301,
234
+ headers: { location: "https://platform.example.com/docs/llms.txt" },
235
+ });
236
+ }
237
+ if (url === "https://platform.example.com/docs/llms.txt") {
238
+ return new Response("# Redirected Docs\n\n" + "Redirected llms content. ".repeat(10), {
239
+ status: 200,
240
+ headers: { "content-type": "text/plain" },
241
+ });
242
+ }
243
+ return new Response("not found", { status: 404 });
244
+ });
245
+ globalThis.fetch = fetchMock;
246
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/reference/api" }, context());
247
+ expect(result).toContain("[llms.txt for docs.example.com]");
248
+ expect(result).toContain("Source: https://platform.example.com/docs/llms.txt");
249
+ expect(result).toContain("Redirected llms content");
250
+ });
251
+ it("prefers docs-subpath llms.txt when origin llms.txt is absent", async () => {
252
+ const fetchMock = vi.fn(async (input) => {
253
+ const url = String(input);
254
+ if (url === "https://example.com/llms.txt") {
255
+ return new Response("not found", { status: 404 });
256
+ }
257
+ if (url === "https://example.com/docs/llms.txt") {
258
+ return new Response("# Docs Root\n\n" + "Subpath llms content. ".repeat(10), {
259
+ status: 200,
260
+ headers: { "content-type": "text/plain" },
261
+ });
262
+ }
263
+ return new Response("not found", { status: 404 });
264
+ });
265
+ globalThis.fetch = fetchMock;
266
+ const result = await createWebFetchTool().execute({ url: "https://example.com/docs/guide/intro" }, context());
267
+ expect(result).toContain("[llms.txt for example.com]");
268
+ expect(result).toContain("Source: https://example.com/docs/llms.txt");
269
+ expect(result).toContain("Subpath llms content");
270
+ });
271
+ it("accepts markdown-looking llms body with octet-stream content type", async () => {
272
+ globalThis.fetch = vi.fn(async () => new Response("# Docs Index\n\n" + "- [Guide](./guide)\n- [API](./api)\n".repeat(8), {
273
+ status: 200,
274
+ headers: { "content-type": "application/octet-stream" },
275
+ }));
276
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/api" }, context());
277
+ expect(result).toContain("[llms.txt for docs.example.com]");
278
+ expect(result).toContain("Docs Index");
279
+ });
280
+ it("rejects HTML error pages served with status 200", async () => {
281
+ const fetchMock = vi.fn(async (input) => {
282
+ const url = String(input);
283
+ if (url.includes("llms") || url.endsWith(".md")) {
284
+ return new Response("<!doctype html><html><head><title>404 Not Found</title></head><body>Missing</body></html>", {
285
+ status: 200,
286
+ headers: { "content-type": "text/html" },
287
+ });
288
+ }
289
+ return new Response(`<html><body><article><h1>Real Docs</h1><p>Scraped fallback content.</p></article></body></html>`, { status: 200, headers: { "content-type": "text/html" } });
290
+ });
291
+ globalThis.fetch = fetchMock;
292
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/guide/page", format: "text" }, context());
293
+ expect(result).toContain("Real Docs");
294
+ expect(result).not.toContain("404 Not Found");
295
+ });
296
+ it("tries page URL .md when llms variants are absent", async () => {
297
+ const fetchMock = vi.fn(async (input) => {
298
+ const url = String(input);
299
+ if (url.endsWith("/reference/page.html.md")) {
300
+ return new Response("# Page Markdown\n\n" + "Specific markdown source. ".repeat(10), {
301
+ status: 200,
302
+ headers: { "content-type": "" },
303
+ });
304
+ }
305
+ if (url.includes("llms"))
306
+ return new Response("not found", { status: 404 });
307
+ return new Response("page", { status: 200 });
308
+ });
309
+ globalThis.fetch = fetchMock;
310
+ const result = await createWebFetchTool().execute({ url: "https://example.com/reference/page.html" }, context());
311
+ expect(result).toContain("[Markdown source for example.com/reference/page.html.md]");
312
+ expect(result).toContain("Specific markdown source");
313
+ });
314
+ it("uses preferred docs resources for multi-URL fetch sections", async () => {
315
+ const fetchMock = vi.fn(async (input) => {
316
+ const url = String(input);
317
+ if (url === "https://docs.a.com/llms.txt") {
318
+ return new Response("# A Docs\n\n" + "A llms content. ".repeat(10), {
319
+ status: 200,
320
+ headers: { "content-type": "text/plain" },
321
+ });
322
+ }
323
+ if (url === "https://docs.b.com/llms.txt") {
324
+ return new Response("# B Docs\n\n" + "B llms content. ".repeat(10), {
325
+ status: 200,
326
+ headers: { "content-type": "text/plain" },
327
+ });
328
+ }
329
+ return new Response("not found", { status: 404 });
330
+ });
331
+ globalThis.fetch = fetchMock;
332
+ const result = await createWebFetchTool().execute({ urls: ["https://docs.a.com/api", "https://docs.b.com/guide"] }, context());
333
+ expect(result).toContain("## https://docs.a.com/api");
334
+ expect(result).toContain("A llms content");
335
+ expect(result).toContain("## https://docs.b.com/guide");
336
+ expect(result).toContain("B llms content");
337
+ });
338
+ it("falls through to scraping when llms.txt is absent", async () => {
339
+ const fetchMock = vi.fn(async (input) => {
340
+ const url = String(input);
341
+ if (url.endsWith("/llms.txt")) {
342
+ return new Response("not found", { status: 404 });
343
+ }
344
+ return new Response(`<html><body><article><h1>Real Docs</h1><p>Scraped body content here.</p></article></body></html>`, { status: 200, headers: { "content-type": "text/html" } });
345
+ });
346
+ globalThis.fetch = fetchMock;
347
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/guide/intro", format: "text" }, context());
348
+ expect(result).toContain("Real Docs");
349
+ expect(fetchMock).toHaveBeenCalledWith("https://docs.example.com/llms.txt", expect.anything());
350
+ expect(fetchMock).toHaveBeenCalledWith("https://docs.example.com/guide/intro", expect.anything());
351
+ });
352
+ it("skips the llms.txt probe when prefer_llms_txt is false", async () => {
353
+ const fetchMock = vi.fn(async () => new Response(`<html><body><article><h1>Direct</h1><p>Direct page body content.</p></article></body></html>`, { status: 200, headers: { "content-type": "text/html" } }));
354
+ globalThis.fetch = fetchMock;
355
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/reference/api", prefer_llms_txt: false, format: "text" }, context());
356
+ expect(result).toContain("Direct");
357
+ expect(fetchMock).toHaveBeenCalledTimes(1);
358
+ });
98
359
  });
99
360
  //# sourceMappingURL=web-fetch.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.test.js","sourceRoot":"","sources":["../../src/tools/web-fetch.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-fetch.test.js","sourceRoot":"","sources":["../../src/tools/web-fetch.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,23 @@
1
1
  import { z } from "zod";
2
2
  import type { AgentTool } from "@kenkaiiii/gg-agent";
3
+ /**
4
+ * Normalize a domain to lowercase punycode hostname, defending against Unicode
5
+ * homograph spoofing. Returns null for un-parseable input.
6
+ */
7
+ export declare function normalizeDomain(domain: string): string | null;
8
+ export declare function canonicalSearchResultUrl(rawURL: string): string | null;
3
9
  export declare function isAdSearchResultUrl(rawURL: string): boolean;
4
10
  declare const parameters: z.ZodObject<{
5
11
  query: z.ZodString;
6
12
  max_results: z.ZodOptional<z.ZodNumber>;
13
+ include_domains: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ exclude_domains: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ time_range: z.ZodOptional<z.ZodEnum<{
16
+ month: "month";
17
+ day: "day";
18
+ week: "week";
19
+ year: "year";
20
+ }>>;
7
21
  }, z.core.$strip>;
8
22
  export declare function createWebSearchTool(): AgentTool<typeof parameters>;
9
23
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA8ErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAoB3D;AA6UD,QAAA,MAAM,UAAU;;;iBAGd,CAAC;AAEH,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,OAAO,UAAU,CAAC,CA4BlE"}
1
+ {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqDrD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAiJD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqBtE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAkB3D;AA6cD,QAAA,MAAM,UAAU;;;;;;;;;;;iBAmBZ,CAAC;AAuBL,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,OAAO,UAAU,CAAC,CAyClE"}