@staticn0va/wigolo 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1003) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +146 -227
  3. package/SKILL.md +382 -0
  4. package/assets/blocks/claude-code/CLAUDE.md.block +20 -0
  5. package/assets/blocks/claude-code/wigolo-command.md +40 -0
  6. package/assets/blocks/cursor/wigolo.mdc +46 -0
  7. package/assets/blocks/gemini-cli/GEMINI.md.block +18 -0
  8. package/assets/blocks/vscode/copilot-instructions.md.block +18 -0
  9. package/assets/skills/wigolo/SKILL.md +50 -0
  10. package/assets/skills/wigolo/rules/cache-first.md +30 -0
  11. package/assets/skills/wigolo/rules/synthesis.md +43 -0
  12. package/assets/skills/wigolo-agent/SKILL.md +73 -0
  13. package/assets/skills/wigolo-crawl/SKILL.md +60 -0
  14. package/assets/skills/wigolo-extract/SKILL.md +59 -0
  15. package/assets/skills/wigolo-fetch/SKILL.md +65 -0
  16. package/assets/skills/wigolo-find-similar/SKILL.md +72 -0
  17. package/assets/skills/wigolo-research/SKILL.md +77 -0
  18. package/assets/skills/wigolo-search/SKILL.md +78 -0
  19. package/dist/agent/executor.d.ts +33 -0
  20. package/dist/agent/executor.d.ts.map +1 -0
  21. package/dist/agent/executor.js +233 -0
  22. package/dist/agent/executor.js.map +1 -0
  23. package/dist/agent/pipeline.d.ts +5 -0
  24. package/dist/agent/pipeline.d.ts.map +1 -0
  25. package/dist/agent/pipeline.js +238 -0
  26. package/dist/agent/pipeline.js.map +1 -0
  27. package/dist/agent/planner.d.ts +13 -0
  28. package/dist/agent/planner.d.ts.map +1 -0
  29. package/dist/agent/planner.js +271 -0
  30. package/dist/agent/planner.js.map +1 -0
  31. package/dist/agent/relevance.d.ts +15 -0
  32. package/dist/agent/relevance.d.ts.map +1 -0
  33. package/dist/agent/relevance.js +60 -0
  34. package/dist/agent/relevance.js.map +1 -0
  35. package/dist/cache/backfill-embeddings.d.ts +23 -0
  36. package/dist/cache/backfill-embeddings.d.ts.map +1 -0
  37. package/dist/cache/backfill-embeddings.js +105 -0
  38. package/dist/cache/backfill-embeddings.js.map +1 -0
  39. package/dist/cache/change-detector.d.ts +7 -0
  40. package/dist/cache/change-detector.d.ts.map +1 -0
  41. package/dist/cache/change-detector.js +43 -0
  42. package/dist/cache/change-detector.js.map +1 -0
  43. package/dist/cache/db.d.ts +1 -0
  44. package/dist/cache/db.d.ts.map +1 -1
  45. package/dist/cache/db.js +94 -22
  46. package/dist/cache/db.js.map +1 -1
  47. package/dist/cache/diff-summary.d.ts +2 -0
  48. package/dist/cache/diff-summary.d.ts.map +1 -0
  49. package/dist/cache/diff-summary.js +82 -0
  50. package/dist/cache/diff-summary.js.map +1 -0
  51. package/dist/cache/migrations/runner.d.ts +29 -0
  52. package/dist/cache/migrations/runner.d.ts.map +1 -0
  53. package/dist/cache/migrations/runner.js +147 -0
  54. package/dist/cache/migrations/runner.js.map +1 -0
  55. package/dist/cache/sqlite-vec-store.d.ts +42 -0
  56. package/dist/cache/sqlite-vec-store.d.ts.map +1 -0
  57. package/dist/cache/sqlite-vec-store.js +176 -0
  58. package/dist/cache/sqlite-vec-store.js.map +1 -0
  59. package/dist/cache/store.d.ts +47 -1
  60. package/dist/cache/store.d.ts.map +1 -1
  61. package/dist/cache/store.js +364 -168
  62. package/dist/cache/store.js.map +1 -1
  63. package/dist/cli/agents/antigravity.d.ts +20 -0
  64. package/dist/cli/agents/antigravity.d.ts.map +1 -0
  65. package/dist/cli/agents/antigravity.js +49 -0
  66. package/dist/cli/agents/antigravity.js.map +1 -0
  67. package/dist/cli/agents/claude-code.d.ts +25 -0
  68. package/dist/cli/agents/claude-code.d.ts.map +1 -0
  69. package/dist/cli/agents/claude-code.js +111 -0
  70. package/dist/cli/agents/claude-code.js.map +1 -0
  71. package/dist/cli/agents/cursor.d.ts +21 -0
  72. package/dist/cli/agents/cursor.d.ts.map +1 -0
  73. package/dist/cli/agents/cursor.js +58 -0
  74. package/dist/cli/agents/cursor.js.map +1 -0
  75. package/dist/cli/agents/gemini-cli.d.ts +21 -0
  76. package/dist/cli/agents/gemini-cli.d.ts.map +1 -0
  77. package/dist/cli/agents/gemini-cli.js +55 -0
  78. package/dist/cli/agents/gemini-cli.js.map +1 -0
  79. package/dist/cli/agents/registry.d.ts +21 -0
  80. package/dist/cli/agents/registry.d.ts.map +1 -0
  81. package/dist/cli/agents/registry.js +27 -0
  82. package/dist/cli/agents/registry.js.map +1 -0
  83. package/dist/cli/agents/utils.d.ts +26 -0
  84. package/dist/cli/agents/utils.d.ts.map +1 -0
  85. package/dist/cli/agents/utils.js +136 -0
  86. package/dist/cli/agents/utils.js.map +1 -0
  87. package/dist/cli/agents/vscode.d.ts +21 -0
  88. package/dist/cli/agents/vscode.d.ts.map +1 -0
  89. package/dist/cli/agents/vscode.js +62 -0
  90. package/dist/cli/agents/vscode.js.map +1 -0
  91. package/dist/cli/auth.d.ts +2 -0
  92. package/dist/cli/auth.d.ts.map +1 -0
  93. package/dist/cli/auth.js +94 -0
  94. package/dist/cli/auth.js.map +1 -0
  95. package/dist/cli/backfill.d.ts +2 -0
  96. package/dist/cli/backfill.d.ts.map +1 -0
  97. package/dist/cli/backfill.js +58 -0
  98. package/dist/cli/backfill.js.map +1 -0
  99. package/dist/cli/daemon.d.ts +6 -1
  100. package/dist/cli/daemon.d.ts.map +1 -1
  101. package/dist/cli/daemon.js +61 -3
  102. package/dist/cli/daemon.js.map +1 -1
  103. package/dist/cli/doctor.d.ts +8 -0
  104. package/dist/cli/doctor.d.ts.map +1 -0
  105. package/dist/cli/doctor.js +344 -0
  106. package/dist/cli/doctor.js.map +1 -0
  107. package/dist/cli/health.d.ts +1 -1
  108. package/dist/cli/health.d.ts.map +1 -1
  109. package/dist/cli/health.js +42 -3
  110. package/dist/cli/health.js.map +1 -1
  111. package/dist/cli/help.d.ts +6 -0
  112. package/dist/cli/help.d.ts.map +1 -0
  113. package/dist/cli/help.js +63 -0
  114. package/dist/cli/help.js.map +1 -0
  115. package/dist/cli/index.d.ts +1 -1
  116. package/dist/cli/index.d.ts.map +1 -1
  117. package/dist/cli/index.js +35 -7
  118. package/dist/cli/index.js.map +1 -1
  119. package/dist/cli/init.d.ts +2 -0
  120. package/dist/cli/init.d.ts.map +1 -0
  121. package/dist/cli/init.js +201 -0
  122. package/dist/cli/init.js.map +1 -0
  123. package/dist/cli/plugin.d.ts +5 -0
  124. package/dist/cli/plugin.d.ts.map +1 -0
  125. package/dist/cli/plugin.js +185 -0
  126. package/dist/cli/plugin.js.map +1 -0
  127. package/dist/cli/setup-mcp.d.ts +2 -0
  128. package/dist/cli/setup-mcp.d.ts.map +1 -0
  129. package/dist/cli/setup-mcp.js +114 -0
  130. package/dist/cli/setup-mcp.js.map +1 -0
  131. package/dist/cli/shell.d.ts +2 -0
  132. package/dist/cli/shell.d.ts.map +1 -0
  133. package/dist/cli/shell.js +86 -0
  134. package/dist/cli/shell.js.map +1 -0
  135. package/dist/cli/shutdown.d.ts +2 -0
  136. package/dist/cli/shutdown.d.ts.map +1 -0
  137. package/dist/cli/shutdown.js +26 -0
  138. package/dist/cli/shutdown.js.map +1 -0
  139. package/dist/cli/status.d.ts +2 -0
  140. package/dist/cli/status.d.ts.map +1 -0
  141. package/dist/cli/status.js +31 -0
  142. package/dist/cli/status.js.map +1 -0
  143. package/dist/cli/telemetry.d.ts +10 -0
  144. package/dist/cli/telemetry.d.ts.map +1 -0
  145. package/dist/cli/telemetry.js +56 -0
  146. package/dist/cli/telemetry.js.map +1 -0
  147. package/dist/cli/tui/agents-types.d.ts +28 -0
  148. package/dist/cli/tui/agents-types.d.ts.map +1 -0
  149. package/dist/cli/tui/agents-types.js +1 -0
  150. package/dist/cli/tui/agents-types.js.map +1 -0
  151. package/dist/cli/tui/agents.d.ts +11 -0
  152. package/dist/cli/tui/agents.d.ts.map +1 -0
  153. package/dist/cli/tui/agents.js +93 -0
  154. package/dist/cli/tui/agents.js.map +1 -0
  155. package/dist/cli/tui/banner.d.ts +3 -0
  156. package/dist/cli/tui/banner.d.ts.map +1 -0
  157. package/dist/cli/tui/banner.js +30 -0
  158. package/dist/cli/tui/banner.js.map +1 -0
  159. package/dist/cli/tui/components/AgentSelect.d.ts +13 -0
  160. package/dist/cli/tui/components/AgentSelect.d.ts.map +1 -0
  161. package/dist/cli/tui/components/AgentSelect.js +116 -0
  162. package/dist/cli/tui/components/AgentSelect.js.map +1 -0
  163. package/dist/cli/tui/components/Banner.d.ts +6 -0
  164. package/dist/cli/tui/components/Banner.d.ts.map +1 -0
  165. package/dist/cli/tui/components/Banner.js +25 -0
  166. package/dist/cli/tui/components/Banner.js.map +1 -0
  167. package/dist/cli/tui/components/BrowserSelect.d.ts +7 -0
  168. package/dist/cli/tui/components/BrowserSelect.d.ts.map +1 -0
  169. package/dist/cli/tui/components/BrowserSelect.js +19 -0
  170. package/dist/cli/tui/components/BrowserSelect.js.map +1 -0
  171. package/dist/cli/tui/components/InstallProgress.d.ts +9 -0
  172. package/dist/cli/tui/components/InstallProgress.d.ts.map +1 -0
  173. package/dist/cli/tui/components/InstallProgress.js +67 -0
  174. package/dist/cli/tui/components/InstallProgress.js.map +1 -0
  175. package/dist/cli/tui/components/SkillInstall.d.ts +14 -0
  176. package/dist/cli/tui/components/SkillInstall.d.ts.map +1 -0
  177. package/dist/cli/tui/components/SkillInstall.js +94 -0
  178. package/dist/cli/tui/components/SkillInstall.js.map +1 -0
  179. package/dist/cli/tui/components/Summary.d.ts +22 -0
  180. package/dist/cli/tui/components/Summary.d.ts.map +1 -0
  181. package/dist/cli/tui/components/Summary.js +135 -0
  182. package/dist/cli/tui/components/Summary.js.map +1 -0
  183. package/dist/cli/tui/components/SystemCheck.d.ts +8 -0
  184. package/dist/cli/tui/components/SystemCheck.d.ts.map +1 -0
  185. package/dist/cli/tui/components/SystemCheck.js +71 -0
  186. package/dist/cli/tui/components/SystemCheck.js.map +1 -0
  187. package/dist/cli/tui/components/Verification.d.ts +8 -0
  188. package/dist/cli/tui/components/Verification.d.ts.map +1 -0
  189. package/dist/cli/tui/components/Verification.js +63 -0
  190. package/dist/cli/tui/components/Verification.js.map +1 -0
  191. package/dist/cli/tui/config-writer-cli.d.ts +12 -0
  192. package/dist/cli/tui/config-writer-cli.d.ts.map +1 -0
  193. package/dist/cli/tui/config-writer-cli.js +39 -0
  194. package/dist/cli/tui/config-writer-cli.js.map +1 -0
  195. package/dist/cli/tui/config-writer-json.d.ts +16 -0
  196. package/dist/cli/tui/config-writer-json.d.ts.map +1 -0
  197. package/dist/cli/tui/config-writer-json.js +86 -0
  198. package/dist/cli/tui/config-writer-json.js.map +1 -0
  199. package/dist/cli/tui/config-writer-toml.d.ts +16 -0
  200. package/dist/cli/tui/config-writer-toml.d.ts.map +1 -0
  201. package/dist/cli/tui/config-writer-toml.js +83 -0
  202. package/dist/cli/tui/config-writer-toml.js.map +1 -0
  203. package/dist/cli/tui/config-writer.d.ts +25 -0
  204. package/dist/cli/tui/config-writer.d.ts.map +1 -0
  205. package/dist/cli/tui/config-writer.js +101 -0
  206. package/dist/cli/tui/config-writer.js.map +1 -0
  207. package/dist/cli/tui/detect-helpers.d.ts +6 -0
  208. package/dist/cli/tui/detect-helpers.d.ts.map +1 -0
  209. package/dist/cli/tui/detect-helpers.js +45 -0
  210. package/dist/cli/tui/detect-helpers.js.map +1 -0
  211. package/dist/cli/tui/extras-prompt.d.ts +7 -0
  212. package/dist/cli/tui/extras-prompt.d.ts.map +1 -0
  213. package/dist/cli/tui/extras-prompt.js +42 -0
  214. package/dist/cli/tui/extras-prompt.js.map +1 -0
  215. package/dist/cli/tui/flags-types.d.ts +19 -0
  216. package/dist/cli/tui/flags-types.d.ts.map +1 -0
  217. package/dist/cli/tui/flags-types.js +23 -0
  218. package/dist/cli/tui/flags-types.js.map +1 -0
  219. package/dist/cli/tui/flags.d.ts +5 -0
  220. package/dist/cli/tui/flags.d.ts.map +1 -0
  221. package/dist/cli/tui/flags.js +132 -0
  222. package/dist/cli/tui/flags.js.map +1 -0
  223. package/dist/cli/tui/format.d.ts +14 -0
  224. package/dist/cli/tui/format.d.ts.map +1 -0
  225. package/dist/cli/tui/format.js +37 -0
  226. package/dist/cli/tui/format.js.map +1 -0
  227. package/dist/cli/tui/hooks/useAgentDetect.d.ts +6 -0
  228. package/dist/cli/tui/hooks/useAgentDetect.d.ts.map +1 -0
  229. package/dist/cli/tui/hooks/useAgentDetect.js +19 -0
  230. package/dist/cli/tui/hooks/useAgentDetect.js.map +1 -0
  231. package/dist/cli/tui/hooks/useInstall.d.ts +14 -0
  232. package/dist/cli/tui/hooks/useInstall.d.ts.map +1 -0
  233. package/dist/cli/tui/hooks/useInstall.js +90 -0
  234. package/dist/cli/tui/hooks/useInstall.js.map +1 -0
  235. package/dist/cli/tui/hooks/useSystemCheck.d.ts +13 -0
  236. package/dist/cli/tui/hooks/useSystemCheck.d.ts.map +1 -0
  237. package/dist/cli/tui/hooks/useSystemCheck.js +95 -0
  238. package/dist/cli/tui/hooks/useSystemCheck.js.map +1 -0
  239. package/dist/cli/tui/hooks/useVerify.d.ts +14 -0
  240. package/dist/cli/tui/hooks/useVerify.d.ts.map +1 -0
  241. package/dist/cli/tui/hooks/useVerify.js +71 -0
  242. package/dist/cli/tui/hooks/useVerify.js.map +1 -0
  243. package/dist/cli/tui/ink-init.d.ts +2 -0
  244. package/dist/cli/tui/ink-init.d.ts.map +1 -0
  245. package/dist/cli/tui/ink-init.js +198 -0
  246. package/dist/cli/tui/ink-init.js.map +1 -0
  247. package/dist/cli/tui/reporter-auto.d.ts +7 -0
  248. package/dist/cli/tui/reporter-auto.d.ts.map +1 -0
  249. package/dist/cli/tui/reporter-auto.js +15 -0
  250. package/dist/cli/tui/reporter-auto.js.map +1 -0
  251. package/dist/cli/tui/reporter.d.ts +26 -0
  252. package/dist/cli/tui/reporter.d.ts.map +1 -0
  253. package/dist/cli/tui/reporter.js +32 -0
  254. package/dist/cli/tui/reporter.js.map +1 -0
  255. package/dist/cli/tui/run-command.d.ts +14 -0
  256. package/dist/cli/tui/run-command.d.ts.map +1 -0
  257. package/dist/cli/tui/run-command.js +72 -0
  258. package/dist/cli/tui/run-command.js.map +1 -0
  259. package/dist/cli/tui/select-agents.d.ts +6 -0
  260. package/dist/cli/tui/select-agents.d.ts.map +1 -0
  261. package/dist/cli/tui/select-agents.js +32 -0
  262. package/dist/cli/tui/select-agents.js.map +1 -0
  263. package/dist/cli/tui/status-agents.d.ts +11 -0
  264. package/dist/cli/tui/status-agents.d.ts.map +1 -0
  265. package/dist/cli/tui/status-agents.js +53 -0
  266. package/dist/cli/tui/status-agents.js.map +1 -0
  267. package/dist/cli/tui/status-cache.d.ts +6 -0
  268. package/dist/cli/tui/status-cache.d.ts.map +1 -0
  269. package/dist/cli/tui/status-cache.js +39 -0
  270. package/dist/cli/tui/status-cache.js.map +1 -0
  271. package/dist/cli/tui/status-format.d.ts +14 -0
  272. package/dist/cli/tui/status-format.d.ts.map +1 -0
  273. package/dist/cli/tui/status-format.js +41 -0
  274. package/dist/cli/tui/status-format.js.map +1 -0
  275. package/dist/cli/tui/status-python.d.ts +6 -0
  276. package/dist/cli/tui/status-python.d.ts.map +1 -0
  277. package/dist/cli/tui/status-python.js +30 -0
  278. package/dist/cli/tui/status-python.js.map +1 -0
  279. package/dist/cli/tui/system-check.d.ts +24 -0
  280. package/dist/cli/tui/system-check.d.ts.map +1 -0
  281. package/dist/cli/tui/system-check.js +103 -0
  282. package/dist/cli/tui/system-check.js.map +1 -0
  283. package/dist/cli/tui/tui-reporter.d.ts +19 -0
  284. package/dist/cli/tui/tui-reporter.d.ts.map +1 -0
  285. package/dist/cli/tui/tui-reporter.js +95 -0
  286. package/dist/cli/tui/tui-reporter.js.map +1 -0
  287. package/dist/cli/tui/utils/config-writer.d.ts +3 -0
  288. package/dist/cli/tui/utils/config-writer.d.ts.map +1 -0
  289. package/dist/cli/tui/utils/config-writer.js +22 -0
  290. package/dist/cli/tui/utils/config-writer.js.map +1 -0
  291. package/dist/cli/tui/utils/suppress-logs.d.ts +3 -0
  292. package/dist/cli/tui/utils/suppress-logs.d.ts.map +1 -0
  293. package/dist/cli/tui/utils/suppress-logs.js +11 -0
  294. package/dist/cli/tui/utils/suppress-logs.js.map +1 -0
  295. package/dist/cli/tui/verify-suggestions.d.ts +5 -0
  296. package/dist/cli/tui/verify-suggestions.d.ts.map +1 -0
  297. package/dist/cli/tui/verify-suggestions.js +20 -0
  298. package/dist/cli/tui/verify-suggestions.js.map +1 -0
  299. package/dist/cli/tui/verify.d.ts +14 -0
  300. package/dist/cli/tui/verify.d.ts.map +1 -0
  301. package/dist/cli/tui/verify.js +101 -0
  302. package/dist/cli/tui/verify.js.map +1 -0
  303. package/dist/cli/tui/version.d.ts +2 -0
  304. package/dist/cli/tui/version.d.ts.map +1 -0
  305. package/dist/cli/tui/version.js +14 -0
  306. package/dist/cli/tui/version.js.map +1 -0
  307. package/dist/cli/uninstall.d.ts +2 -0
  308. package/dist/cli/uninstall.d.ts.map +1 -0
  309. package/dist/cli/uninstall.js +57 -0
  310. package/dist/cli/uninstall.js.map +1 -0
  311. package/dist/cli/warmup.d.ts +10 -2
  312. package/dist/cli/warmup.d.ts.map +1 -1
  313. package/dist/cli/warmup.js +226 -93
  314. package/dist/cli/warmup.js.map +1 -1
  315. package/dist/config.d.ts +28 -2
  316. package/dist/config.d.ts.map +1 -1
  317. package/dist/config.js +106 -56
  318. package/dist/config.js.map +1 -1
  319. package/dist/crawl/crawler.d.ts +6 -0
  320. package/dist/crawl/crawler.d.ts.map +1 -1
  321. package/dist/crawl/crawler.js +210 -209
  322. package/dist/crawl/crawler.js.map +1 -1
  323. package/dist/crawl/dedup.d.ts +1 -0
  324. package/dist/crawl/dedup.d.ts.map +1 -1
  325. package/dist/crawl/dedup.js +124 -81
  326. package/dist/crawl/dedup.js.map +1 -1
  327. package/dist/crawl/etag-incremental.d.ts +43 -0
  328. package/dist/crawl/etag-incremental.d.ts.map +1 -0
  329. package/dist/crawl/etag-incremental.js +94 -0
  330. package/dist/crawl/etag-incremental.js.map +1 -0
  331. package/dist/crawl/index-to-vec.d.ts +10 -0
  332. package/dist/crawl/index-to-vec.d.ts.map +1 -0
  333. package/dist/crawl/index-to-vec.js +44 -0
  334. package/dist/crawl/index-to-vec.js.map +1 -0
  335. package/dist/crawl/mapper.js +136 -164
  336. package/dist/crawl/mapper.js.map +1 -1
  337. package/dist/crawl/rate-limiter.js +63 -66
  338. package/dist/crawl/rate-limiter.js.map +1 -1
  339. package/dist/crawl/robots.js +58 -57
  340. package/dist/crawl/robots.js.map +1 -1
  341. package/dist/crawl/sitemap-first.d.ts +12 -0
  342. package/dist/crawl/sitemap-first.d.ts.map +1 -0
  343. package/dist/crawl/sitemap-first.js +47 -0
  344. package/dist/crawl/sitemap-first.js.map +1 -0
  345. package/dist/crawl/sitemap.js +33 -32
  346. package/dist/crawl/sitemap.js.map +1 -1
  347. package/dist/crawl/url-utils.d.ts +1 -0
  348. package/dist/crawl/url-utils.d.ts.map +1 -1
  349. package/dist/crawl/url-utils.js +49 -37
  350. package/dist/crawl/url-utils.js.map +1 -1
  351. package/dist/daemon/health-check.d.ts +16 -0
  352. package/dist/daemon/health-check.d.ts.map +1 -0
  353. package/dist/daemon/health-check.js +33 -0
  354. package/dist/daemon/health-check.js.map +1 -0
  355. package/dist/daemon/http-server.d.ts +26 -0
  356. package/dist/daemon/http-server.d.ts.map +1 -0
  357. package/dist/daemon/http-server.js +275 -0
  358. package/dist/daemon/http-server.js.map +1 -0
  359. package/dist/daemon/proxy.d.ts +10 -0
  360. package/dist/daemon/proxy.d.ts.map +1 -0
  361. package/dist/daemon/proxy.js +93 -0
  362. package/dist/daemon/proxy.js.map +1 -0
  363. package/dist/embedding/embed.d.ts +59 -0
  364. package/dist/embedding/embed.d.ts.map +1 -0
  365. package/dist/embedding/embed.js +233 -0
  366. package/dist/embedding/embed.js.map +1 -0
  367. package/dist/embedding/fastembed-provider.d.ts +19 -0
  368. package/dist/embedding/fastembed-provider.d.ts.map +1 -0
  369. package/dist/embedding/fastembed-provider.js +51 -0
  370. package/dist/embedding/fastembed-provider.js.map +1 -0
  371. package/dist/embedding/key-terms.d.ts +12 -0
  372. package/dist/embedding/key-terms.d.ts.map +1 -0
  373. package/dist/embedding/key-terms.js +234 -0
  374. package/dist/embedding/key-terms.js.map +1 -0
  375. package/dist/extraction/boilerplate.d.ts +15 -0
  376. package/dist/extraction/boilerplate.d.ts.map +1 -0
  377. package/dist/extraction/boilerplate.js +52 -0
  378. package/dist/extraction/boilerplate.js.map +1 -0
  379. package/dist/extraction/defuddle.d.ts.map +1 -1
  380. package/dist/extraction/defuddle.js +27 -23
  381. package/dist/extraction/defuddle.js.map +1 -1
  382. package/dist/extraction/extract.d.ts.map +1 -1
  383. package/dist/extraction/extract.js +76 -76
  384. package/dist/extraction/extract.js.map +1 -1
  385. package/dist/extraction/jsonld.js +50 -54
  386. package/dist/extraction/jsonld.js.map +1 -1
  387. package/dist/extraction/lang-hints.d.ts +2 -0
  388. package/dist/extraction/lang-hints.d.ts.map +1 -0
  389. package/dist/extraction/lang-hints.js +30 -0
  390. package/dist/extraction/lang-hints.js.map +1 -0
  391. package/dist/extraction/llm-fallback.d.ts +17 -0
  392. package/dist/extraction/llm-fallback.d.ts.map +1 -0
  393. package/dist/extraction/llm-fallback.js +130 -0
  394. package/dist/extraction/llm-fallback.js.map +1 -0
  395. package/dist/extraction/markdown-sanitize.d.ts +2 -0
  396. package/dist/extraction/markdown-sanitize.d.ts.map +1 -0
  397. package/dist/extraction/markdown-sanitize.js +151 -0
  398. package/dist/extraction/markdown-sanitize.js.map +1 -0
  399. package/dist/extraction/markdown.d.ts +11 -0
  400. package/dist/extraction/markdown.d.ts.map +1 -1
  401. package/dist/extraction/markdown.js +195 -91
  402. package/dist/extraction/markdown.js.map +1 -1
  403. package/dist/extraction/pipeline.d.ts +8 -0
  404. package/dist/extraction/pipeline.d.ts.map +1 -1
  405. package/dist/extraction/pipeline.js +57 -91
  406. package/dist/extraction/pipeline.js.map +1 -1
  407. package/dist/extraction/readability.d.ts +1 -1
  408. package/dist/extraction/readability.d.ts.map +1 -1
  409. package/dist/extraction/readability.js +28 -29
  410. package/dist/extraction/readability.js.map +1 -1
  411. package/dist/extraction/schema.d.ts +12 -0
  412. package/dist/extraction/schema.d.ts.map +1 -1
  413. package/dist/extraction/schema.js +135 -72
  414. package/dist/extraction/schema.js.map +1 -1
  415. package/dist/extraction/site-extractors/docs-generic.d.ts.map +1 -1
  416. package/dist/extraction/site-extractors/docs-generic.js +81 -91
  417. package/dist/extraction/site-extractors/docs-generic.js.map +1 -1
  418. package/dist/extraction/site-extractors/github.d.ts.map +1 -1
  419. package/dist/extraction/site-extractors/github.js +87 -95
  420. package/dist/extraction/site-extractors/github.js.map +1 -1
  421. package/dist/extraction/site-extractors/mdn.d.ts.map +1 -1
  422. package/dist/extraction/site-extractors/mdn.js +46 -54
  423. package/dist/extraction/site-extractors/mdn.js.map +1 -1
  424. package/dist/extraction/site-extractors/stackoverflow.d.ts.map +1 -1
  425. package/dist/extraction/site-extractors/stackoverflow.js +71 -80
  426. package/dist/extraction/site-extractors/stackoverflow.js.map +1 -1
  427. package/dist/extraction/structured-data.d.ts +4 -0
  428. package/dist/extraction/structured-data.d.ts.map +1 -0
  429. package/dist/extraction/structured-data.js +173 -0
  430. package/dist/extraction/structured-data.js.map +1 -0
  431. package/dist/extraction/structured.d.ts +4 -0
  432. package/dist/extraction/structured.d.ts.map +1 -0
  433. package/dist/extraction/structured.js +163 -0
  434. package/dist/extraction/structured.js.map +1 -0
  435. package/dist/extraction/v1/classifier.d.ts +3 -0
  436. package/dist/extraction/v1/classifier.d.ts.map +1 -0
  437. package/dist/extraction/v1/classifier.js +110 -0
  438. package/dist/extraction/v1/classifier.js.map +1 -0
  439. package/dist/extraction/v1/extract-provider.d.ts +16 -0
  440. package/dist/extraction/v1/extract-provider.d.ts.map +1 -0
  441. package/dist/extraction/v1/extract-provider.js +43 -0
  442. package/dist/extraction/v1/extract-provider.js.map +1 -0
  443. package/dist/extraction/v1/local-llm.d.ts +8 -0
  444. package/dist/extraction/v1/local-llm.d.ts.map +1 -0
  445. package/dist/extraction/v1/local-llm.js +34 -0
  446. package/dist/extraction/v1/local-llm.js.map +1 -0
  447. package/dist/extraction/v1/news.d.ts +3 -0
  448. package/dist/extraction/v1/news.d.ts.map +1 -0
  449. package/dist/extraction/v1/news.js +61 -0
  450. package/dist/extraction/v1/news.js.map +1 -0
  451. package/dist/extraction/v1/product.d.ts +3 -0
  452. package/dist/extraction/v1/product.d.ts.map +1 -0
  453. package/dist/extraction/v1/product.js +166 -0
  454. package/dist/extraction/v1/product.js.map +1 -0
  455. package/dist/extraction/v1/recipe.d.ts +3 -0
  456. package/dist/extraction/v1/recipe.d.ts.map +1 -0
  457. package/dist/extraction/v1/recipe.js +136 -0
  458. package/dist/extraction/v1/recipe.js.map +1 -0
  459. package/dist/extraction/v1/routed.d.ts +17 -0
  460. package/dist/extraction/v1/routed.d.ts.map +1 -0
  461. package/dist/extraction/v1/routed.js +68 -0
  462. package/dist/extraction/v1/routed.js.map +1 -0
  463. package/dist/extraction/v1/schemas/Article.d.ts +11 -0
  464. package/dist/extraction/v1/schemas/Article.d.ts.map +1 -0
  465. package/dist/extraction/v1/schemas/Article.js +23 -0
  466. package/dist/extraction/v1/schemas/Article.js.map +1 -0
  467. package/dist/extraction/v1/schemas/CodeSnippet.d.ts +9 -0
  468. package/dist/extraction/v1/schemas/CodeSnippet.d.ts.map +1 -0
  469. package/dist/extraction/v1/schemas/CodeSnippet.js +90 -0
  470. package/dist/extraction/v1/schemas/CodeSnippet.js.map +1 -0
  471. package/dist/extraction/v1/schemas/EventListing.d.ts +10 -0
  472. package/dist/extraction/v1/schemas/EventListing.d.ts.map +1 -0
  473. package/dist/extraction/v1/schemas/EventListing.js +122 -0
  474. package/dist/extraction/v1/schemas/EventListing.js.map +1 -0
  475. package/dist/extraction/v1/schemas/Paper.d.ts +10 -0
  476. package/dist/extraction/v1/schemas/Paper.d.ts.map +1 -0
  477. package/dist/extraction/v1/schemas/Paper.js +156 -0
  478. package/dist/extraction/v1/schemas/Paper.js.map +1 -0
  479. package/dist/extraction/v1/schemas/Product.d.ts +17 -0
  480. package/dist/extraction/v1/schemas/Product.d.ts.map +1 -0
  481. package/dist/extraction/v1/schemas/Product.js +149 -0
  482. package/dist/extraction/v1/schemas/Product.js.map +1 -0
  483. package/dist/extraction/v1/schemas/Recipe.d.ts +14 -0
  484. package/dist/extraction/v1/schemas/Recipe.d.ts.map +1 -0
  485. package/dist/extraction/v1/schemas/Recipe.js +160 -0
  486. package/dist/extraction/v1/schemas/Recipe.js.map +1 -0
  487. package/dist/extraction/v1/schemas/index.d.ts +13 -0
  488. package/dist/extraction/v1/schemas/index.d.ts.map +1 -0
  489. package/dist/extraction/v1/schemas/index.js +44 -0
  490. package/dist/extraction/v1/schemas/index.js.map +1 -0
  491. package/dist/extraction/v1/site-extractors.d.ts +5 -0
  492. package/dist/extraction/v1/site-extractors.d.ts.map +1 -0
  493. package/dist/extraction/v1/site-extractors.js +31 -0
  494. package/dist/extraction/v1/site-extractors.js.map +1 -0
  495. package/dist/fetch/action-executor.d.ts +28 -0
  496. package/dist/fetch/action-executor.d.ts.map +1 -0
  497. package/dist/fetch/action-executor.js +88 -0
  498. package/dist/fetch/action-executor.js.map +1 -0
  499. package/dist/fetch/auth.d.ts +2 -1
  500. package/dist/fetch/auth.d.ts.map +1 -1
  501. package/dist/fetch/auth.js +56 -26
  502. package/dist/fetch/auth.js.map +1 -1
  503. package/dist/fetch/browser-pool.d.ts +30 -11
  504. package/dist/fetch/browser-pool.d.ts.map +1 -1
  505. package/dist/fetch/browser-pool.js +303 -127
  506. package/dist/fetch/browser-pool.js.map +1 -1
  507. package/dist/fetch/browser-selector.d.ts +17 -0
  508. package/dist/fetch/browser-selector.d.ts.map +1 -0
  509. package/dist/fetch/browser-selector.js +72 -0
  510. package/dist/fetch/browser-selector.js.map +1 -0
  511. package/dist/fetch/browser-types.d.ts +3 -0
  512. package/dist/fetch/browser-types.d.ts.map +1 -0
  513. package/dist/fetch/browser-types.js +45 -0
  514. package/dist/fetch/browser-types.js.map +1 -0
  515. package/dist/fetch/cdp-client.d.ts +9 -0
  516. package/dist/fetch/cdp-client.d.ts.map +1 -0
  517. package/dist/fetch/cdp-client.js +89 -0
  518. package/dist/fetch/cdp-client.js.map +1 -0
  519. package/dist/fetch/content-check.js +39 -46
  520. package/dist/fetch/content-check.js.map +1 -1
  521. package/dist/fetch/error-describe.d.ts +7 -0
  522. package/dist/fetch/error-describe.d.ts.map +1 -0
  523. package/dist/fetch/error-describe.js +37 -0
  524. package/dist/fetch/error-describe.js.map +1 -0
  525. package/dist/fetch/http-client.d.ts +4 -0
  526. package/dist/fetch/http-client.d.ts.map +1 -1
  527. package/dist/fetch/http-client.js +147 -128
  528. package/dist/fetch/http-client.js.map +1 -1
  529. package/dist/fetch/lightpanda.d.ts +28 -0
  530. package/dist/fetch/lightpanda.d.ts.map +1 -0
  531. package/dist/fetch/lightpanda.js +174 -0
  532. package/dist/fetch/lightpanda.js.map +1 -0
  533. package/dist/fetch/playwright-tier.d.ts +19 -0
  534. package/dist/fetch/playwright-tier.d.ts.map +1 -0
  535. package/dist/fetch/playwright-tier.js +76 -0
  536. package/dist/fetch/playwright-tier.js.map +1 -0
  537. package/dist/fetch/router.d.ts +49 -3
  538. package/dist/fetch/router.d.ts.map +1 -1
  539. package/dist/fetch/router.js +187 -81
  540. package/dist/fetch/router.js.map +1 -1
  541. package/dist/index.js +102 -17
  542. package/dist/index.js.map +1 -1
  543. package/dist/instructions.d.ts +31 -0
  544. package/dist/instructions.d.ts.map +1 -0
  545. package/dist/instructions.js +245 -0
  546. package/dist/instructions.js.map +1 -0
  547. package/dist/integrations/cloud/llm/anthropic.d.ts +3 -0
  548. package/dist/integrations/cloud/llm/anthropic.d.ts.map +1 -0
  549. package/dist/integrations/cloud/llm/anthropic.js +41 -0
  550. package/dist/integrations/cloud/llm/anthropic.js.map +1 -0
  551. package/dist/integrations/cloud/llm/cache.d.ts +5 -0
  552. package/dist/integrations/cloud/llm/cache.d.ts.map +1 -0
  553. package/dist/integrations/cloud/llm/cache.js +49 -0
  554. package/dist/integrations/cloud/llm/cache.js.map +1 -0
  555. package/dist/integrations/cloud/llm/gemini.d.ts +3 -0
  556. package/dist/integrations/cloud/llm/gemini.d.ts.map +1 -0
  557. package/dist/integrations/cloud/llm/gemini.js +37 -0
  558. package/dist/integrations/cloud/llm/gemini.js.map +1 -0
  559. package/dist/integrations/cloud/llm/groq.d.ts +3 -0
  560. package/dist/integrations/cloud/llm/groq.d.ts.map +1 -0
  561. package/dist/integrations/cloud/llm/groq.js +74 -0
  562. package/dist/integrations/cloud/llm/groq.js.map +1 -0
  563. package/dist/integrations/cloud/llm/hash.d.ts +3 -0
  564. package/dist/integrations/cloud/llm/hash.d.ts.map +1 -0
  565. package/dist/integrations/cloud/llm/hash.js +26 -0
  566. package/dist/integrations/cloud/llm/hash.js.map +1 -0
  567. package/dist/integrations/cloud/llm/model-select.d.ts +5 -0
  568. package/dist/integrations/cloud/llm/model-select.d.ts.map +1 -0
  569. package/dist/integrations/cloud/llm/model-select.js +32 -0
  570. package/dist/integrations/cloud/llm/model-select.js.map +1 -0
  571. package/dist/integrations/cloud/llm/openai.d.ts +3 -0
  572. package/dist/integrations/cloud/llm/openai.d.ts.map +1 -0
  573. package/dist/integrations/cloud/llm/openai.js +43 -0
  574. package/dist/integrations/cloud/llm/openai.js.map +1 -0
  575. package/dist/integrations/cloud/llm/run.d.ts +27 -0
  576. package/dist/integrations/cloud/llm/run.d.ts.map +1 -0
  577. package/dist/integrations/cloud/llm/run.js +99 -0
  578. package/dist/integrations/cloud/llm/run.js.map +1 -0
  579. package/dist/integrations/cloud/llm/select.d.ts +5 -0
  580. package/dist/integrations/cloud/llm/select.d.ts.map +1 -0
  581. package/dist/integrations/cloud/llm/select.js +30 -0
  582. package/dist/integrations/cloud/llm/select.js.map +1 -0
  583. package/dist/integrations/cloud/llm/text-adapters.d.ts +19 -0
  584. package/dist/integrations/cloud/llm/text-adapters.d.ts.map +1 -0
  585. package/dist/integrations/cloud/llm/text-adapters.js +103 -0
  586. package/dist/integrations/cloud/llm/text-adapters.js.map +1 -0
  587. package/dist/integrations/cloud/llm/types.d.ts +24 -0
  588. package/dist/integrations/cloud/llm/types.d.ts.map +1 -0
  589. package/dist/integrations/cloud/llm/types.js +1 -0
  590. package/dist/integrations/cloud/llm/types.js.map +1 -0
  591. package/dist/integrations/cloud/llm/validate.d.ts +6 -0
  592. package/dist/integrations/cloud/llm/validate.d.ts.map +1 -0
  593. package/dist/integrations/cloud/llm/validate.js +63 -0
  594. package/dist/integrations/cloud/llm/validate.js.map +1 -0
  595. package/dist/logger.d.ts +4 -1
  596. package/dist/logger.d.ts.map +1 -1
  597. package/dist/logger.js +71 -30
  598. package/dist/logger.js.map +1 -1
  599. package/dist/pdf-parse.d.js +1 -0
  600. package/dist/pdf-parse.d.js.map +1 -0
  601. package/dist/plugins/loader.d.ts +20 -0
  602. package/dist/plugins/loader.d.ts.map +1 -0
  603. package/dist/plugins/loader.js +157 -0
  604. package/dist/plugins/loader.js.map +1 -0
  605. package/dist/plugins/registry.d.ts +26 -0
  606. package/dist/plugins/registry.d.ts.map +1 -0
  607. package/dist/plugins/registry.js +71 -0
  608. package/dist/plugins/registry.js.map +1 -0
  609. package/dist/plugins/validate.d.ts +9 -0
  610. package/dist/plugins/validate.d.ts.map +1 -0
  611. package/dist/plugins/validate.js +79 -0
  612. package/dist/plugins/validate.js.map +1 -0
  613. package/dist/providers/embed-provider.d.ts +11 -0
  614. package/dist/providers/embed-provider.d.ts.map +1 -0
  615. package/dist/providers/embed-provider.js +24 -0
  616. package/dist/providers/embed-provider.js.map +1 -0
  617. package/dist/providers/extract-provider.d.ts +23 -0
  618. package/dist/providers/extract-provider.d.ts.map +1 -0
  619. package/dist/providers/extract-provider.js +25 -0
  620. package/dist/providers/extract-provider.js.map +1 -0
  621. package/dist/providers/rerank-provider.d.ts +17 -0
  622. package/dist/providers/rerank-provider.d.ts.map +1 -0
  623. package/dist/providers/rerank-provider.js +41 -0
  624. package/dist/providers/rerank-provider.js.map +1 -0
  625. package/dist/providers/search-provider.d.ts +25 -0
  626. package/dist/providers/search-provider.d.ts.map +1 -0
  627. package/dist/providers/search-provider.js +44 -0
  628. package/dist/providers/search-provider.js.map +1 -0
  629. package/dist/providers/vector-store.d.ts +27 -0
  630. package/dist/providers/vector-store.d.ts.map +1 -0
  631. package/dist/providers/vector-store.js +27 -0
  632. package/dist/providers/vector-store.js.map +1 -0
  633. package/dist/python-env.d.ts +9 -0
  634. package/dist/python-env.d.ts.map +1 -0
  635. package/dist/python-env.js +13 -0
  636. package/dist/python-env.js.map +1 -0
  637. package/dist/repl/commands/agent.d.ts +5 -0
  638. package/dist/repl/commands/agent.d.ts.map +1 -0
  639. package/dist/repl/commands/agent.js +62 -0
  640. package/dist/repl/commands/agent.js.map +1 -0
  641. package/dist/repl/commands/cache.d.ts +4 -0
  642. package/dist/repl/commands/cache.d.ts.map +1 -0
  643. package/dist/repl/commands/cache.js +43 -0
  644. package/dist/repl/commands/cache.js.map +1 -0
  645. package/dist/repl/commands/crawl.d.ts +7 -0
  646. package/dist/repl/commands/crawl.d.ts.map +1 -0
  647. package/dist/repl/commands/crawl.js +44 -0
  648. package/dist/repl/commands/crawl.js.map +1 -0
  649. package/dist/repl/commands/extract.d.ts +5 -0
  650. package/dist/repl/commands/extract.d.ts.map +1 -0
  651. package/dist/repl/commands/extract.js +47 -0
  652. package/dist/repl/commands/extract.js.map +1 -0
  653. package/dist/repl/commands/fetch.d.ts +5 -0
  654. package/dist/repl/commands/fetch.d.ts.map +1 -0
  655. package/dist/repl/commands/fetch.js +67 -0
  656. package/dist/repl/commands/fetch.js.map +1 -0
  657. package/dist/repl/commands/find-similar.d.ts +5 -0
  658. package/dist/repl/commands/find-similar.d.ts.map +1 -0
  659. package/dist/repl/commands/find-similar.js +74 -0
  660. package/dist/repl/commands/find-similar.js.map +1 -0
  661. package/dist/repl/commands/research.d.ts +5 -0
  662. package/dist/repl/commands/research.d.ts.map +1 -0
  663. package/dist/repl/commands/research.js +65 -0
  664. package/dist/repl/commands/research.js.map +1 -0
  665. package/dist/repl/commands/search.d.ts +5 -0
  666. package/dist/repl/commands/search.d.ts.map +1 -0
  667. package/dist/repl/commands/search.js +74 -0
  668. package/dist/repl/commands/search.js.map +1 -0
  669. package/dist/repl/commands/types.d.ts +9 -0
  670. package/dist/repl/commands/types.d.ts.map +1 -0
  671. package/dist/repl/commands/types.js +1 -0
  672. package/dist/repl/commands/types.js.map +1 -0
  673. package/dist/repl/formatters.d.ts +13 -0
  674. package/dist/repl/formatters.d.ts.map +1 -0
  675. package/dist/repl/formatters.js +283 -0
  676. package/dist/repl/formatters.js.map +1 -0
  677. package/dist/repl/parser.d.ts +9 -0
  678. package/dist/repl/parser.d.ts.map +1 -0
  679. package/dist/repl/parser.js +86 -0
  680. package/dist/repl/parser.js.map +1 -0
  681. package/dist/repl/shell.d.ts +8 -0
  682. package/dist/repl/shell.d.ts.map +1 -0
  683. package/dist/repl/shell.js +184 -0
  684. package/dist/repl/shell.js.map +1 -0
  685. package/dist/research/branch-exploration.d.ts +14 -0
  686. package/dist/research/branch-exploration.d.ts.map +1 -0
  687. package/dist/research/branch-exploration.js +100 -0
  688. package/dist/research/branch-exploration.js.map +1 -0
  689. package/dist/research/brief.d.ts +6 -0
  690. package/dist/research/brief.d.ts.map +1 -0
  691. package/dist/research/brief.js +246 -0
  692. package/dist/research/brief.js.map +1 -0
  693. package/dist/research/citation-graph.d.ts +9 -0
  694. package/dist/research/citation-graph.d.ts.map +1 -0
  695. package/dist/research/citation-graph.js +114 -0
  696. package/dist/research/citation-graph.js.map +1 -0
  697. package/dist/research/decompose.d.ts +14 -0
  698. package/dist/research/decompose.d.ts.map +1 -0
  699. package/dist/research/decompose.js +439 -0
  700. package/dist/research/decompose.js.map +1 -0
  701. package/dist/research/pipeline.d.ts +5 -0
  702. package/dist/research/pipeline.d.ts.map +1 -0
  703. package/dist/research/pipeline.js +269 -0
  704. package/dist/research/pipeline.js.map +1 -0
  705. package/dist/research/synthesis-local.d.ts +19 -0
  706. package/dist/research/synthesis-local.d.ts.map +1 -0
  707. package/dist/research/synthesis-local.js +62 -0
  708. package/dist/research/synthesis-local.js.map +1 -0
  709. package/dist/research/synthesize.d.ts +10 -0
  710. package/dist/research/synthesize.d.ts.map +1 -0
  711. package/dist/research/synthesize.js +137 -0
  712. package/dist/research/synthesize.js.map +1 -0
  713. package/dist/search/answer-synthesis.d.ts +33 -0
  714. package/dist/search/answer-synthesis.d.ts.map +1 -0
  715. package/dist/search/answer-synthesis.js +244 -0
  716. package/dist/search/answer-synthesis.js.map +1 -0
  717. package/dist/search/context-formatter.d.ts +3 -0
  718. package/dist/search/context-formatter.d.ts.map +1 -0
  719. package/dist/search/context-formatter.js +56 -0
  720. package/dist/search/context-formatter.js.map +1 -0
  721. package/dist/search/dedup.d.ts +1 -0
  722. package/dist/search/dedup.d.ts.map +1 -1
  723. package/dist/search/dedup.js +40 -32
  724. package/dist/search/dedup.js.map +1 -1
  725. package/dist/search/engines/arxiv.d.ts +7 -0
  726. package/dist/search/engines/arxiv.d.ts.map +1 -0
  727. package/dist/search/engines/arxiv.js +70 -0
  728. package/dist/search/engines/arxiv.js.map +1 -0
  729. package/dist/search/engines/bing-news.d.ts +7 -0
  730. package/dist/search/engines/bing-news.d.ts.map +1 -0
  731. package/dist/search/engines/bing-news.js +97 -0
  732. package/dist/search/engines/bing-news.js.map +1 -0
  733. package/dist/search/engines/bing.d.ts +1 -0
  734. package/dist/search/engines/bing.d.ts.map +1 -1
  735. package/dist/search/engines/bing.js +100 -44
  736. package/dist/search/engines/bing.js.map +1 -1
  737. package/dist/search/engines/devdocs.d.ts +6 -0
  738. package/dist/search/engines/devdocs.d.ts.map +1 -0
  739. package/dist/search/engines/devdocs.js +56 -0
  740. package/dist/search/engines/devdocs.js.map +1 -0
  741. package/dist/search/engines/duckduckgo.d.ts.map +1 -1
  742. package/dist/search/engines/duckduckgo.js +56 -44
  743. package/dist/search/engines/duckduckgo.js.map +1 -1
  744. package/dist/search/engines/github-code.d.ts +7 -0
  745. package/dist/search/engines/github-code.d.ts.map +1 -0
  746. package/dist/search/engines/github-code.js +55 -0
  747. package/dist/search/engines/github-code.js.map +1 -0
  748. package/dist/search/engines/hn-algolia.d.ts +7 -0
  749. package/dist/search/engines/hn-algolia.d.ts.map +1 -0
  750. package/dist/search/engines/hn-algolia.js +76 -0
  751. package/dist/search/engines/hn-algolia.js.map +1 -0
  752. package/dist/search/engines/lobsters.d.ts +7 -0
  753. package/dist/search/engines/lobsters.d.ts.map +1 -0
  754. package/dist/search/engines/lobsters.js +83 -0
  755. package/dist/search/engines/lobsters.js.map +1 -0
  756. package/dist/search/engines/mdn.d.ts +7 -0
  757. package/dist/search/engines/mdn.d.ts.map +1 -0
  758. package/dist/search/engines/mdn.js +48 -0
  759. package/dist/search/engines/mdn.js.map +1 -0
  760. package/dist/search/engines/semantic-scholar.d.ts +7 -0
  761. package/dist/search/engines/semantic-scholar.d.ts.map +1 -0
  762. package/dist/search/engines/semantic-scholar.js +69 -0
  763. package/dist/search/engines/semantic-scholar.js.map +1 -0
  764. package/dist/search/engines/stackoverflow.d.ts +7 -0
  765. package/dist/search/engines/stackoverflow.d.ts.map +1 -0
  766. package/dist/search/engines/stackoverflow.js +73 -0
  767. package/dist/search/engines/stackoverflow.js.map +1 -0
  768. package/dist/search/engines/startpage.d.ts.map +1 -1
  769. package/dist/search/engines/startpage.js +65 -46
  770. package/dist/search/engines/startpage.js.map +1 -1
  771. package/dist/search/evidence.d.ts +25 -0
  772. package/dist/search/evidence.d.ts.map +1 -0
  773. package/dist/search/evidence.js +220 -0
  774. package/dist/search/evidence.js.map +1 -0
  775. package/dist/search/filters.d.ts.map +1 -1
  776. package/dist/search/filters.js +58 -54
  777. package/dist/search/filters.js.map +1 -1
  778. package/dist/search/find-similar/crawl-rank.d.ts +9 -0
  779. package/dist/search/find-similar/crawl-rank.d.ts.map +1 -0
  780. package/dist/search/find-similar/crawl-rank.js +272 -0
  781. package/dist/search/find-similar/crawl-rank.js.map +1 -0
  782. package/dist/search/find-similar/mode.d.ts +4 -0
  783. package/dist/search/find-similar/mode.d.ts.map +1 -0
  784. package/dist/search/find-similar/mode.js +12 -0
  785. package/dist/search/find-similar/mode.js.map +1 -0
  786. package/dist/search/find-similar.d.ts +5 -0
  787. package/dist/search/find-similar.d.ts.map +1 -0
  788. package/dist/search/find-similar.js +509 -0
  789. package/dist/search/find-similar.js.map +1 -0
  790. package/dist/search/highlights.d.ts +19 -0
  791. package/dist/search/highlights.d.ts.map +1 -0
  792. package/dist/search/highlights.js +167 -0
  793. package/dist/search/highlights.js.map +1 -0
  794. package/dist/search/language-filter.d.ts +29 -0
  795. package/dist/search/language-filter.d.ts.map +1 -0
  796. package/dist/search/language-filter.js +126 -0
  797. package/dist/search/language-filter.js.map +1 -0
  798. package/dist/search/legacy/searxng-orchestrator.d.ts +4 -0
  799. package/dist/search/legacy/searxng-orchestrator.d.ts.map +1 -0
  800. package/dist/search/legacy/searxng-orchestrator.js +501 -0
  801. package/dist/search/legacy/searxng-orchestrator.js.map +1 -0
  802. package/dist/search/legacy/searxng-provider.d.ts +7 -0
  803. package/dist/search/legacy/searxng-provider.d.ts.map +1 -0
  804. package/dist/search/legacy/searxng-provider.js +11 -0
  805. package/dist/search/legacy/searxng-provider.js.map +1 -0
  806. package/dist/search/multi-query.d.ts +25 -0
  807. package/dist/search/multi-query.d.ts.map +1 -0
  808. package/dist/search/multi-query.js +228 -0
  809. package/dist/search/multi-query.js.map +1 -0
  810. package/dist/search/query.js +32 -34
  811. package/dist/search/query.js.map +1 -1
  812. package/dist/search/rerank.d.ts +3 -1
  813. package/dist/search/rerank.d.ts.map +1 -1
  814. package/dist/search/rerank.js +44 -35
  815. package/dist/search/rerank.js.map +1 -1
  816. package/dist/search/reranker/authority-boost.d.ts +3 -0
  817. package/dist/search/reranker/authority-boost.d.ts.map +1 -0
  818. package/dist/search/reranker/authority-boost.js +179 -0
  819. package/dist/search/reranker/authority-boost.js.map +1 -0
  820. package/dist/search/reranker/consensus-boost.d.ts +3 -0
  821. package/dist/search/reranker/consensus-boost.d.ts.map +1 -0
  822. package/dist/search/reranker/consensus-boost.js +27 -0
  823. package/dist/search/reranker/consensus-boost.js.map +1 -0
  824. package/dist/search/reranker/recency-boost.d.ts +3 -0
  825. package/dist/search/reranker/recency-boost.d.ts.map +1 -0
  826. package/dist/search/reranker/recency-boost.js +13 -0
  827. package/dist/search/reranker/recency-boost.js.map +1 -0
  828. package/dist/search/reranker/recency.d.ts +3 -0
  829. package/dist/search/reranker/recency.d.ts.map +1 -0
  830. package/dist/search/reranker/recency.js +23 -0
  831. package/dist/search/reranker/recency.js.map +1 -0
  832. package/dist/search/reranker/transformers-rerank-provider.d.ts +13 -0
  833. package/dist/search/reranker/transformers-rerank-provider.d.ts.map +1 -0
  834. package/dist/search/reranker/transformers-rerank-provider.js +94 -0
  835. package/dist/search/reranker/transformers-rerank-provider.js.map +1 -0
  836. package/dist/search/rrf.d.ts +17 -0
  837. package/dist/search/rrf.d.ts.map +1 -0
  838. package/dist/search/rrf.js +39 -0
  839. package/dist/search/rrf.js.map +1 -0
  840. package/dist/search/sampling.d.ts +25 -0
  841. package/dist/search/sampling.d.ts.map +1 -0
  842. package/dist/search/sampling.js +52 -0
  843. package/dist/search/sampling.js.map +1 -0
  844. package/dist/search/searxng.d.ts.map +1 -1
  845. package/dist/search/searxng.js +69 -79
  846. package/dist/search/searxng.js.map +1 -1
  847. package/dist/search/tokens.d.ts +3 -0
  848. package/dist/search/tokens.d.ts.map +1 -0
  849. package/dist/search/tokens.js +39 -0
  850. package/dist/search/tokens.js.map +1 -0
  851. package/dist/search/truncate.d.ts +6 -0
  852. package/dist/search/truncate.d.ts.map +1 -0
  853. package/dist/search/truncate.js +26 -0
  854. package/dist/search/truncate.js.map +1 -0
  855. package/dist/search/url-unwrap.d.ts +3 -0
  856. package/dist/search/url-unwrap.d.ts.map +1 -0
  857. package/dist/search/url-unwrap.js +43 -0
  858. package/dist/search/url-unwrap.js.map +1 -0
  859. package/dist/search/v1/context-rank.d.ts +13 -0
  860. package/dist/search/v1/context-rank.d.ts.map +1 -0
  861. package/dist/search/v1/context-rank.js +74 -0
  862. package/dist/search/v1/context-rank.js.map +1 -0
  863. package/dist/search/v1/engine-base.d.ts +27 -0
  864. package/dist/search/v1/engine-base.d.ts.map +1 -0
  865. package/dist/search/v1/engine-base.js +110 -0
  866. package/dist/search/v1/engine-base.js.map +1 -0
  867. package/dist/search/v1/intent-router.d.ts +22 -0
  868. package/dist/search/v1/intent-router.d.ts.map +1 -0
  869. package/dist/search/v1/intent-router.js +138 -0
  870. package/dist/search/v1/intent-router.js.map +1 -0
  871. package/dist/search/v1/orchestrator.d.ts +24 -0
  872. package/dist/search/v1/orchestrator.d.ts.map +1 -0
  873. package/dist/search/v1/orchestrator.js +163 -0
  874. package/dist/search/v1/orchestrator.js.map +1 -0
  875. package/dist/search/v1/recency-boost.d.ts +9 -0
  876. package/dist/search/v1/recency-boost.d.ts.map +1 -0
  877. package/dist/search/v1/recency-boost.js +37 -0
  878. package/dist/search/v1/recency-boost.js.map +1 -0
  879. package/dist/search/v1/recent-cache-dedup.d.ts +6 -0
  880. package/dist/search/v1/recent-cache-dedup.d.ts.map +1 -0
  881. package/dist/search/v1/recent-cache-dedup.js +85 -0
  882. package/dist/search/v1/recent-cache-dedup.js.map +1 -0
  883. package/dist/search/v1/rss/feed-config.d.ts +21 -0
  884. package/dist/search/v1/rss/feed-config.d.ts.map +1 -0
  885. package/dist/search/v1/rss/feed-config.js +90 -0
  886. package/dist/search/v1/rss/feed-config.js.map +1 -0
  887. package/dist/search/v1/rss/feed-parser.d.ts +14 -0
  888. package/dist/search/v1/rss/feed-parser.d.ts.map +1 -0
  889. package/dist/search/v1/rss/feed-parser.js +104 -0
  890. package/dist/search/v1/rss/feed-parser.js.map +1 -0
  891. package/dist/search/v1/rss/feed-poller.d.ts +22 -0
  892. package/dist/search/v1/rss/feed-poller.d.ts.map +1 -0
  893. package/dist/search/v1/rss/feed-poller.js +102 -0
  894. package/dist/search/v1/rss/feed-poller.js.map +1 -0
  895. package/dist/search/v1/rss/feed-store.d.ts +30 -0
  896. package/dist/search/v1/rss/feed-store.d.ts.map +1 -0
  897. package/dist/search/v1/rss/feed-store.js +134 -0
  898. package/dist/search/v1/rss/feed-store.js.map +1 -0
  899. package/dist/search/v1/rss/rss-engine.d.ts +6 -0
  900. package/dist/search/v1/rss/rss-engine.d.ts.map +1 -0
  901. package/dist/search/v1/rss/rss-engine.js +28 -0
  902. package/dist/search/v1/rss/rss-engine.js.map +1 -0
  903. package/dist/search/v1/v1-provider.d.ts +7 -0
  904. package/dist/search/v1/v1-provider.d.ts.map +1 -0
  905. package/dist/search/v1/v1-provider.js +68 -0
  906. package/dist/search/v1/v1-provider.js.map +1 -0
  907. package/dist/search/v1/verticals/code.d.ts +4 -0
  908. package/dist/search/v1/verticals/code.d.ts.map +1 -0
  909. package/dist/search/v1/verticals/code.js +20 -0
  910. package/dist/search/v1/verticals/code.js.map +1 -0
  911. package/dist/search/v1/verticals/docs.d.ts +4 -0
  912. package/dist/search/v1/verticals/docs.d.ts.map +1 -0
  913. package/dist/search/v1/verticals/docs.js +20 -0
  914. package/dist/search/v1/verticals/docs.js.map +1 -0
  915. package/dist/search/v1/verticals/general.d.ts +4 -0
  916. package/dist/search/v1/verticals/general.d.ts.map +1 -0
  917. package/dist/search/v1/verticals/general.js +22 -0
  918. package/dist/search/v1/verticals/general.js.map +1 -0
  919. package/dist/search/v1/verticals/news.d.ts +10 -0
  920. package/dist/search/v1/verticals/news.d.ts.map +1 -0
  921. package/dist/search/v1/verticals/news.js +52 -0
  922. package/dist/search/v1/verticals/news.js.map +1 -0
  923. package/dist/search/v1/verticals/papers.d.ts +4 -0
  924. package/dist/search/v1/verticals/papers.d.ts.map +1 -0
  925. package/dist/search/v1/verticals/papers.js +23 -0
  926. package/dist/search/v1/verticals/papers.js.map +1 -0
  927. package/dist/search/validator.js +31 -31
  928. package/dist/search/validator.js.map +1 -1
  929. package/dist/searxng/bootstrap.d.ts +30 -0
  930. package/dist/searxng/bootstrap.d.ts.map +1 -1
  931. package/dist/searxng/bootstrap.js +223 -85
  932. package/dist/searxng/bootstrap.js.map +1 -1
  933. package/dist/searxng/docker.d.ts.map +1 -1
  934. package/dist/searxng/docker.js +69 -60
  935. package/dist/searxng/docker.js.map +1 -1
  936. package/dist/searxng/process.d.ts +13 -1
  937. package/dist/searxng/process.d.ts.map +1 -1
  938. package/dist/searxng/process.js +231 -164
  939. package/dist/searxng/process.js.map +1 -1
  940. package/dist/server/backend-status.d.ts +13 -0
  941. package/dist/server/backend-status.d.ts.map +1 -0
  942. package/dist/server/backend-status.js +40 -0
  943. package/dist/server/backend-status.js.map +1 -0
  944. package/dist/server/tool-schemas.d.ts +549 -0
  945. package/dist/server/tool-schemas.d.ts.map +1 -0
  946. package/dist/server/tool-schemas.js +464 -0
  947. package/dist/server/tool-schemas.js.map +1 -0
  948. package/dist/server/warmup-on-start.d.ts +9 -0
  949. package/dist/server/warmup-on-start.d.ts.map +1 -0
  950. package/dist/server/warmup-on-start.js +55 -0
  951. package/dist/server/warmup-on-start.js.map +1 -0
  952. package/dist/server.d.ts +17 -0
  953. package/dist/server.d.ts.map +1 -1
  954. package/dist/server.js +454 -297
  955. package/dist/server.js.map +1 -1
  956. package/dist/tools/agent.d.ts +5 -0
  957. package/dist/tools/agent.d.ts.map +1 -0
  958. package/dist/tools/agent.js +128 -0
  959. package/dist/tools/agent.js.map +1 -0
  960. package/dist/tools/cache.d.ts +2 -1
  961. package/dist/tools/cache.d.ts.map +1 -1
  962. package/dist/tools/cache.js +177 -44
  963. package/dist/tools/cache.js.map +1 -1
  964. package/dist/tools/crawl.d.ts.map +1 -1
  965. package/dist/tools/crawl.js +171 -88
  966. package/dist/tools/crawl.js.map +1 -1
  967. package/dist/tools/extract.d.ts +2 -2
  968. package/dist/tools/extract.d.ts.map +1 -1
  969. package/dist/tools/extract.js +175 -59
  970. package/dist/tools/extract.js.map +1 -1
  971. package/dist/tools/fetch.d.ts +2 -2
  972. package/dist/tools/fetch.d.ts.map +1 -1
  973. package/dist/tools/fetch.js +174 -68
  974. package/dist/tools/fetch.js.map +1 -1
  975. package/dist/tools/find-similar.d.ts +5 -0
  976. package/dist/tools/find-similar.d.ts.map +1 -0
  977. package/dist/tools/find-similar.js +127 -0
  978. package/dist/tools/find-similar.js.map +1 -0
  979. package/dist/tools/research.d.ts +5 -0
  980. package/dist/tools/research.d.ts.map +1 -0
  981. package/dist/tools/research.js +107 -0
  982. package/dist/tools/research.js.map +1 -0
  983. package/dist/tools/search.d.ts +10 -2
  984. package/dist/tools/search.d.ts.map +1 -1
  985. package/dist/tools/search.js +13 -158
  986. package/dist/tools/search.js.map +1 -1
  987. package/dist/types.d.ts +350 -7
  988. package/dist/types.d.ts.map +1 -1
  989. package/dist/types.js +6 -1
  990. package/dist/types.js.map +1 -1
  991. package/dist/util/mode.d.ts +4 -0
  992. package/dist/util/mode.d.ts.map +1 -0
  993. package/dist/util/mode.js +34 -0
  994. package/dist/util/mode.js.map +1 -0
  995. package/package.json +78 -8
  996. package/dist/extraction/trafilatura.d.ts +0 -6
  997. package/dist/extraction/trafilatura.d.ts.map +0 -1
  998. package/dist/extraction/trafilatura.js +0 -105
  999. package/dist/extraction/trafilatura.js.map +0 -1
  1000. package/dist/search/flashrank.d.ts +0 -12
  1001. package/dist/search/flashrank.d.ts.map +0 -1
  1002. package/dist/search/flashrank.js +0 -63
  1003. package/dist/search/flashrank.js.map +0 -1
