@prestyj/cli 5.4.1 → 5.5.0

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 (192) hide show
  1. package/README.md +25 -12
  2. package/dist/app-sidecar.js +244 -74
  3. package/dist/app-sidecar.js.map +1 -1
  4. package/dist/chat-agents/general.d.ts +7 -0
  5. package/dist/chat-agents/general.d.ts.map +1 -0
  6. package/dist/chat-agents/general.js +16 -0
  7. package/dist/chat-agents/general.js.map +1 -0
  8. package/dist/chat-agents/general.test.d.ts +2 -0
  9. package/dist/chat-agents/general.test.d.ts.map +1 -0
  10. package/dist/chat-agents/general.test.js +47 -0
  11. package/dist/chat-agents/general.test.js.map +1 -0
  12. package/dist/chat-agents/index.d.ts +11 -0
  13. package/dist/chat-agents/index.d.ts.map +1 -0
  14. package/dist/chat-agents/index.js +89 -0
  15. package/dist/chat-agents/index.js.map +1 -0
  16. package/dist/chat-agents/memory.d.ts +53 -0
  17. package/dist/chat-agents/memory.d.ts.map +1 -0
  18. package/dist/chat-agents/memory.js +362 -0
  19. package/dist/chat-agents/memory.js.map +1 -0
  20. package/dist/chat-agents/memory.test.d.ts +2 -0
  21. package/dist/chat-agents/memory.test.d.ts.map +1 -0
  22. package/dist/chat-agents/memory.test.js +155 -0
  23. package/dist/chat-agents/memory.test.js.map +1 -0
  24. package/dist/chat-agents/research.d.ts +7 -0
  25. package/dist/chat-agents/research.d.ts.map +1 -0
  26. package/dist/chat-agents/research.js +18 -0
  27. package/dist/chat-agents/research.js.map +1 -0
  28. package/dist/chat-agents/shared.d.ts +11 -0
  29. package/dist/chat-agents/shared.d.ts.map +1 -0
  30. package/dist/chat-agents/shared.js +48 -0
  31. package/dist/chat-agents/shared.js.map +1 -0
  32. package/dist/chat-agents/specialists.test.d.ts +2 -0
  33. package/dist/chat-agents/specialists.test.d.ts.map +1 -0
  34. package/dist/chat-agents/specialists.test.js +97 -0
  35. package/dist/chat-agents/specialists.test.js.map +1 -0
  36. package/dist/chat-agents/therapist.d.ts +7 -0
  37. package/dist/chat-agents/therapist.d.ts.map +1 -0
  38. package/dist/chat-agents/therapist.js +20 -0
  39. package/dist/chat-agents/therapist.js.map +1 -0
  40. package/dist/chat-agents/types.d.ts +4 -0
  41. package/dist/chat-agents/types.d.ts.map +1 -0
  42. package/dist/chat-agents/types.js +7 -0
  43. package/dist/chat-agents/types.js.map +1 -0
  44. package/dist/cli/auth.js +1 -1
  45. package/dist/cli/auth.js.map +1 -1
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +72 -22
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
  50. package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
  51. package/dist/core/agent-session-memory-tail.test.js +122 -0
  52. package/dist/core/agent-session-memory-tail.test.js.map +1 -0
  53. package/dist/core/agent-session-subagent-policy.test.d.ts +2 -0
  54. package/dist/core/agent-session-subagent-policy.test.d.ts.map +1 -0
  55. package/dist/core/agent-session-subagent-policy.test.js +36 -0
  56. package/dist/core/agent-session-subagent-policy.test.js.map +1 -0
  57. package/dist/core/agent-session.d.ts +37 -8
  58. package/dist/core/agent-session.d.ts.map +1 -1
  59. package/dist/core/agent-session.js +168 -109
  60. package/dist/core/agent-session.js.map +1 -1
  61. package/dist/core/agents.d.ts +1 -1
  62. package/dist/core/agents.d.ts.map +1 -1
  63. package/dist/core/agents.js +4 -2
  64. package/dist/core/agents.js.map +1 -1
  65. package/dist/core/auth-providers.js +5 -5
  66. package/dist/core/auth-providers.js.map +1 -1
  67. package/dist/core/compaction/compactor.d.ts +7 -0
  68. package/dist/core/compaction/compactor.d.ts.map +1 -1
  69. package/dist/core/compaction/compactor.js +73 -9
  70. package/dist/core/compaction/compactor.js.map +1 -1
  71. package/dist/core/compaction/compactor.test.js +31 -4
  72. package/dist/core/compaction/compactor.test.js.map +1 -1
  73. package/dist/core/event-bus.d.ts +2 -0
  74. package/dist/core/event-bus.d.ts.map +1 -1
  75. package/dist/core/event-bus.js.map +1 -1
  76. package/dist/core/mcp/defaults.d.ts +1 -1
  77. package/dist/core/mcp/defaults.js +1 -1
  78. package/dist/core/mcp/store.d.ts +2 -2
  79. package/dist/core/mcp/store.test.js +1 -1
  80. package/dist/core/mcp/store.test.js.map +1 -1
  81. package/dist/core/progress/rebuild.d.ts +3 -3
  82. package/dist/core/progress/rebuild.d.ts.map +1 -1
  83. package/dist/core/progress/rebuild.js +33 -27
  84. package/dist/core/progress/rebuild.js.map +1 -1
  85. package/dist/core/progress/rebuild.test.js +15 -0
  86. package/dist/core/progress/rebuild.test.js.map +1 -1
  87. package/dist/core/project-discovery.d.ts +1 -1
  88. package/dist/core/project-discovery.d.ts.map +1 -1
  89. package/dist/core/project-discovery.js +5 -6
  90. package/dist/core/project-discovery.js.map +1 -1
  91. package/dist/core/project-discovery.test.js +14 -1
  92. package/dist/core/project-discovery.test.js.map +1 -1
  93. package/dist/core/radio.d.ts +3 -0
  94. package/dist/core/radio.d.ts.map +1 -1
  95. package/dist/core/radio.js +150 -21
  96. package/dist/core/radio.js.map +1 -1
  97. package/dist/core/radio.test.d.ts +2 -0
  98. package/dist/core/radio.test.d.ts.map +1 -0
  99. package/dist/core/radio.test.js +101 -0
  100. package/dist/core/radio.test.js.map +1 -0
  101. package/dist/core/session-history.test.js +1 -1
  102. package/dist/core/session-history.test.js.map +1 -1
  103. package/dist/core/session-manager.d.ts +1 -1
  104. package/dist/core/session-manager.d.ts.map +1 -1
  105. package/dist/core/session-manager.js +2 -1
  106. package/dist/core/session-manager.js.map +1 -1
  107. package/dist/core/session-manager.test.js +18 -0
  108. package/dist/core/session-manager.test.js.map +1 -1
  109. package/dist/core/settings-manager.d.ts +1 -0
  110. package/dist/core/settings-manager.d.ts.map +1 -1
  111. package/dist/core/settings-manager.js +1 -1
  112. package/dist/core/settings-manager.js.map +1 -1
  113. package/dist/core/subagent-manager.d.ts +73 -0
  114. package/dist/core/subagent-manager.d.ts.map +1 -0
  115. package/dist/core/subagent-manager.js +412 -0
  116. package/dist/core/subagent-manager.js.map +1 -0
  117. package/dist/core/subagent-manager.test.d.ts +2 -0
  118. package/dist/core/subagent-manager.test.d.ts.map +1 -0
  119. package/dist/core/subagent-manager.test.js +103 -0
  120. package/dist/core/subagent-manager.test.js.map +1 -0
  121. package/dist/core/subagent-policy.d.ts +4 -0
  122. package/dist/core/subagent-policy.d.ts.map +1 -0
  123. package/dist/core/subagent-policy.js +19 -0
  124. package/dist/core/subagent-policy.js.map +1 -0
  125. package/dist/modes/json-mode.d.ts.map +1 -1
  126. package/dist/modes/json-mode.js +3 -4
  127. package/dist/modes/json-mode.js.map +1 -1
  128. package/dist/modes/subagent-worker-mode.d.ts +14 -0
  129. package/dist/modes/subagent-worker-mode.d.ts.map +1 -0
  130. package/dist/modes/subagent-worker-mode.js +191 -0
  131. package/dist/modes/subagent-worker-mode.js.map +1 -0
  132. package/dist/tools/generate-image.d.ts.map +1 -1
  133. package/dist/tools/generate-image.js +12 -5
  134. package/dist/tools/generate-image.js.map +1 -1
  135. package/dist/tools/generate-image.test.js +17 -0
  136. package/dist/tools/generate-image.test.js.map +1 -1
  137. package/dist/tools/goals.d.ts +3 -3
  138. package/dist/tools/index.d.ts +10 -2
  139. package/dist/tools/index.d.ts.map +1 -1
  140. package/dist/tools/index.js +17 -1
  141. package/dist/tools/index.js.map +1 -1
  142. package/dist/tools/subagent-control.d.ts +6 -0
  143. package/dist/tools/subagent-control.d.ts.map +1 -0
  144. package/dist/tools/subagent-control.js +95 -0
  145. package/dist/tools/subagent-control.js.map +1 -0
  146. package/dist/tools/subagent-control.test.d.ts +2 -0
  147. package/dist/tools/subagent-control.test.d.ts.map +1 -0
  148. package/dist/tools/subagent-control.test.js +40 -0
  149. package/dist/tools/subagent-control.test.js.map +1 -0
  150. package/dist/tools/subagent-shared.d.ts +24 -0
  151. package/dist/tools/subagent-shared.d.ts.map +1 -0
  152. package/dist/tools/subagent-shared.js +53 -0
  153. package/dist/tools/subagent-shared.js.map +1 -0
  154. package/dist/tools/subagent-shared.test.d.ts +2 -0
  155. package/dist/tools/subagent-shared.test.d.ts.map +1 -0
  156. package/dist/tools/subagent-shared.test.js +29 -0
  157. package/dist/tools/subagent-shared.test.js.map +1 -0
  158. package/dist/tools/subagent.d.ts.map +1 -1
  159. package/dist/tools/subagent.js +21 -64
  160. package/dist/tools/subagent.js.map +1 -1
  161. package/dist/tools/subagent.test.js +27 -1
  162. package/dist/tools/subagent.test.js.map +1 -1
  163. package/dist/tools/web-fetch.d.ts +1 -0
  164. package/dist/tools/web-fetch.d.ts.map +1 -1
  165. package/dist/tools/web-fetch.js +112 -35
  166. package/dist/tools/web-fetch.js.map +1 -1
  167. package/dist/tools/web-fetch.test.js +146 -1
  168. package/dist/tools/web-fetch.test.js.map +1 -1
  169. package/dist/tools/web-search.d.ts +10 -0
  170. package/dist/tools/web-search.d.ts.map +1 -1
  171. package/dist/tools/web-search.js +236 -28
  172. package/dist/tools/web-search.js.map +1 -1
  173. package/dist/tools/web-search.test.js +77 -6
  174. package/dist/tools/web-search.test.js.map +1 -1
  175. package/dist/ui/App.d.ts +2 -0
  176. package/dist/ui/App.d.ts.map +1 -1
  177. package/dist/ui/App.js +61 -2
  178. package/dist/ui/App.js.map +1 -1
  179. package/dist/ui/hooks/useModeState.d.ts +4 -2
  180. package/dist/ui/hooks/useModeState.d.ts.map +1 -1
  181. package/dist/ui/hooks/useModeState.js +14 -3
  182. package/dist/ui/hooks/useModeState.js.map +1 -1
  183. package/dist/ui/login.d.ts.map +1 -1
  184. package/dist/ui/login.js +13 -5
  185. package/dist/ui/login.js.map +1 -1
  186. package/dist/ui/render.d.ts +14 -0
  187. package/dist/ui/render.d.ts.map +1 -1
  188. package/dist/ui/render.js +2 -0
  189. package/dist/ui/render.js.map +1 -1
  190. package/dist/ui/render.test.js +17 -0
  191. package/dist/ui/render.test.js.map +1 -1
  192. package/package.json +4 -4
