@prestyj/cli 5.4.1 → 5.6.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 (325) hide show
  1. package/README.md +25 -12
  2. package/assets/end-notification.mp3 +0 -0
  3. package/assets/skills/evidence-led-ui/LICENSES.md +68 -0
  4. package/assets/skills/evidence-led-ui/SKILL.md +139 -0
  5. package/{LICENSE → assets/skills/evidence-led-ui/corpus/awesome-design-md/LICENSE} +1 -1
  6. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
  7. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
  8. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/apple/DESIGN.md +562 -0
  9. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/binance/DESIGN.md +634 -0
  10. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
  11. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
  12. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
  13. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cal/DESIGN.md +542 -0
  14. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/claude/DESIGN.md +589 -0
  15. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clay/DESIGN.md +541 -0
  16. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
  17. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
  18. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
  19. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/composio/DESIGN.md +506 -0
  20. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
  21. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/dell-1996/DESIGN.md +632 -0
  22. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
  23. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/expo/DESIGN.md +526 -0
  24. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
  25. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/figma/DESIGN.md +578 -0
  26. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/framer/DESIGN.md +544 -0
  27. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
  28. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hp/DESIGN.md +670 -0
  29. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
  30. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
  31. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
  32. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
  33. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
  34. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
  35. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
  36. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/meta/DESIGN.md +683 -0
  37. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
  38. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
  39. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/miro/DESIGN.md +825 -0
  40. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
  41. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
  42. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nike/DESIGN.md +575 -0
  43. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nintendo-2001/DESIGN.md +649 -0
  44. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/notion/DESIGN.md +821 -0
  45. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
  46. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
  47. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
  48. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
  49. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
  50. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
  51. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
  52. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/renault/DESIGN.md +589 -0
  53. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
  54. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/resend/DESIGN.md +585 -0
  55. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
  56. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
  57. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
  58. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sentry/DESIGN.md +551 -0
  59. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/shopify/DESIGN.md +516 -0
  60. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/slack/DESIGN.md +482 -0
  61. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spacex/DESIGN.md +363 -0
  62. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
  63. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
  64. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/stripe/DESIGN.md +487 -0
  65. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/supabase/DESIGN.md +462 -0
  66. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/superhuman/DESIGN.md +448 -0
  67. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
  68. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
  69. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/together.ai/DESIGN.md +633 -0
  70. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/uber/DESIGN.md +636 -0
  71. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vercel/DESIGN.md +736 -0
  72. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vodafone/DESIGN.md +538 -0
  73. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/voltagent/DESIGN.md +521 -0
  74. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/warp/DESIGN.md +526 -0
  75. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/webflow/DESIGN.md +588 -0
  76. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wired/DESIGN.md +497 -0
  77. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wise/DESIGN.md +544 -0
  78. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/x.ai/DESIGN.md +465 -0
  79. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/zapier/DESIGN.md +537 -0
  80. package/assets/skills/evidence-led-ui/data/corpus-manifest.json +768 -0
  81. package/assets/skills/evidence-led-ui/data/observations.json +47053 -0
  82. package/assets/skills/evidence-led-ui/references/anti-defaults.md +203 -0
  83. package/assets/skills/evidence-led-ui/references/archetypes.md +97 -0
  84. package/assets/skills/evidence-led-ui/references/craft-rulings.md +167 -0
  85. package/assets/skills/evidence-led-ui/references/methodology.md +72 -0
  86. package/assets/skills/evidence-led-ui/references/observed-patterns.md +68 -0
  87. package/assets/skills/evidence-led-ui/references/production-contract.md +120 -0
  88. package/assets/skills/evidence-led-ui/references/provenance.md +117 -0
  89. package/assets/skills/evidence-led-ui/references/quality-rubric.md +126 -0
  90. package/dist/app-sidecar.js +272 -74
  91. package/dist/app-sidecar.js.map +1 -1
  92. package/dist/chat-agents/general.d.ts +7 -0
  93. package/dist/chat-agents/general.d.ts.map +1 -0
  94. package/dist/chat-agents/general.js +16 -0
  95. package/dist/chat-agents/general.js.map +1 -0
  96. package/dist/chat-agents/general.test.d.ts +2 -0
  97. package/dist/chat-agents/general.test.d.ts.map +1 -0
  98. package/dist/chat-agents/general.test.js +50 -0
  99. package/dist/chat-agents/general.test.js.map +1 -0
  100. package/dist/chat-agents/index.d.ts +11 -0
  101. package/dist/chat-agents/index.d.ts.map +1 -0
  102. package/dist/chat-agents/index.js +89 -0
  103. package/dist/chat-agents/index.js.map +1 -0
  104. package/dist/chat-agents/jiwa.d.ts +53 -0
  105. package/dist/chat-agents/jiwa.d.ts.map +1 -0
  106. package/dist/chat-agents/jiwa.js +352 -0
  107. package/dist/chat-agents/jiwa.js.map +1 -0
  108. package/dist/chat-agents/jiwa.test.d.ts +2 -0
  109. package/dist/chat-agents/jiwa.test.d.ts.map +1 -0
  110. package/dist/chat-agents/jiwa.test.js +66 -0
  111. package/dist/chat-agents/jiwa.test.js.map +1 -0
  112. package/dist/chat-agents/memory.d.ts +53 -0
  113. package/dist/chat-agents/memory.d.ts.map +1 -0
  114. package/dist/chat-agents/memory.js +362 -0
  115. package/dist/chat-agents/memory.js.map +1 -0
  116. package/dist/chat-agents/memory.test.d.ts +2 -0
  117. package/dist/chat-agents/memory.test.d.ts.map +1 -0
  118. package/dist/chat-agents/memory.test.js +155 -0
  119. package/dist/chat-agents/memory.test.js.map +1 -0
  120. package/dist/chat-agents/research.d.ts +7 -0
  121. package/dist/chat-agents/research.d.ts.map +1 -0
  122. package/dist/chat-agents/research.js +18 -0
  123. package/dist/chat-agents/research.js.map +1 -0
  124. package/dist/chat-agents/shared.d.ts +11 -0
  125. package/dist/chat-agents/shared.d.ts.map +1 -0
  126. package/dist/chat-agents/shared.js +52 -0
  127. package/dist/chat-agents/shared.js.map +1 -0
  128. package/dist/chat-agents/specialists.test.d.ts +2 -0
  129. package/dist/chat-agents/specialists.test.d.ts.map +1 -0
  130. package/dist/chat-agents/specialists.test.js +97 -0
  131. package/dist/chat-agents/specialists.test.js.map +1 -0
  132. package/dist/chat-agents/therapist.d.ts +7 -0
  133. package/dist/chat-agents/therapist.d.ts.map +1 -0
  134. package/dist/chat-agents/therapist.js +20 -0
  135. package/dist/chat-agents/therapist.js.map +1 -0
  136. package/dist/chat-agents/types.d.ts +4 -0
  137. package/dist/chat-agents/types.d.ts.map +1 -0
  138. package/dist/chat-agents/types.js +7 -0
  139. package/dist/chat-agents/types.js.map +1 -0
  140. package/dist/cli/auth.js +1 -1
  141. package/dist/cli/auth.js.map +1 -1
  142. package/dist/cli.d.ts.map +1 -1
  143. package/dist/cli.js +72 -22
  144. package/dist/cli.js.map +1 -1
  145. package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
  146. package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
  147. package/dist/core/agent-session-memory-tail.test.js +122 -0
  148. package/dist/core/agent-session-memory-tail.test.js.map +1 -0
  149. package/dist/core/agent-session-subagent-policy.test.d.ts +2 -0
  150. package/dist/core/agent-session-subagent-policy.test.d.ts.map +1 -0
  151. package/dist/core/agent-session-subagent-policy.test.js +36 -0
  152. package/dist/core/agent-session-subagent-policy.test.js.map +1 -0
  153. package/dist/core/agent-session.d.ts +39 -11
  154. package/dist/core/agent-session.d.ts.map +1 -1
  155. package/dist/core/agent-session.js +178 -125
  156. package/dist/core/agent-session.js.map +1 -1
  157. package/dist/core/agents.d.ts +1 -1
  158. package/dist/core/agents.d.ts.map +1 -1
  159. package/dist/core/agents.js +4 -2
  160. package/dist/core/agents.js.map +1 -1
  161. package/dist/core/auth-providers.js +5 -5
  162. package/dist/core/auth-providers.js.map +1 -1
  163. package/dist/core/compaction/compactor.d.ts +7 -0
  164. package/dist/core/compaction/compactor.d.ts.map +1 -1
  165. package/dist/core/compaction/compactor.js +73 -9
  166. package/dist/core/compaction/compactor.js.map +1 -1
  167. package/dist/core/compaction/compactor.test.js +31 -4
  168. package/dist/core/compaction/compactor.test.js.map +1 -1
  169. package/dist/core/event-bus.d.ts +2 -0
  170. package/dist/core/event-bus.d.ts.map +1 -1
  171. package/dist/core/event-bus.js.map +1 -1
  172. package/dist/core/goal-worker.test.js +3 -2
  173. package/dist/core/goal-worker.test.js.map +1 -1
  174. package/dist/core/loop-breaker.d.ts +23 -16
  175. package/dist/core/loop-breaker.d.ts.map +1 -1
  176. package/dist/core/loop-breaker.js +52 -11
  177. package/dist/core/loop-breaker.js.map +1 -1
  178. package/dist/core/loop-breaker.test.js +37 -16
  179. package/dist/core/loop-breaker.test.js.map +1 -1
  180. package/dist/core/mcp/defaults.d.ts +1 -1
  181. package/dist/core/mcp/defaults.js +1 -1
  182. package/dist/core/mcp/store.d.ts +2 -2
  183. package/dist/core/mcp/store.test.js +1 -1
  184. package/dist/core/mcp/store.test.js.map +1 -1
  185. package/dist/core/nolan-prompt.d.ts +3 -3
  186. package/dist/core/nolan-prompt.d.ts.map +1 -1
  187. package/dist/core/nolan-prompt.js +10 -10
  188. package/dist/core/nolan-prompt.js.map +1 -1
  189. package/dist/core/nolan-prompt.test.js +17 -0
  190. package/dist/core/nolan-prompt.test.js.map +1 -1
  191. package/dist/core/progress/rebuild.d.ts +3 -3
  192. package/dist/core/progress/rebuild.d.ts.map +1 -1
  193. package/dist/core/progress/rebuild.js +33 -27
  194. package/dist/core/progress/rebuild.js.map +1 -1
  195. package/dist/core/progress/rebuild.test.js +15 -0
  196. package/dist/core/progress/rebuild.test.js.map +1 -1
  197. package/dist/core/project-discovery.d.ts +1 -1
  198. package/dist/core/project-discovery.d.ts.map +1 -1
  199. package/dist/core/project-discovery.js +5 -6
  200. package/dist/core/project-discovery.js.map +1 -1
  201. package/dist/core/project-discovery.test.js +14 -1
  202. package/dist/core/project-discovery.test.js.map +1 -1
  203. package/dist/core/radio.d.ts +3 -0
  204. package/dist/core/radio.d.ts.map +1 -1
  205. package/dist/core/radio.js +150 -21
  206. package/dist/core/radio.js.map +1 -1
  207. package/dist/core/radio.test.d.ts +2 -0
  208. package/dist/core/radio.test.d.ts.map +1 -0
  209. package/dist/core/radio.test.js +101 -0
  210. package/dist/core/radio.test.js.map +1 -0
  211. package/dist/core/session-history.test.js +1 -1
  212. package/dist/core/session-history.test.js.map +1 -1
  213. package/dist/core/session-manager.d.ts +1 -1
  214. package/dist/core/session-manager.d.ts.map +1 -1
  215. package/dist/core/session-manager.js +2 -1
  216. package/dist/core/session-manager.js.map +1 -1
  217. package/dist/core/session-manager.test.js +18 -0
  218. package/dist/core/session-manager.test.js.map +1 -1
  219. package/dist/core/settings-manager.d.ts +1 -0
  220. package/dist/core/settings-manager.d.ts.map +1 -1
  221. package/dist/core/settings-manager.js +1 -1
  222. package/dist/core/settings-manager.js.map +1 -1
  223. package/dist/core/skills-routing.test.d.ts +2 -0
  224. package/dist/core/skills-routing.test.d.ts.map +1 -0
  225. package/dist/core/skills-routing.test.js +70 -0
  226. package/dist/core/skills-routing.test.js.map +1 -0
  227. package/dist/core/skills.d.ts +2 -0
  228. package/dist/core/skills.d.ts.map +1 -1
  229. package/dist/core/skills.js +32 -9
  230. package/dist/core/skills.js.map +1 -1
  231. package/dist/core/subagent-manager.d.ts +73 -0
  232. package/dist/core/subagent-manager.d.ts.map +1 -0
  233. package/dist/core/subagent-manager.js +412 -0
  234. package/dist/core/subagent-manager.js.map +1 -0
  235. package/dist/core/subagent-manager.test.d.ts +2 -0
  236. package/dist/core/subagent-manager.test.d.ts.map +1 -0
  237. package/dist/core/subagent-manager.test.js +103 -0
  238. package/dist/core/subagent-manager.test.js.map +1 -0
  239. package/dist/core/subagent-policy.d.ts +4 -0
  240. package/dist/core/subagent-policy.d.ts.map +1 -0
  241. package/dist/core/subagent-policy.js +19 -0
  242. package/dist/core/subagent-policy.js.map +1 -0
  243. package/dist/modes/json-mode.d.ts.map +1 -1
  244. package/dist/modes/json-mode.js +3 -4
  245. package/dist/modes/json-mode.js.map +1 -1
  246. package/dist/modes/subagent-worker-mode.d.ts +14 -0
  247. package/dist/modes/subagent-worker-mode.d.ts.map +1 -0
  248. package/dist/modes/subagent-worker-mode.js +191 -0
  249. package/dist/modes/subagent-worker-mode.js.map +1 -0
  250. package/dist/system-prompt.js +2 -2
  251. package/dist/system-prompt.js.map +1 -1
  252. package/dist/system-prompt.test.js +7 -5
  253. package/dist/system-prompt.test.js.map +1 -1
  254. package/dist/tools/generate-image.d.ts.map +1 -1
  255. package/dist/tools/generate-image.js +12 -5
  256. package/dist/tools/generate-image.js.map +1 -1
  257. package/dist/tools/generate-image.test.js +17 -0
  258. package/dist/tools/generate-image.test.js.map +1 -1
  259. package/dist/tools/goals.d.ts +3 -3
  260. package/dist/tools/index.d.ts +10 -2
  261. package/dist/tools/index.d.ts.map +1 -1
  262. package/dist/tools/index.js +17 -1
  263. package/dist/tools/index.js.map +1 -1
  264. package/dist/tools/skill.d.ts.map +1 -1
  265. package/dist/tools/skill.js +8 -3
  266. package/dist/tools/skill.js.map +1 -1
  267. package/dist/tools/subagent-control.d.ts +6 -0
  268. package/dist/tools/subagent-control.d.ts.map +1 -0
  269. package/dist/tools/subagent-control.js +95 -0
  270. package/dist/tools/subagent-control.js.map +1 -0
  271. package/dist/tools/subagent-control.test.d.ts +2 -0
  272. package/dist/tools/subagent-control.test.d.ts.map +1 -0
  273. package/dist/tools/subagent-control.test.js +40 -0
  274. package/dist/tools/subagent-control.test.js.map +1 -0
  275. package/dist/tools/subagent-shared.d.ts +24 -0
  276. package/dist/tools/subagent-shared.d.ts.map +1 -0
  277. package/dist/tools/subagent-shared.js +53 -0
  278. package/dist/tools/subagent-shared.js.map +1 -0
  279. package/dist/tools/subagent-shared.test.d.ts +2 -0
  280. package/dist/tools/subagent-shared.test.d.ts.map +1 -0
  281. package/dist/tools/subagent-shared.test.js +29 -0
  282. package/dist/tools/subagent-shared.test.js.map +1 -0
  283. package/dist/tools/subagent.d.ts.map +1 -1
  284. package/dist/tools/subagent.js +21 -64
  285. package/dist/tools/subagent.js.map +1 -1
  286. package/dist/tools/subagent.test.js +27 -1
  287. package/dist/tools/subagent.test.js.map +1 -1
  288. package/dist/tools/web-fetch.d.ts +1 -0
  289. package/dist/tools/web-fetch.d.ts.map +1 -1
  290. package/dist/tools/web-fetch.js +112 -35
  291. package/dist/tools/web-fetch.js.map +1 -1
  292. package/dist/tools/web-fetch.test.js +146 -1
  293. package/dist/tools/web-fetch.test.js.map +1 -1
  294. package/dist/tools/web-search.d.ts +10 -0
  295. package/dist/tools/web-search.d.ts.map +1 -1
  296. package/dist/tools/web-search.js +236 -28
  297. package/dist/tools/web-search.js.map +1 -1
  298. package/dist/tools/web-search.test.js +77 -6
  299. package/dist/tools/web-search.test.js.map +1 -1
  300. package/dist/ui/App.d.ts +2 -0
  301. package/dist/ui/App.d.ts.map +1 -1
  302. package/dist/ui/App.js +61 -2
  303. package/dist/ui/App.js.map +1 -1
  304. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
  305. package/dist/ui/components/SkillsOverlay.js +8 -3
  306. package/dist/ui/components/SkillsOverlay.js.map +1 -1
  307. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  308. package/dist/ui/hooks/useAgentLoop.js +7 -18
  309. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  310. package/dist/ui/hooks/useAgentLoop.test.js +27 -0
  311. package/dist/ui/hooks/useAgentLoop.test.js.map +1 -1
  312. package/dist/ui/hooks/useModeState.d.ts +4 -2
  313. package/dist/ui/hooks/useModeState.d.ts.map +1 -1
  314. package/dist/ui/hooks/useModeState.js +14 -3
  315. package/dist/ui/hooks/useModeState.js.map +1 -1
  316. package/dist/ui/login.d.ts.map +1 -1
  317. package/dist/ui/login.js +13 -5
  318. package/dist/ui/login.js.map +1 -1
  319. package/dist/ui/render.d.ts +14 -0
  320. package/dist/ui/render.d.ts.map +1 -1
  321. package/dist/ui/render.js +2 -0
  322. package/dist/ui/render.js.map +1 -1
  323. package/dist/ui/render.test.js +17 -0
  324. package/dist/ui/render.test.js.map +1 -1
  325. package/package.json +7 -6