@@ -0,0 +1,245 @@
1
+ const WIGOLO_INSTRUCTIONS = `Wigolo is a local-first web access layer: search, fetch, crawl, cache, extract, find_similar, research, agent. Results persist in a local knowledge cache across sessions.
2
+
3
+ ## Host-LLM synthesis (read this first)
4
+
5
+ Wigolo returns *structured evidence* \u2014 YOU write the final answer.
6
+
7
+ - \`search\` \u2192 evidence (title/url/excerpt/score/citation_id/source_span) + citations. Quote [N] or {citation_id}.
8
+ - \`format: 'answer'|'stream_answer'\` \u2192 LLM synthesis when sampling supported; else evidence fallback.
9
+ - \`research\` \u2192 \`brief\` with topics/highlights/key_findings/sections; use \`sections.overview.cross_references\` for corroborated findings, \`sections.gaps\` for coverage limits.
10
+ - \`find_similar\` \u2192 \`cold_start\` string when local signals weak. Pass to user verbatim.
11
+ - \`extract mode: "structured"\` \u2192 tables + definitions + jsonld + chart_hints + key_value_pairs in one call.
12
+ - Common knobs: \`max_tokens_out\` caps output (cl100k-base); \`include_full_markdown: true\` restores full body; \`citation_format\`: \`'numbered'\`|\`'json'\`|\`'anthropic_tags'\`.
13
+
14
+ ## When to use which tool
15
+
16
+ - \`search\` \u2014 info on a topic, no URL yet. Pass a string or array of 3-5 keyword variants for breadth.
17
+ - \`fetch\` \u2014 you already have a URL.
18
+ - \`crawl\` \u2014 many pages from one site (docs, wikis). \`strategy: "sitemap"\` is fastest for doc sites; \`"map"\` for URL-only discovery.
19
+ - \`cache\` \u2014 check the local store before going to the network.
20
+ - \`extract\` \u2014 specific data points (tables, metadata, schema-shaped fields) rather than a whole page.
21
+ - \`find_similar\` \u2014 "more like this" given a URL or concept.
22
+ - \`research\` \u2014 multi-step investigation: decomposition, parallel search, synthesis. Set \`depth\` to control thoroughness.
23
+ - \`agent\` \u2014 natural-language data gathering across sources, optional \`schema\` for structured output.
24
+
25
+ ## Scope and freshness
26
+
27
+ - Library/framework/SDK queries: **always pass \`include_domains\`** with the official site (e.g. \`["react.dev", "nextjs.org"]\`). Unscoped queries return noise. Skip scoping for error strings, news, and broad exploration.
28
+ - News, prices, status, release notes \u2192 \`force_refresh: true\` to bypass cache. Docs and reference pages \u2192 let the cache work.
29
+
30
+ For routing tables, performance budgets, auth flows, and other usage detail, read the resource \`wigolo://docs/usage\`.`;
31
+ const WIGOLO_INSTRUCTIONS_FULL = `# Wigolo Usage Guide
32
+
33
+ Wigolo is a local-first web access layer: search the open web, fetch pages, crawl sites, extract structured data, find related content, run multi-step research, and execute agent-driven data gathering. All results land in a local knowledge cache that persists across sessions.
34
+
35
+ ## Host-LLM synthesis pattern (read this first)
36
+
37
+ Wigolo has no internal LLM. It returns *structured evidence* so YOU (the host LLM) write the final answer. Fold structure into your reply:
38
+
39
+ - \`search\` \u2192 evidence (title/url/section_heading/excerpt/score/citation_id/source_span) + citations. Quote [N] or {citation_id}.
40
+ - \`format: 'answer'|'stream_answer'\` \u2192 LLM synthesis when sampling supported; else evidence fallback.
41
+ - \`max_tokens_out\` caps total output (cl100k-base, ~5-15% drift on non-OpenAI). \`include_full_markdown: true\` restores full body. \`citation_format\`: \`'numbered'\`|\`'json'\`|\`'anthropic_tags'\`.
42
+ - \`research\` \u2192 \`brief\` with \`topics\`, \`highlights\`, \`key_findings\`, \`sections\` when sampling unavailable. Use \`sections.overview.cross_references\` for corroborated findings, \`sections.gaps\` for coverage limits, \`sections.comparison\` for entity-vs-entity analysis. \`query_type\` indicates decomposition strategy used.
43
+ - \`find_similar\` \u2192 \`cold_start\` string when local signals are weak. Pass to user verbatim.
44
+ - \`extract\` \`mode: "structured"\` \u2192 tables + definitions + jsonld + chart_hints + key_value_pairs in one call.
45
+ - \`fetch\` metadata \u2192 \`og_type\`, \`canonical_url\`, \`og_image\` when present.
46
+
47
+ ## When to use which tool
48
+
49
+ - \`search\` -- you need information on a topic but do not have a URL yet. Pass a query string or an array of 3-5 semantically varied keyword forms for broader coverage.
50
+ - \`fetch\` -- you already have a specific URL to read.
51
+ - \`crawl\` -- you need multiple pages from the same site (docs, wikis, references).
52
+ - \`cache\` -- you want to know if the content is already on disk from an earlier read.
53
+ - \`extract\` -- you need specific data points (tables, metadata, schema-shaped fields) rather than a whole page as markdown.
54
+ - \`find_similar\` -- you have a URL or concept and want related content from the cache or web. Useful for "more like this" discovery.
55
+ - \`research\` -- you have a complex question that needs multi-step investigation: question decomposition, parallel search, source synthesis into a report. Set \`depth\` to control thoroughness.
56
+ - \`agent\` -- you need to gather structured or unstructured data from multiple sources based on a natural-language prompt. Provides full step transparency.
57
+
58
+ ## Routing by intent
59
+
60
+ | Intent | Tool | Key parameters |
61
+ |--------|------|----------------|
62
+ | Documentation lookup | \`search\` | \`include_domains: ["react.dev", "nextjs.org"]\` -- scope to the project's official site, do not rely on \`category: "docs"\` alone |
63
+ | Error debugging | \`search\` | exact error string as query, \`category: "code"\` (no domain scoping -- errors appear everywhere) |
64
+ | Library research | \`crawl\` | seed URL of docs site, \`strategy: "sitemap"\`, then \`cache\` for later queries |
65
+ | Related content | \`find_similar\` | \`url\` of a known good page, or \`concept\` as free text |
66
+ | Evidence excerpt | \`search\` | default output; cite [N] or {citation_id} from each evidence item |
67
+ | Direct answer | \`search\` | \`format: "answer"\` if client supports sampling, else falls back to evidence |
68
+ | Comprehensive research | \`research\` | \`depth: "comprehensive"\`, optional \`include_domains\` to scope |
69
+ | Data gathering | \`agent\` | natural-language \`prompt\`, optional \`schema\` for structured output |
70
+ | Structured extraction | \`extract\` | \`mode: "structured"\` (tables + dl + JSON-LD + chart hints + kv pairs), or \`mode: "schema"\` with a JSON Schema |
71
+ | Site inventory | \`crawl\` | \`strategy: "map"\` for URL-only discovery, no content fetched |
72
+
73
+ ## Rapidly changing content
74
+
75
+ For news, prices, status pages, or release notes, bypass the cache with \`force_refresh: true\`:
76
+
77
+ search({ query: "...", force_refresh: true })
78
+ fetch({ url: "...", force_refresh: true })
79
+
80
+ For docs, tutorials, and reference pages, let the cache work -- much faster.
81
+
82
+ ## Check the cache before going to the network
83
+
84
+ Before every \`search\` or \`fetch\`, consider a \`cache\` call. Pages read this session or earlier return instantly with full markdown -- no network. \`research\` and \`agent\` check the cache internally.
85
+
86
+ ## Multi-query search strategy
87
+
88
+ For broad queries, pass an array of 3-5 semantically varied keyword forms rather than one natural-language question. Example: instead of "how does React handle state management", pass \`["react state management", "useState useReducer", "react hooks state", "react context vs redux"]\`. Sub-queries are deduplicated automatically.
89
+
90
+ ## Pick the right strategy
91
+
92
+ - For docs sites, prefer \`crawl\` with \`strategy: "sitemap"\` -- faster and more complete than BFS.
93
+ - For URL discovery only, use \`crawl\` with \`strategy: "map"\` -- URLs only, no content. Follow with targeted \`fetch\` calls.
94
+ - For structured data (prices, specs, table rows), use \`extract\` with \`mode: "schema"\` or \`mode: "tables"\`. Use \`fetch\` only when you want the whole page as markdown.
95
+ - For multi-source synthesis, use \`research\` instead of chaining \`search\` + \`fetch\` manually.
96
+ - For natural-language data gathering, use \`agent\` with optional \`schema\`.
97
+ - \`crawl\` accepts regex \`include_patterns\` and \`exclude_patterns\` to stay inside a section of a large site.
98
+
99
+ ## Scope searches by domain
100
+
101
+ For library/framework/SDK queries, **always pass \`include_domains\`** with official sites. Unscoped queries return generic noise. \`category: "docs"\` alone returns generic portals -- pair with \`include_domains\` or omit. Skip domain scoping for error strings, broad exploration, and news.
102
+
103
+ ## Performance
104
+
105
+ - \`max_results: 3\` for focused lookups; \`5\` default; \`10+\` only for broad research.
106
+ - \`max_tokens_out\` caps total response size (cl100k-base BPE); prefer this over \`max_chars\` for budget-aware agents. When both are set, \`max_tokens_out\` wins.
107
+ - \`max_content_chars: 3000\` remains a legitimate per-page budget \u2014 smart-truncates each result's markdown at a paragraph/heading boundary with a \`[... content truncated]\` marker.
108
+ - \`fetch\` with \`section: "Heading Name"\` returns content under that heading -- cheaper than the whole page.
109
+ - Repeated fetches of the same URL are free (local cache).
110
+ - \`research\` with \`depth: "quick"\` (~15s) suits most factual questions; reserve \`"comprehensive"\` for deep investigation.
111
+ - \`agent\` respects \`max_pages\` (default 10) and \`max_time_ms\` (default 60s).
112
+
113
+ ## Extras
114
+
115
+ - Localhost URLs (\`localhost:3000\`, \`127.0.0.1:8080\`) work for local dev servers.
116
+ - \`use_auth: true\` on \`fetch\`/\`crawl\` reuses browser session for logged-in pages.
117
+ - \`cache\` supports full-text search syntax (\`AND\`, \`OR\`, \`NOT\`, \`"phrase"\`).
118
+ - \`research\`/\`agent\` use MCP sampling when supported; fall back to structured data for host-LLM synthesis.`;
119
+ const WIGOLO_DOCS_URI = "wigolo://docs/usage";
120
+ const TOOL_DESCRIPTIONS = {
121
+ fetch: `Fetch a single URL and return clean markdown. Use when you have a specific URL to read. Automatically detects if JavaScript rendering is needed.
122
+
123
+ Key parameters:
124
+ - section: extract content under a specific heading (e.g., section: "API Reference") -- faster than reading the whole page
125
+ - max_content_chars: smart-truncate markdown at a paragraph/heading boundary with a \`[... content truncated]\` marker (e.g., 3000 for compact context). Preferred over max_chars for AI agents.
126
+ - max_tokens_out: token-budget cap on total output (cl100k-base BPE). Takes precedence over max_chars when both are set.
127
+ - include_full_markdown: default false. Set true to include the full markdown body in addition to evidence excerpts.
128
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
129
+ - use_auth: true to use stored browser session for authenticated/private pages
130
+ - render_js: "auto" (default, detects JS need), "always" (force browser), "never" (HTTP only, fastest)
131
+ - headers: custom HTTP headers if needed
132
+ - force_refresh: true to bypass cache and fetch fresh content from the network
133
+ - mode: 'cache' | 'default' (default) | 'stealth'. cache=HTTP-only, accepts stale cache up to 24h. stealth=full browser render + freshness.
134
+
135
+ Returns title, markdown, links, images, metadata (og_image, og_type, canonical_url, keywords). Cached locally; repeat fetches are instant. Localhost URLs work.`,
136
+ search: `Search the web and return scored evidence excerpts (title/url/section_heading/excerpt/score/citation_id/source_span) plus citations. Default shape is evidence-only \u2014 no full markdown body.
137
+
138
+ Key parameters:
139
+ - query: string or string[] array (3-5 keyword variants; deduplicated automatically)
140
+ - include_domains/exclude_domains: scope to specific sites. ALWAYS scope library/framework queries.
141
+ - category: "general" | "news" | "code" | "docs" | "papers" \u2014 coarse filter, pair with include_domains.
142
+ - from_date/to_date: ISO YYYY-MM-DD for time-bounded queries
143
+ - max_results: default 5; use 3 for focused, 10+ for research
144
+ - format: omit for default evidence shape. 'answer'/'stream_answer' = sampling synthesis (falls back to evidence). Retired values 'full'/'context'/'highlights' reject with a migration error.
145
+ - max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).
146
+ - include_full_markdown: true to restore full markdown body alongside evidence (default false).
147
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
148
+ - max_content_chars: smart-truncate per-page markdown at paragraph boundary (e.g., 3000)
149
+ - force_refresh: true to bypass all caches
150
+ - mode: 'cache' | 'default' (default) | 'stealth'. cache=single-engine, no rerank, 24h-stale cache. stealth=multi-query expansion + full-body top-K.
151
+
152
+ Quote [N] or {citation_id} from the evidence list.`,
153
+ crawl: `Crawl a website starting from a URL and return content from multiple pages. Use for indexing documentation sites, wikis, or any multi-page resource.
154
+
155
+ Key parameters:
156
+ - strategy: "bfs" (breadth-first, default), "dfs" (depth-first), "sitemap" (use sitemap.xml -- fastest for doc sites), "map" (URL discovery only, no content -- fastest for scoping a site)
157
+ - max_depth: how many links deep to follow (default 2)
158
+ - max_pages: maximum pages to fetch (default 20)
159
+ - include_patterns/exclude_patterns: regex filters on URLs
160
+ - max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).
161
+ - include_full_markdown: default false \u2014 pages return evidence excerpts; set true for full bodies.
162
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
163
+
164
+ Returns an array of pages with title, evidence, and depth. Content is deduplicated across pages. All pages are cached for later cache queries.`,
165
+ cache: `Search previously fetched content without hitting the network. Use before searching the web -- if relevant content was already fetched or crawled, this returns it instantly.
166
+
167
+ Key parameters:
168
+ - query: full-text search over cached markdown and titles (supports AND, OR, NOT, "phrase match")
169
+ - url_pattern: glob filter on URLs (e.g., "*example.com*")
170
+ - since: ISO date -- only results cached after this date
171
+ - stats: true to get cache size, entry count, oldest/newest dates
172
+ - clear: true to delete matching entries
173
+
174
+ Returns matching cached pages with full markdown content. Cache persists across sessions locally.`,
175
+ extract: `Extract structured data from a URL or raw HTML. Use when you need specific data points, tables, or metadata rather than full page markdown.
176
+
177
+ Key parameters:
178
+ - mode: "selector" (CSS selector -> text), "tables" (HTML tables only), "metadata" (title/author/date/description/og_* + JSON-LD), "schema" (JSON Schema -> heuristic field extraction), "structured" (ONE-SHOT: tables + <dl> definitions + JSON-LD + chart hints from SVG/figure + microdata/data-attr/grid key-value pairs)
179
+ - css_selector: required for mode="selector" -- any valid CSS selector
180
+ - schema: for mode="schema", a JSON Schema object describing the fields to extract
181
+ - multiple: true to return array of all matches (mode="selector" only)
182
+
183
+ Prefer mode="structured" over chaining multiple extract calls \u2014 it returns every structured pattern on the page in one response:
184
+ { tables, definitions, jsonld, chart_hints, key_value_pairs }
185
+
186
+ chart_hints surfaces SVG titles, aria-labels, and figcaptions \u2014 host LLMs use these to describe data visualizations even when the underlying data is rendered by JavaScript.
187
+
188
+ For mode="tables", returns array of table objects with headers and row data. For mode="schema", pass { price: "string", name: "string" } and get structured fields extracted from the page.`,
189
+ find_similar: `Find content related to a URL or concept. Use when you have a known-good page or topic and want to discover similar resources from the cache or web.
190
+
191
+ Key parameters:
192
+ - url: a URL to find content similar to. The page's content and embeddings are used for similarity matching.
193
+ - concept: free-text description of what you want similar content for. Use when you do not have a specific URL.
194
+ - max_results: number of similar items to return (default 5)
195
+ - include_cached: true (default) to search the local cache first, false to skip cache and search the web only
196
+ - threshold: minimum similarity score (0-1, default 0.5)
197
+ - max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).
198
+ - include_full_markdown: default false \u2014 results return evidence excerpts; set true for full bodies.
199
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
200
+
201
+ Provide either url or concept. Results fuse three signals via 3-way RRF: keyword match, semantic embeddings, and (if local hits sparse) live web search. Each result carries \`match_signals\` with \`embedding_rank\`, \`fts5_rank\`, and \`fused_score\`.
202
+
203
+ The response may include a \`cold_start\` string when local signals are weak. Pass this verbatim to the user.
204
+
205
+ Returns results array, method used ("hybrid" | "embedding" | "fts5" | "search"), cache_hits, search_hits, embedding_available, and total_time_ms.`,
206
+ research: `Run multi-step research on a complex question. Decomposes the question into sub-queries, searches in parallel, fetches top sources, and synthesizes a report with citations.
207
+
208
+ Key parameters:
209
+ - question: the research question to investigate
210
+ - depth: "quick" (~15s, 2 sub-queries, 5-8 sources), "standard" (~40s, 4 sub-queries, 10-15 sources, default), "comprehensive" (~80s, 7 sub-queries, 20-25 sources)
211
+ - max_sources: override the default source count for the chosen depth
212
+ - include_domains/exclude_domains: scope research to specific sites
213
+ - schema: optional JSON Schema -- structures the report to extract matching fields
214
+ - stream: true to receive progress notifications as each phase completes
215
+ - max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).
216
+ - include_full_markdown: default false \u2014 sources return evidence excerpts; set true for full bodies.
217
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
218
+
219
+ Returns report (markdown with [N] citations), citations array, sources, sub_queries, depth, total_time_ms, sampling_supported, and brief (topics, highlights, key_findings, sections.overview/comparison/gaps).`,
220
+ agent: `Execute a natural-language data gathering task. Plans search queries and URLs from a prompt, executes them in parallel, and synthesizes results. Full step transparency.
221
+
222
+ Key parameters:
223
+ - prompt: natural-language description of what data to gather (e.g., "find pricing for the top 5 CRM tools")
224
+ - urls: optional array of specific URLs to include in the gathering
225
+ - schema: optional JSON Schema -- if provided, extracts structured data matching the schema from each page and merges results
226
+ - max_pages: maximum pages to fetch (default 10)
227
+ - max_time_ms: maximum execution time in milliseconds (default 60000)
228
+ - stream: true to receive progress notifications as each step completes
229
+ - max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).
230
+ - include_full_markdown: default false \u2014 pages return evidence excerpts; set true for full bodies.
231
+ - citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.
232
+
233
+ Pipeline: (1) plan, (2) execute search+fetch in parallel within budget, (3) optional schema extraction, (4) synthesize. The steps array exposes every action with timing.
234
+
235
+ Uses MCP requestSampling for planning and synthesis. Without sampling support, uses keyword extraction.
236
+
237
+ Returns result, sources array, pages_fetched count, steps array, total_time_ms, sampling_supported.`
238
+ };
239
+ export {
240
+ TOOL_DESCRIPTIONS,
241
+ WIGOLO_DOCS_URI,
242
+ WIGOLO_INSTRUCTIONS,
243
+ WIGOLO_INSTRUCTIONS_FULL
244
+ };
245
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/instructions.ts"],"sourcesContent":["/**\n * LLM knowledge layer for wigolo.\n *\n * Two layers. They do different jobs and must not repeat each other:\n *\n * Layer 1 — WIGOLO_INSTRUCTIONS: server-level STRATEGY. Injected into the\n * LLM system prompt once per session by compatible MCP clients. Answers\n * \"when do I reach for wigolo? which of its tools fits this situation?\".\n *\n * Layer 2 — TOOL_DESCRIPTIONS: per-tool TACTICS. Seen every time the LLM is\n * picking a tool. Answers \"what does this tool do, which parameters matter,\n * what does the output look like?\".\n *\n * Parameter schemas (types, enums, required/optional) belong on the JSON\n * Schema, not here. Installation/configuration is for humans, not LLMs.\n */\n\n// Short server-level strategy injected into the LLM system prompt each\n// initialize. ~2KB. Anything that's \"good to know but rarely changes the\n// call\" lives in WIGOLO_INSTRUCTIONS_FULL, surfaced via the wigolo://docs\n// resource so clients can pull it on demand without paying the cost on\n// every session.\nexport const WIGOLO_INSTRUCTIONS = `Wigolo is a local-first web access layer: search, fetch, crawl, cache, extract, find_similar, research, agent. Results persist in a local knowledge cache across sessions.\n\n## Host-LLM synthesis (read this first)\n\nWigolo returns *structured evidence* — YOU write the final answer.\n\n- \\`search\\` → evidence (title/url/excerpt/score/citation_id/source_span) + citations. Quote [N] or {citation_id}.\n- \\`format: 'answer'|'stream_answer'\\` → LLM synthesis when sampling supported; else evidence fallback.\n- \\`research\\` → \\`brief\\` with topics/highlights/key_findings/sections; use \\`sections.overview.cross_references\\` for corroborated findings, \\`sections.gaps\\` for coverage limits.\n- \\`find_similar\\` → \\`cold_start\\` string when local signals weak. Pass to user verbatim.\n- \\`extract mode: \"structured\"\\` → tables + definitions + jsonld + chart_hints + key_value_pairs in one call.\n- Common knobs: \\`max_tokens_out\\` caps output (cl100k-base); \\`include_full_markdown: true\\` restores full body; \\`citation_format\\`: \\`'numbered'\\`|\\`'json'\\`|\\`'anthropic_tags'\\`.\n\n## When to use which tool\n\n- \\`search\\` — info on a topic, no URL yet. Pass a string or array of 3-5 keyword variants for breadth.\n- \\`fetch\\` — you already have a URL.\n- \\`crawl\\` — many pages from one site (docs, wikis). \\`strategy: \"sitemap\"\\` is fastest for doc sites; \\`\"map\"\\` for URL-only discovery.\n- \\`cache\\` — check the local store before going to the network.\n- \\`extract\\` — specific data points (tables, metadata, schema-shaped fields) rather than a whole page.\n- \\`find_similar\\` — \"more like this\" given a URL or concept.\n- \\`research\\` — multi-step investigation: decomposition, parallel search, synthesis. Set \\`depth\\` to control thoroughness.\n- \\`agent\\` — natural-language data gathering across sources, optional \\`schema\\` for structured output.\n\n## Scope and freshness\n\n- Library/framework/SDK queries: **always pass \\`include_domains\\`** with the official site (e.g. \\`[\"react.dev\", \"nextjs.org\"]\\`). Unscoped queries return noise. Skip scoping for error strings, news, and broad exploration.\n- News, prices, status, release notes → \\`force_refresh: true\\` to bypass cache. Docs and reference pages → let the cache work.\n\nFor routing tables, performance budgets, auth flows, and other usage detail, read the resource \\`wigolo://docs/usage\\`.`;\n\n// Full usage guide. Surfaced via the wigolo://docs/usage resource so MCP\n// clients can pull it on demand without paying the per-initialize cost.\nexport const WIGOLO_INSTRUCTIONS_FULL = `# Wigolo Usage Guide\n\nWigolo is a local-first web access layer: search the open web, fetch pages, crawl sites, extract structured data, find related content, run multi-step research, and execute agent-driven data gathering. All results land in a local knowledge cache that persists across sessions.\n\n## Host-LLM synthesis pattern (read this first)\n\nWigolo has no internal LLM. It returns *structured evidence* so YOU (the host LLM) write the final answer. Fold structure into your reply:\n\n- \\`search\\` → evidence (title/url/section_heading/excerpt/score/citation_id/source_span) + citations. Quote [N] or {citation_id}.\n- \\`format: 'answer'|'stream_answer'\\` → LLM synthesis when sampling supported; else evidence fallback.\n- \\`max_tokens_out\\` caps total output (cl100k-base, ~5-15% drift on non-OpenAI). \\`include_full_markdown: true\\` restores full body. \\`citation_format\\`: \\`'numbered'\\`|\\`'json'\\`|\\`'anthropic_tags'\\`.\n- \\`research\\` → \\`brief\\` with \\`topics\\`, \\`highlights\\`, \\`key_findings\\`, \\`sections\\` when sampling unavailable. Use \\`sections.overview.cross_references\\` for corroborated findings, \\`sections.gaps\\` for coverage limits, \\`sections.comparison\\` for entity-vs-entity analysis. \\`query_type\\` indicates decomposition strategy used.\n- \\`find_similar\\` → \\`cold_start\\` string when local signals are weak. Pass to user verbatim.\n- \\`extract\\` \\`mode: \"structured\"\\` → tables + definitions + jsonld + chart_hints + key_value_pairs in one call.\n- \\`fetch\\` metadata → \\`og_type\\`, \\`canonical_url\\`, \\`og_image\\` when present.\n\n## When to use which tool\n\n- \\`search\\` -- you need information on a topic but do not have a URL yet. Pass a query string or an array of 3-5 semantically varied keyword forms for broader coverage.\n- \\`fetch\\` -- you already have a specific URL to read.\n- \\`crawl\\` -- you need multiple pages from the same site (docs, wikis, references).\n- \\`cache\\` -- you want to know if the content is already on disk from an earlier read.\n- \\`extract\\` -- you need specific data points (tables, metadata, schema-shaped fields) rather than a whole page as markdown.\n- \\`find_similar\\` -- you have a URL or concept and want related content from the cache or web. Useful for \"more like this\" discovery.\n- \\`research\\` -- you have a complex question that needs multi-step investigation: question decomposition, parallel search, source synthesis into a report. Set \\`depth\\` to control thoroughness.\n- \\`agent\\` -- you need to gather structured or unstructured data from multiple sources based on a natural-language prompt. Provides full step transparency.\n\n## Routing by intent\n\n| Intent | Tool | Key parameters |\n|--------|------|----------------|\n| Documentation lookup | \\`search\\` | \\`include_domains: [\"react.dev\", \"nextjs.org\"]\\` -- scope to the project's official site, do not rely on \\`category: \"docs\"\\` alone |\n| Error debugging | \\`search\\` | exact error string as query, \\`category: \"code\"\\` (no domain scoping -- errors appear everywhere) |\n| Library research | \\`crawl\\` | seed URL of docs site, \\`strategy: \"sitemap\"\\`, then \\`cache\\` for later queries |\n| Related content | \\`find_similar\\` | \\`url\\` of a known good page, or \\`concept\\` as free text |\n| Evidence excerpt | \\`search\\` | default output; cite [N] or {citation_id} from each evidence item |\n| Direct answer | \\`search\\` | \\`format: \"answer\"\\` if client supports sampling, else falls back to evidence |\n| Comprehensive research | \\`research\\` | \\`depth: \"comprehensive\"\\`, optional \\`include_domains\\` to scope |\n| Data gathering | \\`agent\\` | natural-language \\`prompt\\`, optional \\`schema\\` for structured output |\n| Structured extraction | \\`extract\\` | \\`mode: \"structured\"\\` (tables + dl + JSON-LD + chart hints + kv pairs), or \\`mode: \"schema\"\\` with a JSON Schema |\n| Site inventory | \\`crawl\\` | \\`strategy: \"map\"\\` for URL-only discovery, no content fetched |\n\n## Rapidly changing content\n\nFor news, prices, status pages, or release notes, bypass the cache with \\`force_refresh: true\\`:\n\n search({ query: \"...\", force_refresh: true })\n fetch({ url: \"...\", force_refresh: true })\n\nFor docs, tutorials, and reference pages, let the cache work -- much faster.\n\n## Check the cache before going to the network\n\nBefore every \\`search\\` or \\`fetch\\`, consider a \\`cache\\` call. Pages read this session or earlier return instantly with full markdown -- no network. \\`research\\` and \\`agent\\` check the cache internally.\n\n## Multi-query search strategy\n\nFor broad queries, pass an array of 3-5 semantically varied keyword forms rather than one natural-language question. Example: instead of \"how does React handle state management\", pass \\`[\"react state management\", \"useState useReducer\", \"react hooks state\", \"react context vs redux\"]\\`. Sub-queries are deduplicated automatically.\n\n## Pick the right strategy\n\n- For docs sites, prefer \\`crawl\\` with \\`strategy: \"sitemap\"\\` -- faster and more complete than BFS.\n- For URL discovery only, use \\`crawl\\` with \\`strategy: \"map\"\\` -- URLs only, no content. Follow with targeted \\`fetch\\` calls.\n- For structured data (prices, specs, table rows), use \\`extract\\` with \\`mode: \"schema\"\\` or \\`mode: \"tables\"\\`. Use \\`fetch\\` only when you want the whole page as markdown.\n- For multi-source synthesis, use \\`research\\` instead of chaining \\`search\\` + \\`fetch\\` manually.\n- For natural-language data gathering, use \\`agent\\` with optional \\`schema\\`.\n- \\`crawl\\` accepts regex \\`include_patterns\\` and \\`exclude_patterns\\` to stay inside a section of a large site.\n\n## Scope searches by domain\n\nFor library/framework/SDK queries, **always pass \\`include_domains\\`** with official sites. Unscoped queries return generic noise. \\`category: \"docs\"\\` alone returns generic portals -- pair with \\`include_domains\\` or omit. Skip domain scoping for error strings, broad exploration, and news.\n\n## Performance\n\n- \\`max_results: 3\\` for focused lookups; \\`5\\` default; \\`10+\\` only for broad research.\n- \\`max_tokens_out\\` caps total response size (cl100k-base BPE); prefer this over \\`max_chars\\` for budget-aware agents. When both are set, \\`max_tokens_out\\` wins.\n- \\`max_content_chars: 3000\\` remains a legitimate per-page budget — smart-truncates each result's markdown at a paragraph/heading boundary with a \\`[... content truncated]\\` marker.\n- \\`fetch\\` with \\`section: \"Heading Name\"\\` returns content under that heading -- cheaper than the whole page.\n- Repeated fetches of the same URL are free (local cache).\n- \\`research\\` with \\`depth: \"quick\"\\` (~15s) suits most factual questions; reserve \\`\"comprehensive\"\\` for deep investigation.\n- \\`agent\\` respects \\`max_pages\\` (default 10) and \\`max_time_ms\\` (default 60s).\n\n## Extras\n\n- Localhost URLs (\\`localhost:3000\\`, \\`127.0.0.1:8080\\`) work for local dev servers.\n- \\`use_auth: true\\` on \\`fetch\\`/\\`crawl\\` reuses browser session for logged-in pages.\n- \\`cache\\` supports full-text search syntax (\\`AND\\`, \\`OR\\`, \\`NOT\\`, \\`\"phrase\"\\`).\n- \\`research\\`/\\`agent\\` use MCP sampling when supported; fall back to structured data for host-LLM synthesis.`;\n\nexport const WIGOLO_DOCS_URI = 'wigolo://docs/usage';\n\nexport const TOOL_DESCRIPTIONS = {\n fetch: `Fetch a single URL and return clean markdown. Use when you have a specific URL to read. Automatically detects if JavaScript rendering is needed.\n\nKey parameters:\n- section: extract content under a specific heading (e.g., section: \"API Reference\") -- faster than reading the whole page\n- max_content_chars: smart-truncate markdown at a paragraph/heading boundary with a \\`[... content truncated]\\` marker (e.g., 3000 for compact context). Preferred over max_chars for AI agents.\n- max_tokens_out: token-budget cap on total output (cl100k-base BPE). Takes precedence over max_chars when both are set.\n- include_full_markdown: default false. Set true to include the full markdown body in addition to evidence excerpts.\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n- use_auth: true to use stored browser session for authenticated/private pages\n- render_js: \"auto\" (default, detects JS need), \"always\" (force browser), \"never\" (HTTP only, fastest)\n- headers: custom HTTP headers if needed\n- force_refresh: true to bypass cache and fetch fresh content from the network\n- mode: 'cache' | 'default' (default) | 'stealth'. cache=HTTP-only, accepts stale cache up to 24h. stealth=full browser render + freshness.\n\nReturns title, markdown, links, images, metadata (og_image, og_type, canonical_url, keywords). Cached locally; repeat fetches are instant. Localhost URLs work.`,\n\n search: `Search the web and return scored evidence excerpts (title/url/section_heading/excerpt/score/citation_id/source_span) plus citations. Default shape is evidence-only — no full markdown body.\n\nKey parameters:\n- query: string or string[] array (3-5 keyword variants; deduplicated automatically)\n- include_domains/exclude_domains: scope to specific sites. ALWAYS scope library/framework queries.\n- category: \"general\" | \"news\" | \"code\" | \"docs\" | \"papers\" — coarse filter, pair with include_domains.\n- from_date/to_date: ISO YYYY-MM-DD for time-bounded queries\n- max_results: default 5; use 3 for focused, 10+ for research\n- format: omit for default evidence shape. 'answer'/'stream_answer' = sampling synthesis (falls back to evidence). Retired values 'full'/'context'/'highlights' reject with a migration error.\n- max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).\n- include_full_markdown: true to restore full markdown body alongside evidence (default false).\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n- max_content_chars: smart-truncate per-page markdown at paragraph boundary (e.g., 3000)\n- force_refresh: true to bypass all caches\n- mode: 'cache' | 'default' (default) | 'stealth'. cache=single-engine, no rerank, 24h-stale cache. stealth=multi-query expansion + full-body top-K.\n\nQuote [N] or {citation_id} from the evidence list.`,\n\n crawl: `Crawl a website starting from a URL and return content from multiple pages. Use for indexing documentation sites, wikis, or any multi-page resource.\n\nKey parameters:\n- strategy: \"bfs\" (breadth-first, default), \"dfs\" (depth-first), \"sitemap\" (use sitemap.xml -- fastest for doc sites), \"map\" (URL discovery only, no content -- fastest for scoping a site)\n- max_depth: how many links deep to follow (default 2)\n- max_pages: maximum pages to fetch (default 20)\n- include_patterns/exclude_patterns: regex filters on URLs\n- max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).\n- include_full_markdown: default false — pages return evidence excerpts; set true for full bodies.\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n\nReturns an array of pages with title, evidence, and depth. Content is deduplicated across pages. All pages are cached for later cache queries.`,\n\n cache: `Search previously fetched content without hitting the network. Use before searching the web -- if relevant content was already fetched or crawled, this returns it instantly.\n\nKey parameters:\n- query: full-text search over cached markdown and titles (supports AND, OR, NOT, \"phrase match\")\n- url_pattern: glob filter on URLs (e.g., \"*example.com*\")\n- since: ISO date -- only results cached after this date\n- stats: true to get cache size, entry count, oldest/newest dates\n- clear: true to delete matching entries\n\nReturns matching cached pages with full markdown content. Cache persists across sessions locally.`,\n\n extract: `Extract structured data from a URL or raw HTML. Use when you need specific data points, tables, or metadata rather than full page markdown.\n\nKey parameters:\n- mode: \"selector\" (CSS selector -> text), \"tables\" (HTML tables only), \"metadata\" (title/author/date/description/og_* + JSON-LD), \"schema\" (JSON Schema -> heuristic field extraction), \"structured\" (ONE-SHOT: tables + <dl> definitions + JSON-LD + chart hints from SVG/figure + microdata/data-attr/grid key-value pairs)\n- css_selector: required for mode=\"selector\" -- any valid CSS selector\n- schema: for mode=\"schema\", a JSON Schema object describing the fields to extract\n- multiple: true to return array of all matches (mode=\"selector\" only)\n\nPrefer mode=\"structured\" over chaining multiple extract calls — it returns every structured pattern on the page in one response:\n { tables, definitions, jsonld, chart_hints, key_value_pairs }\n\nchart_hints surfaces SVG titles, aria-labels, and figcaptions — host LLMs use these to describe data visualizations even when the underlying data is rendered by JavaScript.\n\nFor mode=\"tables\", returns array of table objects with headers and row data. For mode=\"schema\", pass { price: \"string\", name: \"string\" } and get structured fields extracted from the page.`,\n\n find_similar: `Find content related to a URL or concept. Use when you have a known-good page or topic and want to discover similar resources from the cache or web.\n\nKey parameters:\n- url: a URL to find content similar to. The page's content and embeddings are used for similarity matching.\n- concept: free-text description of what you want similar content for. Use when you do not have a specific URL.\n- max_results: number of similar items to return (default 5)\n- include_cached: true (default) to search the local cache first, false to skip cache and search the web only\n- threshold: minimum similarity score (0-1, default 0.5)\n- max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).\n- include_full_markdown: default false — results return evidence excerpts; set true for full bodies.\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n\nProvide either url or concept. Results fuse three signals via 3-way RRF: keyword match, semantic embeddings, and (if local hits sparse) live web search. Each result carries \\`match_signals\\` with \\`embedding_rank\\`, \\`fts5_rank\\`, and \\`fused_score\\`.\n\nThe response may include a \\`cold_start\\` string when local signals are weak. Pass this verbatim to the user.\n\nReturns results array, method used (\"hybrid\" | \"embedding\" | \"fts5\" | \"search\"), cache_hits, search_hits, embedding_available, and total_time_ms.`,\n\n research: `Run multi-step research on a complex question. Decomposes the question into sub-queries, searches in parallel, fetches top sources, and synthesizes a report with citations.\n\nKey parameters:\n- question: the research question to investigate\n- depth: \"quick\" (~15s, 2 sub-queries, 5-8 sources), \"standard\" (~40s, 4 sub-queries, 10-15 sources, default), \"comprehensive\" (~80s, 7 sub-queries, 20-25 sources)\n- max_sources: override the default source count for the chosen depth\n- include_domains/exclude_domains: scope research to specific sites\n- schema: optional JSON Schema -- structures the report to extract matching fields\n- stream: true to receive progress notifications as each phase completes\n- max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).\n- include_full_markdown: default false — sources return evidence excerpts; set true for full bodies.\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n\nReturns report (markdown with [N] citations), citations array, sources, sub_queries, depth, total_time_ms, sampling_supported, and brief (topics, highlights, key_findings, sections.overview/comparison/gaps).`,\n\n agent: `Execute a natural-language data gathering task. Plans search queries and URLs from a prompt, executes them in parallel, and synthesizes results. Full step transparency.\n\nKey parameters:\n- prompt: natural-language description of what data to gather (e.g., \"find pricing for the top 5 CRM tools\")\n- urls: optional array of specific URLs to include in the gathering\n- schema: optional JSON Schema -- if provided, extracts structured data matching the schema from each page and merges results\n- max_pages: maximum pages to fetch (default 10)\n- max_time_ms: maximum execution time in milliseconds (default 60000)\n- stream: true to receive progress notifications as each step completes\n- max_tokens_out: token-budget cap on total output (cl100k-base; wins over max_chars).\n- include_full_markdown: default false — pages return evidence excerpts; set true for full bodies.\n- citation_format: 'numbered' (default) | 'json' | 'anthropic_tags'.\n\nPipeline: (1) plan, (2) execute search+fetch in parallel within budget, (3) optional schema extraction, (4) synthesize. The steps array exposes every action with timing.\n\nUses MCP requestSampling for planning and synthesis. Without sampling support, uses keyword extraction.\n\nReturns result, sources array, pages_fetched count, steps array, total_time_ms, sampling_supported.`,\n} as const;\n\nexport type ToolName = keyof typeof TOOL_DESCRIPTIONS;\n"],"mappings":"AAsBO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiC5B,MAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyFjC,MAAM,kBAAkB;AAExB,MAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBP,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeT,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBd,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeV,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBT;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { LLMCallOpts, LLMExtractResult } from './types.js';
2
+ export declare function callAnthropic(opts: LLMCallOpts, apiKey: string): Promise<LLMExtractResult>;
3
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../src/integrations/cloud/llm/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKhE,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAqC3B"}
@@ -0,0 +1,41 @@
1
+ import Anthropic from "@anthropic-ai/sdk";
2
+ const DEFAULT_MODEL = "claude-haiku-4-5";
3
+ const TOOL_NAME = "extract";
4
+ async function callAnthropic(opts, apiKey) {
5
+ const client = new Anthropic({ apiKey });
6
+ const model = opts.modelOverride ?? DEFAULT_MODEL;
7
+ const start = Date.now();
8
+ const response = await client.messages.create(
9
+ {
10
+ model,
11
+ max_tokens: 2048,
12
+ tools: [
13
+ {
14
+ name: TOOL_NAME,
15
+ description: "Return the extracted fields as structured JSON.",
16
+ input_schema: opts.jsonSchema
17
+ }
18
+ ],
19
+ tool_choice: { type: "tool", name: TOOL_NAME },
20
+ messages: [{ role: "user", content: opts.prompt }]
21
+ },
22
+ { signal: opts.signal }
23
+ );
24
+ const block = (response.content ?? []).find(
25
+ (b) => b.type === "tool_use"
26
+ );
27
+ if (!block) {
28
+ throw new Error("anthropic: no tool_use block in response");
29
+ }
30
+ return {
31
+ values: block.input,
32
+ provider: "anthropic",
33
+ model: response.model ?? model,
34
+ cached: false,
35
+ latencyMs: Date.now() - start
36
+ };
37
+ }
38
+ export {
39
+ callAnthropic
40
+ };
41
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/integrations/cloud/llm/anthropic.ts"],"sourcesContent":["import Anthropic from '@anthropic-ai/sdk';\nimport type { Tool } from '@anthropic-ai/sdk/resources/messages/messages.js';\nimport type { LLMCallOpts, LLMExtractResult } from './types.js';\n\nconst DEFAULT_MODEL = 'claude-haiku-4-5';\nconst TOOL_NAME = 'extract';\n\nexport async function callAnthropic(\n opts: LLMCallOpts,\n apiKey: string,\n): Promise<LLMExtractResult> {\n const client = new Anthropic({ apiKey });\n const model = opts.modelOverride ?? DEFAULT_MODEL;\n const start = Date.now();\n\n const response = await client.messages.create(\n {\n model,\n max_tokens: 2048,\n tools: [\n {\n name: TOOL_NAME,\n description: 'Return the extracted fields as structured JSON.',\n input_schema: opts.jsonSchema as Tool.InputSchema,\n },\n ],\n tool_choice: { type: 'tool', name: TOOL_NAME },\n messages: [{ role: 'user', content: opts.prompt }],\n },\n { signal: opts.signal },\n );\n\n const block = (response.content ?? []).find(\n (b: { type: string }) => b.type === 'tool_use',\n ) as { type: 'tool_use'; name: string; input: Record<string, unknown> } | undefined;\n\n if (!block) {\n throw new Error('anthropic: no tool_use block in response');\n }\n\n return {\n values: block.input,\n provider: 'anthropic',\n model: response.model ?? model,\n cached: false,\n latencyMs: Date.now() - start,\n };\n}\n"],"mappings":"AAAA,OAAO,eAAe;AAItB,MAAM,gBAAgB;AACtB,MAAM,YAAY;AAElB,eAAsB,cACpB,MACA,QAC2B;AAC3B,QAAM,SAAS,IAAI,UAAU,EAAE,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,WAAW,MAAM,OAAO,SAAS;AAAA,IACrC;AAAA,MACE;AAAA,MACA,YAAY;AAAA,MACZ,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,cAAc,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,MACA,aAAa,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC7C,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,KAAK,OAAO,CAAC;AAAA,IACnD;AAAA,IACA,EAAE,QAAQ,KAAK,OAAO;AAAA,EACxB;AAEA,QAAM,SAAS,SAAS,WAAW,CAAC,GAAG;AAAA,IACrC,CAAC,MAAwB,EAAE,SAAS;AAAA,EACtC;AAEA,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,SAAO;AAAA,IACL,QAAQ,MAAM;AAAA,IACd,UAAU;AAAA,IACV,OAAO,SAAS,SAAS;AAAA,IACzB,QAAQ;AAAA,IACR,WAAW,KAAK,IAAI,IAAI;AAAA,EAC1B;AACF;","names":[]}
@@ -0,0 +1,5 @@
1
+ import type { LLMCallRecord } from './types.js';
2
+ export declare function ensureLLMCacheTable(): void;
3
+ export declare function lookupLLMCache(modelId: string, promptHash: string, schemaHash: string): string | null;
4
+ export declare function insertLLMCache(rec: LLMCallRecord): void;
5
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/integrations/cloud/llm/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,IAAI,IAAI,CAc1C;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAYf;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAiBvD"}
@@ -0,0 +1,49 @@
1
+ import { getDatabase } from "../../../cache/db.js";
2
+ function ensureLLMCacheTable() {
3
+ const db = getDatabase();
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS llm_cache (
6
+ model_id TEXT NOT NULL,
7
+ prompt_hash TEXT NOT NULL,
8
+ schema_hash TEXT NOT NULL,
9
+ response TEXT NOT NULL,
10
+ created_at INTEGER NOT NULL,
11
+ expires_at INTEGER NOT NULL,
12
+ PRIMARY KEY (model_id, prompt_hash, schema_hash)
13
+ );
14
+ CREATE INDEX IF NOT EXISTS idx_llm_cache_expires ON llm_cache(expires_at);
15
+ `);
16
+ }
17
+ function lookupLLMCache(modelId, promptHash, schemaHash) {
18
+ const db = getDatabase();
19
+ const row = db.prepare(
20
+ `SELECT response FROM llm_cache
21
+ WHERE model_id = ? AND prompt_hash = ? AND schema_hash = ?
22
+ AND expires_at > ?`
23
+ ).get(modelId, promptHash, schemaHash, Date.now());
24
+ return row?.response ?? null;
25
+ }
26
+ function insertLLMCache(rec) {
27
+ const db = getDatabase();
28
+ db.prepare(
29
+ `INSERT INTO llm_cache (model_id, prompt_hash, schema_hash, response, created_at, expires_at)
30
+ VALUES (?, ?, ?, ?, ?, ?)
31
+ ON CONFLICT(model_id, prompt_hash, schema_hash) DO UPDATE SET
32
+ response = excluded.response,
33
+ created_at = excluded.created_at,
34
+ expires_at = excluded.expires_at`
35
+ ).run(
36
+ rec.modelId,
37
+ rec.promptHash,
38
+ rec.schemaHash,
39
+ rec.response,
40
+ rec.createdAt,
41
+ rec.expiresAt
42
+ );
43
+ }
44
+ export {
45
+ ensureLLMCacheTable,
46
+ insertLLMCache,
47
+ lookupLLMCache
48
+ };
49
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/integrations/cloud/llm/cache.ts"],"sourcesContent":["import { getDatabase } from '../../../cache/db.js';\nimport type { LLMCallRecord } from './types.js';\n\nexport function ensureLLMCacheTable(): void {\n const db = getDatabase();\n db.exec(`\n CREATE TABLE IF NOT EXISTS llm_cache (\n model_id TEXT NOT NULL,\n prompt_hash TEXT NOT NULL,\n schema_hash TEXT NOT NULL,\n response TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n expires_at INTEGER NOT NULL,\n PRIMARY KEY (model_id, prompt_hash, schema_hash)\n );\n CREATE INDEX IF NOT EXISTS idx_llm_cache_expires ON llm_cache(expires_at);\n `);\n}\n\nexport function lookupLLMCache(\n modelId: string,\n promptHash: string,\n schemaHash: string,\n): string | null {\n const db = getDatabase();\n const row = db\n .prepare(\n `SELECT response FROM llm_cache\n WHERE model_id = ? AND prompt_hash = ? AND schema_hash = ?\n AND expires_at > ?`,\n )\n .get(modelId, promptHash, schemaHash, Date.now()) as\n | { response: string }\n | undefined;\n return row?.response ?? null;\n}\n\nexport function insertLLMCache(rec: LLMCallRecord): void {\n const db = getDatabase();\n db.prepare(\n `INSERT INTO llm_cache (model_id, prompt_hash, schema_hash, response, created_at, expires_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(model_id, prompt_hash, schema_hash) DO UPDATE SET\n response = excluded.response,\n created_at = excluded.created_at,\n expires_at = excluded.expires_at`,\n ).run(\n rec.modelId,\n rec.promptHash,\n rec.schemaHash,\n rec.response,\n rec.createdAt,\n rec.expiresAt,\n );\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAGrB,SAAS,sBAA4B;AAC1C,QAAM,KAAK,YAAY;AACvB,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWP;AACH;AAEO,SAAS,eACd,SACA,YACA,YACe;AACf,QAAM,KAAK,YAAY;AACvB,QAAM,MAAM,GACT;AAAA,IACC;AAAA;AAAA;AAAA,EAGF,EACC,IAAI,SAAS,YAAY,YAAY,KAAK,IAAI,CAAC;AAGlD,SAAO,KAAK,YAAY;AAC1B;AAEO,SAAS,eAAe,KAA0B;AACvD,QAAM,KAAK,YAAY;AACvB,KAAG;AAAA,IACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF,EAAE;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { LLMCallOpts, LLMExtractResult } from './types.js';
2
+ export declare function callGemini(opts: LLMCallOpts, apiKey: string): Promise<LLMExtractResult>;
3
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/integrations/cloud/llm/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIhE,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAkC3B"}
@@ -0,0 +1,37 @@
1
+ import { GoogleGenAI } from "@google/genai";
2
+ const DEFAULT_MODEL = "gemini-2.5-flash-lite";
3
+ async function callGemini(opts, apiKey) {
4
+ const client = new GoogleGenAI({ apiKey });
5
+ const model = opts.modelOverride ?? DEFAULT_MODEL;
6
+ const start = Date.now();
7
+ const response = await client.models.generateContent({
8
+ model,
9
+ contents: opts.prompt,
10
+ config: {
11
+ responseMimeType: "application/json",
12
+ responseJsonSchema: opts.jsonSchema,
13
+ abortSignal: opts.signal
14
+ }
15
+ });
16
+ const text = response.text;
17
+ if (!text) {
18
+ throw new Error("gemini: empty text in response");
19
+ }
20
+ let values;
21
+ try {
22
+ values = JSON.parse(text);
23
+ } catch (e) {
24
+ throw new Error(`gemini: invalid JSON in response: ${e.message}`);
25
+ }
26
+ return {
27
+ values,
28
+ provider: "gemini",
29
+ model,
30
+ cached: false,
31
+ latencyMs: Date.now() - start
32
+ };
33
+ }
34
+ export {
35
+ callGemini
36
+ };
37
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/integrations/cloud/llm/gemini.ts"],"sourcesContent":["import { GoogleGenAI } from '@google/genai';\nimport type { LLMCallOpts, LLMExtractResult } from './types.js';\n\nconst DEFAULT_MODEL = 'gemini-2.5-flash-lite';\n\nexport async function callGemini(\n opts: LLMCallOpts,\n apiKey: string,\n): Promise<LLMExtractResult> {\n const client = new GoogleGenAI({ apiKey });\n const model = opts.modelOverride ?? DEFAULT_MODEL;\n const start = Date.now();\n\n const response = await client.models.generateContent({\n model,\n contents: opts.prompt,\n config: {\n responseMimeType: 'application/json',\n responseJsonSchema: opts.jsonSchema,\n abortSignal: opts.signal,\n },\n });\n\n const text = response.text;\n if (!text) {\n throw new Error('gemini: empty text in response');\n }\n\n let values: Record<string, unknown>;\n try {\n values = JSON.parse(text);\n } catch (e) {\n throw new Error(`gemini: invalid JSON in response: ${(e as Error).message}`);\n }\n\n return {\n values,\n provider: 'gemini',\n model,\n cached: false,\n latencyMs: Date.now() - start,\n };\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAG5B,MAAM,gBAAgB;AAEtB,eAAsB,WACpB,MACA,QAC2B;AAC3B,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,CAAC;AACzC,QAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,WAAW,MAAM,OAAO,OAAO,gBAAgB;AAAA,IACnD;AAAA,IACA,UAAU,KAAK;AAAA,IACf,QAAQ;AAAA,MACN,kBAAkB;AAAA,MAClB,oBAAoB,KAAK;AAAA,MACzB,aAAa,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AAED,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,IAAI;AAAA,EAC1B,SAAS,GAAG;AACV,UAAM,IAAI,MAAM,qCAAsC,EAAY,OAAO,EAAE;AAAA,EAC7E;AAEA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,WAAW,KAAK,IAAI,IAAI;AAAA,EAC1B;AACF;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { LLMCallOpts, LLMExtractResult } from './types.js';
2
+ export declare function callGroq(opts: LLMCallOpts, apiKey: string): Promise<LLMExtractResult>;
3
+ //# sourceMappingURL=groq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../../../src/integrations/cloud/llm/groq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKhE,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CA2B3B"}
@@ -0,0 +1,74 @@
1
+ import Groq from "groq-sdk";
2
+ import { validateAgainstSchema } from "./validate.js";
3
+ const DEFAULT_MODEL = "llama-3.3-70b-versatile";
4
+ async function callGroq(opts, apiKey) {
5
+ const client = new Groq({ apiKey });
6
+ const model = opts.modelOverride ?? DEFAULT_MODEL;
7
+ const start = Date.now();
8
+ const messages = [
9
+ { role: "user", content: buildPrompt(opts.prompt, opts.jsonSchema) }
10
+ ];
11
+ const first = await runOnce(client, model, messages, opts.signal);
12
+ let errors = validateAgainstSchema(first.values, opts.jsonSchema);
13
+ if (errors.length === 0) {
14
+ return done(first.values, first.responseModel ?? model, start);
15
+ }
16
+ messages.push({ role: "assistant", content: first.raw });
17
+ messages.push({ role: "user", content: retryPrompt(errors) });
18
+ const second = await runOnce(client, model, messages, opts.signal);
19
+ errors = validateAgainstSchema(second.values, opts.jsonSchema);
20
+ if (errors.length > 0) {
21
+ throw new Error(
22
+ `groq: response failed schema validation after retry: ${formatErrors(errors)}`
23
+ );
24
+ }
25
+ return done(second.values, second.responseModel ?? model, start);
26
+ }
27
+ async function runOnce(client, model, messages, signal) {
28
+ const response = await client.chat.completions.create(
29
+ {
30
+ model,
31
+ messages,
32
+ response_format: { type: "json_object" }
33
+ },
34
+ { signal }
35
+ );
36
+ const content = response.choices?.[0]?.message?.content;
37
+ if (!content) {
38
+ throw new Error("groq: empty content in response");
39
+ }
40
+ let values;
41
+ try {
42
+ values = JSON.parse(content);
43
+ } catch (e) {
44
+ throw new Error(`groq: invalid JSON in response: ${e.message}`);
45
+ }
46
+ return { values, raw: content, responseModel: response.model };
47
+ }
48
+ function buildPrompt(prompt, schema) {
49
+ return `${prompt}
50
+
51
+ Return JSON matching this schema:
52
+ ${JSON.stringify(schema)}`;
53
+ }
54
+ function retryPrompt(errors) {
55
+ return `Your previous response failed schema validation:
56
+ ${formatErrors(errors)}
57
+ Return corrected JSON only.`;
58
+ }
59
+ function formatErrors(errors) {
60
+ return errors.map((e) => `${e.path}: ${e.message}`).join("; ");
61
+ }
62
+ function done(values, model, start) {
63
+ return {
64
+ values,
65
+ provider: "groq",
66
+ model,
67
+ cached: false,
68
+ latencyMs: Date.now() - start
69
+ };
70
+ }
71
+ export {
72
+ callGroq
73
+ };
74
+ //# sourceMappingURL=groq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/integrations/cloud/llm/groq.ts"],"sourcesContent":["import Groq from 'groq-sdk';\nimport type { LLMCallOpts, LLMExtractResult } from './types.js';\nimport { validateAgainstSchema, type ValidationError } from './validate.js';\n\nconst DEFAULT_MODEL = 'llama-3.3-70b-versatile';\n\nexport async function callGroq(\n opts: LLMCallOpts,\n apiKey: string,\n): Promise<LLMExtractResult> {\n const client = new Groq({ apiKey });\n const model = opts.modelOverride ?? DEFAULT_MODEL;\n const start = Date.now();\n\n const messages: Array<{ role: 'user' | 'assistant'; content: string }> = [\n { role: 'user', content: buildPrompt(opts.prompt, opts.jsonSchema) },\n ];\n\n const first = await runOnce(client, model, messages, opts.signal);\n let errors = validateAgainstSchema(first.values, opts.jsonSchema);\n if (errors.length === 0) {\n return done(first.values, first.responseModel ?? model, start);\n }\n\n // Retry once with validation errors fed back to the model.\n messages.push({ role: 'assistant', content: first.raw });\n messages.push({ role: 'user', content: retryPrompt(errors) });\n\n const second = await runOnce(client, model, messages, opts.signal);\n errors = validateAgainstSchema(second.values, opts.jsonSchema);\n if (errors.length > 0) {\n throw new Error(\n `groq: response failed schema validation after retry: ${formatErrors(errors)}`,\n );\n }\n return done(second.values, second.responseModel ?? model, start);\n}\n\ninterface CallOnceResult {\n values: Record<string, unknown>;\n raw: string;\n responseModel: string | undefined;\n}\n\nasync function runOnce(\n client: Groq,\n model: string,\n messages: Array<{ role: 'user' | 'assistant'; content: string }>,\n signal: AbortSignal | undefined,\n): Promise<CallOnceResult> {\n const response = await client.chat.completions.create(\n {\n model,\n messages,\n response_format: { type: 'json_object' },\n },\n { signal },\n );\n const content = response.choices?.[0]?.message?.content;\n if (!content) {\n throw new Error('groq: empty content in response');\n }\n let values: Record<string, unknown>;\n try {\n values = JSON.parse(content);\n } catch (e) {\n throw new Error(`groq: invalid JSON in response: ${(e as Error).message}`);\n }\n return { values, raw: content, responseModel: response.model };\n}\n\nfunction buildPrompt(prompt: string, schema: Record<string, unknown>): string {\n return `${prompt}\\n\\nReturn JSON matching this schema:\\n${JSON.stringify(schema)}`;\n}\n\nfunction retryPrompt(errors: ValidationError[]): string {\n return `Your previous response failed schema validation:\\n${formatErrors(errors)}\\nReturn corrected JSON only.`;\n}\n\nfunction formatErrors(errors: ValidationError[]): string {\n return errors.map((e) => `${e.path}: ${e.message}`).join('; ');\n}\n\nfunction done(\n values: Record<string, unknown>,\n model: string,\n start: number,\n): LLMExtractResult {\n return {\n values,\n provider: 'groq',\n model,\n cached: false,\n latencyMs: Date.now() - start,\n };\n}\n"],"mappings":"AAAA,OAAO,UAAU;AAEjB,SAAS,6BAAmD;AAE5D,MAAM,gBAAgB;AAEtB,eAAsB,SACpB,MACA,QAC2B;AAC3B,QAAM,SAAS,IAAI,KAAK,EAAE,OAAO,CAAC;AAClC,QAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,WAAmE;AAAA,IACvE,EAAE,MAAM,QAAQ,SAAS,YAAY,KAAK,QAAQ,KAAK,UAAU,EAAE;AAAA,EACrE;AAEA,QAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAO,UAAU,KAAK,MAAM;AAChE,MAAI,SAAS,sBAAsB,MAAM,QAAQ,KAAK,UAAU;AAChE,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,KAAK,MAAM,QAAQ,MAAM,iBAAiB,OAAO,KAAK;AAAA,EAC/D;AAGA,WAAS,KAAK,EAAE,MAAM,aAAa,SAAS,MAAM,IAAI,CAAC;AACvD,WAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,YAAY,MAAM,EAAE,CAAC;AAE5D,QAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,UAAU,KAAK,MAAM;AACjE,WAAS,sBAAsB,OAAO,QAAQ,KAAK,UAAU;AAC7D,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,wDAAwD,aAAa,MAAM,CAAC;AAAA,IAC9E;AAAA,EACF;AACA,SAAO,KAAK,OAAO,QAAQ,OAAO,iBAAiB,OAAO,KAAK;AACjE;AAQA,eAAe,QACb,QACA,OACA,UACA,QACyB;AACzB,QAAM,WAAW,MAAM,OAAO,KAAK,YAAY;AAAA,IAC7C;AAAA,MACE;AAAA,MACA;AAAA,MACA,iBAAiB,EAAE,MAAM,cAAc;AAAA,IACzC;AAAA,IACA,EAAE,OAAO;AAAA,EACX;AACA,QAAM,UAAU,SAAS,UAAU,CAAC,GAAG,SAAS;AAChD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,OAAO;AAAA,EAC7B,SAAS,GAAG;AACV,UAAM,IAAI,MAAM,mCAAoC,EAAY,OAAO,EAAE;AAAA,EAC3E;AACA,SAAO,EAAE,QAAQ,KAAK,SAAS,eAAe,SAAS,MAAM;AAC/D;AAEA,SAAS,YAAY,QAAgB,QAAyC;AAC5E,SAAO,GAAG,MAAM;AAAA;AAAA;AAAA,EAA0C,KAAK,UAAU,MAAM,CAAC;AAClF;AAEA,SAAS,YAAY,QAAmC;AACtD,SAAO;AAAA,EAAqD,aAAa,MAAM,CAAC;AAAA;AAClF;AAEA,SAAS,aAAa,QAAmC;AACvD,SAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;AAC/D;AAEA,SAAS,KACP,QACA,OACA,OACkB;AAClB,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,WAAW,KAAK,IAAI,IAAI;AAAA,EAC1B;AACF;","names":[]}
@@ -0,0 +1,3 @@
1
+ export declare function hashPrompt(prompt: string): string;
2
+ export declare function hashSchema(schema: unknown): string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/integrations/cloud/llm/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAElD"}
@@ -0,0 +1,26 @@
1
+ import { createHash } from "node:crypto";
2
+ function hashPrompt(prompt) {
3
+ const normalized = prompt.replace(/\s+/g, " ").trim();
4
+ return createHash("sha256").update(normalized).digest("hex");
5
+ }
6
+ function hashSchema(schema) {
7
+ return createHash("sha256").update(stableStringify(schema)).digest("hex");
8
+ }
9
+ function stableStringify(value) {
10
+ if (value === null || typeof value !== "object") {
11
+ return JSON.stringify(value);
12
+ }
13
+ if (Array.isArray(value)) {
14
+ return "[" + value.map(stableStringify).join(",") + "]";
15
+ }
16
+ const keys = Object.keys(value).sort();
17
+ const parts = keys.map(
18
+ (k) => JSON.stringify(k) + ":" + stableStringify(value[k])
19
+ );
20
+ return "{" + parts.join(",") + "}";
21
+ }
22
+ export {
23
+ hashPrompt,
24
+ hashSchema
25
+ };
26
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/integrations/cloud/llm/hash.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nexport function hashPrompt(prompt: string): string {\n const normalized = prompt.replace(/\\s+/g, ' ').trim();\n return createHash('sha256').update(normalized).digest('hex');\n}\n\nexport function hashSchema(schema: unknown): string {\n return createHash('sha256').update(stableStringify(schema)).digest('hex');\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(stableStringify).join(',') + ']';\n }\n const keys = Object.keys(value as Record<string, unknown>).sort();\n const parts = keys.map(\n (k) =>\n JSON.stringify(k) +\n ':' +\n stableStringify((value as Record<string, unknown>)[k]),\n );\n return '{' + parts.join(',') + '}';\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAEpB,SAAS,WAAW,QAAwB;AACjD,QAAM,aAAa,OAAO,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACpD,SAAO,WAAW,QAAQ,EAAE,OAAO,UAAU,EAAE,OAAO,KAAK;AAC7D;AAEO,SAAS,WAAW,QAAyB;AAClD,SAAO,WAAW,QAAQ,EAAE,OAAO,gBAAgB,MAAM,CAAC,EAAE,OAAO,KAAK;AAC1E;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,MAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,MAAM,IAAI,eAAe,EAAE,KAAK,GAAG,IAAI;AAAA,EACtD;AACA,QAAM,OAAO,OAAO,KAAK,KAAgC,EAAE,KAAK;AAChE,QAAM,QAAQ,KAAK;AAAA,IACjB,CAAC,MACC,KAAK,UAAU,CAAC,IAChB,MACA,gBAAiB,MAAkC,CAAC,CAAC;AAAA,EACzD;AACA,SAAO,MAAM,MAAM,KAAK,GAAG,IAAI;AACjC;","names":[]}
@@ -0,0 +1,5 @@
1
+ import type { LLMProvider } from './types.js';
2
+ export declare function resolveModel(provider: LLMProvider, callerOverride?: string, env?: Record<string, string | undefined>): string;
3
+ export declare function providerModelEnvVar(provider: LLMProvider): string;
4
+ export declare function providerDefaultModel(provider: LLMProvider): string;
5
+ //# sourceMappingURL=model-select.d.ts.map