@@ -1,4 +1,6 @@
1
+ import { parseHTML } from "linkedom";
1
2
  import { z } from "zod";
3
+ import { log } from "../core/logger.js";
2
4
  const USER_AGENTS = [
3
5
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
4
6
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
@@ -20,6 +22,9 @@ const RATE_LIMIT_PATTERNS = [
20
22
  "challenge-form",
21
23
  ];
22
24
  const ENGINES = ["DuckDuckGo", "DuckDuckGoLite", "Brave", "Bing", "Google"];
25
+ const ENGINE_ATTEMPT_TIMEOUT_MS = 8_000;
26
+ const SEARCH_CACHE_TTL_MS = 60_000;
27
+ const SEARCH_CACHE_MAX_ENTRIES = 100;
23
28
  /**
24
29
  * Normalize a domain to lowercase punycode hostname, defending against Unicode
25
30
  * homograph spoofing. Returns null for un-parseable input.
@@ -243,6 +248,34 @@ function resultHost(rawURL) {
243
248
  return null;
244
249
  }
245
250
  }
251
+ const RELEVANCE_STOP_WORDS = new Set([
252
+ "a",
253
+ "an",
254
+ "and",
255
+ "current",
256
+ "for",
257
+ "latest",
258
+ "of",
259
+ "official",
260
+ "the",
261
+ "to",
262
+ ]);
263
+ function relevanceTokens(text) {
264
+ return new Set((text.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? []).filter((token) => token.length > 1 && !RELEVANCE_STOP_WORDS.has(token)));
265
+ }
266
+ /** Reject localized/bot-fallback pages that match only a generic query word. */
267
+ export function isSearchResultRelevant(result, query) {
268
+ const queryTokens = relevanceTokens(query);
269
+ if (queryTokens.size === 0)
270
+ return true;
271
+ const resultTokens = relevanceTokens(`${result.title} ${result.snippet} ${result.url}`);
272
+ let matches = 0;
273
+ for (const token of queryTokens)
274
+ if (resultTokens.has(token))
275
+ matches += 1;
276
+ const requiredMatches = queryTokens.size >= 3 ? 2 : 1;
277
+ return matches >= requiredMatches;
278
+ }
246
279
  function passesDomainFilters(result, filters) {
247
280
  const host = resultHost(result.url);
248
281
  if (filters.includeDomains.length > 0) {
@@ -271,6 +304,8 @@ function filterSearchResults(results, maxResults, filters, query) {
271
304
  continue;
272
305
  }
273
306
  const normalizedResult = { ...result, url: canonicalUrl };
307
+ if (!isSearchResultRelevant(normalizedResult, query))
308
+ continue;
274
309
  if (isSpammySearchResult(normalizedResult, query)) {
275
310
  stats.spam++;
276
311
  continue;
@@ -343,14 +378,16 @@ function buildRequest(engine, query, filters) {
343
378
  headers.Accept = "text/html";
344
379
  break;
345
380
  case "Bing":
346
- url = `https://www.bing.com/search?q=${encoded}`;
381
+ // Pin language/market so an IP-localized fallback cannot silently replace
382
+ // the query with generic regional results.
383
+ url = `https://www.bing.com/search?q=${encoded}&setlang=en-US&cc=US`;
347
384
  if (time && BING_FILTER[time]) {
348
385
  url += `&filters=${encodeURIComponent(BING_FILTER[time])}`;
349
386
  }
350
387
  headers.Accept = "text/html";
351
388
  break;
352
389
  case "Google":
353
- url = `https://www.google.com/search?q=${encoded}&hl=en`;
390
+ url = `https://www.google.com/search?q=${encoded}&hl=en&gl=us`;
354
391
  if (time)
355
392
  url += `&tbs=qdr:${GOOGLE_QDR[time]}`;
356
393
  break;
@@ -358,30 +395,62 @@ function buildRequest(engine, query, filters) {
358
395
  return { url, headers, method, body };
359
396
  }
360
397
  // ── Fetch with retry ─────────────────────────────────────
361
- async function fetchWithRetry(url, headers, signal, method = "GET", body, maxRetries = 3) {
398
+ async function fetchWithRetry(url, headers, signal, method = "GET", body, maxAttempts = 2) {
362
399
  let lastError = new Error("No attempts made");
363
- for (let attempt = 0; attempt < maxRetries; attempt++) {
400
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
364
401
  if (attempt > 0) {
365
- const baseDelay = Math.pow(2, attempt - 1) * 1000;
366
- const jitter = 1 + Math.random() * 0.5;
367
- await new Promise((r) => setTimeout(r, baseDelay * jitter));
402
+ await abortableDelay(250 * 2 ** (attempt - 1), signal);
368
403
  }
369
404
  try {
370
405
  const response = await fetch(url, {
371
406
  method,
372
407
  headers,
373
408
  ...(body ? { body } : {}),
374
- signal: AbortSignal.any([signal, AbortSignal.timeout(15000)]),
409
+ signal,
375
410
  });
376
411
  const text = await response.text();
377
412
  return { data: text, statusCode: response.status };
378
413
  }
379
414
  catch (error) {
380
415
  lastError = error instanceof Error ? error : new Error(String(error));
416
+ if (signal.aborted)
417
+ throw lastError;
381
418
  }
382
419
  }
383
420
  throw lastError;
384
421
  }
422
+ function abortableDelay(milliseconds, signal) {
423
+ if (signal.aborted)
424
+ return Promise.reject(signal.reason);
425
+ return new Promise((resolve, reject) => {
426
+ const onAbort = () => {
427
+ clearTimeout(timeout);
428
+ reject(signal.reason);
429
+ };
430
+ const timeout = setTimeout(() => {
431
+ signal.removeEventListener("abort", onAbort);
432
+ resolve();
433
+ }, milliseconds);
434
+ signal.addEventListener("abort", onAbort, { once: true });
435
+ });
436
+ }
437
+ function awaitWithSignal(promise, signal) {
438
+ if (signal.aborted)
439
+ return Promise.reject(signal.reason);
440
+ return new Promise((resolve, reject) => {
441
+ const onAbort = () => {
442
+ reject(signal.reason);
443
+ };
444
+ signal.addEventListener("abort", onAbort, { once: true });
445
+ promise.then((value) => {
446
+ signal.removeEventListener("abort", onAbort);
447
+ resolve(value);
448
+ }, (error) => {
449
+ signal.removeEventListener("abort", onAbort);
450
+ reject(error);
451
+ });
452
+ });
453
+ }
385
454
  // ── Rate limit detection ─────────────────────────────────
386
455
  function isRateLimited(statusCode, html) {
387
456
  if ([429, 403, 503].includes(statusCode))
@@ -555,40 +624,179 @@ function parseGoogleResults(html) {
555
624
  return results;
556
625
  }
557
626
  // ── Search cascade ───────────────────────────────────────
627
+ function domText(element) {
628
+ return element?.textContent?.replace(/\s+/g, " ").trim() ?? "";
629
+ }
630
+ function parseDOMResults(engine, html) {
631
+ const { document } = parseHTML(html);
632
+ const selectors = {
633
+ DuckDuckGo: { links: "a.result__a", block: ".result", snippet: ".result__snippet" },
634
+ DuckDuckGoLite: {
635
+ links: "a.result-link, a.result__a",
636
+ block: "tr, .result",
637
+ snippet: ".result-snippet, .result__snippet",
638
+ },
639
+ Brave: { links: "a.result-header", block: ".snippet", snippet: ".snippet-description" },
640
+ Bing: { links: "li.b_algo h2 a", block: "li.b_algo", snippet: ".b_caption p, p" },
641
+ Google: {
642
+ links: "a:has(h3)",
643
+ block: ".g, [data-hveid]",
644
+ snippet: ".VwiC3b, .yDYNvb, [data-sncf]",
645
+ },
646
+ };
647
+ const config = selectors[engine];
648
+ const results = [];
649
+ for (const link of document.querySelectorAll(config.links)) {
650
+ const block = link.closest(config.block);
651
+ if (block && isSponsoredBlock(block.outerHTML))
652
+ continue;
653
+ const rawURL = link.getAttribute("href") ?? "";
654
+ const transformedURL = engine === "DuckDuckGo" || engine === "DuckDuckGoLite"
655
+ ? unwrapDDGRedirect(rawURL)
656
+ : engine === "Bing"
657
+ ? unwrapBingRedirect(rawURL)
658
+ : engine === "Google"
659
+ ? unwrapGoogleRedirect(rawURL)
660
+ : rawURL;
661
+ const url = canonicalSearchResultUrl(transformedURL) ?? transformedURL;
662
+ const title = domText(link.querySelector("h3")) || domText(link);
663
+ const siblingSnippet = link.nextElementSibling?.matches(config.snippet)
664
+ ? link.nextElementSibling
665
+ : null;
666
+ const snippet = domText(block?.querySelector(config.snippet) ?? siblingSnippet);
667
+ if (url && title)
668
+ results.push({ title, url, snippet });
669
+ }
670
+ return results;
671
+ }
672
+ function parseRegexResults(engine, html) {
673
+ switch (engine) {
674
+ case "DuckDuckGo":
675
+ case "DuckDuckGoLite":
676
+ return parseDDGResults(html);
677
+ case "Brave":
678
+ return parseBraveResults(html);
679
+ case "Bing":
680
+ return parseBingResults(html);
681
+ case "Google":
682
+ return parseGoogleResults(html);
683
+ }
684
+ }
685
+ export function parseSearchResults(engine, html) {
686
+ try {
687
+ const domResults = parseDOMResults(engine, html);
688
+ if (domResults.length > 0)
689
+ return domResults;
690
+ }
691
+ catch (error) {
692
+ log("WARN", "web-search", "DOM parser failed; using regex fallback", {
693
+ engine,
694
+ error: error instanceof Error ? error.message : String(error),
695
+ });
696
+ }
697
+ return parseRegexResults(engine, html);
698
+ }
699
+ const searchCache = new Map();
700
+ const searchesInFlight = new Map();
701
+ function searchCacheKey(query, maxResults, filters) {
702
+ return JSON.stringify({
703
+ query: query.trim().replace(/\s+/g, " ").toLowerCase(),
704
+ maxResults,
705
+ includeDomains: [...filters.includeDomains].sort(),
706
+ excludeDomains: [...filters.excludeDomains].sort(),
707
+ timeRange: filters.timeRange ?? null,
708
+ });
709
+ }
710
+ function pruneSearchCache(now) {
711
+ for (const [key, entry] of searchCache) {
712
+ if (entry.expiresAt <= now)
713
+ searchCache.delete(key);
714
+ }
715
+ while (searchCache.size >= SEARCH_CACHE_MAX_ENTRIES) {
716
+ const oldestKey = searchCache.keys().next().value;
717
+ if (!oldestKey)
718
+ break;
719
+ searchCache.delete(oldestKey);
720
+ }
721
+ }
722
+ export function resetWebSearchCache() {
723
+ searchCache.clear();
724
+ searchesInFlight.clear();
725
+ }
558
726
  async function performSearch(query, maxResults, filters, signal) {
559
727
  for (const engine of ENGINES) {
728
+ const startedAt = Date.now();
560
729
  try {
561
730
  const { url, headers, method, body } = buildRequest(engine, query, filters);
562
- const { data: html, statusCode } = await fetchWithRetry(url, headers, signal, method, body);
563
- if (isRateLimited(statusCode, html))
731
+ const attemptSignal = AbortSignal.any([
732
+ signal,
733
+ AbortSignal.timeout(ENGINE_ATTEMPT_TIMEOUT_MS),
734
+ ]);
735
+ const { data: html, statusCode } = await fetchWithRetry(url, headers, attemptSignal, method, body);
736
+ if (isRateLimited(statusCode, html)) {
737
+ log("WARN", "web-search", "Search engine unavailable", {
738
+ engine,
739
+ status: String(statusCode),
740
+ reason: "rate-limited",
741
+ duration: `${Date.now() - startedAt}ms`,
742
+ });
564
743
  continue;
565
- let results;
566
- switch (engine) {
567
- case "DuckDuckGo":
568
- case "DuckDuckGoLite":
569
- results = parseDDGResults(html);
570
- break;
571
- case "Brave":
572
- results = parseBraveResults(html);
573
- break;
574
- case "Bing":
575
- results = parseBingResults(html);
576
- break;
577
- case "Google":
578
- results = parseGoogleResults(html);
579
- break;
580
744
  }
745
+ const results = parseSearchResults(engine, html);
581
746
  const filteredResults = filterSearchResults(results, maxResults, filters, query);
747
+ log("INFO", "web-search", "Search engine attempt completed", {
748
+ engine,
749
+ status: String(statusCode),
750
+ parser: results.length > 0 ? "dom-or-regex" : "none",
751
+ results: String(filteredResults.results.length),
752
+ duration: `${Date.now() - startedAt}ms`,
753
+ });
582
754
  if (filteredResults.results.length > 0) {
583
755
  return { results: filteredResults.results, engine, stats: filteredResults.stats };
584
756
  }
585
757
  }
586
- catch {
587
- // try next engine
758
+ catch (error) {
759
+ log("WARN", "web-search", "Search engine attempt failed", {
760
+ engine,
761
+ error: error instanceof Error ? error.message : String(error),
762
+ duration: `${Date.now() - startedAt}ms`,
763
+ });
764
+ if (signal.aborted)
765
+ throw error;
588
766
  }
589
767
  }
590
768
  return { results: [], engine: "DuckDuckGo", stats: emptyFilterStats() };
591
769
  }
770
+ async function cachedSearch(query, maxResults, filters, callerSignal) {
771
+ const key = searchCacheKey(query, maxResults, filters);
772
+ const now = Date.now();
773
+ pruneSearchCache(now);
774
+ const cached = searchCache.get(key);
775
+ if (cached && cached.expiresAt > now) {
776
+ searchCache.delete(key);
777
+ searchCache.set(key, cached);
778
+ log("INFO", "web-search", "Search cache hit");
779
+ return cached.value;
780
+ }
781
+ let pending = searchesInFlight.get(key);
782
+ if (!pending) {
783
+ const sharedSignal = AbortSignal.timeout(ENGINES.length * ENGINE_ATTEMPT_TIMEOUT_MS);
784
+ pending = performSearch(query, maxResults, filters, sharedSignal)
785
+ .then((value) => {
786
+ if (value.results.length > 0) {
787
+ pruneSearchCache(Date.now());
788
+ searchCache.set(key, { expiresAt: Date.now() + SEARCH_CACHE_TTL_MS, value });
789
+ }
790
+ return value;
791
+ })
792
+ .finally(() => searchesInFlight.delete(key));
793
+ searchesInFlight.set(key, pending);
794
+ }
795
+ else {
796
+ log("INFO", "web-search", "Coalesced in-flight search");
797
+ }
798
+ return await awaitWithSignal(pending, callerSignal);
799
+ }
592
800
  // ── Tool definition ──────────────────────────────────────
593
801
  const parameters = z
594
802
  .object({
@@ -647,7 +855,7 @@ export function createWebSearchTool() {
647
855
  excludeDomains: normalizeDomains(args.exclude_domains),
648
856
  ...(args.time_range ? { timeRange: args.time_range } : {}),
649
857
  };
650
- const { results, engine, stats } = await performSearch(args.query, maxResults, filters, context.signal);
858
+ const { results, engine, stats } = await cachedSearch(args.query, maxResults, filters, context.signal);
651
859
  if (results.length === 0) {
652
860
  return `No search results found for: "${args.query}". All search engines were unavailable or returned no results.`;
653
861
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,28 @@
1
1
  import { afterEach, describe, expect, it, vi } from "vitest";
2
- import { canonicalSearchResultUrl, createWebSearchTool, isAdSearchResultUrl, normalizeDomain, } from "./web-search.js";
2
+ import { canonicalSearchResultUrl, createWebSearchTool, isAdSearchResultUrl, isSearchResultRelevant, normalizeDomain, parseSearchResults, resetWebSearchCache, } from "./web-search.js";
3
3
  const originalFetch = globalThis.fetch;
4
4
  function context() {
5
5
  return { signal: new AbortController().signal, toolCallId: "test" };
6
6
  }
7
7
  afterEach(() => {
8
8
  globalThis.fetch = originalFetch;
9
+ resetWebSearchCache();
9
10
  vi.restoreAllMocks();
10
11
  });
12
+ describe("search result relevance", () => {
13
+ it("rejects generic localized fallback results while keeping query matches", () => {
14
+ expect(isSearchResultRelevant({
15
+ title: "MyGovernment - Government of Malaysia's Official Portal",
16
+ url: "https://www.malaysia.gov.my/en",
17
+ snippet: "Government services and information",
18
+ }, "official Node.js current release")).toBe(false);
19
+ expect(isSearchResultRelevant({
20
+ title: "Node.js releases",
21
+ url: "https://nodejs.org/en/blog/release",
22
+ snippet: "Current Node.js release information",
23
+ }, "official Node.js current release")).toBe(true);
24
+ });
25
+ });
11
26
  describe("canonicalSearchResultUrl", () => {
12
27
  it("strips tracking params and fragments while sorting remaining params", () => {
13
28
  expect(canonicalSearchResultUrl("https://example.com/docs?utm_source=x&b=2&a=1&fbclid=abc#section")).toBe("https://example.com/docs?a=1&b=2");
@@ -111,8 +126,8 @@ describe("createWebSearchTool", () => {
111
126
  `;
112
127
  const braveHtml = `
113
128
  <div class="snippet">
114
- <a href="https://example.com/organic" class="result-header">Organic result</a>
115
- <p class="snippet-description">Useful organic snippet.</p>
129
+ <a href="https://example.com/organic" class="result-header">Organic laptop deals guide</a>
130
+ <p class="snippet-description">Useful organic shopping guidance.</p>
116
131
  </div></div>
117
132
  `;
118
133
  globalThis.fetch = vi
@@ -121,7 +136,7 @@ describe("createWebSearchTool", () => {
121
136
  .mockResolvedValueOnce(new Response(adOnlyHtml, { status: 200 }))
122
137
  .mockResolvedValueOnce(new Response(braveHtml, { status: 200 }));
123
138
  const result = await createWebSearchTool().execute({ query: "laptop deals", max_results: 5 }, context());
124
- expect(result).toContain("Organic result");
139
+ expect(result).toContain("Organic laptop deals guide");
125
140
  expect(result).toContain("https://example.com/organic");
126
141
  expect(result).toContain("from Brave");
127
142
  expect(result).not.toContain("Cheap laptops for sale");
@@ -132,7 +147,7 @@ describe("createWebSearchTool", () => {
132
147
  capturedUrl = String(input);
133
148
  // Return organic result only on the Google branch.
134
149
  if (capturedUrl.includes("google.com")) {
135
- return new Response(`<div class="g"><a href="https://docs.python.org/3/"><h3>Python Docs</h3></a><div class="VwiC3b">Official Python documentation.</div></div>`, { status: 200 });
150
+ return new Response(`<div class="g"><a href="https://docs.python.org/3/library/asyncio.html"><h3>Python asyncio Docs</h3></a><div class="VwiC3b">Official asyncio documentation.</div></div>`, { status: 200 });
136
151
  }
137
152
  return new Response("<html></html>", { status: 200 });
138
153
  });
@@ -145,7 +160,7 @@ describe("createWebSearchTool", () => {
145
160
  // Last captured URL is the Google branch with recency + site scoping.
146
161
  expect(capturedUrl).toContain("tbs=qdr:w");
147
162
  expect(decodeURIComponent(capturedUrl)).toContain("site:docs.python.org");
148
- expect(result).toContain("Python Docs");
163
+ expect(result).toContain("Python asyncio Docs");
149
164
  expect(result).toContain("past week");
150
165
  });
151
166
  it("drops results from excluded domains client-side", async () => {
@@ -222,6 +237,7 @@ describe("createWebSearchTool", () => {
222
237
  globalThis.fetch = vi.fn(async () => new Response(html, { status: 200 }));
223
238
  const filtered = await createWebSearchTool().execute({ query: "example docs", max_results: 5 }, context());
224
239
  expect(filtered).toContain("filtered 1 ad");
240
+ resetWebSearchCache();
225
241
  globalThis.fetch = vi.fn(async () => new Response(`<a class="result__a" href="https://example.com/docs">Docs</a><a class="result__snippet">Organic docs.</a>`, { status: 200 }));
226
242
  const clean = await createWebSearchTool().execute({ query: "example docs", max_results: 5 }, context());
227
243
  expect(clean).not.toContain("filtered");
@@ -258,5 +274,60 @@ describe("createWebSearchTool", () => {
258
274
  expect(result).toContain("https://www.typescriptlang.org/docs/");
259
275
  expect(result).toContain("from Bing");
260
276
  });
277
+ it("coalesces identical in-flight requests and caches successful results", async () => {
278
+ let resolveResponse;
279
+ const responsePromise = new Promise((resolve) => {
280
+ resolveResponse = resolve;
281
+ });
282
+ globalThis.fetch = vi.fn(() => responsePromise);
283
+ const tool = createWebSearchTool();
284
+ const args = { query: " Example Docs ", max_results: 5 };
285
+ const first = tool.execute(args, context());
286
+ const second = tool.execute({ ...args, query: "example docs" }, context());
287
+ resolveResponse(new Response(`<a class="result__a" href="https://example.com/docs">Example Docs</a><a class="result__snippet">Documentation.</a>`, { status: 200 }));
288
+ expect(await first).toContain("Example Docs");
289
+ expect(await second).toContain("Example Docs");
290
+ expect(globalThis.fetch).toHaveBeenCalledTimes(1);
291
+ await tool.execute(args, context());
292
+ expect(globalThis.fetch).toHaveBeenCalledTimes(1);
293
+ });
294
+ it("separates cache entries by limits and filters and expires them after 60 seconds", async () => {
295
+ let now = 1_000;
296
+ vi.spyOn(Date, "now").mockImplementation(() => now);
297
+ globalThis.fetch = vi.fn(async () => new Response(`<a class="result__a" href="https://example.com/docs">Example Docs</a><a class="result__snippet">Documentation.</a>`, { status: 200 }));
298
+ const tool = createWebSearchTool();
299
+ await tool.execute({ query: "example docs", max_results: 5 }, context());
300
+ await tool.execute({ query: "example docs", max_results: 6 }, context());
301
+ await tool.execute({ query: "example docs", max_results: 5, include_domains: ["example.com"] }, context());
302
+ expect(globalThis.fetch).toHaveBeenCalledTimes(3);
303
+ now += 60_001;
304
+ await tool.execute({ query: "example docs", max_results: 5 }, context());
305
+ expect(globalThis.fetch).toHaveBeenCalledTimes(4);
306
+ });
307
+ it("bounds failed engine retries before falling back", async () => {
308
+ globalThis.fetch = vi
309
+ .fn()
310
+ .mockRejectedValueOnce(new Error("network down"))
311
+ .mockRejectedValueOnce(new Error("network down"))
312
+ .mockResolvedValueOnce(new Response(`<a class="result__a" href="https://example.com/docs">Example Docs</a><a class="result__snippet">Documentation.</a>`, { status: 200 }));
313
+ const result = await createWebSearchTool().execute({ query: "example docs", max_results: 5 }, context());
314
+ expect(result).toContain("Example Docs");
315
+ expect(result).toContain("DuckDuckGoLite");
316
+ expect(globalThis.fetch).toHaveBeenCalledTimes(3);
317
+ });
318
+ });
319
+ describe("search page parsers", () => {
320
+ it("uses DOM selectors for structurally nested results", () => {
321
+ const results = parseSearchResults("Bing", `<li class="b_algo"><h2><a href="https://example.com/guide"><span>Example Guide</span></a></h2><div class="b_caption"><p>Nested snippet.</p></div></li>`);
322
+ expect(results).toEqual([
323
+ { title: "Example Guide", url: "https://example.com/guide", snippet: "Nested snippet." },
324
+ ]);
325
+ });
326
+ it("retains the regex fallback for legacy provider markup", () => {
327
+ const results = parseSearchResults("DuckDuckGo", `<div class="result"><a class="result__title" href="https://example.com/legacy">Legacy Result</a><a class="result__snippet">Legacy snippet.</a></div>`);
328
+ expect(results).toEqual([
329
+ { title: "Legacy Result", url: "https://example.com/legacy", snippet: "Legacy snippet." },
330
+ ]);
331
+ });
261
332
  });
262
333
  //# sourceMappingURL=web-search.test.js.map