@@ -208,6 +208,22 @@ describe("createWebFetchTool", () => {
208
208
  expect(result).toContain("[PDF");
209
209
  expect(result).toContain("Hello PDF World");
210
210
  });
211
+ it("keeps the existing 25 MB allowance for PDF responses", async () => {
212
+ const { readFile } = await import("node:fs/promises");
213
+ const { fileURLToPath } = await import("node:url");
214
+ const fixturePath = fileURLToPath(new URL("./__fixtures__/sample.pdf", import.meta.url));
215
+ const bytes = await readFile(fixturePath);
216
+ globalThis.fetch = vi.fn(async () => new Response(bytes, {
217
+ status: 200,
218
+ headers: {
219
+ "content-type": "application/pdf",
220
+ "content-length": String(6 * 1024 * 1024),
221
+ },
222
+ }));
223
+ const result = await createWebFetchTool().execute({ url: "https://example.com/file.pdf" }, context());
224
+ expect(result).toContain("Hello PDF World");
225
+ expect(result).not.toContain("response too large");
226
+ });
211
227
  it("prefers a site's llms.txt for doc-ish pages and skips scraping the page", async () => {
212
228
  const fetchMock = vi.fn(async (input) => {
213
229
  const url = String(input);
@@ -223,7 +239,7 @@ describe("createWebFetchTool", () => {
223
239
  const result = await createWebFetchTool().execute({ url: "https://docs.example.com/reference/api" }, context());
224
240
  expect(result).toContain("[llms.txt for docs.example.com]");
225
241
  expect(result).toContain("curated llms.txt content");
226
- expect(fetchMock).toHaveBeenCalledTimes(1);
242
+ expect(fetchMock.mock.calls.map(([input]) => String(input))).not.toContain("https://docs.example.com/reference/api");
227
243
  });
228
244
  it("follows safe redirects while probing llms resources", async () => {
229
245
  const fetchMock = vi.fn(async (input) => {
@@ -356,5 +372,134 @@ describe("createWebFetchTool", () => {
356
372
  expect(result).toContain("Direct");
357
373
  expect(fetchMock).toHaveBeenCalledTimes(1);
358
374
  });
375
+ it("returns bounded raw HTML for an explicit html format and sends format headers", async () => {
376
+ const html = `<html><body><nav>Keep raw nav</nav><main><h1>Raw page</h1></main></body></html>`;
377
+ const fetchMock = vi.fn(async (_input, _init) => new Response(html, { status: 200, headers: { "content-type": "text/html" } }));
378
+ globalThis.fetch = fetchMock;
379
+ const result = await createWebFetchTool().execute({ url: "https://example.com/docs", format: "html", max_length: 60 }, context());
380
+ expect(result).toContain("<html>");
381
+ expect(result).toContain("Keep raw nav");
382
+ expect(result).toContain("[Content truncated]");
383
+ expect(fetchMock).toHaveBeenCalledTimes(1);
384
+ const headers = fetchMock.mock.calls[0][1]?.headers;
385
+ expect(headers.Accept).toContain("text/html");
386
+ expect(headers["Accept-Language"]).toBe("en-US,en;q=0.9");
387
+ });
388
+ it("rejects an oversized declared content length before collecting the body", async () => {
389
+ let pulls = 0;
390
+ let cancelled = false;
391
+ const stream = new ReadableStream({
392
+ pull(controller) {
393
+ pulls++;
394
+ controller.enqueue(new TextEncoder().encode("body"));
395
+ },
396
+ cancel() {
397
+ cancelled = true;
398
+ },
399
+ });
400
+ globalThis.fetch = vi.fn(async () => new Response(stream, {
401
+ status: 200,
402
+ headers: { "content-length": String(5 * 1024 * 1024 + 1) },
403
+ }));
404
+ const result = await createWebFetchTool().execute({ url: "https://example.com/large", prefer_llms_txt: false }, context());
405
+ expect(result).toContain("response too large");
406
+ expect(cancelled).toBe(true);
407
+ expect(pulls).toBeLessThanOrEqual(1);
408
+ });
409
+ it("cancels a streamed response as soon as it crosses 5 MB", async () => {
410
+ let cancelled = false;
411
+ let emitted = 0;
412
+ const chunk = new Uint8Array(1024 * 1024);
413
+ const stream = new ReadableStream({
414
+ pull(controller) {
415
+ emitted++;
416
+ controller.enqueue(chunk);
417
+ if (emitted > 8)
418
+ controller.close();
419
+ },
420
+ cancel() {
421
+ cancelled = true;
422
+ },
423
+ });
424
+ globalThis.fetch = vi.fn(async () => new Response(stream, { status: 200 }));
425
+ const result = await createWebFetchTool().execute({ url: "https://example.com/stream", prefer_llms_txt: false }, context());
426
+ expect(result).toContain("response too large");
427
+ expect(cancelled).toBe(true);
428
+ expect(emitted).toBeLessThanOrEqual(7);
429
+ });
430
+ it("sniffs HTML without a useful content type for text and markdown formats", async () => {
431
+ const html = `<html><head><title>Sniffed</title></head><body><article><h1>Sniffed page</h1><p>Useful body.</p></article></body></html>`;
432
+ globalThis.fetch = vi.fn(async () => new Response(html, { status: 200 }));
433
+ const tool = createWebFetchTool();
434
+ const text = await tool.execute({ url: "https://example.com/sniff-text", format: "text", prefer_llms_txt: false }, context());
435
+ const markdown = await tool.execute({ url: "https://example.com/sniff-markdown", format: "markdown", prefer_llms_txt: false }, context());
436
+ expect(text).toContain("Sniffed page");
437
+ expect(text).not.toContain("<html>");
438
+ expect(markdown).toContain("Sniffed");
439
+ expect(markdown).not.toContain("<html>");
440
+ });
441
+ it("retries a Cloudflare challenge once with the honest user-agent", async () => {
442
+ const fetchMock = vi
443
+ .fn()
444
+ .mockResolvedValueOnce(new Response("challenge", {
445
+ status: 403,
446
+ headers: { "cf-mitigated": "challenge" },
447
+ }))
448
+ .mockResolvedValueOnce(new Response("ok", { status: 200 }));
449
+ globalThis.fetch = fetchMock;
450
+ const result = await createWebFetchTool().execute({ url: "https://example.com/challenge", format: "text", prefer_llms_txt: false }, context());
451
+ expect(result).toBe("ok");
452
+ expect(fetchMock).toHaveBeenCalledTimes(2);
453
+ const firstHeaders = fetchMock.mock.calls[0][1]?.headers;
454
+ const retryHeaders = fetchMock.mock.calls[1][1]?.headers;
455
+ expect(firstHeaders["User-Agent"]).toContain("Mozilla");
456
+ expect(retryHeaders["User-Agent"]).toContain("ezcoder/1.0");
457
+ });
458
+ it("probes curated documents concurrently but preserves candidate priority", async () => {
459
+ let resolveHighest;
460
+ const highest = new Promise((resolve) => {
461
+ resolveHighest = resolve;
462
+ });
463
+ const started = [];
464
+ const fetchMock = vi.fn(async (input) => {
465
+ const url = String(input);
466
+ started.push(url);
467
+ if (url === "https://docs.example.com/llms.txt")
468
+ return await highest;
469
+ return new Response("# Lower Priority\n\n" + "Lower priority docs. ".repeat(10), {
470
+ status: 200,
471
+ headers: { "content-type": "text/markdown" },
472
+ });
473
+ });
474
+ globalThis.fetch = fetchMock;
475
+ const pending = createWebFetchTool().execute({ url: "https://docs.example.com/api", format: "markdown" }, context());
476
+ await vi.waitFor(() => expect(started.length).toBeGreaterThanOrEqual(3));
477
+ resolveHighest(new Response("# Highest Priority\n\n" + "Highest priority docs. ".repeat(10), {
478
+ status: 200,
479
+ headers: { "content-type": "text/markdown" },
480
+ }));
481
+ const result = await pending;
482
+ expect(result).toContain("Highest Priority");
483
+ expect(result).not.toContain("Lower Priority");
484
+ });
485
+ it("bounds curated probes with a per-probe timeout signal", async () => {
486
+ const originalTimeout = AbortSignal.timeout;
487
+ vi.spyOn(AbortSignal, "timeout").mockImplementation((milliseconds) => milliseconds === 3_000
488
+ ? AbortSignal.abort(new Error("probe timeout"))
489
+ : originalTimeout(milliseconds));
490
+ globalThis.fetch = vi.fn(async (input, init) => {
491
+ if (String(input).includes("llms") || String(input).endsWith(".md")) {
492
+ if (init?.signal?.aborted)
493
+ throw init.signal.reason;
494
+ return new Response("unexpected", { status: 200 });
495
+ }
496
+ return new Response("<html><body><main>Fallback page</main></body></html>", {
497
+ status: 200,
498
+ headers: { "content-type": "text/html" },
499
+ });
500
+ });
501
+ const result = await createWebFetchTool().execute({ url: "https://docs.example.com/api", format: "text" }, context());
502
+ expect(result).toContain("Fallback page");
503
+ });
359
504
  });
360
505
  //# 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,5 +1,11 @@
1
1
  import { z } from "zod";
2
2
  import type { AgentTool } from "@prestyj/agent";
3
+ export type SearchEngine = "DuckDuckGo" | "DuckDuckGoLite" | "Brave" | "Bing" | "Google";
4
+ interface SearchResult {
5
+ title: string;
6
+ url: string;
7
+ snippet: string;
8
+ }
3
9
  /**
4
10
  * Normalize a domain to lowercase punycode hostname, defending against Unicode
5
11
  * homograph spoofing. Returns null for un-parseable input.
@@ -7,6 +13,10 @@ import type { AgentTool } from "@prestyj/agent";
7
13
  export declare function normalizeDomain(domain: string): string | null;
8
14
  export declare function canonicalSearchResultUrl(rawURL: string): string | null;
9
15
  export declare function isAdSearchResultUrl(rawURL: string): boolean;
16
+ /** Reject localized/bot-fallback pages that match only a generic query word. */
17
+ export declare function isSearchResultRelevant(result: SearchResult, query: string): boolean;
18
+ export declare function parseSearchResults(engine: SearchEngine, html: string): SearchResult[];
19
+ export declare function resetWebSearchCache(): void;
10
20
  declare const parameters: z.ZodObject<{
11
21
  query: z.ZodString;
12
22
  max_results: z.ZodOptional<z.ZodNumber>;
@@ -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,gBAAgB,CAAC;AAqDhD;;;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"}
1
+ {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAyBhD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAczF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;;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;AAiED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQnF;AA0dD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAWrF;AAqCD,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAkGD,QAAA,MAAM,UAAU;;;;;;;;;;;iBAmBZ,CAAC;AAuBL,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,OAAO,UAAU,CAAC,CAyClE"}
@@ -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
  }