@hoilab/ada-cli 0.85.0 → 0.85.3

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 (1682) hide show
  1. package/dist/ada-publico.d.ts.map +1 -1
  2. package/dist/ada-publico.js.map +1 -1
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/register-bedrock.d.ts.map +1 -1
  6. package/dist/bun/register-bedrock.js.map +1 -1
  7. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  8. package/dist/bun/restore-sandbox-env.js.map +1 -1
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/audit-command.d.ts.map +1 -1
  12. package/dist/cli/audit-command.js.map +1 -1
  13. package/dist/cli/auth-check.d.ts.map +1 -1
  14. package/dist/cli/auth-check.js.map +1 -1
  15. package/dist/cli/auth-command.d.ts.map +1 -1
  16. package/dist/cli/auth-command.js.map +1 -1
  17. package/dist/cli/banco-command.d.ts.map +1 -1
  18. package/dist/cli/banco-command.js.map +1 -1
  19. package/dist/cli/cleanse-command.d.ts.map +1 -1
  20. package/dist/cli/cleanse-command.js +5 -2
  21. package/dist/cli/cleanse-command.js.map +1 -1
  22. package/dist/cli/commit-command.d.ts +8 -6
  23. package/dist/cli/commit-command.d.ts.map +1 -1
  24. package/dist/cli/commit-command.js +124 -92
  25. package/dist/cli/commit-command.js.map +1 -1
  26. package/dist/cli/completion.d.ts +20 -0
  27. package/dist/cli/completion.d.ts.map +1 -0
  28. package/dist/cli/completion.js +75 -0
  29. package/dist/cli/completion.js.map +1 -0
  30. package/dist/cli/computer-command.d.ts.map +1 -1
  31. package/dist/cli/computer-command.js.map +1 -1
  32. package/dist/cli/config-selector.d.ts.map +1 -1
  33. package/dist/cli/config-selector.js.map +1 -1
  34. package/dist/cli/credential-print.d.ts.map +1 -1
  35. package/dist/cli/credential-print.js.map +1 -1
  36. package/dist/cli/discover-command.d.ts.map +1 -1
  37. package/dist/cli/discover-command.js +5 -1
  38. package/dist/cli/discover-command.js.map +1 -1
  39. package/dist/cli/experimental/auth.d.ts.map +1 -1
  40. package/dist/cli/experimental/auth.js.map +1 -1
  41. package/dist/cli/experimental/cli.d.ts +1 -1
  42. package/dist/cli/experimental/cli.d.ts.map +1 -1
  43. package/dist/cli/experimental/cli.js.map +1 -1
  44. package/dist/cli/experimental/command-options.d.ts.map +1 -1
  45. package/dist/cli/experimental/command-options.js.map +1 -1
  46. package/dist/cli/experimental/command.d.ts.map +1 -1
  47. package/dist/cli/experimental/command.js.map +1 -1
  48. package/dist/cli/experimental/commands/client.d.ts.map +1 -1
  49. package/dist/cli/experimental/commands/client.js.map +1 -1
  50. package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
  51. package/dist/cli/experimental/commands/pi.js.map +1 -1
  52. package/dist/cli/experimental/commands/server.d.ts.map +1 -1
  53. package/dist/cli/experimental/commands/server.js.map +1 -1
  54. package/dist/cli/experimental/transport-address.d.ts.map +1 -1
  55. package/dist/cli/experimental/transport-address.js.map +1 -1
  56. package/dist/cli/file-processor.d.ts.map +1 -1
  57. package/dist/cli/file-processor.js.map +1 -1
  58. package/dist/cli/guardrails.d.ts +14 -0
  59. package/dist/cli/guardrails.d.ts.map +1 -0
  60. package/dist/cli/guardrails.js +47 -0
  61. package/dist/cli/guardrails.js.map +1 -0
  62. package/dist/cli/hashline-command.d.ts.map +1 -1
  63. package/dist/cli/hashline-command.js.map +1 -1
  64. package/dist/cli/home-screen.d.ts.map +1 -1
  65. package/dist/cli/home-screen.js +1 -0
  66. package/dist/cli/home-screen.js.map +1 -1
  67. package/dist/cli/import-command.d.ts.map +1 -1
  68. package/dist/cli/import-command.js.map +1 -1
  69. package/dist/cli/initial-message.d.ts +1 -1
  70. package/dist/cli/initial-message.d.ts.map +1 -1
  71. package/dist/cli/initial-message.js.map +1 -1
  72. package/dist/cli/list-models.d.ts.map +1 -1
  73. package/dist/cli/list-models.js.map +1 -1
  74. package/dist/cli/politica-command.d.ts.map +1 -1
  75. package/dist/cli/politica-command.js.map +1 -1
  76. package/dist/cli/project-trust.d.ts.map +1 -1
  77. package/dist/cli/project-trust.js.map +1 -1
  78. package/dist/cli/refine-command.d.ts.map +1 -1
  79. package/dist/cli/refine-command.js.map +1 -1
  80. package/dist/cli/review-command.d.ts.map +1 -1
  81. package/dist/cli/review-command.js +77 -13
  82. package/dist/cli/review-command.js.map +1 -1
  83. package/dist/cli/schedule-command.d.ts.map +1 -1
  84. package/dist/cli/schedule-command.js.map +1 -1
  85. package/dist/cli/serve-command.d.ts +0 -1
  86. package/dist/cli/serve-command.d.ts.map +1 -1
  87. package/dist/cli/serve-command.js +12 -6
  88. package/dist/cli/serve-command.js.map +1 -1
  89. package/dist/cli/session-picker.d.ts.map +1 -1
  90. package/dist/cli/session-picker.js.map +1 -1
  91. package/dist/cli/startup-ui.d.ts.map +1 -1
  92. package/dist/cli/startup-ui.js.map +1 -1
  93. package/dist/cli/telegram-command.d.ts.map +1 -1
  94. package/dist/cli/telegram-command.js.map +1 -1
  95. package/dist/cli/telemetria-command.d.ts.map +1 -1
  96. package/dist/cli/telemetria-command.js.map +1 -1
  97. package/dist/cli/undo-command.d.ts.map +1 -1
  98. package/dist/cli/undo-command.js.map +1 -1
  99. package/dist/cli/update-cli.d.ts +82 -0
  100. package/dist/cli/update-cli.d.ts.map +1 -0
  101. package/dist/cli/update-cli.js +372 -0
  102. package/dist/cli/update-cli.js.map +1 -0
  103. package/dist/cli/usage-command.d.ts.map +1 -1
  104. package/dist/cli/usage-command.js +75 -6
  105. package/dist/cli/usage-command.js.map +1 -1
  106. package/dist/cli/wiki-command.d.ts.map +1 -1
  107. package/dist/cli/wiki-command.js.map +1 -1
  108. package/dist/cli.d.ts +0 -6
  109. package/dist/cli.d.ts.map +1 -1
  110. package/dist/cli.js +0 -0
  111. package/dist/cli.js.map +1 -1
  112. package/dist/client/index.d.ts.map +1 -1
  113. package/dist/client/index.js.map +1 -1
  114. package/dist/client/remote-session.d.ts.map +1 -1
  115. package/dist/client/remote-session.js.map +1 -1
  116. package/dist/client/transcript.d.ts.map +1 -1
  117. package/dist/client/transcript.js.map +1 -1
  118. package/dist/config.d.ts.map +1 -1
  119. package/dist/config.js.map +1 -1
  120. package/dist/core/ada.d.ts +5 -0
  121. package/dist/core/ada.d.ts.map +1 -1
  122. package/dist/core/ada.js +5 -0
  123. package/dist/core/ada.js.map +1 -1
  124. package/dist/core/advisor/guarda.d.ts.map +1 -1
  125. package/dist/core/advisor/guarda.js.map +1 -1
  126. package/dist/core/advisor/runtime.d.ts.map +1 -1
  127. package/dist/core/advisor/runtime.js.map +1 -1
  128. package/dist/core/advisor/sesion.d.ts.map +1 -1
  129. package/dist/core/advisor/sesion.js.map +1 -1
  130. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  131. package/dist/core/agent-session-runtime.js.map +1 -1
  132. package/dist/core/agent-session-services.d.ts.map +1 -1
  133. package/dist/core/agent-session-services.js +33 -0
  134. package/dist/core/agent-session-services.js.map +1 -1
  135. package/dist/core/agent-session.d.ts +67 -0
  136. package/dist/core/agent-session.d.ts.map +1 -1
  137. package/dist/core/agent-session.js +43 -2
  138. package/dist/core/agent-session.js.map +1 -1
  139. package/dist/core/agents/loader.d.ts.map +1 -1
  140. package/dist/core/agents/loader.js.map +1 -1
  141. package/dist/core/appendonly/append-only-context.d.ts +118 -0
  142. package/dist/core/appendonly/append-only-context.d.ts.map +1 -0
  143. package/dist/core/appendonly/append-only-context.js +256 -0
  144. package/dist/core/appendonly/append-only-context.js.map +1 -0
  145. package/dist/core/appendonly/auto.d.ts +30 -0
  146. package/dist/core/appendonly/auto.d.ts.map +1 -0
  147. package/dist/core/appendonly/auto.js +68 -0
  148. package/dist/core/appendonly/auto.js.map +1 -0
  149. package/dist/core/appendonly/extension.d.ts +29 -0
  150. package/dist/core/appendonly/extension.d.ts.map +1 -0
  151. package/dist/core/appendonly/extension.js +51 -0
  152. package/dist/core/appendonly/extension.js.map +1 -0
  153. package/dist/core/appendonly/index.d.ts +41 -0
  154. package/dist/core/appendonly/index.d.ts.map +1 -0
  155. package/dist/core/appendonly/index.js +42 -0
  156. package/dist/core/appendonly/index.js.map +1 -0
  157. package/dist/core/aprobacion/generados.d.ts.map +1 -1
  158. package/dist/core/aprobacion/generados.js.map +1 -1
  159. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -1
  160. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -1
  161. package/dist/core/aprobacion/politica.d.ts +1 -1
  162. package/dist/core/aprobacion/politica.d.ts.map +1 -1
  163. package/dist/core/aprobacion/politica.js.map +1 -1
  164. package/dist/core/arranque/atajos.d.ts.map +1 -1
  165. package/dist/core/arranque/atajos.js +20 -0
  166. package/dist/core/arranque/atajos.js.map +1 -1
  167. package/dist/core/audit/exportacion.d.ts.map +1 -1
  168. package/dist/core/audit/exportacion.js +5 -3
  169. package/dist/core/audit/exportacion.js.map +1 -1
  170. package/dist/core/audit/libro.d.ts +7 -0
  171. package/dist/core/audit/libro.d.ts.map +1 -1
  172. package/dist/core/audit/libro.js.map +1 -1
  173. package/dist/core/audit/registro-sesion.d.ts.map +1 -1
  174. package/dist/core/audit/registro-sesion.js.map +1 -1
  175. package/dist/core/audit/retencion.d.ts.map +1 -1
  176. package/dist/core/audit/retencion.js.map +1 -1
  177. package/dist/core/audit/rutas.d.ts.map +1 -1
  178. package/dist/core/audit/rutas.js.map +1 -1
  179. package/dist/core/auth-guidance.d.ts.map +1 -1
  180. package/dist/core/auth-guidance.js.map +1 -1
  181. package/dist/core/auth-storage.d.ts.map +1 -1
  182. package/dist/core/auth-storage.js.map +1 -1
  183. package/dist/core/banco/almacenamiento.d.ts.map +1 -1
  184. package/dist/core/banco/almacenamiento.js.map +1 -1
  185. package/dist/core/banco/analisis.d.ts.map +1 -1
  186. package/dist/core/banco/analisis.js.map +1 -1
  187. package/dist/core/banco/asides.d.ts +64 -0
  188. package/dist/core/banco/asides.d.ts.map +1 -0
  189. package/dist/core/banco/asides.js +113 -0
  190. package/dist/core/banco/asides.js.map +1 -0
  191. package/dist/core/banco/bloques.d.ts.map +1 -1
  192. package/dist/core/banco/bloques.js.map +1 -1
  193. package/dist/core/banco/cargas.d.ts.map +1 -1
  194. package/dist/core/banco/cargas.js.map +1 -1
  195. package/dist/core/banco/comparar.d.ts.map +1 -1
  196. package/dist/core/banco/comparar.js.map +1 -1
  197. package/dist/core/banco/cow-isolation.d.ts +74 -0
  198. package/dist/core/banco/cow-isolation.d.ts.map +1 -0
  199. package/dist/core/banco/cow-isolation.js +259 -0
  200. package/dist/core/banco/cow-isolation.js.map +1 -0
  201. package/dist/core/banco/ejecutar.d.ts.map +1 -1
  202. package/dist/core/banco/ejecutar.js.map +1 -1
  203. package/dist/core/banco/generar.d.ts.map +1 -1
  204. package/dist/core/banco/generar.js.map +1 -1
  205. package/dist/core/banco/mutaciones.d.ts.map +1 -1
  206. package/dist/core/banco/mutaciones.js.map +1 -1
  207. package/dist/core/banco/park-revive.d.ts +67 -0
  208. package/dist/core/banco/park-revive.d.ts.map +1 -0
  209. package/dist/core/banco/park-revive.js +130 -0
  210. package/dist/core/banco/park-revive.js.map +1 -0
  211. package/dist/core/banco/pruning.d.ts +48 -0
  212. package/dist/core/banco/pruning.d.ts.map +1 -0
  213. package/dist/core/banco/pruning.js +146 -0
  214. package/dist/core/banco/pruning.js.map +1 -0
  215. package/dist/core/banco/steering.d.ts +81 -0
  216. package/dist/core/banco/steering.d.ts.map +1 -0
  217. package/dist/core/banco/steering.js +96 -0
  218. package/dist/core/banco/steering.js.map +1 -0
  219. package/dist/core/banco/tipos.d.ts.map +1 -1
  220. package/dist/core/banco/tipos.js.map +1 -1
  221. package/dist/core/bash-executor.d.ts.map +1 -1
  222. package/dist/core/bash-executor.js.map +1 -1
  223. package/dist/core/blobs/almacen.d.ts.map +1 -1
  224. package/dist/core/blobs/almacen.js.map +1 -1
  225. package/dist/core/blobs/broker.d.ts +1 -0
  226. package/dist/core/blobs/broker.d.ts.map +1 -1
  227. package/dist/core/blobs/broker.js +1 -1
  228. package/dist/core/blobs/broker.js.map +1 -1
  229. package/dist/core/blobs/index.d.ts +1 -0
  230. package/dist/core/blobs/index.d.ts.map +1 -1
  231. package/dist/core/blobs/index.js +1 -0
  232. package/dist/core/blobs/index.js.map +1 -1
  233. package/dist/core/blobs/payload.d.ts.map +1 -1
  234. package/dist/core/blobs/payload.js.map +1 -1
  235. package/dist/core/blobs/proveedor.d.ts.map +1 -1
  236. package/dist/core/blobs/proveedor.js.map +1 -1
  237. package/dist/core/blobs/uploaders.d.ts +105 -0
  238. package/dist/core/blobs/uploaders.d.ts.map +1 -0
  239. package/dist/core/blobs/uploaders.js +224 -0
  240. package/dist/core/blobs/uploaders.js.map +1 -0
  241. package/dist/core/broker/broker.d.ts +54 -0
  242. package/dist/core/broker/broker.d.ts.map +1 -0
  243. package/dist/core/broker/broker.js +216 -0
  244. package/dist/core/broker/broker.js.map +1 -0
  245. package/dist/core/broker/index.d.ts +21 -0
  246. package/dist/core/broker/index.d.ts.map +1 -0
  247. package/dist/core/broker/index.js +33 -0
  248. package/dist/core/broker/index.js.map +1 -0
  249. package/dist/core/broker/ps.d.ts +20 -0
  250. package/dist/core/broker/ps.d.ts.map +1 -0
  251. package/dist/core/broker/ps.js +55 -0
  252. package/dist/core/broker/ps.js.map +1 -0
  253. package/dist/core/broker/types.d.ts +45 -0
  254. package/dist/core/broker/types.d.ts.map +1 -0
  255. package/dist/core/broker/types.js +19 -0
  256. package/dist/core/broker/types.js.map +1 -0
  257. package/dist/core/browser/cdp.d.ts.map +1 -1
  258. package/dist/core/browser/cdp.js.map +1 -1
  259. package/dist/core/browser/politica.d.ts.map +1 -1
  260. package/dist/core/browser/politica.js.map +1 -1
  261. package/dist/core/browser/sesion.d.ts.map +1 -1
  262. package/dist/core/browser/sesion.js.map +1 -1
  263. package/dist/core/browser/tools.d.ts.map +1 -1
  264. package/dist/core/browser/tools.js.map +1 -1
  265. package/dist/core/cache-stats.d.ts.map +1 -1
  266. package/dist/core/cache-stats.js.map +1 -1
  267. package/dist/core/capability/capability.test.d.ts +12 -0
  268. package/dist/core/capability/capability.test.d.ts.map +1 -0
  269. package/dist/core/capability/capability.test.js +258 -0
  270. package/dist/core/capability/capability.test.js.map +1 -0
  271. package/dist/core/capability/fs.d.ts +32 -0
  272. package/dist/core/capability/fs.d.ts.map +1 -0
  273. package/dist/core/capability/fs.js +106 -0
  274. package/dist/core/capability/fs.js.map +1 -0
  275. package/dist/core/capability/index.d.ts +68 -0
  276. package/dist/core/capability/index.d.ts.map +1 -0
  277. package/dist/core/capability/index.js +258 -0
  278. package/dist/core/capability/index.js.map +1 -0
  279. package/dist/core/capability/types.d.ts +168 -0
  280. package/dist/core/capability/types.d.ts.map +1 -0
  281. package/dist/core/capability/types.js +16 -0
  282. package/dist/core/capability/types.js.map +1 -0
  283. package/dist/core/carga-plugins/index.d.ts +49 -0
  284. package/dist/core/carga-plugins/index.d.ts.map +1 -0
  285. package/dist/core/carga-plugins/index.js +85 -0
  286. package/dist/core/carga-plugins/index.js.map +1 -0
  287. package/dist/core/carga-plugins/invalidacion.d.ts +60 -0
  288. package/dist/core/carga-plugins/invalidacion.d.ts.map +1 -0
  289. package/dist/core/carga-plugins/invalidacion.js +94 -0
  290. package/dist/core/carga-plugins/invalidacion.js.map +1 -0
  291. package/dist/core/carga-plugins/paralelo.d.ts +48 -0
  292. package/dist/core/carga-plugins/paralelo.d.ts.map +1 -0
  293. package/dist/core/carga-plugins/paralelo.js +47 -0
  294. package/dist/core/carga-plugins/paralelo.js.map +1 -0
  295. package/dist/core/colaboracion/autoresearch.d.ts +56 -0
  296. package/dist/core/colaboracion/autoresearch.d.ts.map +1 -0
  297. package/dist/core/colaboracion/autoresearch.js +95 -0
  298. package/dist/core/colaboracion/autoresearch.js.map +1 -0
  299. package/dist/core/colaboracion/index.d.ts +10 -0
  300. package/dist/core/colaboracion/index.d.ts.map +1 -0
  301. package/dist/core/colaboracion/index.js +7 -0
  302. package/dist/core/colaboracion/index.js.map +1 -0
  303. package/dist/core/colaboracion/kernels.d.ts +63 -0
  304. package/dist/core/colaboracion/kernels.d.ts.map +1 -0
  305. package/dist/core/colaboracion/kernels.js +99 -0
  306. package/dist/core/colaboracion/kernels.js.map +1 -0
  307. package/dist/core/colaboracion/rele/index.d.ts +8 -0
  308. package/dist/core/colaboracion/rele/index.d.ts.map +1 -0
  309. package/dist/core/colaboracion/rele/index.js +6 -0
  310. package/dist/core/colaboracion/rele/index.js.map +1 -0
  311. package/dist/core/colaboracion/rele/rele-servidor.d.ts +69 -0
  312. package/dist/core/colaboracion/rele/rele-servidor.d.ts.map +1 -0
  313. package/dist/core/colaboracion/rele/rele-servidor.js +197 -0
  314. package/dist/core/colaboracion/rele/rele-servidor.js.map +1 -0
  315. package/dist/core/colaboracion/rele/suscriptor.d.ts +31 -0
  316. package/dist/core/colaboracion/rele/suscriptor.d.ts.map +1 -0
  317. package/dist/core/colaboracion/rele/suscriptor.js +173 -0
  318. package/dist/core/colaboracion/rele/suscriptor.js.map +1 -0
  319. package/dist/core/colaboracion/sesion-colaborativa.d.ts +61 -0
  320. package/dist/core/colaboracion/sesion-colaborativa.d.ts.map +1 -0
  321. package/dist/core/colaboracion/sesion-colaborativa.js +127 -0
  322. package/dist/core/colaboracion/sesion-colaborativa.js.map +1 -0
  323. package/dist/core/commits/agentic.d.ts +101 -0
  324. package/dist/core/commits/agentic.d.ts.map +1 -0
  325. package/dist/core/commits/agentic.js +268 -0
  326. package/dist/core/commits/agentic.js.map +1 -0
  327. package/dist/core/commits/changelog.d.ts +37 -0
  328. package/dist/core/commits/changelog.d.ts.map +1 -0
  329. package/dist/core/commits/changelog.js +155 -0
  330. package/dist/core/commits/changelog.js.map +1 -0
  331. package/dist/core/commits/diff.d.ts.map +1 -0
  332. package/dist/core/commits/diff.js.map +1 -0
  333. package/dist/core/commits/git.d.ts +43 -0
  334. package/dist/core/commits/git.d.ts.map +1 -0
  335. package/dist/core/commits/git.js +61 -0
  336. package/dist/core/commits/git.js.map +1 -0
  337. package/dist/core/commits/split.d.ts +45 -0
  338. package/dist/core/commits/split.d.ts.map +1 -0
  339. package/dist/core/commits/split.js +128 -0
  340. package/dist/core/commits/split.js.map +1 -0
  341. package/dist/core/compactacion/comandos.d.ts +53 -0
  342. package/dist/core/compactacion/comandos.d.ts.map +1 -0
  343. package/dist/core/compactacion/comandos.js +155 -0
  344. package/dist/core/compactacion/comandos.js.map +1 -0
  345. package/dist/core/compactacion/extension.d.ts +28 -0
  346. package/dist/core/compactacion/extension.d.ts.map +1 -0
  347. package/dist/core/compactacion/extension.js +159 -0
  348. package/dist/core/compactacion/extension.js.map +1 -0
  349. package/dist/core/compactacion/handoff.d.ts +61 -0
  350. package/dist/core/compactacion/handoff.d.ts.map +1 -0
  351. package/dist/core/compactacion/handoff.js +139 -0
  352. package/dist/core/compactacion/handoff.js.map +1 -0
  353. package/dist/core/compactacion/index.d.ts +15 -0
  354. package/dist/core/compactacion/index.d.ts.map +1 -0
  355. package/dist/core/compactacion/index.js +15 -0
  356. package/dist/core/compactacion/index.js.map +1 -0
  357. package/dist/core/compactacion/prune.d.ts +38 -0
  358. package/dist/core/compactacion/prune.d.ts.map +1 -0
  359. package/dist/core/compactacion/prune.js +81 -0
  360. package/dist/core/compactacion/prune.js.map +1 -0
  361. package/dist/core/compactacion/shake.d.ts +40 -0
  362. package/dist/core/compactacion/shake.d.ts.map +1 -0
  363. package/dist/core/compactacion/shake.js +106 -0
  364. package/dist/core/compactacion/shake.js.map +1 -0
  365. package/dist/core/compactacion/tipos.d.ts +54 -0
  366. package/dist/core/compactacion/tipos.d.ts.map +1 -0
  367. package/dist/core/compactacion/tipos.js +44 -0
  368. package/dist/core/compactacion/tipos.js.map +1 -0
  369. package/dist/core/compactar/index.d.ts.map +1 -1
  370. package/dist/core/compactar/index.js.map +1 -1
  371. package/dist/core/compactar/registro-denso.d.ts.map +1 -1
  372. package/dist/core/compactar/registro-denso.js.map +1 -1
  373. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  374. package/dist/core/compaction/branch-summarization.js.map +1 -1
  375. package/dist/core/compaction/compaction.d.ts.map +1 -1
  376. package/dist/core/compaction/compaction.js.map +1 -1
  377. package/dist/core/compaction/index.d.ts.map +1 -1
  378. package/dist/core/compaction/index.js.map +1 -1
  379. package/dist/core/compaction/utils.d.ts.map +1 -1
  380. package/dist/core/compaction/utils.js.map +1 -1
  381. package/dist/core/computer/captura.d.ts.map +1 -1
  382. package/dist/core/computer/captura.js.map +1 -1
  383. package/dist/core/computer/driver.d.ts.map +1 -1
  384. package/dist/core/computer/driver.js.map +1 -1
  385. package/dist/core/computer/motor/actions.d.ts.map +1 -1
  386. package/dist/core/computer/motor/actions.js.map +1 -1
  387. package/dist/core/computer/motor/bridge.d.ts +2 -2
  388. package/dist/core/computer/motor/bridge.d.ts.map +1 -1
  389. package/dist/core/computer/motor/bridge.js.map +1 -1
  390. package/dist/core/computer/motor/cdp.d.ts.map +1 -1
  391. package/dist/core/computer/motor/cdp.js.map +1 -1
  392. package/dist/core/computer/motor/config.d.ts.map +1 -1
  393. package/dist/core/computer/motor/config.js.map +1 -1
  394. package/dist/core/computer/motor/contract.d.ts.map +1 -1
  395. package/dist/core/computer/motor/contract.js.map +1 -1
  396. package/dist/core/computer/motor/note.d.ts.map +1 -1
  397. package/dist/core/computer/motor/note.js.map +1 -1
  398. package/dist/core/computer/motor/outline.d.ts.map +1 -1
  399. package/dist/core/computer/motor/outline.js.map +1 -1
  400. package/dist/core/computer/motor/output.d.ts.map +1 -1
  401. package/dist/core/computer/motor/output.js.map +1 -1
  402. package/dist/core/computer/motor/permissions.d.ts.map +1 -1
  403. package/dist/core/computer/motor/permissions.js.map +1 -1
  404. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -1
  405. package/dist/core/computer/motor/platform/architecture.js.map +1 -1
  406. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -1
  407. package/dist/core/computer/motor/platform/coerce.js.map +1 -1
  408. package/dist/core/computer/motor/platform/index.d.ts.map +1 -1
  409. package/dist/core/computer/motor/platform/index.js.map +1 -1
  410. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -1
  411. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -1
  412. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -1
  413. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -1
  414. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -1
  415. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -1
  416. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -1
  417. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -1
  418. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -1
  419. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -1
  420. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -1
  421. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -1
  422. package/dist/core/computer/motor/platform/types.d.ts.map +1 -1
  423. package/dist/core/computer/motor/platform/types.js.map +1 -1
  424. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -1
  425. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -1
  426. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -1
  427. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -1
  428. package/dist/core/computer/motor/root-selection.d.ts.map +1 -1
  429. package/dist/core/computer/motor/root-selection.js.map +1 -1
  430. package/dist/core/computer/motor/runtime.d.ts.map +1 -1
  431. package/dist/core/computer/motor/runtime.js.map +1 -1
  432. package/dist/core/computer/motor/state.d.ts.map +1 -1
  433. package/dist/core/computer/motor/state.js.map +1 -1
  434. package/dist/core/computer/motor/view.d.ts.map +1 -1
  435. package/dist/core/computer/motor/view.js.map +1 -1
  436. package/dist/core/computer/motor-ada.d.ts.map +1 -1
  437. package/dist/core/computer/motor-ada.js.map +1 -1
  438. package/dist/core/computer/politica.d.ts.map +1 -1
  439. package/dist/core/computer/politica.js.map +1 -1
  440. package/dist/core/computer/tools.d.ts.map +1 -1
  441. package/dist/core/computer/tools.js.map +1 -1
  442. package/dist/core/config/quarantine.d.ts +57 -0
  443. package/dist/core/config/quarantine.d.ts.map +1 -0
  444. package/dist/core/config/quarantine.js +161 -0
  445. package/dist/core/config/quarantine.js.map +1 -0
  446. package/dist/core/config-viva/ambito.d.ts +46 -0
  447. package/dist/core/config-viva/ambito.d.ts.map +1 -0
  448. package/dist/core/config-viva/ambito.js +62 -0
  449. package/dist/core/config-viva/ambito.js.map +1 -0
  450. package/dist/core/config-viva/cache-negativa.d.ts +50 -0
  451. package/dist/core/config-viva/cache-negativa.d.ts.map +1 -0
  452. package/dist/core/config-viva/cache-negativa.js +78 -0
  453. package/dist/core/config-viva/cache-negativa.js.map +1 -0
  454. package/dist/core/config-viva/headers-vivos.d.ts +41 -0
  455. package/dist/core/config-viva/headers-vivos.d.ts.map +1 -0
  456. package/dist/core/config-viva/headers-vivos.js +43 -0
  457. package/dist/core/config-viva/headers-vivos.js.map +1 -0
  458. package/dist/core/config-viva/index.d.ts +16 -0
  459. package/dist/core/config-viva/index.d.ts.map +1 -0
  460. package/dist/core/config-viva/index.js +16 -0
  461. package/dist/core/config-viva/index.js.map +1 -0
  462. package/dist/core/config-viva/proveedor.d.ts +48 -0
  463. package/dist/core/config-viva/proveedor.d.ts.map +1 -0
  464. package/dist/core/config-viva/proveedor.js +78 -0
  465. package/dist/core/config-viva/proveedor.js.map +1 -0
  466. package/dist/core/context-breakdown.d.ts.map +1 -1
  467. package/dist/core/context-breakdown.js.map +1 -1
  468. package/dist/core/credenciales/cliente.d.ts.map +1 -1
  469. package/dist/core/credenciales/cliente.js.map +1 -1
  470. package/dist/core/credenciales/pool.d.ts +36 -1
  471. package/dist/core/credenciales/pool.d.ts.map +1 -1
  472. package/dist/core/credenciales/pool.js +56 -7
  473. package/dist/core/credenciales/pool.js.map +1 -1
  474. package/dist/core/credenciales/ranking.d.ts +56 -0
  475. package/dist/core/credenciales/ranking.d.ts.map +1 -0
  476. package/dist/core/credenciales/ranking.js +94 -0
  477. package/dist/core/credenciales/ranking.js.map +1 -0
  478. package/dist/core/credenciales/ratelimit.d.ts +54 -0
  479. package/dist/core/credenciales/ratelimit.d.ts.map +1 -0
  480. package/dist/core/credenciales/ratelimit.js +116 -0
  481. package/dist/core/credenciales/ratelimit.js.map +1 -0
  482. package/dist/core/credenciales/reposo.d.ts.map +1 -1
  483. package/dist/core/credenciales/reposo.js.map +1 -1
  484. package/dist/core/credenciales/servidor.d.ts +8 -0
  485. package/dist/core/credenciales/servidor.d.ts.map +1 -1
  486. package/dist/core/credenciales/servidor.js +9 -1
  487. package/dist/core/credenciales/servidor.js.map +1 -1
  488. package/dist/core/defaults.d.ts.map +1 -1
  489. package/dist/core/defaults.js.map +1 -1
  490. package/dist/core/descubrimiento/comandos.d.ts.map +1 -1
  491. package/dist/core/descubrimiento/comandos.js.map +1 -1
  492. package/dist/core/descubrimiento/mcp.d.ts +12 -0
  493. package/dist/core/descubrimiento/mcp.d.ts.map +1 -1
  494. package/dist/core/descubrimiento/mcp.js +32 -0
  495. package/dist/core/descubrimiento/mcp.js.map +1 -1
  496. package/dist/core/descubrimiento/reglas.d.ts.map +1 -1
  497. package/dist/core/descubrimiento/reglas.js.map +1 -1
  498. package/dist/core/descubrimiento/runtimes/index.d.ts +24 -0
  499. package/dist/core/descubrimiento/runtimes/index.d.ts.map +1 -0
  500. package/dist/core/descubrimiento/runtimes/index.js +109 -0
  501. package/dist/core/descubrimiento/runtimes/index.js.map +1 -0
  502. package/dist/core/descubrimiento/runtimes/litellm.d.ts +12 -0
  503. package/dist/core/descubrimiento/runtimes/litellm.d.ts.map +1 -0
  504. package/dist/core/descubrimiento/runtimes/litellm.js +185 -0
  505. package/dist/core/descubrimiento/runtimes/litellm.js.map +1 -0
  506. package/dist/core/descubrimiento/runtimes/lm-studio.d.ts +13 -0
  507. package/dist/core/descubrimiento/runtimes/lm-studio.d.ts.map +1 -0
  508. package/dist/core/descubrimiento/runtimes/lm-studio.js +142 -0
  509. package/dist/core/descubrimiento/runtimes/lm-studio.js.map +1 -0
  510. package/dist/core/descubrimiento/runtimes/ollama.d.ts +8 -0
  511. package/dist/core/descubrimiento/runtimes/ollama.d.ts.map +1 -0
  512. package/dist/core/descubrimiento/runtimes/ollama.js +96 -0
  513. package/dist/core/descubrimiento/runtimes/ollama.js.map +1 -0
  514. package/dist/core/descubrimiento/runtimes/tipos.d.ts +47 -0
  515. package/dist/core/descubrimiento/runtimes/tipos.d.ts.map +1 -0
  516. package/dist/core/descubrimiento/runtimes/tipos.js +10 -0
  517. package/dist/core/descubrimiento/runtimes/tipos.js.map +1 -0
  518. package/dist/core/descubrimiento/skills.d.ts.map +1 -1
  519. package/dist/core/descubrimiento/skills.js.map +1 -1
  520. package/dist/core/diagnostics.d.ts.map +1 -1
  521. package/dist/core/diagnostics.js.map +1 -1
  522. package/dist/core/dificultad/clasificador.d.ts.map +1 -1
  523. package/dist/core/dificultad/clasificador.js.map +1 -1
  524. package/dist/core/edicion/diario.d.ts.map +1 -1
  525. package/dist/core/edicion/diario.js.map +1 -1
  526. package/dist/core/edicion/hashline.d.ts.map +1 -1
  527. package/dist/core/edicion/hashline.js.map +1 -1
  528. package/dist/core/edicion/hueco.d.ts.map +1 -1
  529. package/dist/core/edicion/hueco.js.map +1 -1
  530. package/dist/core/edicion/ipynb.d.ts +51 -0
  531. package/dist/core/edicion/ipynb.d.ts.map +1 -0
  532. package/dist/core/edicion/ipynb.js +110 -0
  533. package/dist/core/edicion/ipynb.js.map +1 -0
  534. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -1
  535. package/dist/core/edicion/limpiar-carga.js.map +1 -1
  536. package/dist/core/edicion/observador.d.ts.map +1 -1
  537. package/dist/core/edicion/observador.js.map +1 -1
  538. package/dist/core/edicion/parecido.d.ts.map +1 -1
  539. package/dist/core/edicion/parecido.js.map +1 -1
  540. package/dist/core/edicion/parseo.d.ts.map +1 -1
  541. package/dist/core/edicion/parseo.js.map +1 -1
  542. package/dist/core/edicion/portapapeles.d.ts +28 -0
  543. package/dist/core/edicion/portapapeles.d.ts.map +1 -0
  544. package/dist/core/edicion/portapapeles.js +49 -0
  545. package/dist/core/edicion/portapapeles.js.map +1 -0
  546. package/dist/core/edicion/reparacion.d.ts.map +1 -1
  547. package/dist/core/edicion/reparacion.js.map +1 -1
  548. package/dist/core/edicion/rutas-difusas.d.ts +44 -0
  549. package/dist/core/edicion/rutas-difusas.d.ts.map +1 -0
  550. package/dist/core/edicion/rutas-difusas.js +93 -0
  551. package/dist/core/edicion/rutas-difusas.js.map +1 -0
  552. package/dist/core/edicion/sangria.d.ts.map +1 -1
  553. package/dist/core/edicion/sangria.js.map +1 -1
  554. package/dist/core/edicion/tipos.d.ts.map +1 -1
  555. package/dist/core/edicion/tipos.js.map +1 -1
  556. package/dist/core/engine-personality.d.ts.map +1 -1
  557. package/dist/core/engine-personality.js.map +1 -1
  558. package/dist/core/errores/proveedor.d.ts.map +1 -1
  559. package/dist/core/errores/proveedor.js.map +1 -1
  560. package/dist/core/estructural/buscar.d.ts.map +1 -1
  561. package/dist/core/estructural/buscar.js.map +1 -1
  562. package/dist/core/estructural/editar.d.ts.map +1 -1
  563. package/dist/core/estructural/editar.js.map +1 -1
  564. package/dist/core/estructural/tools.d.ts.map +1 -1
  565. package/dist/core/estructural/tools.js.map +1 -1
  566. package/dist/core/event-bus.d.ts.map +1 -1
  567. package/dist/core/event-bus.js.map +1 -1
  568. package/dist/core/exec.d.ts.map +1 -1
  569. package/dist/core/exec.js.map +1 -1
  570. package/dist/core/experimental.d.ts.map +1 -1
  571. package/dist/core/experimental.js.map +1 -1
  572. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  573. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  574. package/dist/core/export-html/index.d.ts.map +1 -1
  575. package/dist/core/export-html/index.js +183 -13
  576. package/dist/core/export-html/index.js.map +1 -1
  577. package/dist/core/export-html/template.css +88 -4
  578. package/dist/core/export-html/template.html +3 -1
  579. package/dist/core/export-html/template.js +84 -0
  580. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  581. package/dist/core/export-html/tool-renderer.js.map +1 -1
  582. package/dist/core/extensiones/suplantacion.d.ts.map +1 -1
  583. package/dist/core/extensiones/suplantacion.js.map +1 -1
  584. package/dist/core/extensiones/vigilancia.d.ts.map +1 -1
  585. package/dist/core/extensiones/vigilancia.js.map +1 -1
  586. package/dist/core/extensions/index.d.ts.map +1 -1
  587. package/dist/core/extensions/index.js.map +1 -1
  588. package/dist/core/extensions/loader.d.ts.map +1 -1
  589. package/dist/core/extensions/loader.js.map +1 -1
  590. package/dist/core/extensions/runner.d.ts.map +1 -1
  591. package/dist/core/extensions/runner.js.map +1 -1
  592. package/dist/core/extensions/types.d.ts.map +1 -1
  593. package/dist/core/extensions/types.js.map +1 -1
  594. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  595. package/dist/core/extensions/wrapper.js.map +1 -1
  596. package/dist/core/footer-data-provider.d.ts.map +1 -1
  597. package/dist/core/footer-data-provider.js.map +1 -1
  598. package/dist/core/gc/archivo-frio.d.ts +33 -0
  599. package/dist/core/gc/archivo-frio.d.ts.map +1 -0
  600. package/dist/core/gc/archivo-frio.js +152 -0
  601. package/dist/core/gc/archivo-frio.js.map +1 -0
  602. package/dist/core/gc/blobs-gc.d.ts +25 -0
  603. package/dist/core/gc/blobs-gc.d.ts.map +1 -0
  604. package/dist/core/gc/blobs-gc.js +143 -0
  605. package/dist/core/gc/blobs-gc.js.map +1 -0
  606. package/dist/core/gc/index.d.ts +42 -0
  607. package/dist/core/gc/index.d.ts.map +1 -0
  608. package/dist/core/gc/index.js +50 -0
  609. package/dist/core/gc/index.js.map +1 -0
  610. package/dist/core/gc/lock.d.ts +19 -0
  611. package/dist/core/gc/lock.d.ts.map +1 -0
  612. package/dist/core/gc/lock.js +48 -0
  613. package/dist/core/gc/lock.js.map +1 -0
  614. package/dist/core/gc/reconciliacion.d.ts +19 -0
  615. package/dist/core/gc/reconciliacion.d.ts.map +1 -0
  616. package/dist/core/gc/reconciliacion.js +102 -0
  617. package/dist/core/gc/reconciliacion.js.map +1 -0
  618. package/dist/core/gc/wal.d.ts +15 -0
  619. package/dist/core/gc/wal.d.ts.map +1 -0
  620. package/dist/core/gc/wal.js +44 -0
  621. package/dist/core/gc/wal.js.map +1 -0
  622. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -1
  623. package/dist/core/harness/fuentes-de-contexto.js.map +1 -1
  624. package/dist/core/harness/refine.d.ts.map +1 -1
  625. package/dist/core/harness/refine.js.map +1 -1
  626. package/dist/core/harness/store.d.ts.map +1 -1
  627. package/dist/core/harness/store.js.map +1 -1
  628. package/dist/core/higiene/index.d.ts +8 -0
  629. package/dist/core/higiene/index.d.ts.map +1 -0
  630. package/dist/core/higiene/index.js +8 -0
  631. package/dist/core/higiene/index.js.map +1 -0
  632. package/dist/core/higiene/managed-timers.d.ts +19 -0
  633. package/dist/core/higiene/managed-timers.d.ts.map +1 -0
  634. package/dist/core/higiene/managed-timers.js +68 -0
  635. package/dist/core/higiene/managed-timers.js.map +1 -0
  636. package/dist/core/higiene/race-handler.d.ts +7 -0
  637. package/dist/core/higiene/race-handler.d.ts.map +1 -0
  638. package/dist/core/higiene/race-handler.js +32 -0
  639. package/dist/core/higiene/race-handler.js.map +1 -0
  640. package/dist/core/higiene/withHostGuard.d.ts +27 -0
  641. package/dist/core/higiene/withHostGuard.d.ts.map +1 -0
  642. package/dist/core/higiene/withHostGuard.js +79 -0
  643. package/dist/core/higiene/withHostGuard.js.map +1 -0
  644. package/dist/core/hooks/contract.d.ts.map +1 -1
  645. package/dist/core/hooks/contract.js.map +1 -1
  646. package/dist/core/hooks/runner.d.ts.map +1 -1
  647. package/dist/core/hooks/runner.js.map +1 -1
  648. package/dist/core/hooks/session-hooks.d.ts.map +1 -1
  649. package/dist/core/hooks/session-hooks.js.map +1 -1
  650. package/dist/core/hooks-ts/cargador.d.ts +29 -0
  651. package/dist/core/hooks-ts/cargador.d.ts.map +1 -0
  652. package/dist/core/hooks-ts/cargador.js +51 -0
  653. package/dist/core/hooks-ts/cargador.js.map +1 -0
  654. package/dist/core/hooks-ts/index.d.ts +25 -0
  655. package/dist/core/hooks-ts/index.d.ts.map +1 -0
  656. package/dist/core/hooks-ts/index.js +25 -0
  657. package/dist/core/hooks-ts/index.js.map +1 -0
  658. package/dist/core/hooks-ts/runner.d.ts +40 -0
  659. package/dist/core/hooks-ts/runner.d.ts.map +1 -0
  660. package/dist/core/hooks-ts/runner.js +95 -0
  661. package/dist/core/hooks-ts/runner.js.map +1 -0
  662. package/dist/core/hooks-ts/tipos.d.ts +69 -0
  663. package/dist/core/hooks-ts/tipos.d.ts.map +1 -0
  664. package/dist/core/hooks-ts/tipos.js +90 -0
  665. package/dist/core/hooks-ts/tipos.js.map +1 -0
  666. package/dist/core/http-dispatcher.d.ts.map +1 -1
  667. package/dist/core/http-dispatcher.js.map +1 -1
  668. package/dist/core/importar/formatos.d.ts.map +1 -1
  669. package/dist/core/importar/formatos.js.map +1 -1
  670. package/dist/core/index.d.ts.map +1 -1
  671. package/dist/core/index.js.map +1 -1
  672. package/dist/core/interactivo/deteccion.d.ts.map +1 -1
  673. package/dist/core/interactivo/deteccion.js.map +1 -1
  674. package/dist/core/interactivo/sesion.d.ts.map +1 -1
  675. package/dist/core/interactivo/sesion.js.map +1 -1
  676. package/dist/core/interactivo/tools.d.ts.map +1 -1
  677. package/dist/core/interactivo/tools.js.map +1 -1
  678. package/dist/core/keybindings.d.ts +170 -170
  679. package/dist/core/keybindings.d.ts.map +1 -1
  680. package/dist/core/keybindings.js.map +1 -1
  681. package/dist/core/lectura/mapa.d.ts.map +1 -1
  682. package/dist/core/lectura/mapa.js.map +1 -1
  683. package/dist/core/lectura/pdf.d.ts.map +1 -1
  684. package/dist/core/lectura/pdf.js.map +1 -1
  685. package/dist/core/lectura/sniffer.d.ts +54 -0
  686. package/dist/core/lectura/sniffer.d.ts.map +1 -0
  687. package/dist/core/lectura/sniffer.js +106 -0
  688. package/dist/core/lectura/sniffer.js.map +1 -0
  689. package/dist/core/limpieza/comprobadores.d.ts +16 -2
  690. package/dist/core/limpieza/comprobadores.d.ts.map +1 -1
  691. package/dist/core/limpieza/comprobadores.js +200 -6
  692. package/dist/core/limpieza/comprobadores.js.map +1 -1
  693. package/dist/core/limpieza/flujo.d.ts +36 -0
  694. package/dist/core/limpieza/flujo.d.ts.map +1 -0
  695. package/dist/core/limpieza/flujo.js +89 -0
  696. package/dist/core/limpieza/flujo.js.map +1 -0
  697. package/dist/core/limpieza/parseo.d.ts.map +1 -1
  698. package/dist/core/limpieza/parseo.js.map +1 -1
  699. package/dist/core/limpieza/peso.d.ts +17 -0
  700. package/dist/core/limpieza/peso.d.ts.map +1 -0
  701. package/dist/core/limpieza/peso.js +52 -0
  702. package/dist/core/limpieza/peso.js.map +1 -0
  703. package/dist/core/limpieza/pool.d.ts +44 -0
  704. package/dist/core/limpieza/pool.d.ts.map +1 -0
  705. package/dist/core/limpieza/pool.js +123 -0
  706. package/dist/core/limpieza/pool.js.map +1 -0
  707. package/dist/core/limpieza/reparacion.d.ts +19 -2
  708. package/dist/core/limpieza/reparacion.d.ts.map +1 -1
  709. package/dist/core/limpieza/reparacion.js +95 -8
  710. package/dist/core/limpieza/reparacion.js.map +1 -1
  711. package/dist/core/limpieza/tablero.d.ts +47 -0
  712. package/dist/core/limpieza/tablero.d.ts.map +1 -0
  713. package/dist/core/limpieza/tablero.js +78 -0
  714. package/dist/core/limpieza/tablero.js.map +1 -0
  715. package/dist/core/limpieza/tipos.d.ts +25 -0
  716. package/dist/core/limpieza/tipos.d.ts.map +1 -1
  717. package/dist/core/limpieza/tipos.js.map +1 -1
  718. package/dist/core/lsp/cliente.d.ts +7 -0
  719. package/dist/core/lsp/cliente.d.ts.map +1 -1
  720. package/dist/core/lsp/cliente.js +4 -2
  721. package/dist/core/lsp/cliente.js.map +1 -1
  722. package/dist/core/lsp/descubrimiento.d.ts.map +1 -1
  723. package/dist/core/lsp/descubrimiento.js.map +1 -1
  724. package/dist/core/lsp/ediciones.d.ts.map +1 -1
  725. package/dist/core/lsp/ediciones.js.map +1 -1
  726. package/dist/core/lsp/extension.d.ts +9 -0
  727. package/dist/core/lsp/extension.d.ts.map +1 -1
  728. package/dist/core/lsp/extension.js +60 -4
  729. package/dist/core/lsp/extension.js.map +1 -1
  730. package/dist/core/lsp/formato.d.ts +72 -0
  731. package/dist/core/lsp/formato.d.ts.map +1 -0
  732. package/dist/core/lsp/formato.js +117 -0
  733. package/dist/core/lsp/formato.js.map +1 -0
  734. package/dist/core/lsp/tools.d.ts +3 -3
  735. package/dist/core/lsp/tools.d.ts.map +1 -1
  736. package/dist/core/lsp/tools.js.map +1 -1
  737. package/dist/core/lsp/writethrough.d.ts +165 -0
  738. package/dist/core/lsp/writethrough.d.ts.map +1 -0
  739. package/dist/core/lsp/writethrough.js +282 -0
  740. package/dist/core/lsp/writethrough.js.map +1 -0
  741. package/dist/core/marketplace/catalogo.d.ts +32 -0
  742. package/dist/core/marketplace/catalogo.d.ts.map +1 -0
  743. package/dist/core/marketplace/catalogo.js +122 -0
  744. package/dist/core/marketplace/catalogo.js.map +1 -0
  745. package/dist/core/marketplace/doctor.d.ts +47 -0
  746. package/dist/core/marketplace/doctor.d.ts.map +1 -0
  747. package/dist/core/marketplace/doctor.js +155 -0
  748. package/dist/core/marketplace/doctor.js.map +1 -0
  749. package/dist/core/marketplace/features.d.ts +22 -0
  750. package/dist/core/marketplace/features.d.ts.map +1 -0
  751. package/dist/core/marketplace/features.js +70 -0
  752. package/dist/core/marketplace/features.js.map +1 -0
  753. package/dist/core/marketplace/index.d.ts +33 -0
  754. package/dist/core/marketplace/index.d.ts.map +1 -0
  755. package/dist/core/marketplace/index.js +33 -0
  756. package/dist/core/marketplace/index.js.map +1 -0
  757. package/dist/core/marketplace/instalar.d.ts +27 -0
  758. package/dist/core/marketplace/instalar.d.ts.map +1 -0
  759. package/dist/core/marketplace/instalar.js +50 -0
  760. package/dist/core/marketplace/instalar.js.map +1 -0
  761. package/dist/core/mcp/client.d.ts.map +1 -1
  762. package/dist/core/mcp/client.js.map +1 -1
  763. package/dist/core/mcp/manager.d.ts.map +1 -1
  764. package/dist/core/mcp/manager.js.map +1 -1
  765. package/dist/core/mcp/oauth.d.ts +138 -0
  766. package/dist/core/mcp/oauth.d.ts.map +1 -0
  767. package/dist/core/mcp/oauth.js +348 -0
  768. package/dist/core/mcp/oauth.js.map +1 -0
  769. package/dist/core/mcp/tools.d.ts.map +1 -1
  770. package/dist/core/mcp/tools.js.map +1 -1
  771. package/dist/core/memoria/almacen.d.ts +56 -0
  772. package/dist/core/memoria/almacen.d.ts.map +1 -0
  773. package/dist/core/memoria/almacen.js +214 -0
  774. package/dist/core/memoria/almacen.js.map +1 -0
  775. package/dist/core/memoria/dr/respaldo.d.ts +34 -0
  776. package/dist/core/memoria/dr/respaldo.d.ts.map +1 -0
  777. package/dist/core/memoria/dr/respaldo.js +133 -0
  778. package/dist/core/memoria/dr/respaldo.js.map +1 -0
  779. package/dist/core/memoria/embeddings.d.ts +21 -0
  780. package/dist/core/memoria/embeddings.d.ts.map +1 -0
  781. package/dist/core/memoria/embeddings.js +87 -0
  782. package/dist/core/memoria/embeddings.js.map +1 -0
  783. package/dist/core/memoria/grafo.d.ts +56 -0
  784. package/dist/core/memoria/grafo.d.ts.map +1 -0
  785. package/dist/core/memoria/grafo.js +143 -0
  786. package/dist/core/memoria/grafo.js.map +1 -0
  787. package/dist/core/memoria/redaccion.d.ts +32 -0
  788. package/dist/core/memoria/redaccion.d.ts.map +1 -0
  789. package/dist/core/memoria/redaccion.js +76 -0
  790. package/dist/core/memoria/redaccion.js.map +1 -0
  791. package/dist/core/memoria/servidor/almacen-json.d.ts +26 -0
  792. package/dist/core/memoria/servidor/almacen-json.d.ts.map +1 -0
  793. package/dist/core/memoria/servidor/almacen-json.js +90 -0
  794. package/dist/core/memoria/servidor/almacen-json.js.map +1 -0
  795. package/dist/core/memoria/servidor/servidor.d.ts +43 -0
  796. package/dist/core/memoria/servidor/servidor.d.ts.map +1 -0
  797. package/dist/core/memoria/servidor/servidor.js +195 -0
  798. package/dist/core/memoria/servidor/servidor.js.map +1 -0
  799. package/dist/core/memoria/servidor/tipos.d.ts +44 -0
  800. package/dist/core/memoria/servidor/tipos.d.ts.map +1 -0
  801. package/dist/core/memoria/servidor/tipos.js +12 -0
  802. package/dist/core/memoria/servidor/tipos.js.map +1 -0
  803. package/dist/core/memoria/tipos.d.ts +63 -0
  804. package/dist/core/memoria/tipos.d.ts.map +1 -0
  805. package/dist/core/memoria/tipos.js +14 -0
  806. package/dist/core/memoria/tipos.js.map +1 -0
  807. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  808. package/dist/core/memory-engine/audit-export.js.map +1 -1
  809. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -1
  810. package/dist/core/memory-engine/audit-indice.js.map +1 -1
  811. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  812. package/dist/core/memory-engine/audit.js.map +1 -1
  813. package/dist/core/memory-engine/engine.d.ts +7 -0
  814. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  815. package/dist/core/memory-engine/engine.js.map +1 -1
  816. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  817. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  818. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  819. package/dist/core/memory-engine/keychain.js.map +1 -1
  820. package/dist/core/memory-engine/observation-store.d.ts +1 -0
  821. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  822. package/dist/core/memory-engine/observation-store.js.map +1 -1
  823. package/dist/core/memory-engine/refinements.d.ts.map +1 -1
  824. package/dist/core/memory-engine/refinements.js.map +1 -1
  825. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  826. package/dist/core/memory-engine/scanner.js.map +1 -1
  827. package/dist/core/memory-engine/security.d.ts.map +1 -1
  828. package/dist/core/memory-engine/security.js.map +1 -1
  829. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  830. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  831. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  832. package/dist/core/memory-engine/tools.js.map +1 -1
  833. package/dist/core/memory-engine/types.d.ts.map +1 -1
  834. package/dist/core/memory-engine/types.js.map +1 -1
  835. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  836. package/dist/core/memory-engine/vault.js.map +1 -1
  837. package/dist/core/messages.d.ts.map +1 -1
  838. package/dist/core/messages.js.map +1 -1
  839. package/dist/core/metaharness/cli.d.ts +19 -0
  840. package/dist/core/metaharness/cli.d.ts.map +1 -0
  841. package/dist/core/metaharness/cli.js +171 -0
  842. package/dist/core/metaharness/cli.js.map +1 -0
  843. package/dist/core/metaharness/comparar.d.ts +21 -0
  844. package/dist/core/metaharness/comparar.d.ts.map +1 -0
  845. package/dist/core/metaharness/comparar.js +64 -0
  846. package/dist/core/metaharness/comparar.js.map +1 -0
  847. package/dist/core/metaharness/ejecutar.d.ts +70 -0
  848. package/dist/core/metaharness/ejecutar.d.ts.map +1 -0
  849. package/dist/core/metaharness/ejecutar.js +249 -0
  850. package/dist/core/metaharness/ejecutar.js.map +1 -0
  851. package/dist/core/metaharness/tipos.d.ts +142 -0
  852. package/dist/core/metaharness/tipos.d.ts.map +1 -0
  853. package/dist/core/metaharness/tipos.js +17 -0
  854. package/dist/core/metaharness/tipos.js.map +1 -0
  855. package/dist/core/model-config.d.ts +8 -8
  856. package/dist/core/model-config.d.ts.map +1 -1
  857. package/dist/core/model-config.js.map +1 -1
  858. package/dist/core/model-registry.d.ts.map +1 -1
  859. package/dist/core/model-registry.js.map +1 -1
  860. package/dist/core/model-resolver.d.ts.map +1 -1
  861. package/dist/core/model-resolver.js.map +1 -1
  862. package/dist/core/model-runtime.d.ts.map +1 -1
  863. package/dist/core/model-runtime.js.map +1 -1
  864. package/dist/core/models-store.d.ts.map +1 -1
  865. package/dist/core/models-store.js.map +1 -1
  866. package/dist/core/muestreo-restringido.d.ts.map +1 -1
  867. package/dist/core/muestreo-restringido.js.map +1 -1
  868. package/dist/core/orphan-process-journal.d.ts.map +1 -1
  869. package/dist/core/orphan-process-journal.js.map +1 -1
  870. package/dist/core/output-guard.d.ts.map +1 -1
  871. package/dist/core/output-guard.js.map +1 -1
  872. package/dist/core/package-manager.d.ts.map +1 -1
  873. package/dist/core/package-manager.js.map +1 -1
  874. package/dist/core/parche/aplicar.d.ts +19 -0
  875. package/dist/core/parche/aplicar.d.ts.map +1 -0
  876. package/dist/core/parche/aplicar.js +243 -0
  877. package/dist/core/parche/aplicar.js.map +1 -0
  878. package/dist/core/parche/parser.d.ts +38 -0
  879. package/dist/core/parche/parser.d.ts.map +1 -0
  880. package/dist/core/parche/parser.js +217 -0
  881. package/dist/core/parche/parser.js.map +1 -0
  882. package/dist/core/parche/registro.d.ts +12 -0
  883. package/dist/core/parche/registro.d.ts.map +1 -0
  884. package/dist/core/parche/registro.js +58 -0
  885. package/dist/core/parche/registro.js.map +1 -0
  886. package/dist/core/perfiles/index.d.ts +22 -0
  887. package/dist/core/perfiles/index.d.ts.map +1 -0
  888. package/dist/core/perfiles/index.js +21 -0
  889. package/dist/core/perfiles/index.js.map +1 -0
  890. package/dist/core/perfiles/resolver.d.ts +51 -0
  891. package/dist/core/perfiles/resolver.d.ts.map +1 -0
  892. package/dist/core/perfiles/resolver.js +329 -0
  893. package/dist/core/perfiles/resolver.js.map +1 -0
  894. package/dist/core/perfiles/tipos.d.ts +69 -0
  895. package/dist/core/perfiles/tipos.d.ts.map +1 -0
  896. package/dist/core/perfiles/tipos.js +98 -0
  897. package/dist/core/perfiles/tipos.js.map +1 -0
  898. package/dist/core/pi-manifest.d.ts.map +1 -1
  899. package/dist/core/pi-manifest.js.map +1 -1
  900. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -1
  901. package/dist/core/privacidad/categorias-especiales.js +4 -0
  902. package/dist/core/privacidad/categorias-especiales.js.map +1 -1
  903. package/dist/core/privacidad/tapar.d.ts.map +1 -1
  904. package/dist/core/privacidad/tapar.js.map +1 -1
  905. package/dist/core/project-memory.d.ts.map +1 -1
  906. package/dist/core/project-memory.js.map +1 -1
  907. package/dist/core/project-trust.d.ts.map +1 -1
  908. package/dist/core/project-trust.js.map +1 -1
  909. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -1
  910. package/dist/core/prompt-cache/diagnostics.js.map +1 -1
  911. package/dist/core/prompt-cache/index.d.ts.map +1 -1
  912. package/dist/core/prompt-cache/index.js.map +1 -1
  913. package/dist/core/prompt-cache/payload.d.ts.map +1 -1
  914. package/dist/core/prompt-cache/payload.js.map +1 -1
  915. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -1
  916. package/dist/core/prompt-cache/stabilize.js.map +1 -1
  917. package/dist/core/prompt-cache/stats.d.ts.map +1 -1
  918. package/dist/core/prompt-cache/stats.js.map +1 -1
  919. package/dist/core/prompt-eleccion.d.ts.map +1 -1
  920. package/dist/core/prompt-eleccion.js.map +1 -1
  921. package/dist/core/prompt-optimizer.d.ts.map +1 -1
  922. package/dist/core/prompt-optimizer.js.map +1 -1
  923. package/dist/core/prompt-templates.d.ts.map +1 -1
  924. package/dist/core/prompt-templates.js.map +1 -1
  925. package/dist/core/prompts/montar.d.ts.map +1 -1
  926. package/dist/core/prompts/montar.js.map +1 -1
  927. package/dist/core/prompts/plantilla.d.ts.map +1 -1
  928. package/dist/core/prompts/plantilla.js.map +1 -1
  929. package/dist/core/proveedores-registry/definiciones.d.ts +15 -0
  930. package/dist/core/proveedores-registry/definiciones.d.ts.map +1 -0
  931. package/dist/core/proveedores-registry/definiciones.js +22 -0
  932. package/dist/core/proveedores-registry/definiciones.js.map +1 -0
  933. package/dist/core/proveedores-registry/index.d.ts +14 -0
  934. package/dist/core/proveedores-registry/index.d.ts.map +1 -0
  935. package/dist/core/proveedores-registry/index.js +13 -0
  936. package/dist/core/proveedores-registry/index.js.map +1 -0
  937. package/dist/core/proveedores-registry/resolver.d.ts +25 -0
  938. package/dist/core/proveedores-registry/resolver.d.ts.map +1 -0
  939. package/dist/core/proveedores-registry/resolver.js +69 -0
  940. package/dist/core/proveedores-registry/resolver.js.map +1 -0
  941. package/dist/core/proveedores-registry/tipos.d.ts +47 -0
  942. package/dist/core/proveedores-registry/tipos.d.ts.map +1 -0
  943. package/dist/core/proveedores-registry/tipos.js +15 -0
  944. package/dist/core/proveedores-registry/tipos.js.map +1 -0
  945. package/dist/core/provider-attribution.d.ts.map +1 -1
  946. package/dist/core/provider-attribution.js.map +1 -1
  947. package/dist/core/provider-composer.d.ts.map +1 -1
  948. package/dist/core/provider-composer.js.map +1 -1
  949. package/dist/core/radius.d.ts.map +1 -1
  950. package/dist/core/radius.js.map +1 -1
  951. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  952. package/dist/core/remote-catalog-provider.js.map +1 -1
  953. package/dist/core/remoto/destino.d.ts.map +1 -1
  954. package/dist/core/remoto/destino.js.map +1 -1
  955. package/dist/core/remoto/ejecutor.d.ts.map +1 -1
  956. package/dist/core/remoto/ejecutor.js.map +1 -1
  957. package/dist/core/remoto/ficheros.d.ts.map +1 -1
  958. package/dist/core/remoto/ficheros.js.map +1 -1
  959. package/dist/core/remoto/registro-extension.d.ts.map +1 -1
  960. package/dist/core/remoto/registro-extension.js.map +1 -1
  961. package/dist/core/remoto/tools.d.ts.map +1 -1
  962. package/dist/core/remoto/tools.js.map +1 -1
  963. package/dist/core/reparacion/index.d.ts +2 -0
  964. package/dist/core/reparacion/index.d.ts.map +1 -0
  965. package/dist/core/reparacion/index.js +2 -0
  966. package/dist/core/reparacion/index.js.map +1 -0
  967. package/dist/core/reparacion/reparar-hunk.d.ts +27 -0
  968. package/dist/core/reparacion/reparar-hunk.d.ts.map +1 -0
  969. package/dist/core/reparacion/reparar-hunk.js +139 -0
  970. package/dist/core/reparacion/reparar-hunk.js.map +1 -0
  971. package/dist/core/resolve-config-value.d.ts.map +1 -1
  972. package/dist/core/resolve-config-value.js.map +1 -1
  973. package/dist/core/resource-loader.d.ts +13 -0
  974. package/dist/core/resource-loader.d.ts.map +1 -1
  975. package/dist/core/resource-loader.js +7 -4
  976. package/dist/core/resource-loader.js.map +1 -1
  977. package/dist/core/revision/dispositions.d.ts +86 -0
  978. package/dist/core/revision/dispositions.d.ts.map +1 -0
  979. package/dist/core/revision/dispositions.js +137 -0
  980. package/dist/core/revision/dispositions.js.map +1 -0
  981. package/dist/core/revision/hallazgo.d.ts.map +1 -1
  982. package/dist/core/revision/hallazgo.js.map +1 -1
  983. package/dist/core/revision/procedencia.d.ts +63 -0
  984. package/dist/core/revision/procedencia.d.ts.map +1 -0
  985. package/dist/core/revision/procedencia.js +72 -0
  986. package/dist/core/revision/procedencia.js.map +1 -0
  987. package/dist/core/revision/publicar.d.ts +26 -0
  988. package/dist/core/revision/publicar.d.ts.map +1 -0
  989. package/dist/core/revision/publicar.js +34 -0
  990. package/dist/core/revision/publicar.js.map +1 -0
  991. package/dist/core/revision/revisor.d.ts.map +1 -1
  992. package/dist/core/revision/revisor.js.map +1 -1
  993. package/dist/core/revision/sarif.d.ts.map +1 -1
  994. package/dist/core/revision/sarif.js.map +1 -1
  995. package/dist/core/router-uris/index.d.ts +12 -0
  996. package/dist/core/router-uris/index.d.ts.map +1 -0
  997. package/dist/core/router-uris/index.js +12 -0
  998. package/dist/core/router-uris/index.js.map +1 -0
  999. package/dist/core/router-uris/router.d.ts +2 -0
  1000. package/dist/core/router-uris/router.d.ts.map +1 -0
  1001. package/dist/core/router-uris/router.js +2 -0
  1002. package/dist/core/router-uris/router.js.map +1 -0
  1003. package/dist/core/runtime-credentials.d.ts.map +1 -1
  1004. package/dist/core/runtime-credentials.js.map +1 -1
  1005. package/dist/core/rutas/envoltorio.d.ts +20 -0
  1006. package/dist/core/rutas/envoltorio.d.ts.map +1 -0
  1007. package/dist/core/rutas/envoltorio.js +48 -0
  1008. package/dist/core/rutas/envoltorio.js.map +1 -0
  1009. package/dist/core/rutas/index.d.ts +11 -0
  1010. package/dist/core/rutas/index.d.ts.map +1 -0
  1011. package/dist/core/rutas/index.js +11 -0
  1012. package/dist/core/rutas/index.js.map +1 -0
  1013. package/dist/core/rutas/router.d.ts +82 -0
  1014. package/dist/core/rutas/router.d.ts.map +1 -0
  1015. package/dist/core/rutas/router.js +161 -0
  1016. package/dist/core/rutas/router.js.map +1 -0
  1017. package/dist/core/scheduler/scheduler.d.ts.map +1 -1
  1018. package/dist/core/scheduler/scheduler.js.map +1 -1
  1019. package/dist/core/sdk.d.ts.map +1 -1
  1020. package/dist/core/sdk.js.map +1 -1
  1021. package/dist/core/secretos/extension.d.ts +31 -0
  1022. package/dist/core/secretos/extension.d.ts.map +1 -0
  1023. package/dist/core/secretos/extension.js +64 -0
  1024. package/dist/core/secretos/extension.js.map +1 -0
  1025. package/dist/core/secretos/index.d.ts +75 -0
  1026. package/dist/core/secretos/index.d.ts.map +1 -0
  1027. package/dist/core/secretos/index.js +385 -0
  1028. package/dist/core/secretos/index.js.map +1 -0
  1029. package/dist/core/secretos/message-transform.d.ts +44 -0
  1030. package/dist/core/secretos/message-transform.d.ts.map +1 -0
  1031. package/dist/core/secretos/message-transform.js +246 -0
  1032. package/dist/core/secretos/message-transform.js.map +1 -0
  1033. package/dist/core/secretos/obfuscator.d.ts +30 -0
  1034. package/dist/core/secretos/obfuscator.d.ts.map +1 -0
  1035. package/dist/core/secretos/obfuscator.js +1182 -0
  1036. package/dist/core/secretos/obfuscator.js.map +1 -0
  1037. package/dist/core/secretos/placeholder-scan.d.ts +96 -0
  1038. package/dist/core/secretos/placeholder-scan.d.ts.map +1 -0
  1039. package/dist/core/secretos/placeholder-scan.js +433 -0
  1040. package/dist/core/secretos/placeholder-scan.js.map +1 -0
  1041. package/dist/core/secretos/placeholder.d.ts +95 -0
  1042. package/dist/core/secretos/placeholder.d.ts.map +1 -0
  1043. package/dist/core/secretos/placeholder.js +283 -0
  1044. package/dist/core/secretos/placeholder.js.map +1 -0
  1045. package/dist/core/secretos/regex.d.ts +3 -0
  1046. package/dist/core/secretos/regex.d.ts.map +1 -0
  1047. package/dist/core/secretos/regex.js +19 -0
  1048. package/dist/core/secretos/regex.js.map +1 -0
  1049. package/dist/core/secretos/replacement.d.ts +83 -0
  1050. package/dist/core/secretos/replacement.d.ts.map +1 -0
  1051. package/dist/core/secretos/replacement.js +211 -0
  1052. package/dist/core/secretos/replacement.js.map +1 -0
  1053. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -1
  1054. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -1
  1055. package/dist/core/sesion/journal-tree.d.ts +73 -0
  1056. package/dist/core/sesion/journal-tree.d.ts.map +1 -0
  1057. package/dist/core/sesion/journal-tree.js +241 -0
  1058. package/dist/core/sesion/journal-tree.js.map +1 -0
  1059. package/dist/core/sesion/turn-recovery.d.ts +48 -0
  1060. package/dist/core/sesion/turn-recovery.d.ts.map +1 -0
  1061. package/dist/core/sesion/turn-recovery.js +182 -0
  1062. package/dist/core/sesion/turn-recovery.js.map +1 -0
  1063. package/dist/core/session-cwd.d.ts.map +1 -1
  1064. package/dist/core/session-cwd.js.map +1 -1
  1065. package/dist/core/session-manager.d.ts.map +1 -1
  1066. package/dist/core/session-manager.js.map +1 -1
  1067. package/dist/core/settings-diagnostics.d.ts.map +1 -1
  1068. package/dist/core/settings-diagnostics.js.map +1 -1
  1069. package/dist/core/settings-manager.d.ts +2 -2
  1070. package/dist/core/settings-manager.d.ts.map +1 -1
  1071. package/dist/core/settings-manager.js.map +1 -1
  1072. package/dist/core/share/cifrado.d.ts +39 -0
  1073. package/dist/core/share/cifrado.d.ts.map +1 -0
  1074. package/dist/core/share/cifrado.js +81 -0
  1075. package/dist/core/share/cifrado.js.map +1 -0
  1076. package/dist/core/share/exportar.d.ts +69 -0
  1077. package/dist/core/share/exportar.d.ts.map +1 -0
  1078. package/dist/core/share/exportar.js +247 -0
  1079. package/dist/core/share/exportar.js.map +1 -0
  1080. package/dist/core/skills.d.ts.map +1 -1
  1081. package/dist/core/skills.js.map +1 -1
  1082. package/dist/core/slash-commands.d.ts.map +1 -1
  1083. package/dist/core/slash-commands.js.map +1 -1
  1084. package/dist/core/source-info.d.ts.map +1 -1
  1085. package/dist/core/source-info.js.map +1 -1
  1086. package/dist/core/stream-guard/guardia.d.ts +45 -0
  1087. package/dist/core/stream-guard/guardia.d.ts.map +1 -0
  1088. package/dist/core/stream-guard/guardia.js +100 -0
  1089. package/dist/core/stream-guard/guardia.js.map +1 -0
  1090. package/dist/core/stream-guard/index.d.ts +9 -0
  1091. package/dist/core/stream-guard/index.d.ts.map +1 -0
  1092. package/dist/core/stream-guard/index.js +7 -0
  1093. package/dist/core/stream-guard/index.js.map +1 -0
  1094. package/dist/core/stream-guard/replay.d.ts +39 -0
  1095. package/dist/core/stream-guard/replay.d.ts.map +1 -0
  1096. package/dist/core/stream-guard/replay.js +68 -0
  1097. package/dist/core/stream-guard/replay.js.map +1 -0
  1098. package/dist/core/system-prompt.d.ts.map +1 -1
  1099. package/dist/core/system-prompt.js.map +1 -1
  1100. package/dist/core/telemetria/otlp.d.ts.map +1 -1
  1101. package/dist/core/telemetria/otlp.js.map +1 -1
  1102. package/dist/core/telemetry/otel-genai.d.ts +44 -0
  1103. package/dist/core/telemetry/otel-genai.d.ts.map +1 -0
  1104. package/dist/core/telemetry/otel-genai.js +124 -0
  1105. package/dist/core/telemetry/otel-genai.js.map +1 -0
  1106. package/dist/core/telemetry.d.ts.map +1 -1
  1107. package/dist/core/telemetry.js.map +1 -1
  1108. package/dist/core/terminal/backlog-guard.d.ts +53 -0
  1109. package/dist/core/terminal/backlog-guard.d.ts.map +1 -0
  1110. package/dist/core/terminal/backlog-guard.js +122 -0
  1111. package/dist/core/terminal/backlog-guard.js.map +1 -0
  1112. package/dist/core/terminal/conpty.d.ts +29 -0
  1113. package/dist/core/terminal/conpty.d.ts.map +1 -0
  1114. package/dist/core/terminal/conpty.js +67 -0
  1115. package/dist/core/terminal/conpty.js.map +1 -0
  1116. package/dist/core/terminal/conptyChunking.d.ts +2 -0
  1117. package/dist/core/terminal/conptyChunking.d.ts.map +1 -0
  1118. package/dist/core/terminal/conptyChunking.js +2 -0
  1119. package/dist/core/terminal/conptyChunking.js.map +1 -0
  1120. package/dist/core/terminal/index.d.ts +5 -0
  1121. package/dist/core/terminal/index.d.ts.map +1 -0
  1122. package/dist/core/terminal/index.js +5 -0
  1123. package/dist/core/terminal/index.js.map +1 -0
  1124. package/dist/core/terminal/loop-watchdog.d.ts +43 -0
  1125. package/dist/core/terminal/loop-watchdog.d.ts.map +1 -0
  1126. package/dist/core/terminal/loop-watchdog.js +117 -0
  1127. package/dist/core/terminal/loop-watchdog.js.map +1 -0
  1128. package/dist/core/terminal/runner.d.ts +55 -0
  1129. package/dist/core/terminal/runner.d.ts.map +1 -0
  1130. package/dist/core/terminal/runner.js +102 -0
  1131. package/dist/core/terminal/runner.js.map +1 -0
  1132. package/dist/core/timings.d.ts.map +1 -1
  1133. package/dist/core/timings.js.map +1 -1
  1134. package/dist/core/tools/apply_patch.d.ts +29 -0
  1135. package/dist/core/tools/apply_patch.d.ts.map +1 -0
  1136. package/dist/core/tools/apply_patch.js +54 -0
  1137. package/dist/core/tools/apply_patch.js.map +1 -0
  1138. package/dist/core/tools/bash.d.ts.map +1 -1
  1139. package/dist/core/tools/bash.js.map +1 -1
  1140. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -1
  1141. package/dist/core/tools/coercion-argumentos.js.map +1 -1
  1142. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  1143. package/dist/core/tools/edit-diff.js.map +1 -1
  1144. package/dist/core/tools/edit.d.ts.map +1 -1
  1145. package/dist/core/tools/edit.js +43 -1
  1146. package/dist/core/tools/edit.js.map +1 -1
  1147. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  1148. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  1149. package/dist/core/tools/find.d.ts.map +1 -1
  1150. package/dist/core/tools/find.js.map +1 -1
  1151. package/dist/core/tools/grep.d.ts.map +1 -1
  1152. package/dist/core/tools/grep.js.map +1 -1
  1153. package/dist/core/tools/index.d.ts.map +1 -1
  1154. package/dist/core/tools/index.js.map +1 -1
  1155. package/dist/core/tools/json-tolerante.d.ts.map +1 -1
  1156. package/dist/core/tools/json-tolerante.js.map +1 -1
  1157. package/dist/core/tools/ls.d.ts.map +1 -1
  1158. package/dist/core/tools/ls.js.map +1 -1
  1159. package/dist/core/tools/noop-loop-guard.d.ts +46 -0
  1160. package/dist/core/tools/noop-loop-guard.d.ts.map +1 -0
  1161. package/dist/core/tools/noop-loop-guard.js +57 -0
  1162. package/dist/core/tools/noop-loop-guard.js.map +1 -0
  1163. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  1164. package/dist/core/tools/output-accumulator.js.map +1 -1
  1165. package/dist/core/tools/path-utils.d.ts.map +1 -1
  1166. package/dist/core/tools/path-utils.js.map +1 -1
  1167. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  1168. package/dist/core/tools/project-memory-tool.js.map +1 -1
  1169. package/dist/core/tools/read.d.ts.map +1 -1
  1170. package/dist/core/tools/read.js.map +1 -1
  1171. package/dist/core/tools/render-utils.d.ts.map +1 -1
  1172. package/dist/core/tools/render-utils.js.map +1 -1
  1173. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  1174. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  1175. package/dist/core/tools/truncate.d.ts.map +1 -1
  1176. package/dist/core/tools/truncate.js.map +1 -1
  1177. package/dist/core/tools/write.d.ts.map +1 -1
  1178. package/dist/core/tools/write.js.map +1 -1
  1179. package/dist/core/trust-manager.d.ts.map +1 -1
  1180. package/dist/core/trust-manager.js.map +1 -1
  1181. package/dist/core/ttsr/captura.d.ts +72 -0
  1182. package/dist/core/ttsr/captura.d.ts.map +1 -0
  1183. package/dist/core/ttsr/captura.js +183 -0
  1184. package/dist/core/ttsr/captura.js.map +1 -0
  1185. package/dist/core/ttsr/index.d.ts +24 -0
  1186. package/dist/core/ttsr/index.d.ts.map +1 -0
  1187. package/dist/core/ttsr/index.js +57 -0
  1188. package/dist/core/ttsr/index.js.map +1 -0
  1189. package/dist/core/ttsr/preview.d.ts +48 -0
  1190. package/dist/core/ttsr/preview.d.ts.map +1 -0
  1191. package/dist/core/ttsr/preview.js +83 -0
  1192. package/dist/core/ttsr/preview.js.map +1 -0
  1193. package/dist/core/turno-vacio/detectar.d.ts.map +1 -1
  1194. package/dist/core/turno-vacio/detectar.js.map +1 -1
  1195. package/dist/core/undo/journal.d.ts.map +1 -1
  1196. package/dist/core/undo/journal.js.map +1 -1
  1197. package/dist/core/urls-internas/auditoria.d.ts.map +1 -1
  1198. package/dist/core/urls-internas/auditoria.js.map +1 -1
  1199. package/dist/core/urls-internas/boveda.d.ts.map +1 -1
  1200. package/dist/core/urls-internas/boveda.js.map +1 -1
  1201. package/dist/core/urls-internas/lector.d.ts +14 -10
  1202. package/dist/core/urls-internas/lector.d.ts.map +1 -1
  1203. package/dist/core/urls-internas/lector.js +50 -36
  1204. package/dist/core/urls-internas/lector.js.map +1 -1
  1205. package/dist/core/urls-internas/memoria.d.ts.map +1 -1
  1206. package/dist/core/urls-internas/memoria.js.map +1 -1
  1207. package/dist/core/urls-internas/parse.d.ts +6 -13
  1208. package/dist/core/urls-internas/parse.d.ts.map +1 -1
  1209. package/dist/core/urls-internas/parse.js +6 -17
  1210. package/dist/core/urls-internas/parse.js.map +1 -1
  1211. package/dist/core/urls-internas/reglas.d.ts.map +1 -1
  1212. package/dist/core/urls-internas/reglas.js.map +1 -1
  1213. package/dist/core/usage/aggregate.d.ts +1 -0
  1214. package/dist/core/usage/aggregate.d.ts.map +1 -1
  1215. package/dist/core/usage/aggregate.js +1 -1
  1216. package/dist/core/usage/aggregate.js.map +1 -1
  1217. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -1
  1218. package/dist/core/usage/cuota/anthropic.js.map +1 -1
  1219. package/dist/core/usage/cuota/cache.d.ts.map +1 -1
  1220. package/dist/core/usage/cuota/cache.js.map +1 -1
  1221. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -1
  1222. package/dist/core/usage/cuota/github-copilot.js.map +1 -1
  1223. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -1
  1224. package/dist/core/usage/cuota/google-gemini.js.map +1 -1
  1225. package/dist/core/usage/cuota/index.d.ts.map +1 -1
  1226. package/dist/core/usage/cuota/index.js.map +1 -1
  1227. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -1
  1228. package/dist/core/usage/cuota/openai-codex.js.map +1 -1
  1229. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -1
  1230. package/dist/core/usage/cuota/openrouter.js.map +1 -1
  1231. package/dist/core/usage/cuota/tipos.d.ts.map +1 -1
  1232. package/dist/core/usage/cuota/tipos.js.map +1 -1
  1233. package/dist/core/usage/index.d.ts +11 -0
  1234. package/dist/core/usage/index.d.ts.map +1 -0
  1235. package/dist/core/usage/index.js +11 -0
  1236. package/dist/core/usage/index.js.map +1 -0
  1237. package/dist/core/usage/multi.d.ts +62 -0
  1238. package/dist/core/usage/multi.d.ts.map +1 -0
  1239. package/dist/core/usage/multi.js +122 -0
  1240. package/dist/core/usage/multi.js.map +1 -0
  1241. package/dist/core/usage/redaccion.d.ts +48 -0
  1242. package/dist/core/usage/redaccion.d.ts.map +1 -0
  1243. package/dist/core/usage/redaccion.js +72 -0
  1244. package/dist/core/usage/redaccion.js.map +1 -0
  1245. package/dist/core/usage-totals.d.ts.map +1 -1
  1246. package/dist/core/usage-totals.js.map +1 -1
  1247. package/dist/core/utils/atomic-write.d.ts +55 -0
  1248. package/dist/core/utils/atomic-write.d.ts.map +1 -0
  1249. package/dist/core/utils/atomic-write.js +293 -0
  1250. package/dist/core/utils/atomic-write.js.map +1 -0
  1251. package/dist/core/utils/git.d.ts +24 -0
  1252. package/dist/core/utils/git.d.ts.map +1 -0
  1253. package/dist/core/utils/git.js +107 -0
  1254. package/dist/core/utils/git.js.map +1 -0
  1255. package/dist/core/utils/logger.d.ts +26 -0
  1256. package/dist/core/utils/logger.d.ts.map +1 -0
  1257. package/dist/core/utils/logger.js +104 -0
  1258. package/dist/core/utils/logger.js.map +1 -0
  1259. package/dist/core/utils/shell-snapshot.d.ts +21 -0
  1260. package/dist/core/utils/shell-snapshot.d.ts.map +1 -0
  1261. package/dist/core/utils/shell-snapshot.js +32 -0
  1262. package/dist/core/utils/shell-snapshot.js.map +1 -0
  1263. package/dist/core/utils/startup-watchdog.d.ts +11 -0
  1264. package/dist/core/utils/startup-watchdog.d.ts.map +1 -0
  1265. package/dist/core/utils/startup-watchdog.js +34 -0
  1266. package/dist/core/utils/startup-watchdog.js.map +1 -0
  1267. package/dist/core/utils/tls-ca-shim.d.ts +17 -0
  1268. package/dist/core/utils/tls-ca-shim.d.ts.map +1 -0
  1269. package/dist/core/utils/tls-ca-shim.js +33 -0
  1270. package/dist/core/utils/tls-ca-shim.js.map +1 -0
  1271. package/dist/core/web/agregador.d.ts +67 -0
  1272. package/dist/core/web/agregador.d.ts.map +1 -0
  1273. package/dist/core/web/agregador.js +182 -0
  1274. package/dist/core/web/agregador.js.map +1 -0
  1275. package/dist/core/web/busqueda-nativa.d.ts.map +1 -1
  1276. package/dist/core/web/busqueda-nativa.js.map +1 -1
  1277. package/dist/core/web/consulta.d.ts +53 -0
  1278. package/dist/core/web/consulta.d.ts.map +1 -0
  1279. package/dist/core/web/consulta.js +213 -0
  1280. package/dist/core/web/consulta.js.map +1 -0
  1281. package/dist/core/web/destino.d.ts +11 -0
  1282. package/dist/core/web/destino.d.ts.map +1 -1
  1283. package/dist/core/web/destino.js +35 -0
  1284. package/dist/core/web/destino.js.map +1 -1
  1285. package/dist/core/web/load-page.d.ts +52 -0
  1286. package/dist/core/web/load-page.d.ts.map +1 -0
  1287. package/dist/core/web/load-page.js +221 -0
  1288. package/dist/core/web/load-page.js.map +1 -0
  1289. package/dist/core/web/proveedores/brave.d.ts.map +1 -1
  1290. package/dist/core/web/proveedores/brave.js.map +1 -1
  1291. package/dist/core/web/proveedores/claves.d.ts.map +1 -1
  1292. package/dist/core/web/proveedores/claves.js.map +1 -1
  1293. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -1
  1294. package/dist/core/web/proveedores/duckduckgo.js.map +1 -1
  1295. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -1
  1296. package/dist/core/web/proveedores/ecosia.js.map +1 -1
  1297. package/dist/core/web/proveedores/exa.d.ts.map +1 -1
  1298. package/dist/core/web/proveedores/exa.js.map +1 -1
  1299. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -1
  1300. package/dist/core/web/proveedores/mojeek.js.map +1 -1
  1301. package/dist/core/web/proveedores/navegador.d.ts.map +1 -1
  1302. package/dist/core/web/proveedores/navegador.js.map +1 -1
  1303. package/dist/core/web/proveedores/registro.d.ts.map +1 -1
  1304. package/dist/core/web/proveedores/registro.js.map +1 -1
  1305. package/dist/core/web/proveedores/searxng.d.ts.map +1 -1
  1306. package/dist/core/web/proveedores/searxng.js.map +1 -1
  1307. package/dist/core/web/proveedores/serper.d.ts.map +1 -1
  1308. package/dist/core/web/proveedores/serper.js.map +1 -1
  1309. package/dist/core/web/proveedores/tavily.d.ts.map +1 -1
  1310. package/dist/core/web/proveedores/tavily.js.map +1 -1
  1311. package/dist/core/web/proveedores/tipos.d.ts.map +1 -1
  1312. package/dist/core/web/proveedores/tipos.js.map +1 -1
  1313. package/dist/core/web/registro-red.d.ts.map +1 -1
  1314. package/dist/core/web/registro-red.js.map +1 -1
  1315. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -1
  1316. package/dist/core/web/scrapers/cisa-kev.js.map +1 -1
  1317. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -1
  1318. package/dist/core/web/scrapers/crates-io.js.map +1 -1
  1319. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -1
  1320. package/dist/core/web/scrapers/docs-rs.js.map +1 -1
  1321. package/dist/core/web/scrapers/github.d.ts.map +1 -1
  1322. package/dist/core/web/scrapers/github.js.map +1 -1
  1323. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -1
  1324. package/dist/core/web/scrapers/go-pkg.js.map +1 -1
  1325. package/dist/core/web/scrapers/hex.d.ts.map +1 -1
  1326. package/dist/core/web/scrapers/hex.js.map +1 -1
  1327. package/dist/core/web/scrapers/maven.d.ts.map +1 -1
  1328. package/dist/core/web/scrapers/maven.js.map +1 -1
  1329. package/dist/core/web/scrapers/mdn.d.ts.map +1 -1
  1330. package/dist/core/web/scrapers/mdn.js.map +1 -1
  1331. package/dist/core/web/scrapers/npm.d.ts.map +1 -1
  1332. package/dist/core/web/scrapers/npm.js.map +1 -1
  1333. package/dist/core/web/scrapers/nuget.d.ts.map +1 -1
  1334. package/dist/core/web/scrapers/nuget.js.map +1 -1
  1335. package/dist/core/web/scrapers/nvd.d.ts.map +1 -1
  1336. package/dist/core/web/scrapers/nvd.js.map +1 -1
  1337. package/dist/core/web/scrapers/pypi.d.ts.map +1 -1
  1338. package/dist/core/web/scrapers/pypi.js.map +1 -1
  1339. package/dist/core/web/scrapers/registro.d.ts.map +1 -1
  1340. package/dist/core/web/scrapers/registro.js.map +1 -1
  1341. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -1
  1342. package/dist/core/web/scrapers/rubygems.js.map +1 -1
  1343. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -1
  1344. package/dist/core/web/scrapers/stackoverflow.js.map +1 -1
  1345. package/dist/core/web/scrapers/tipos.d.ts.map +1 -1
  1346. package/dist/core/web/scrapers/tipos.js.map +1 -1
  1347. package/dist/core/web/texto.d.ts.map +1 -1
  1348. package/dist/core/web/texto.js.map +1 -1
  1349. package/dist/core/web/tools.d.ts +1 -8
  1350. package/dist/core/web/tools.d.ts.map +1 -1
  1351. package/dist/core/web/tools.js +2 -33
  1352. package/dist/core/web/tools.js.map +1 -1
  1353. package/dist/core/wiki/almacen.d.ts.map +1 -1
  1354. package/dist/core/wiki/almacen.js.map +1 -1
  1355. package/dist/core/wiki/citas.d.ts.map +1 -1
  1356. package/dist/core/wiki/citas.js.map +1 -1
  1357. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  1358. package/dist/core/workflows/agent-runner.js.map +1 -1
  1359. package/dist/core/workflows/builtins.d.ts.map +1 -1
  1360. package/dist/core/workflows/builtins.js.map +1 -1
  1361. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -1
  1362. package/dist/core/workflows/contrato/esquema.js.map +1 -1
  1363. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -1
  1364. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -1
  1365. package/dist/core/workflows/contrato/validador.d.ts.map +1 -1
  1366. package/dist/core/workflows/contrato/validador.js.map +1 -1
  1367. package/dist/core/workflows/contrato/yield.d.ts.map +1 -1
  1368. package/dist/core/workflows/contrato/yield.js.map +1 -1
  1369. package/dist/core/workflows/goal-engine/engine.d.ts +5 -0
  1370. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  1371. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  1372. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -1
  1373. package/dist/core/workflows/goal-engine/errors.js.map +1 -1
  1374. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -1
  1375. package/dist/core/workflows/goal-engine/index.js.map +1 -1
  1376. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -1
  1377. package/dist/core/workflows/goal-engine/persistence.js.map +1 -1
  1378. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -1
  1379. package/dist/core/workflows/goal-engine/prompts.js.map +1 -1
  1380. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -1
  1381. package/dist/core/workflows/goal-engine/state.js.map +1 -1
  1382. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -1
  1383. package/dist/core/workflows/goal-engine/tools.js.map +1 -1
  1384. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -1
  1385. package/dist/core/workflows/goal-engine/types.js.map +1 -1
  1386. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -1
  1387. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -1
  1388. package/dist/core/workflows/graph-sync.d.ts.map +1 -1
  1389. package/dist/core/workflows/graph-sync.js.map +1 -1
  1390. package/dist/core/workflows/graph.d.ts.map +1 -1
  1391. package/dist/core/workflows/graph.js.map +1 -1
  1392. package/dist/core/workflows/index.d.ts +6 -0
  1393. package/dist/core/workflows/index.d.ts.map +1 -1
  1394. package/dist/core/workflows/index.js +3 -0
  1395. package/dist/core/workflows/index.js.map +1 -1
  1396. package/dist/core/workflows/journal.d.ts.map +1 -1
  1397. package/dist/core/workflows/journal.js.map +1 -1
  1398. package/dist/core/workflows/manager.d.ts.map +1 -1
  1399. package/dist/core/workflows/manager.js.map +1 -1
  1400. package/dist/core/workflows/provider-caps.d.ts +103 -0
  1401. package/dist/core/workflows/provider-caps.d.ts.map +1 -0
  1402. package/dist/core/workflows/provider-caps.js +235 -0
  1403. package/dist/core/workflows/provider-caps.js.map +1 -0
  1404. package/dist/core/workflows/resolve-script.d.ts.map +1 -1
  1405. package/dist/core/workflows/resolve-script.js.map +1 -1
  1406. package/dist/core/workflows/runtime.d.ts.map +1 -1
  1407. package/dist/core/workflows/runtime.js.map +1 -1
  1408. package/dist/core/workflows/save-as-skill.d.ts.map +1 -1
  1409. package/dist/core/workflows/save-as-skill.js.map +1 -1
  1410. package/dist/core/workflows/shared-store.d.ts.map +1 -1
  1411. package/dist/core/workflows/shared-store.js.map +1 -1
  1412. package/dist/core/workflows/soft-budget.d.ts +27 -0
  1413. package/dist/core/workflows/soft-budget.d.ts.map +1 -0
  1414. package/dist/core/workflows/soft-budget.js +47 -0
  1415. package/dist/core/workflows/soft-budget.js.map +1 -0
  1416. package/dist/core/workflows/subagent-host.d.ts.map +1 -1
  1417. package/dist/core/workflows/subagent-host.js.map +1 -1
  1418. package/dist/core/workflows/tool-scheduling.d.ts +47 -0
  1419. package/dist/core/workflows/tool-scheduling.d.ts.map +1 -0
  1420. package/dist/core/workflows/tool-scheduling.js +102 -0
  1421. package/dist/core/workflows/tool-scheduling.js.map +1 -0
  1422. package/dist/core/workflows/tool-workflow.d.ts.map +1 -1
  1423. package/dist/core/workflows/tool-workflow.js.map +1 -1
  1424. package/dist/core/workflows/types.d.ts.map +1 -1
  1425. package/dist/core/workflows/types.js.map +1 -1
  1426. package/dist/core/workflows/worktree.d.ts.map +1 -1
  1427. package/dist/core/workflows/worktree.js.map +1 -1
  1428. package/dist/extensions/index.d.ts.map +1 -1
  1429. package/dist/extensions/index.js.map +1 -1
  1430. package/dist/extensions/llama/client.d.ts.map +1 -1
  1431. package/dist/extensions/llama/client.js.map +1 -1
  1432. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  1433. package/dist/extensions/llama/huggingface.js.map +1 -1
  1434. package/dist/extensions/llama/index.d.ts.map +1 -1
  1435. package/dist/extensions/llama/index.js.map +1 -1
  1436. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1437. package/dist/extensions/llama/provider.js.map +1 -1
  1438. package/dist/extensions/llama/ui.d.ts.map +1 -1
  1439. package/dist/extensions/llama/ui.js.map +1 -1
  1440. package/dist/extensions/remoto/index.d.ts.map +1 -1
  1441. package/dist/extensions/remoto/index.js.map +1 -1
  1442. package/dist/index.d.ts.map +1 -1
  1443. package/dist/index.js.map +1 -1
  1444. package/dist/main.d.ts.map +1 -1
  1445. package/dist/main.js +71 -3
  1446. package/dist/main.js.map +1 -1
  1447. package/dist/migrations.d.ts.map +1 -1
  1448. package/dist/migrations.js.map +1 -1
  1449. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  1450. package/dist/modes/acp/acp-mode.js.map +1 -1
  1451. package/dist/modes/acp/events.d.ts.map +1 -1
  1452. package/dist/modes/acp/events.js.map +1 -1
  1453. package/dist/modes/index.d.ts.map +1 -1
  1454. package/dist/modes/index.js.map +1 -1
  1455. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  1456. package/dist/modes/interactive/components/armin.js.map +1 -1
  1457. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  1458. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  1459. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  1460. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  1461. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  1462. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  1463. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  1464. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  1465. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  1466. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  1467. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1468. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1469. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  1470. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  1471. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  1472. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  1473. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  1474. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  1475. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  1476. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  1477. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  1478. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  1479. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  1480. package/dist/modes/interactive/components/diff.js.map +1 -1
  1481. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  1482. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  1483. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  1484. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  1485. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  1486. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  1487. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  1488. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  1489. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  1490. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  1491. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  1492. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  1493. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  1494. package/dist/modes/interactive/components/footer.js.map +1 -1
  1495. package/dist/modes/interactive/components/home-screen.d.ts +2 -0
  1496. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1497. package/dist/modes/interactive/components/home-screen.js +5 -6
  1498. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1499. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  1500. package/dist/modes/interactive/components/index.js.map +1 -1
  1501. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  1502. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  1503. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  1504. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  1505. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  1506. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  1507. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  1508. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  1509. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1510. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1511. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  1512. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  1513. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -1
  1514. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -1
  1515. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  1516. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  1517. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  1518. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  1519. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1520. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1521. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1522. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1523. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  1524. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  1525. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  1526. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  1527. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  1528. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  1529. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  1530. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  1531. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  1532. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  1533. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1534. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1535. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  1536. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  1537. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  1538. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  1539. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  1540. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  1541. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  1542. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  1543. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  1544. package/dist/modes/interactive/components/user-message.js.map +1 -1
  1545. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  1546. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  1547. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1548. package/dist/modes/interactive/external-editor.js.map +1 -1
  1549. package/dist/modes/interactive/interactive-mode.d.ts +19 -0
  1550. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1551. package/dist/modes/interactive/interactive-mode.js +29 -0
  1552. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1553. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
  1554. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  1555. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  1556. package/dist/modes/interactive/model-search.js.map +1 -1
  1557. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  1558. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  1559. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  1560. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1561. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1562. package/dist/modes/json-event.d.ts.map +1 -1
  1563. package/dist/modes/json-event.js.map +1 -1
  1564. package/dist/modes/print-mode.d.ts.map +1 -1
  1565. package/dist/modes/print-mode.js.map +1 -1
  1566. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  1567. package/dist/modes/rpc/jsonl.js.map +1 -1
  1568. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1569. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1570. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1571. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1572. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1573. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1574. package/dist/package-manager-cli.d.ts.map +1 -1
  1575. package/dist/package-manager-cli.js.map +1 -1
  1576. package/dist/rpc-entry.d.ts.map +1 -1
  1577. package/dist/rpc-entry.js +0 -0
  1578. package/dist/rpc-entry.js.map +1 -1
  1579. package/dist/server/attach.d.ts.map +1 -1
  1580. package/dist/server/attach.js.map +1 -1
  1581. package/dist/server/create-harness.d.ts.map +1 -1
  1582. package/dist/server/create-harness.js.map +1 -1
  1583. package/dist/server/extension-ops.d.ts.map +1 -1
  1584. package/dist/server/extension-ops.js.map +1 -1
  1585. package/dist/server/pi-server-service.d.ts.map +1 -1
  1586. package/dist/server/pi-server-service.js.map +1 -1
  1587. package/dist/server/scheduler-tick.d.ts.map +1 -1
  1588. package/dist/server/scheduler-tick.js.map +1 -1
  1589. package/dist/server/serve.d.ts.map +1 -1
  1590. package/dist/server/serve.js.map +1 -1
  1591. package/dist/server/transcript.d.ts.map +1 -1
  1592. package/dist/server/transcript.js.map +1 -1
  1593. package/dist/telegram/api.d.ts +6 -0
  1594. package/dist/telegram/api.d.ts.map +1 -1
  1595. package/dist/telegram/api.js.map +1 -1
  1596. package/dist/telegram/bridge.d.ts.map +1 -1
  1597. package/dist/telegram/bridge.js.map +1 -1
  1598. package/dist/telegram/journal.d.ts.map +1 -1
  1599. package/dist/telegram/journal.js.map +1 -1
  1600. package/dist/telegram/servidor.d.ts.map +1 -1
  1601. package/dist/telegram/servidor.js.map +1 -1
  1602. package/dist/utils/abort.d.ts.map +1 -1
  1603. package/dist/utils/abort.js.map +1 -1
  1604. package/dist/utils/ansi.d.ts.map +1 -1
  1605. package/dist/utils/ansi.js.map +1 -1
  1606. package/dist/utils/changelog.d.ts.map +1 -1
  1607. package/dist/utils/changelog.js.map +1 -1
  1608. package/dist/utils/child-process.d.ts.map +1 -1
  1609. package/dist/utils/child-process.js.map +1 -1
  1610. package/dist/utils/clipboard-image.d.ts.map +1 -1
  1611. package/dist/utils/clipboard-image.js.map +1 -1
  1612. package/dist/utils/clipboard-native.d.ts.map +1 -1
  1613. package/dist/utils/clipboard-native.js.map +1 -1
  1614. package/dist/utils/clipboard.d.ts.map +1 -1
  1615. package/dist/utils/clipboard.js.map +1 -1
  1616. package/dist/utils/deprecation.d.ts.map +1 -1
  1617. package/dist/utils/deprecation.js.map +1 -1
  1618. package/dist/utils/exif-orientation.d.ts.map +1 -1
  1619. package/dist/utils/exif-orientation.js.map +1 -1
  1620. package/dist/utils/frontmatter.d.ts.map +1 -1
  1621. package/dist/utils/frontmatter.js.map +1 -1
  1622. package/dist/utils/fs-watch.d.ts.map +1 -1
  1623. package/dist/utils/fs-watch.js.map +1 -1
  1624. package/dist/utils/git.d.ts.map +1 -1
  1625. package/dist/utils/git.js.map +1 -1
  1626. package/dist/utils/html.d.ts.map +1 -1
  1627. package/dist/utils/html.js.map +1 -1
  1628. package/dist/utils/image-convert.d.ts.map +1 -1
  1629. package/dist/utils/image-convert.js.map +1 -1
  1630. package/dist/utils/image-process.d.ts.map +1 -1
  1631. package/dist/utils/image-process.js.map +1 -1
  1632. package/dist/utils/image-resize-core.d.ts.map +1 -1
  1633. package/dist/utils/image-resize-core.js.map +1 -1
  1634. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  1635. package/dist/utils/image-resize-worker.js.map +1 -1
  1636. package/dist/utils/image-resize.d.ts.map +1 -1
  1637. package/dist/utils/image-resize.js.map +1 -1
  1638. package/dist/utils/json.d.ts.map +1 -1
  1639. package/dist/utils/json.js.map +1 -1
  1640. package/dist/utils/management-http.d.ts.map +1 -1
  1641. package/dist/utils/management-http.js.map +1 -1
  1642. package/dist/utils/mime.d.ts.map +1 -1
  1643. package/dist/utils/mime.js.map +1 -1
  1644. package/dist/utils/open-browser.d.ts.map +1 -1
  1645. package/dist/utils/open-browser.js.map +1 -1
  1646. package/dist/utils/paths.d.ts.map +1 -1
  1647. package/dist/utils/paths.js.map +1 -1
  1648. package/dist/utils/photon.d.ts.map +1 -1
  1649. package/dist/utils/photon.js.map +1 -1
  1650. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  1651. package/dist/utils/pi-user-agent.js.map +1 -1
  1652. package/dist/utils/shell.d.ts.map +1 -1
  1653. package/dist/utils/shell.js.map +1 -1
  1654. package/dist/utils/sleep.d.ts.map +1 -1
  1655. package/dist/utils/sleep.js.map +1 -1
  1656. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  1657. package/dist/utils/syntax-highlight.js.map +1 -1
  1658. package/dist/utils/text.d.ts.map +1 -1
  1659. package/dist/utils/text.js.map +1 -1
  1660. package/dist/utils/tool-result-images.d.ts.map +1 -1
  1661. package/dist/utils/tool-result-images.js.map +1 -1
  1662. package/dist/utils/tools-manager.d.ts.map +1 -1
  1663. package/dist/utils/tools-manager.js.map +1 -1
  1664. package/dist/utils/version-check.d.ts.map +1 -1
  1665. package/dist/utils/version-check.js.map +1 -1
  1666. package/dist/utils/windows-self-update.d.ts.map +1 -1
  1667. package/dist/utils/windows-self-update.js.map +1 -1
  1668. package/docs/development-fork.md +170 -0
  1669. package/docs/docs.json +25 -0
  1670. package/docs/modules-infraestructura.md +115 -0
  1671. package/docs/modules-motor.md +160 -0
  1672. package/docs/modules-producto.md +179 -0
  1673. package/docs/modules-seguridad.md +158 -0
  1674. package/package.json +113 -113
  1675. package/dist/core/commit/diff.d.ts.map +0 -1
  1676. package/dist/core/commit/diff.js.map +0 -1
  1677. package/dist/core/commit/mensaje.d.ts +0 -80
  1678. package/dist/core/commit/mensaje.d.ts.map +0 -1
  1679. package/dist/core/commit/mensaje.js +0 -207
  1680. package/dist/core/commit/mensaje.js.map +0 -1
  1681. /package/dist/core/{commit → commits}/diff.d.ts +0 -0
  1682. /package/dist/core/{commit → commits}/diff.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"claves.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/claves.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,yEAAwE;AACxE,MAAM,WAAW,aAAa;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,GAClD,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW1D","sourcesContent":["/**\n * Resuelve la clave de un proveedor de búsqueda: vault primero, variable de\n * entorno después (la que usa CI, donde no hay vault desbloqueado).\n *\n * Vive separado del registro para que `agent-session.ts` —de upstream, con el\n * presupuesto de sincronización agotado— pueda enchufarlo con una sola\n * llamada en vez de repetir aquí la lógica try/vault/env por cada proveedor.\n */\n\n/** Nombre de proveedor → variable de entorno donde puede vivir su clave. */\nconst VARIABLE_ENTORNO: Record<string, string> = {\n\tserper: \"SERPER_API_KEY\",\n\tbrave: \"BRAVE_API_KEY\",\n\ttavily: \"TAVILY_API_KEY\",\n\texa: \"EXA_API_KEY\",\n\tsearxng: \"SEARXNG_URL\",\n};\n\n/** Lo mínimo que hace falta del vault: buscar un secreto por nombre. */\nexport interface FuenteDeVault {\n\tgetSecret(nombre: string): string | null | undefined;\n}\n\n/**\n * Construye el `obtenerClave` que espera `createWebTools`, atado a un vault\n * concreto. `obtenerVault` se llama en cada búsqueda, no una vez: el vault\n * puede desbloquearse o bloquearse durante la sesión.\n */\nexport function crearObtenerClave(\n\tobtenerVault: () => FuenteDeVault | null | undefined,\n): (nombreProveedor: string) => Promise<string | undefined> {\n\treturn async (nombreProveedor: string) => {\n\t\tconst variable = VARIABLE_ENTORNO[nombreProveedor];\n\t\ttry {\n\t\t\tconst delVault = obtenerVault()?.getSecret(nombreProveedor);\n\t\t\tif (delVault) return delVault;\n\t\t} catch {\n\t\t\t// Vault bloqueado o no inicializado: caer a la variable de entorno.\n\t\t}\n\t\treturn variable ? process.env[variable] : undefined;\n\t};\n}\n"]}
1
+ {"version":3,"file":"claves.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/claves.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,GAClD,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"claves.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/claves.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA4E;AAC5E,MAAM,gBAAgB,GAA2B;IAChD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,aAAa;CACtB,CAAC;AAOF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAChC,YAAoD,EACO;IAC3D,OAAO,KAAK,EAAE,eAAuB,EAAE,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,YAAY,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;QACrE,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAAA,CACpD,CAAC;AAAA,CACF","sourcesContent":["/**\n * Resuelve la clave de un proveedor de búsqueda: vault primero, variable de\n * entorno después (la que usa CI, donde no hay vault desbloqueado).\n *\n * Vive separado del registro para que `agent-session.ts` —de upstream, con el\n * presupuesto de sincronización agotado— pueda enchufarlo con una sola\n * llamada en vez de repetir aquí la lógica try/vault/env por cada proveedor.\n */\n\n/** Nombre de proveedor → variable de entorno donde puede vivir su clave. */\nconst VARIABLE_ENTORNO: Record<string, string> = {\n\tserper: \"SERPER_API_KEY\",\n\tbrave: \"BRAVE_API_KEY\",\n\ttavily: \"TAVILY_API_KEY\",\n\texa: \"EXA_API_KEY\",\n\tsearxng: \"SEARXNG_URL\",\n};\n\n/** Lo mínimo que hace falta del vault: buscar un secreto por nombre. */\nexport interface FuenteDeVault {\n\tgetSecret(nombre: string): string | null | undefined;\n}\n\n/**\n * Construye el `obtenerClave` que espera `createWebTools`, atado a un vault\n * concreto. `obtenerVault` se llama en cada búsqueda, no una vez: el vault\n * puede desbloquearse o bloquearse durante la sesión.\n */\nexport function crearObtenerClave(\n\tobtenerVault: () => FuenteDeVault | null | undefined,\n): (nombreProveedor: string) => Promise<string | undefined> {\n\treturn async (nombreProveedor: string) => {\n\t\tconst variable = VARIABLE_ENTORNO[nombreProveedor];\n\t\ttry {\n\t\t\tconst delVault = obtenerVault()?.getSecret(nombreProveedor);\n\t\t\tif (delVault) return delVault;\n\t\t} catch {\n\t\t\t// Vault bloqueado o no inicializado: caer a la variable de entorno.\n\t\t}\n\t\treturn variable ? process.env[variable] : undefined;\n\t};\n}\n"]}
1
+ {"version":3,"file":"claves.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/claves.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,4EAA4E;AAC5E,MAAM,gBAAgB,GAA2B;IAChD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,aAAa;CACtB,CAAC;AAOF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAChC,YAAoD;IAEpD,OAAO,KAAK,EAAE,eAAuB,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,YAAY,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;QACrE,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"duckduckgo.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/duckduckgo.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA8EpE,eAAO,MAAM,MAAM,EAAE,aAepB,CAAC","sourcesContent":["/**\n * DuckDuckGo, vía su frontend HTML sin JS (`html.duckduckgo.com/html/`).\n *\n * Sin clave: es el único de los tres proveedores gratuitos que responde con\n * resultados reales desde una red de centro de datos en la práctica —Mojeek y\n * Ecosia sirven un captcha o un firewall a cualquier cliente sin navegador\n * real la mayoría de las veces—. Por eso va primero en el grupo sin clave: es\n * el que de verdad sostiene la puerta «sin ninguna clave, hay resultados».\n *\n * DuckDuckGo enruta cada resultado por `//duckduckgo.com/l/?uddg=<url>` para\n * medir clics; hay que desenvolverlo o el agente termina con enlaces inútiles.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://html.duckduckgo.com/html/\";\n\n/** `true` cuando la página es el modal anti-bot, no resultados. DDG mezcla 200 y 202 en este caso. */\nfunction esBloqueoAntiBot(html: string): boolean {\n\treturn html.includes(\"anomaly-modal\") || html.includes(\"anomaly.js\");\n}\n\n/**\n * Desenvuelve la URL real de un resultado. Los orgánicos van envueltos en\n * `uddg=`; los ANUNCIOS (`//duckduckgo.com/y.js?ad_domain=…`) no llevan ese\n * envoltorio porque no apuntan a un destino final, sino al propio tracker de\n * clics de DDG — por eso, tras desenvolver, cualquier URL que SIGA en\n * duckduckgo.com se descarta: es un anuncio, no un resultado.\n */\nfunction desenvolverUrl(href: string): string | undefined {\n\tconst decodificado = href.replace(/&amp;/gi, \"&\");\n\tlet resuelta: string | undefined;\n\tconst match = decodificado.match(/[?&]uddg=([^&]+)/);\n\tif (match) {\n\t\ttry {\n\t\t\tresuelta = decodeURIComponent(match[1]);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t} else if (decodificado.startsWith(\"//\")) {\n\t\tresuelta = `https:${decodificado}`;\n\t} else if (decodificado.startsWith(\"http://\") || decodificado.startsWith(\"https://\")) {\n\t\tresuelta = decodificado;\n\t} else {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tif (new URL(resuelta).hostname.endsWith(\"duckduckgo.com\")) return undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n\treturn resuelta;\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nconst RE_BLOQUE =\n\t/<div\\b[^>]*\\bclass=\"[^\"]*\\bresult\\b[^\"]*\"[^>]*>([\\s\\S]*?)(?=<div\\b[^>]*\\bclass=\"[^\"]*\\bresult\\b|<div\\b[^>]*\\bclass=\"[^\"]*\\bnav-link\\b|$)/g;\nconst RE_TITULO = /<a\\b[^>]*\\bclass=\"[^\"]*\\bresult__a\\b[^\"]*\"[^>]*\\bhref=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>/;\nconst RE_SNIPPET = /<(?:a|div|span)\\b[^>]*\\bclass=\"[^\"]*\\bresult__snippet\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/(?:a|div|span)>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const bloque of html.matchAll(RE_BLOQUE)) {\n\t\tconst titulo = bloque[1].match(RE_TITULO);\n\t\tif (!titulo) continue;\n\t\tconst url = desenvolverUrl(titulo[1]);\n\t\tif (!url) continue;\n\t\tconst tituloTexto = limpiarTexto(titulo[2]);\n\t\tif (!tituloTexto) continue;\n\t\tconst snippet = bloque[1].match(RE_SNIPPET);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl,\n\t\t\tresumen: snippet ? limpiarTexto(snippet[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\t// GET, no POST: probado en vivo contra `html.duckduckgo.com` — el mismo\n\t// endpoint trata el POST (el envío \"de formulario real\" que usan otros\n\t// scrapers) con más sospecha que un GET con la consulta en la query, al\n\t// menos desde redes de centro de datos. Con GET responde con resultados\n\t// reales de forma consistente; con POST, con el modal anti-bot.\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tif (!respuesta.ok) throw new Error(`DuckDuckGo respondió HTTP ${respuesta.status}.`);\n\tconst html = await respuesta.text();\n\tif (esBloqueoAntiBot(html)) {\n\t\tthrow new Error(\"DuckDuckGo bloqueó la petición con su captcha anti-bot.\");\n\t}\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"duckduckgo.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/duckduckgo.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA8EpE,eAAO,MAAM,MAAM,EAAE,aAepB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"duckduckgo.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/duckduckgo.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * DuckDuckGo, vía su frontend HTML sin JS (`html.duckduckgo.com/html/`).\n *\n * Sin clave: es el único de los tres proveedores gratuitos que responde con\n * resultados reales desde una red de centro de datos en la práctica —Mojeek y\n * Ecosia sirven un captcha o un firewall a cualquier cliente sin navegador\n * real la mayoría de las veces—. Por eso va primero en el grupo sin clave: es\n * el que de verdad sostiene la puerta «sin ninguna clave, hay resultados».\n *\n * DuckDuckGo enruta cada resultado por `//duckduckgo.com/l/?uddg=<url>` para\n * medir clics; hay que desenvolverlo o el agente termina con enlaces inútiles.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://html.duckduckgo.com/html/\";\n\n/** `true` cuando la página es el modal anti-bot, no resultados. DDG mezcla 200 y 202 en este caso. */\nfunction esBloqueoAntiBot(html: string): boolean {\n\treturn html.includes(\"anomaly-modal\") || html.includes(\"anomaly.js\");\n}\n\n/**\n * Desenvuelve la URL real de un resultado. Los orgánicos van envueltos en\n * `uddg=`; los ANUNCIOS (`//duckduckgo.com/y.js?ad_domain=…`) no llevan ese\n * envoltorio porque no apuntan a un destino final, sino al propio tracker de\n * clics de DDG — por eso, tras desenvolver, cualquier URL que SIGA en\n * duckduckgo.com se descarta: es un anuncio, no un resultado.\n */\nfunction desenvolverUrl(href: string): string | undefined {\n\tconst decodificado = href.replace(/&amp;/gi, \"&\");\n\tlet resuelta: string | undefined;\n\tconst match = decodificado.match(/[?&]uddg=([^&]+)/);\n\tif (match) {\n\t\ttry {\n\t\t\tresuelta = decodeURIComponent(match[1]);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t} else if (decodificado.startsWith(\"//\")) {\n\t\tresuelta = `https:${decodificado}`;\n\t} else if (decodificado.startsWith(\"http://\") || decodificado.startsWith(\"https://\")) {\n\t\tresuelta = decodificado;\n\t} else {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tif (new URL(resuelta).hostname.endsWith(\"duckduckgo.com\")) return undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n\treturn resuelta;\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nconst RE_BLOQUE =\n\t/<div\\b[^>]*\\bclass=\"[^\"]*\\bresult\\b[^\"]*\"[^>]*>([\\s\\S]*?)(?=<div\\b[^>]*\\bclass=\"[^\"]*\\bresult\\b|<div\\b[^>]*\\bclass=\"[^\"]*\\bnav-link\\b|$)/g;\nconst RE_TITULO = /<a\\b[^>]*\\bclass=\"[^\"]*\\bresult__a\\b[^\"]*\"[^>]*\\bhref=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>/;\nconst RE_SNIPPET = /<(?:a|div|span)\\b[^>]*\\bclass=\"[^\"]*\\bresult__snippet\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/(?:a|div|span)>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const bloque of html.matchAll(RE_BLOQUE)) {\n\t\tconst titulo = bloque[1].match(RE_TITULO);\n\t\tif (!titulo) continue;\n\t\tconst url = desenvolverUrl(titulo[1]);\n\t\tif (!url) continue;\n\t\tconst tituloTexto = limpiarTexto(titulo[2]);\n\t\tif (!tituloTexto) continue;\n\t\tconst snippet = bloque[1].match(RE_SNIPPET);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl,\n\t\t\tresumen: snippet ? limpiarTexto(snippet[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\t// GET, no POST: probado en vivo contra `html.duckduckgo.com` — el mismo\n\t// endpoint trata el POST (el envío \"de formulario real\" que usan otros\n\t// scrapers) con más sospecha que un GET con la consulta en la query, al\n\t// menos desde redes de centro de datos. Con GET responde con resultados\n\t// reales de forma consistente; con POST, con el modal anti-bot.\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tif (!respuesta.ok) throw new Error(`DuckDuckGo respondió HTTP ${respuesta.status}.`);\n\tconst html = await respuesta.text();\n\tif (esBloqueoAntiBot(html)) {\n\t\tthrow new Error(\"DuckDuckGo bloqueó la petición con su captcha anti-bot.\");\n\t}\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"duckduckgo.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/duckduckgo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ecosia.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/ecosia.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAuDpE,eAAO,MAAM,MAAM,EAAE,aAUpB,CAAC","sourcesContent":["/**\n * Ecosia, vía su página HTML pública (`ecosia.org/search`).\n *\n * Sin clave. Su frontal Cloudflare bloquea con frecuencia a clientes sin\n * navegador real (403 \"Ecosia Firewall\"); igual que Mojeek, se implementa\n * porque cuando responde trae resultados reales y el registro salta al\n * siguiente proveedor cuando este lanza.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://www.ecosia.org/search\";\n\nfunction esBloqueado(status: number, html: string): boolean {\n\treturn (\n\t\tstatus === 403 ||\n\t\tstatus === 429 ||\n\t\thtml.includes(\"Ecosia Firewall\") ||\n\t\thtml.includes(\"_cf_chl_opt\") ||\n\t\thtml.includes(\"/cdn-cgi/challenge-platform/\")\n\t);\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\n/** Cada resultado orgánico es un `<article data-test-id=\"organic-result\">`. */\nconst RE_ARTICULO = /<article\\b[^>]*\\bdata-test-id=\"organic-result\"[^>]*>([\\s\\S]*?)<\\/article>/g;\nconst RE_ENLACE_TITULO = /<a\\b[^>]*\\bhref=\"([^\"]+)\"[^>]*>[\\s\\S]*?data-test-id=\"result-title\"[\\s\\S]*?<\\/a>/;\nconst RE_TITULO_TEXTO = /data-test-id=\"result-title\"[^>]*>([\\s\\S]*?)<\\/h2>/;\nconst RE_DESCRIPCION = /data-test-id=\"(?:web-result-description|result-description)\"[^>]*>([\\s\\S]*?)<\\/p>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const articulo of html.matchAll(RE_ARTICULO)) {\n\t\tconst bloque = articulo[1];\n\t\tconst enlace = bloque.match(RE_ENLACE_TITULO);\n\t\tconst titulo = bloque.match(RE_TITULO_TEXTO);\n\t\tif (!enlace || !titulo) continue;\n\t\tconst href = enlace[1];\n\t\tif (!href.startsWith(\"http://\") && !href.startsWith(\"https://\")) continue;\n\t\tif (/^https?:\\/\\/(www\\.)?ecosia\\.org/i.test(href)) continue;\n\t\tconst tituloTexto = limpiarTexto(titulo[1]);\n\t\tif (!tituloTexto) continue;\n\t\tconst descripcion = bloque.match(RE_DESCRIPCION);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl: href,\n\t\t\tresumen: descripcion ? limpiarTexto(descripcion[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tconst html = await respuesta.text();\n\tif (esBloqueado(respuesta.status, html)) {\n\t\tthrow new Error(\"Ecosia bloqueó la petición con su firewall anti-bot.\");\n\t}\n\tif (!respuesta.ok) throw new Error(`Ecosia respondió HTTP ${respuesta.status}.`);\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"ecosia.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/ecosia.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAuDpE,eAAO,MAAM,MAAM,EAAE,aAUpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ecosia.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/ecosia.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Ecosia, vía su página HTML pública (`ecosia.org/search`).\n *\n * Sin clave. Su frontal Cloudflare bloquea con frecuencia a clientes sin\n * navegador real (403 \"Ecosia Firewall\"); igual que Mojeek, se implementa\n * porque cuando responde trae resultados reales y el registro salta al\n * siguiente proveedor cuando este lanza.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://www.ecosia.org/search\";\n\nfunction esBloqueado(status: number, html: string): boolean {\n\treturn (\n\t\tstatus === 403 ||\n\t\tstatus === 429 ||\n\t\thtml.includes(\"Ecosia Firewall\") ||\n\t\thtml.includes(\"_cf_chl_opt\") ||\n\t\thtml.includes(\"/cdn-cgi/challenge-platform/\")\n\t);\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\n/** Cada resultado orgánico es un `<article data-test-id=\"organic-result\">`. */\nconst RE_ARTICULO = /<article\\b[^>]*\\bdata-test-id=\"organic-result\"[^>]*>([\\s\\S]*?)<\\/article>/g;\nconst RE_ENLACE_TITULO = /<a\\b[^>]*\\bhref=\"([^\"]+)\"[^>]*>[\\s\\S]*?data-test-id=\"result-title\"[\\s\\S]*?<\\/a>/;\nconst RE_TITULO_TEXTO = /data-test-id=\"result-title\"[^>]*>([\\s\\S]*?)<\\/h2>/;\nconst RE_DESCRIPCION = /data-test-id=\"(?:web-result-description|result-description)\"[^>]*>([\\s\\S]*?)<\\/p>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const articulo of html.matchAll(RE_ARTICULO)) {\n\t\tconst bloque = articulo[1];\n\t\tconst enlace = bloque.match(RE_ENLACE_TITULO);\n\t\tconst titulo = bloque.match(RE_TITULO_TEXTO);\n\t\tif (!enlace || !titulo) continue;\n\t\tconst href = enlace[1];\n\t\tif (!href.startsWith(\"http://\") && !href.startsWith(\"https://\")) continue;\n\t\tif (/^https?:\\/\\/(www\\.)?ecosia\\.org/i.test(href)) continue;\n\t\tconst tituloTexto = limpiarTexto(titulo[1]);\n\t\tif (!tituloTexto) continue;\n\t\tconst descripcion = bloque.match(RE_DESCRIPCION);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl: href,\n\t\t\tresumen: descripcion ? limpiarTexto(descripcion[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tconst html = await respuesta.text();\n\tif (esBloqueado(respuesta.status, html)) {\n\t\tthrow new Error(\"Ecosia bloqueó la petición con su firewall anti-bot.\");\n\t}\n\tif (!respuesta.ok) throw new Error(`Ecosia respondió HTTP ${respuesta.status}.`);\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"ecosia.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/ecosia.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"exa.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/exa.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAmBpB,CAAC","sourcesContent":["/**\n * Exa Search API. Requiere clave (`exa` en el vault, o EXA_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.exa.ai/search\";\n\ninterface RespuestaExa {\n\tresults?: Array<{ title?: string; url?: string; text?: string; summary?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Exa requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"content-type\": \"application/json\", \"x-api-key\": clave },\n\t\tbody: JSON.stringify({\n\t\t\tquery: consulta,\n\t\t\tnumResults: Math.min(Math.max(maximo, 1), 20),\n\t\t\ttype: \"auto\",\n\t\t\tcontents: { summary: { query: consulta } },\n\t\t}),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Exa respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaExa;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.summary || r.text }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"exa.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/exa.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAmBpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exa.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/exa.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAM7C,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;SAC1C,CAAC;QACF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAiB,CAAC;IACvD,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,CACnC,CAAC","sourcesContent":["/**\n * Exa Search API. Requiere clave (`exa` en el vault, o EXA_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.exa.ai/search\";\n\ninterface RespuestaExa {\n\tresults?: Array<{ title?: string; url?: string; text?: string; summary?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Exa requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"content-type\": \"application/json\", \"x-api-key\": clave },\n\t\tbody: JSON.stringify({\n\t\t\tquery: consulta,\n\t\t\tnumResults: Math.min(Math.max(maximo, 1), 20),\n\t\t\ttype: \"auto\",\n\t\t\tcontents: { summary: { query: consulta } },\n\t\t}),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Exa respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaExa;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.summary || r.text }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"exa.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/exa.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAM7C,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACzF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;SAC1C,CAAC;QACF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAiB,CAAC;IACvD,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mojeek.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/mojeek.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA8CpE,eAAO,MAAM,MAAM,EAAE,aAWpB,CAAC","sourcesContent":["/**\n * Mojeek, vía su página HTML pública (`mojeek.com/search`).\n *\n * Índice propio, sin clave. En la práctica bloquea con un captcha (ALTCHA) a\n * casi cualquier cliente sin navegador real bastante a menudo — se implementa\n * igualmente porque cuando SÍ contesta trae resultados reales, y el registro\n * ya está pensado para saltar al siguiente proveedor cuando este lanza.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://www.mojeek.com/search\";\n\nfunction esBloqueoAntiBot(html: string): boolean {\n\treturn html.includes(\"altcha-widget\") || html.includes(\"captcha-wrap\") || /sending automated queries/i.test(html);\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\n/** Cada resultado orgánico es un `<li>` de `ul.results-standard`, con el título en `h2 > a.title`. */\nconst RE_ITEM =\n\t/<li\\b[^>]*>[\\s\\S]*?<h2[^>]*>\\s*<a\\b[^>]*\\bclass=\"[^\"]*\\btitle\\b[^\"]*\"[^>]*\\bhref=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>[\\s\\S]*?<\\/li>/g;\nconst RE_SNIPPET = /<p\\b[^>]*\\bclass=\"[^\"]*\\bs\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/p>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst bloque = html.match(/<ul\\b[^>]*\\bclass=\"[^\"]*\\bresults-standard\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/ul>/);\n\tif (!bloque) return [];\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const item of bloque[1].matchAll(RE_ITEM)) {\n\t\tconst href = item[1];\n\t\tif (!href.startsWith(\"http://\") && !href.startsWith(\"https://\")) continue;\n\t\tif (/mojeek\\.(com|co\\.uk|fr|de)/i.test(href)) continue; // navegación interna, no resultado\n\t\tconst tituloTexto = limpiarTexto(item[2]);\n\t\tif (!tituloTexto) continue;\n\t\tconst snippet = item[0].match(RE_SNIPPET);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl: href,\n\t\t\tresumen: snippet ? limpiarTexto(snippet[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"t\", String(maximo));\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tconst html = await respuesta.text();\n\tif (esBloqueoAntiBot(html)) {\n\t\tthrow new Error(\"Mojeek bloqueó la petición con su captcha anti-bot.\");\n\t}\n\tif (!respuesta.ok) throw new Error(`Mojeek respondió HTTP ${respuesta.status}.`);\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"mojeek.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/mojeek.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA8CpE,eAAO,MAAM,MAAM,EAAE,aAWpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mojeek.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/mojeek.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Mojeek, vía su página HTML pública (`mojeek.com/search`).\n *\n * Índice propio, sin clave. En la práctica bloquea con un captcha (ALTCHA) a\n * casi cualquier cliente sin navegador real bastante a menudo — se implementa\n * igualmente porque cuando SÍ contesta trae resultados reales, y el registro\n * ya está pensado para saltar al siguiente proveedor cuando este lanza.\n */\nimport { CABECERAS_NAVEGADOR } from \"./navegador.ts\";\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://www.mojeek.com/search\";\n\nfunction esBloqueoAntiBot(html: string): boolean {\n\treturn html.includes(\"altcha-widget\") || html.includes(\"captcha-wrap\") || /sending automated queries/i.test(html);\n}\n\nfunction limpiarTexto(html: string): string {\n\treturn html\n\t\t.replace(/<[^>]*>/g, \" \")\n\t\t.replace(/&amp;/gi, \"&\")\n\t\t.replace(/&lt;/gi, \"<\")\n\t\t.replace(/&gt;/gi, \">\")\n\t\t.replace(/&quot;/gi, '\"')\n\t\t.replace(/&#39;|&apos;/gi, \"'\")\n\t\t.replace(/&nbsp;/gi, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\n/** Cada resultado orgánico es un `<li>` de `ul.results-standard`, con el título en `h2 > a.title`. */\nconst RE_ITEM =\n\t/<li\\b[^>]*>[\\s\\S]*?<h2[^>]*>\\s*<a\\b[^>]*\\bclass=\"[^\"]*\\btitle\\b[^\"]*\"[^>]*\\bhref=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>[\\s\\S]*?<\\/li>/g;\nconst RE_SNIPPET = /<p\\b[^>]*\\bclass=\"[^\"]*\\bs\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/p>/;\n\nfunction parsear(html: string): ResultadoProveedor[] {\n\tconst bloque = html.match(/<ul\\b[^>]*\\bclass=\"[^\"]*\\bresults-standard\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/ul>/);\n\tif (!bloque) return [];\n\tconst resultados: ResultadoProveedor[] = [];\n\tfor (const item of bloque[1].matchAll(RE_ITEM)) {\n\t\tconst href = item[1];\n\t\tif (!href.startsWith(\"http://\") && !href.startsWith(\"https://\")) continue;\n\t\tif (/mojeek\\.(com|co\\.uk|fr|de)/i.test(href)) continue; // navegación interna, no resultado\n\t\tconst tituloTexto = limpiarTexto(item[2]);\n\t\tif (!tituloTexto) continue;\n\t\tconst snippet = item[0].match(RE_SNIPPET);\n\t\tresultados.push({\n\t\t\ttitulo: tituloTexto,\n\t\t\turl: href,\n\t\t\tresumen: snippet ? limpiarTexto(snippet[1]) || undefined : undefined,\n\t\t});\n\t}\n\treturn resultados;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, _clave, fetchImpl, signal) => {\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"t\", String(maximo));\n\tconst respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });\n\tconst html = await respuesta.text();\n\tif (esBloqueoAntiBot(html)) {\n\t\tthrow new Error(\"Mojeek bloqueó la petición con su captcha anti-bot.\");\n\t}\n\tif (!respuesta.ok) throw new Error(`Mojeek respondió HTTP ${respuesta.status}.`);\n\treturn parsear(html).slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"mojeek.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/mojeek.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navegador.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/navegador.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC","sourcesContent":["/**\n * Cabeceras de navegador para los proveedores sin clave.\n *\n * DuckDuckGo, Mojeek y Ecosia sirven HTML pensado para un navegador: sin un\n * User-Agent y un Accept-Language plausibles, varios devuelven directamente la\n * página de captcha en vez de resultados. No es spoofing agresivo —un único\n * perfil fijo, no rotación— solo lo mínimo para no parecer un script desnudo.\n */\nexport const CABECERAS_NAVEGADOR: Record<string, string> = {\n\t\"user-agent\":\n\t\t\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36\",\n\t\"accept-language\": \"en-US,en;q=0.9\",\n};\n"]}
1
+ {"version":3,"file":"navegador.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/navegador.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"navegador.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/navegador.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IAC1D,YAAY,EACX,mHAAmH;IACpH,iBAAiB,EAAE,gBAAgB;CACnC,CAAC","sourcesContent":["/**\n * Cabeceras de navegador para los proveedores sin clave.\n *\n * DuckDuckGo, Mojeek y Ecosia sirven HTML pensado para un navegador: sin un\n * User-Agent y un Accept-Language plausibles, varios devuelven directamente la\n * página de captcha en vez de resultados. No es spoofing agresivo —un único\n * perfil fijo, no rotación— solo lo mínimo para no parecer un script desnudo.\n */\nexport const CABECERAS_NAVEGADOR: Record<string, string> = {\n\t\"user-agent\":\n\t\t\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36\",\n\t\"accept-language\": \"en-US,en;q=0.9\",\n};\n"]}
1
+ {"version":3,"file":"navegador.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/navegador.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IAC1D,YAAY,EACX,mHAAmH;IACpH,iBAAiB,EAAE,gBAAgB;CACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registro.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/registro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAgB1E,oGAAkG;AAClG,eAAO,MAAM,WAAW,EAAE,SAAS,mBAAmB,EAAiC,CAAC;AAExF,MAAM,WAAW,4BAA4B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC3C,+EAA4E;IAC5E,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,2BAA2B,GACnC,OAAO,CAAC,4BAA4B,CAAC,CAoBvC","sourcesContent":["/**\n * Registro perezoso de proveedores de búsqueda web.\n *\n * Importar este fichero no carga NINGÚN proveedor: cada `cargar()` es un\n * `import()` dinámico que solo se ejecuta cuando le toca el turno en\n * `buscarConProveedores`. Son módulos pesados —parseo de HTML, clientes de\n * API— y como mucho se usa uno por sesión; cargarlos todos al arrancar sería\n * trabajo tirado para el 99% de las sesiones que no los necesitan.\n *\n * Orden: la búsqueda nativa del modelo (Anthropic) se resuelve ANTES de\n * llegar aquí, en `tools.ts`. Dentro de este registro: clave configurada >\n * sin clave — lo explícito que el usuario ha pagado y configurado gana a lo\n * gratuito. Entre proveedores con clave, el orden es el de esta lista; el\n * primero con clave disponible es el que se prueba primero.\n */\nimport type { DescriptorProveedor, ResultadoProveedor } from \"./tipos.ts\";\n\nconst CON_CLAVE: DescriptorProveedor[] = [\n\t{ nombre: \"brave\", necesitaClave: true, cargar: () => import(\"./brave.ts\") },\n\t{ nombre: \"tavily\", necesitaClave: true, cargar: () => import(\"./tavily.ts\") },\n\t{ nombre: \"exa\", necesitaClave: true, cargar: () => import(\"./exa.ts\") },\n\t{ nombre: \"searxng\", necesitaClave: true, cargar: () => import(\"./searxng.ts\") },\n\t{ nombre: \"serper\", necesitaClave: true, cargar: () => import(\"./serper.ts\") },\n];\n\nconst SIN_CLAVE: DescriptorProveedor[] = [\n\t{ nombre: \"duckduckgo\", necesitaClave: false, cargar: () => import(\"./duckduckgo.ts\") },\n\t{ nombre: \"mojeek\", necesitaClave: false, cargar: () => import(\"./mojeek.ts\") },\n\t{ nombre: \"ecosia\", necesitaClave: false, cargar: () => import(\"./ecosia.ts\") },\n];\n\n/** Metadatos de todos los proveedores, en orden de intento. Ningún `cargar()` se ejecuta aquí. */\nexport const PROVEEDORES: readonly DescriptorProveedor[] = [...CON_CLAVE, ...SIN_CLAVE];\n\nexport interface ResultadoBusquedaProveedores {\n\tproveedor: string;\n\tresultados: ResultadoProveedor[];\n}\n\nexport interface OpcionesBusquedaProveedores {\n\t/** Vault primero, variable de entorno después — lo resuelve quien llama. */\n\tobtenerClave: (nombreProveedor: string) => Promise<string | undefined>;\n\tfetchImpl?: typeof fetch;\n\tsignal?: AbortSignal;\n}\n\n/**\n * Prueba los proveedores en orden hasta que uno responda (con o sin\n * resultados) o se agoten todos.\n *\n * Un proveedor sin clave configurada se SALTA sin contar como fallo — no está\n * disponible, no ha fallado. Un proveedor que lanza SÍ cuenta como fallo y se\n * acumula su motivo. Los tres proveedores sin clave (duckduckgo, mojeek,\n * ecosia) están SIEMPRE en la lista, así que siempre hay al menos uno que\n * intentar: si el bucle se agota es porque todos lanzaron, nunca porque no\n * hubiera nada que probar. Por eso el único error que se lanza aquí es\n * «fallaron», nunca «no configurado» — decir lo contrario sería mentir sobre\n * qué pasó.\n */\nexport async function buscarConProveedores(\n\tconsulta: string,\n\tmaximo: number,\n\topciones: OpcionesBusquedaProveedores,\n): Promise<ResultadoBusquedaProveedores> {\n\tconst fetchImpl = opciones.fetchImpl ?? fetch;\n\tconst errores: string[] = [];\n\n\tfor (const descriptor of PROVEEDORES) {\n\t\tlet clave: string | undefined;\n\t\tif (descriptor.necesitaClave) {\n\t\t\tclave = await opciones.obtenerClave(descriptor.nombre);\n\t\t\tif (!clave) continue; // no configurado: no es un fallo, es \"no disponible\"\n\t\t}\n\t\ttry {\n\t\t\tconst modulo = await descriptor.cargar();\n\t\t\tconst resultados = await modulo.buscar(consulta, maximo, clave, fetchImpl, opciones.signal);\n\t\t\treturn { proveedor: descriptor.nombre, resultados };\n\t\t} catch (error) {\n\t\t\terrores.push(`${descriptor.nombre}: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tthrow new Error(`Todos los proveedores de búsqueda fallaron: ${errores.join(\" | \")}`);\n}\n"]}
1
+ {"version":3,"file":"registro.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/registro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAgB1E,kGAAkG;AAClG,eAAO,MAAM,WAAW,EAAE,SAAS,mBAAmB,EAAiC,CAAC;AAExF,MAAM,WAAW,4BAA4B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC3C,4EAA4E;IAC5E,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,2BAA2B,GACnC,OAAO,CAAC,4BAA4B,CAAC,CAoBvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registro.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/registro.ts"],"names":[],"mappings":"AAiBA,MAAM,SAAS,GAA0B;IACxC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;IAC5E,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IAC9E,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;IACxE,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;IAChF,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;CAC9E,CAAC;AAEF,MAAM,SAAS,GAA0B;IACxC,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;IACvF,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IAC/E,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;CAC/E,CAAC;AAEF,oGAAkG;AAClG,MAAM,CAAC,MAAM,WAAW,GAAmC,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;AAcxF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB,EAChB,MAAc,EACd,QAAqC,EACG;IACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,KAAyB,CAAC;QAC9B,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9B,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK;gBAAE,SAAS,CAAC,qDAAqD;QAC5E,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5F,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gDAA+C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,CACtF","sourcesContent":["/**\n * Registro perezoso de proveedores de búsqueda web.\n *\n * Importar este fichero no carga NINGÚN proveedor: cada `cargar()` es un\n * `import()` dinámico que solo se ejecuta cuando le toca el turno en\n * `buscarConProveedores`. Son módulos pesados —parseo de HTML, clientes de\n * API— y como mucho se usa uno por sesión; cargarlos todos al arrancar sería\n * trabajo tirado para el 99% de las sesiones que no los necesitan.\n *\n * Orden: la búsqueda nativa del modelo (Anthropic) se resuelve ANTES de\n * llegar aquí, en `tools.ts`. Dentro de este registro: clave configurada >\n * sin clave — lo explícito que el usuario ha pagado y configurado gana a lo\n * gratuito. Entre proveedores con clave, el orden es el de esta lista; el\n * primero con clave disponible es el que se prueba primero.\n */\nimport type { DescriptorProveedor, ResultadoProveedor } from \"./tipos.ts\";\n\nconst CON_CLAVE: DescriptorProveedor[] = [\n\t{ nombre: \"brave\", necesitaClave: true, cargar: () => import(\"./brave.ts\") },\n\t{ nombre: \"tavily\", necesitaClave: true, cargar: () => import(\"./tavily.ts\") },\n\t{ nombre: \"exa\", necesitaClave: true, cargar: () => import(\"./exa.ts\") },\n\t{ nombre: \"searxng\", necesitaClave: true, cargar: () => import(\"./searxng.ts\") },\n\t{ nombre: \"serper\", necesitaClave: true, cargar: () => import(\"./serper.ts\") },\n];\n\nconst SIN_CLAVE: DescriptorProveedor[] = [\n\t{ nombre: \"duckduckgo\", necesitaClave: false, cargar: () => import(\"./duckduckgo.ts\") },\n\t{ nombre: \"mojeek\", necesitaClave: false, cargar: () => import(\"./mojeek.ts\") },\n\t{ nombre: \"ecosia\", necesitaClave: false, cargar: () => import(\"./ecosia.ts\") },\n];\n\n/** Metadatos de todos los proveedores, en orden de intento. Ningún `cargar()` se ejecuta aquí. */\nexport const PROVEEDORES: readonly DescriptorProveedor[] = [...CON_CLAVE, ...SIN_CLAVE];\n\nexport interface ResultadoBusquedaProveedores {\n\tproveedor: string;\n\tresultados: ResultadoProveedor[];\n}\n\nexport interface OpcionesBusquedaProveedores {\n\t/** Vault primero, variable de entorno después — lo resuelve quien llama. */\n\tobtenerClave: (nombreProveedor: string) => Promise<string | undefined>;\n\tfetchImpl?: typeof fetch;\n\tsignal?: AbortSignal;\n}\n\n/**\n * Prueba los proveedores en orden hasta que uno responda (con o sin\n * resultados) o se agoten todos.\n *\n * Un proveedor sin clave configurada se SALTA sin contar como fallo — no está\n * disponible, no ha fallado. Un proveedor que lanza SÍ cuenta como fallo y se\n * acumula su motivo. Los tres proveedores sin clave (duckduckgo, mojeek,\n * ecosia) están SIEMPRE en la lista, así que siempre hay al menos uno que\n * intentar: si el bucle se agota es porque todos lanzaron, nunca porque no\n * hubiera nada que probar. Por eso el único error que se lanza aquí es\n * «fallaron», nunca «no configurado» — decir lo contrario sería mentir sobre\n * qué pasó.\n */\nexport async function buscarConProveedores(\n\tconsulta: string,\n\tmaximo: number,\n\topciones: OpcionesBusquedaProveedores,\n): Promise<ResultadoBusquedaProveedores> {\n\tconst fetchImpl = opciones.fetchImpl ?? fetch;\n\tconst errores: string[] = [];\n\n\tfor (const descriptor of PROVEEDORES) {\n\t\tlet clave: string | undefined;\n\t\tif (descriptor.necesitaClave) {\n\t\t\tclave = await opciones.obtenerClave(descriptor.nombre);\n\t\t\tif (!clave) continue; // no configurado: no es un fallo, es \"no disponible\"\n\t\t}\n\t\ttry {\n\t\t\tconst modulo = await descriptor.cargar();\n\t\t\tconst resultados = await modulo.buscar(consulta, maximo, clave, fetchImpl, opciones.signal);\n\t\t\treturn { proveedor: descriptor.nombre, resultados };\n\t\t} catch (error) {\n\t\t\terrores.push(`${descriptor.nombre}: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tthrow new Error(`Todos los proveedores de búsqueda fallaron: ${errores.join(\" | \")}`);\n}\n"]}
1
+ {"version":3,"file":"registro.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/registro.ts"],"names":[],"mappings":"AAiBA,MAAM,SAAS,GAA0B;IACxC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;IAC5E,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IAC9E,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;IACxE,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;IAChF,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;CAC9E,CAAC;AAEF,MAAM,SAAS,GAA0B;IACxC,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;IACvF,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IAC/E,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;CAC/E,CAAC;AAEF,kGAAkG;AAClG,MAAM,CAAC,MAAM,WAAW,GAAmC,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;AAcxF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB,EAChB,MAAc,EACd,QAAqC;IAErC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,KAAyB,CAAC;QAC9B,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9B,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK;gBAAE,SAAS,CAAC,qDAAqD;QAC5E,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5F,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"searxng.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/searxng.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAMpE,eAAO,MAAM,MAAM,EAAE,aAapB,CAAC","sourcesContent":["/**\n * SearXNG: metabuscador autoalojado. No tiene clave propia en el sentido\n * habitual —lo que hace falta es la URL de LA instancia del usuario—, pero\n * cuenta como «con clave» porque, igual que una API key, no funciona de\n * fábrica: hay que configurarla (vault `searxng`, o SEARXNG_URL).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\ninterface RespuestaSearxng {\n\tresults?: Array<{ title?: string; url?: string; content?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"SearXNG requiere la URL de una instancia.\");\n\tconst base = clave.replace(/\\/+$/, \"\");\n\tconst url = new URL(`${base}/search`);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"format\", \"json\");\n\tconst respuesta = await fetchImpl(url, { headers: { Accept: \"application/json\" }, signal });\n\tif (!respuesta.ok) throw new Error(`SearXNG respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaSearxng;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.content }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"searxng.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/searxng.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAMpE,eAAO,MAAM,MAAM,EAAE,aAapB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"searxng.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/searxng.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA0B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAqB,CAAC;IAC3D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,CACnC,CAAC","sourcesContent":["/**\n * SearXNG: metabuscador autoalojado. No tiene clave propia en el sentido\n * habitual —lo que hace falta es la URL de LA instancia del usuario—, pero\n * cuenta como «con clave» porque, igual que una API key, no funciona de\n * fábrica: hay que configurarla (vault `searxng`, o SEARXNG_URL).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\ninterface RespuestaSearxng {\n\tresults?: Array<{ title?: string; url?: string; content?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"SearXNG requiere la URL de una instancia.\");\n\tconst base = clave.replace(/\\/+$/, \"\");\n\tconst url = new URL(`${base}/search`);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"format\", \"json\");\n\tconst respuesta = await fetchImpl(url, { headers: { Accept: \"application/json\" }, signal });\n\tif (!respuesta.ok) throw new Error(`SearXNG respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaSearxng;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.content }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"searxng.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/searxng.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACzF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAqB,CAAC;IAC3D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"serper.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/serper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAcpB,CAAC","sourcesContent":["/**\n * Serper (Google Search API). Requiere clave (`serper` en el vault, o\n * SERPER_API_KEY). Es el proveedor histórico de Ada, anterior a este\n * registro: se mantiene aquí para que quien ya tenga la clave configurada\n * siga funcionando exactamente igual.\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://google.serper.dev/search\";\n\ninterface RespuestaSerper {\n\torganic?: Array<{ title?: string; link?: string; snippet?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Serper requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"X-API-KEY\": clave, \"content-type\": \"application/json\" },\n\t\tbody: JSON.stringify({ q: consulta, num: maximo }),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Serper respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaSerper;\n\tconst resultados: ResultadoProveedor[] = (datos.organic ?? [])\n\t\t.filter((r) => typeof r.link === \"string\" && r.link)\n\t\t.map((r) => ({ titulo: r.title || r.link!, url: r.link!, resumen: r.snippet }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"serper.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/serper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAcpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"serper.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/serper.ts"],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAMpD,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAClD,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAAyB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAoB,CAAC;IAC1D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;SACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,CACnC,CAAC","sourcesContent":["/**\n * Serper (Google Search API). Requiere clave (`serper` en el vault, o\n * SERPER_API_KEY). Es el proveedor histórico de Ada, anterior a este\n * registro: se mantiene aquí para que quien ya tenga la clave configurada\n * siga funcionando exactamente igual.\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://google.serper.dev/search\";\n\ninterface RespuestaSerper {\n\torganic?: Array<{ title?: string; link?: string; snippet?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Serper requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"X-API-KEY\": clave, \"content-type\": \"application/json\" },\n\t\tbody: JSON.stringify({ q: consulta, num: maximo }),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Serper respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaSerper;\n\tconst resultados: ResultadoProveedor[] = (datos.organic ?? [])\n\t\t.filter((r) => typeof r.link === \"string\" && r.link)\n\t\t.map((r) => ({ titulo: r.title || r.link!, url: r.link!, resumen: r.snippet }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"serper.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/serper.ts"],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAMpD,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACzF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAClD,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAoB,CAAC;IAC1D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;SACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tavily.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tavily.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAcpB,CAAC","sourcesContent":["/**\n * Tavily Search API. Requiere clave (`tavily` en el vault, o TAVILY_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.tavily.com/search\";\n\ninterface RespuestaTavily {\n\tresults?: Array<{ title?: string; url?: string; content?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Tavily requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"content-type\": \"application/json\", authorization: `Bearer ${clave}` },\n\t\tbody: JSON.stringify({ query: consulta, max_results: Math.min(Math.max(maximo, 1), 20), search_depth: \"basic\" }),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Tavily respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaTavily;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.content }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"tavily.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tavily.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAcpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tavily.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tavily.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAMjD,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;QACjF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChH,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAAyB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAoB,CAAC;IAC1D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,CACnC,CAAC","sourcesContent":["/**\n * Tavily Search API. Requiere clave (`tavily` en el vault, o TAVILY_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.tavily.com/search\";\n\ninterface RespuestaTavily {\n\tresults?: Array<{ title?: string; url?: string; content?: string }>;\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Tavily requiere clave.\");\n\tconst respuesta = await fetchImpl(ENDPOINT, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"content-type\": \"application/json\", authorization: `Bearer ${clave}` },\n\t\tbody: JSON.stringify({ query: consulta, max_results: Math.min(Math.max(maximo, 1), 20), search_depth: \"basic\" }),\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Tavily respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaTavily;\n\tconst resultados: ResultadoProveedor[] = (datos.results ?? [])\n\t\t.filter((r) => typeof r.url === \"string\" && r.url)\n\t\t.map((r) => ({ titulo: r.title || r.url!, url: r.url!, resumen: r.content }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
1
+ {"version":3,"file":"tavily.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tavily.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAMjD,MAAM,CAAC,MAAM,MAAM,GAAkB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACzF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;QACjF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChH,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAoB,CAAC;IAC1D,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yFAAwF;AACxF,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,OAAO,KAAK,EACvB,MAAM,CAAC,EAAE,WAAW,KAChB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACvC","sourcesContent":["/**\n * Tipos compartidos por los proveedores de búsqueda web.\n *\n * Un proveedor es un módulo que se carga con `import()` la primera vez que se\n * necesita: importar este fichero (o `registro.ts`) NO debe cargar ni un solo\n * proveedor. Son pesados —cada uno trae su propio parseo— y como mucho se usa\n * uno por sesión, así que cargarlos todos por adelantado es trabajo tirado.\n */\n\n/** Un resultado de búsqueda ya normalizado, con snippet cuando el proveedor lo trae. */\nexport interface ResultadoProveedor {\n\ttitulo: string;\n\turl: string;\n\tresumen?: string;\n\t/** Antigüedad tal y como la da el proveedor (\"3 weeks ago\", \"2026-07-30\"). */\n\tedad?: string;\n}\n\n/**\n * Busca. Los proveedores SIN clave reciben `clave === undefined` y lo ignoran;\n * el registro nunca llama a un proveedor CON clave sin haberla resuelto antes.\n *\n * Debe LANZAR en cualquier fallo real (red, HTTP, bloqueo anti-bot, JSON roto):\n * el registro pasa al siguiente proveedor con ese error. Devolver `[]` es\n * SOLO para «he preguntado y no hay resultados» — confundir las dos cosas es\n * el error que la puerta de este hueco existe para atrapar.\n */\nexport type FuncionBuscar = (\n\tconsulta: string,\n\tmaximo: number,\n\tclave: string | undefined,\n\tfetchImpl: typeof fetch,\n\tsignal?: AbortSignal,\n) => Promise<ResultadoProveedor[]>;\n\nexport interface ModuloProveedor {\n\tbuscar: FuncionBuscar;\n}\n\nexport interface DescriptorProveedor {\n\tnombre: string;\n\tnecesitaClave: boolean;\n\t/** Import perezoso: no se ejecuta hasta que el proveedor le toca en el orden. */\n\tcargar: () => Promise<ModuloProveedor>;\n}\n"]}
1
+ {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,OAAO,KAAK,EACvB,MAAM,CAAC,EAAE,WAAW,KAChB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * Tipos compartidos por los proveedores de búsqueda web.\n *\n * Un proveedor es un módulo que se carga con `import()` la primera vez que se\n * necesita: importar este fichero (o `registro.ts`) NO debe cargar ni un solo\n * proveedor. Son pesados —cada uno trae su propio parseo— y como mucho se usa\n * uno por sesión, así que cargarlos todos por adelantado es trabajo tirado.\n */\n\n/** Un resultado de búsqueda ya normalizado, con snippet cuando el proveedor lo trae. */\nexport interface ResultadoProveedor {\n\ttitulo: string;\n\turl: string;\n\tresumen?: string;\n\t/** Antigüedad tal y como la da el proveedor (\"3 weeks ago\", \"2026-07-30\"). */\n\tedad?: string;\n}\n\n/**\n * Busca. Los proveedores SIN clave reciben `clave === undefined` y lo ignoran;\n * el registro nunca llama a un proveedor CON clave sin haberla resuelto antes.\n *\n * Debe LANZAR en cualquier fallo real (red, HTTP, bloqueo anti-bot, JSON roto):\n * el registro pasa al siguiente proveedor con ese error. Devolver `[]` es\n * SOLO para «he preguntado y no hay resultados» — confundir las dos cosas es\n * el error que la puerta de este hueco existe para atrapar.\n */\nexport type FuncionBuscar = (\n\tconsulta: string,\n\tmaximo: number,\n\tclave: string | undefined,\n\tfetchImpl: typeof fetch,\n\tsignal?: AbortSignal,\n) => Promise<ResultadoProveedor[]>;\n\nexport interface ModuloProveedor {\n\tbuscar: FuncionBuscar;\n}\n\nexport interface DescriptorProveedor {\n\tnombre: string;\n\tnecesitaClave: boolean;\n\t/** Import perezoso: no se ejecuta hasta que el proveedor le toca en el orden. */\n\tcargar: () => Promise<ModuloProveedor>;\n}\n"]}
1
+ {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1 +1 @@
1
- {"version":3,"file":"registro-red.d.ts","sourceRoot":"","sources":["../../../src/core/web/registro-red.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvF,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAOpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,KAAK,CAahG;AAmBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAErE;AAED,4EAA2E;AAC3E,wBAAgB,mBAAmB,IAAI,SAAS,GAAG,SAAS,CAE3D;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC","sourcesContent":["/**\n * Envolver un `fetch` para que cada salida quede en el libro de sesión.\n *\n * POR QUÉ VIVE APARTE. Esto nació dentro de `web/tools.ts`, envolviendo el\n * `fetch` que reciben el fetch genérico, los scrapers y los proveedores de\n * búsqueda. Cubría esos tres caminos y ninguno más, y el informe para el DPO\n * escribía **«No hubo transferencias»** — una ausencia que el registro no podía\n * sostener, porque el cliente MCP hablaba con servidores remotos sin pasar por\n * aquí.\n *\n * Un DPO diría que contactar con un MCP remoto ES una transferencia (art. 44 y\n * siguientes del RGPD), y tendría razón. Sacarlo a un módulo propio es lo que\n * permite que cualquier camino de salida lo use, en vez de tener el registro\n * atado al que se implementó primero.\n *\n * LO QUE REGISTRA Y LO QUE NO. El dominio y si se permitió, nunca la URL\n * completa ni el cuerpo. Una ruta puede llevar un identificador y un cuerpo\n * puede llevar datos personales; el libro guarda la FORMA de lo que pasó, no su\n * contenido. Un registro de cumplimiento que copiara los datos sería un segundo\n * almacén de justo lo que el RGPD quiere minimizar.\n */\n\n/** Qué se le cuenta al libro. `motivo` solo cuando se bloquea. */\nexport type AnotarRed = (dominio: string, permitido: boolean, motivo?: string) => void;\n\n/** El dominio de un destino de `fetch`, o `null` si no se puede determinar. */\nexport function dominioDeDestino(destino: Parameters<typeof fetch>[0]): string | null {\n\ttry {\n\t\tconst url = typeof destino === \"string\" ? destino : destino instanceof URL ? destino.href : destino.url;\n\t\treturn new URL(url).hostname || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * `fetch` que anota cada salida antes de hacerla.\n *\n * Si `anotar` es `undefined` devuelve el `fetch` original tal cual, sin\n * envolver: quien no tiene libro no paga el coste ni ve un comportamiento\n * distinto.\n *\n * El registro es best-effort y la petición no: si anotar falla, la descarga\n * sigue. Al revés sería un libro que puede tumbar el producto, y eso acabaría\n * con el libro desactivado.\n */\nexport function fetchConRegistro(base: typeof fetch, anotar: AnotarRed | undefined): typeof fetch {\n\tif (!anotar) return base;\n\treturn (destino, init) => {\n\t\tconst dominio = dominioDeDestino(destino);\n\t\tif (dominio) {\n\t\t\ttry {\n\t\t\t\tanotar(dominio, true);\n\t\t\t} catch {\n\t\t\t\t// Un fallo del libro no puede impedir una petición.\n\t\t\t}\n\t\t}\n\t\treturn base(destino, init);\n\t};\n}\n\n/**\n * El `anotarRed` de la sesión en curso, publicado.\n *\n * Los caminos de salida no nacen todos en el mismo sitio: las tools web se\n * crean en `agent-session.ts`, que SÍ tiene el libro a mano, y el cliente MCP\n * lo crea `resource-loader.ts`, que no. Enhebrar el libro hasta allí costaba\n * hunks del presupuesto de fork en un fichero de upstream; publicarlo cuesta\n * cero y es el mismo patrón ya usado —y validado— en\n * `core/extensiones/vigilancia.ts`.\n *\n * Es estado mutable de módulo, con lo que eso tiene de malo. Se acepta por lo\n * que compra: sin esto el informe para el DPO afirma «No hubo transferencias»\n * sobre una sesión que habló con un servidor de terceros, y esa es la clase de\n * afirmación que no se puede hacer a la ligera en un registro de cumplimiento.\n */\nlet anotarPublicado: AnotarRed | undefined;\n\nexport function publicarAnotarRed(anotar: AnotarRed | undefined): void {\n\tanotarPublicado = anotar;\n}\n\n/** `undefined` = no hay sesión con libro; quien llame no envuelve nada. */\nexport function anotarRedDeLaSesion(): AnotarRed | undefined {\n\treturn anotarPublicado;\n}\n\n/** Solo para pruebas. */\nexport function olvidarAnotarRed(): void {\n\tanotarPublicado = undefined;\n}\n"]}
1
+ {"version":3,"file":"registro-red.d.ts","sourceRoot":"","sources":["../../../src/core/web/registro-red.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvF,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAOpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,KAAK,CAahG;AAmBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAErE;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,IAAI,SAAS,GAAG,SAAS,CAE3D;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registro-red.js","sourceRoot":"","sources":["../../../src/core/web/registro-red.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,OAAoC,EAAiB;IACrF,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QACxG,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AAAA,CACD;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAkB,EAAE,MAA6B,EAAgB;IACjG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACJ,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACR,qDAAoD;YACrD,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAAA,CAC3B,CAAC;AAAA,CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,IAAI,eAAsC,CAAC;AAE3C,MAAM,UAAU,iBAAiB,CAAC,MAA6B,EAAQ;IACtE,eAAe,GAAG,MAAM,CAAC;AAAA,CACzB;AAED,4EAA2E;AAC3E,MAAM,UAAU,mBAAmB,GAA0B;IAC5D,OAAO,eAAe,CAAC;AAAA,CACvB;AAED,yBAAyB;AACzB,MAAM,UAAU,gBAAgB,GAAS;IACxC,eAAe,GAAG,SAAS,CAAC;AAAA,CAC5B","sourcesContent":["/**\n * Envolver un `fetch` para que cada salida quede en el libro de sesión.\n *\n * POR QUÉ VIVE APARTE. Esto nació dentro de `web/tools.ts`, envolviendo el\n * `fetch` que reciben el fetch genérico, los scrapers y los proveedores de\n * búsqueda. Cubría esos tres caminos y ninguno más, y el informe para el DPO\n * escribía **«No hubo transferencias»** — una ausencia que el registro no podía\n * sostener, porque el cliente MCP hablaba con servidores remotos sin pasar por\n * aquí.\n *\n * Un DPO diría que contactar con un MCP remoto ES una transferencia (art. 44 y\n * siguientes del RGPD), y tendría razón. Sacarlo a un módulo propio es lo que\n * permite que cualquier camino de salida lo use, en vez de tener el registro\n * atado al que se implementó primero.\n *\n * LO QUE REGISTRA Y LO QUE NO. El dominio y si se permitió, nunca la URL\n * completa ni el cuerpo. Una ruta puede llevar un identificador y un cuerpo\n * puede llevar datos personales; el libro guarda la FORMA de lo que pasó, no su\n * contenido. Un registro de cumplimiento que copiara los datos sería un segundo\n * almacén de justo lo que el RGPD quiere minimizar.\n */\n\n/** Qué se le cuenta al libro. `motivo` solo cuando se bloquea. */\nexport type AnotarRed = (dominio: string, permitido: boolean, motivo?: string) => void;\n\n/** El dominio de un destino de `fetch`, o `null` si no se puede determinar. */\nexport function dominioDeDestino(destino: Parameters<typeof fetch>[0]): string | null {\n\ttry {\n\t\tconst url = typeof destino === \"string\" ? destino : destino instanceof URL ? destino.href : destino.url;\n\t\treturn new URL(url).hostname || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * `fetch` que anota cada salida antes de hacerla.\n *\n * Si `anotar` es `undefined` devuelve el `fetch` original tal cual, sin\n * envolver: quien no tiene libro no paga el coste ni ve un comportamiento\n * distinto.\n *\n * El registro es best-effort y la petición no: si anotar falla, la descarga\n * sigue. Al revés sería un libro que puede tumbar el producto, y eso acabaría\n * con el libro desactivado.\n */\nexport function fetchConRegistro(base: typeof fetch, anotar: AnotarRed | undefined): typeof fetch {\n\tif (!anotar) return base;\n\treturn (destino, init) => {\n\t\tconst dominio = dominioDeDestino(destino);\n\t\tif (dominio) {\n\t\t\ttry {\n\t\t\t\tanotar(dominio, true);\n\t\t\t} catch {\n\t\t\t\t// Un fallo del libro no puede impedir una petición.\n\t\t\t}\n\t\t}\n\t\treturn base(destino, init);\n\t};\n}\n\n/**\n * El `anotarRed` de la sesión en curso, publicado.\n *\n * Los caminos de salida no nacen todos en el mismo sitio: las tools web se\n * crean en `agent-session.ts`, que SÍ tiene el libro a mano, y el cliente MCP\n * lo crea `resource-loader.ts`, que no. Enhebrar el libro hasta allí costaba\n * hunks del presupuesto de fork en un fichero de upstream; publicarlo cuesta\n * cero y es el mismo patrón ya usado —y validado— en\n * `core/extensiones/vigilancia.ts`.\n *\n * Es estado mutable de módulo, con lo que eso tiene de malo. Se acepta por lo\n * que compra: sin esto el informe para el DPO afirma «No hubo transferencias»\n * sobre una sesión que habló con un servidor de terceros, y esa es la clase de\n * afirmación que no se puede hacer a la ligera en un registro de cumplimiento.\n */\nlet anotarPublicado: AnotarRed | undefined;\n\nexport function publicarAnotarRed(anotar: AnotarRed | undefined): void {\n\tanotarPublicado = anotar;\n}\n\n/** `undefined` = no hay sesión con libro; quien llame no envuelve nada. */\nexport function anotarRedDeLaSesion(): AnotarRed | undefined {\n\treturn anotarPublicado;\n}\n\n/** Solo para pruebas. */\nexport function olvidarAnotarRed(): void {\n\tanotarPublicado = undefined;\n}\n"]}
1
+ {"version":3,"file":"registro-red.js","sourceRoot":"","sources":["../../../src/core/web/registro-red.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,OAAoC;IACpE,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QACxG,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAkB,EAAE,MAA6B;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACJ,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACR,oDAAoD;YACrD,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,IAAI,eAAsC,CAAC;AAE3C,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC9D,eAAe,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB;IAClC,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,gBAAgB;IAC/B,eAAe,GAAG,SAAS,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cisa-kev.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/cisa-kev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAgBpE,eAAO,MAAM,QAAQ,EAAE,cAwBtB,CAAC","sourcesContent":["/**\n * CISA KEV (Known Exploited Vulnerabilities), vía el feed JSON público.\n *\n * No hay endpoint por CVE: el feed es el catálogo entero (~1.5 MB). Se pide\n * completo y se filtra en memoria — mismo coste de red que cualquier otra\n * consulta a este catálogo, no hay forma más barata sin clave.\n */\nimport { esHostOSubdominio, type FuncionScraper } from \"./tipos.ts\";\n\nconst FEED_URL = \"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json\";\nconst RE_CVE = /CVE-\\d{4}-\\d{4,7}/i;\n\ninterface EntradaKev {\n\tcveID?: string;\n\tvendorProject?: string;\n\tproduct?: string;\n\tvulnerabilityName?: string;\n\tshortDescription?: string;\n\tdateAdded?: string;\n\tdueDate?: string;\n\tknownRansomwareCampaignUse?: string;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (!esHostOSubdominio(url.hostname.toLowerCase(), \"cisa.gov\")) return null;\n\tconst cveMatch = url.pathname.match(RE_CVE) ?? url.search.match(RE_CVE);\n\tif (!cveMatch) return null;\n\tconst cveId = cveMatch[0].toUpperCase();\n\n\tconst respuesta = await fetchImpl(FEED_URL, { headers: { Accept: \"application/json\" }, signal });\n\tif (!respuesta.ok) throw new Error(`CISA KEV respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as { vulnerabilities?: EntradaKev[] };\n\tconst entrada = doc.vulnerabilities?.find((v) => v.cveID?.toUpperCase() === cveId);\n\tif (!entrada) return null; // el CVE es válido pero no está en el catálogo KEV\n\n\treturn {\n\t\ttitulo: `${entrada.cveID} — ${entrada.vulnerabilityName ?? \"explotado activamente (KEV)\"}`,\n\t\turl: `https://www.cisa.gov/known-exploited-vulnerabilities-catalog?search_api_fulltext=${entrada.cveID}`,\n\t\tresumen: entrada.shortDescription ?? \"\",\n\t\tdatos: {\n\t\t\tvendedor: entrada.vendorProject,\n\t\t\tproducto: entrada.product,\n\t\t\tañadido: entrada.dateAdded,\n\t\t\tfechaLimite: entrada.dueDate,\n\t\t\tusoEnRansomware: entrada.knownRansomwareCampaignUse,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"cisa-kev.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/cisa-kev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAgBpE,eAAO,MAAM,QAAQ,EAAE,cAwBtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cisa-kev.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/cisa-kev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAEpE,MAAM,QAAQ,GAAG,qFAAqF,CAAC;AACvG,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAapC,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAExC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA2B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAuC,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,sDAAmD;IAE9E,OAAO;QACN,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,QAAM,OAAO,CAAC,iBAAiB,IAAI,6BAA6B,EAAE;QAC1F,GAAG,EAAE,oFAAoF,OAAO,CAAC,KAAK,EAAE;QACxG,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;QACvC,KAAK,EAAE;YACN,QAAQ,EAAE,OAAO,CAAC,aAAa;YAC/B,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,QAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,eAAe,EAAE,OAAO,CAAC,0BAA0B;SACnD;KACD,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * CISA KEV (Known Exploited Vulnerabilities), vía el feed JSON público.\n *\n * No hay endpoint por CVE: el feed es el catálogo entero (~1.5 MB). Se pide\n * completo y se filtra en memoria — mismo coste de red que cualquier otra\n * consulta a este catálogo, no hay forma más barata sin clave.\n */\nimport { esHostOSubdominio, type FuncionScraper } from \"./tipos.ts\";\n\nconst FEED_URL = \"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json\";\nconst RE_CVE = /CVE-\\d{4}-\\d{4,7}/i;\n\ninterface EntradaKev {\n\tcveID?: string;\n\tvendorProject?: string;\n\tproduct?: string;\n\tvulnerabilityName?: string;\n\tshortDescription?: string;\n\tdateAdded?: string;\n\tdueDate?: string;\n\tknownRansomwareCampaignUse?: string;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (!esHostOSubdominio(url.hostname.toLowerCase(), \"cisa.gov\")) return null;\n\tconst cveMatch = url.pathname.match(RE_CVE) ?? url.search.match(RE_CVE);\n\tif (!cveMatch) return null;\n\tconst cveId = cveMatch[0].toUpperCase();\n\n\tconst respuesta = await fetchImpl(FEED_URL, { headers: { Accept: \"application/json\" }, signal });\n\tif (!respuesta.ok) throw new Error(`CISA KEV respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as { vulnerabilities?: EntradaKev[] };\n\tconst entrada = doc.vulnerabilities?.find((v) => v.cveID?.toUpperCase() === cveId);\n\tif (!entrada) return null; // el CVE es válido pero no está en el catálogo KEV\n\n\treturn {\n\t\ttitulo: `${entrada.cveID} — ${entrada.vulnerabilityName ?? \"explotado activamente (KEV)\"}`,\n\t\turl: `https://www.cisa.gov/known-exploited-vulnerabilities-catalog?search_api_fulltext=${entrada.cveID}`,\n\t\tresumen: entrada.shortDescription ?? \"\",\n\t\tdatos: {\n\t\t\tvendedor: entrada.vendorProject,\n\t\t\tproducto: entrada.product,\n\t\t\tañadido: entrada.dateAdded,\n\t\t\tfechaLimite: entrada.dueDate,\n\t\t\tusoEnRansomware: entrada.knownRansomwareCampaignUse,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"cisa-kev.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/cisa-kev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAEpE,MAAM,QAAQ,GAAG,qFAAqF,CAAC;AACvG,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAapC,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAExC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAuC,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,mDAAmD;IAE9E,OAAO;QACN,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,iBAAiB,IAAI,6BAA6B,EAAE;QAC1F,GAAG,EAAE,oFAAoF,OAAO,CAAC,KAAK,EAAE;QACxG,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;QACvC,KAAK,EAAE;YACN,QAAQ,EAAE,OAAO,CAAC,aAAa;YAC/B,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,eAAe,EAAE,OAAO,CAAC,0BAA0B;SACnD;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"crates-io.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/crates-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAcjD,eAAO,MAAM,QAAQ,EAAE,cAyBtB,CAAC","sourcesContent":["/**\n * crates.io, vía su API pública (`crates.io/api/v1/crates/<crate>`).\n *\n * La licencia no vive en el objeto `crate` sino en cada entrada de\n * `versions`; se toma la de `max_stable_version` (la primera del array\n * coincide salvo prereleases raras, pero se busca por número para no fiarse\n * del orden).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocCratesIo {\n\tcrate?: {\n\t\tname?: string;\n\t\tmax_stable_version?: string;\n\t\tmax_version?: string;\n\t\tdescription?: string;\n\t\thomepage?: string;\n\t\trepository?: string;\n\t};\n\tversions?: Array<{ num?: string; license?: string }>;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"crates.io\") return null;\n\tconst match = url.pathname.match(/^\\/crates\\/([^/]+)/);\n\tif (!match) return null;\n\tconst nombre = decodeURIComponent(match[1]);\n\n\tconst respuesta = await fetchImpl(`https://crates.io/api/v1/crates/${nombre}`, {\n\t\theaders: { Accept: \"application/json\", \"User-Agent\": \"ada-cli (web_fetch scraper)\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`crates.io respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocCratesIo;\n\tconst crate = doc.crate;\n\tif (!crate?.name) return null;\n\n\tconst version = crate.max_stable_version ?? crate.max_version;\n\tconst licencia = doc.versions?.find((v) => v.num === version)?.license ?? doc.versions?.[0]?.license;\n\n\treturn {\n\t\ttitulo: `${crate.name}@${version ?? \"?\"}`,\n\t\turl: `https://crates.io/crates/${crate.name}`,\n\t\tresumen: crate.description ?? \"\",\n\t\tdatos: { nombre: crate.name, version, licencia, homepage: crate.homepage ?? crate.repository },\n\t};\n};\n"]}
1
+ {"version":3,"file":"crates-io.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/crates-io.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAcjD,eAAO,MAAM,QAAQ,EAAE,cAyBtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"crates-io.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/crates-io.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,mCAAmC,MAAM,EAAE,EAAE;QAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,6BAA6B,EAAE;QACpF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA4B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAErG,OAAO;QACN,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,EAAE;QACzC,GAAG,EAAE,4BAA4B,KAAK,CAAC,IAAI,EAAE;QAC7C,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;KAC9F,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * crates.io, vía su API pública (`crates.io/api/v1/crates/<crate>`).\n *\n * La licencia no vive en el objeto `crate` sino en cada entrada de\n * `versions`; se toma la de `max_stable_version` (la primera del array\n * coincide salvo prereleases raras, pero se busca por número para no fiarse\n * del orden).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocCratesIo {\n\tcrate?: {\n\t\tname?: string;\n\t\tmax_stable_version?: string;\n\t\tmax_version?: string;\n\t\tdescription?: string;\n\t\thomepage?: string;\n\t\trepository?: string;\n\t};\n\tversions?: Array<{ num?: string; license?: string }>;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"crates.io\") return null;\n\tconst match = url.pathname.match(/^\\/crates\\/([^/]+)/);\n\tif (!match) return null;\n\tconst nombre = decodeURIComponent(match[1]);\n\n\tconst respuesta = await fetchImpl(`https://crates.io/api/v1/crates/${nombre}`, {\n\t\theaders: { Accept: \"application/json\", \"User-Agent\": \"ada-cli (web_fetch scraper)\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`crates.io respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocCratesIo;\n\tconst crate = doc.crate;\n\tif (!crate?.name) return null;\n\n\tconst version = crate.max_stable_version ?? crate.max_version;\n\tconst licencia = doc.versions?.find((v) => v.num === version)?.license ?? doc.versions?.[0]?.license;\n\n\treturn {\n\t\ttitulo: `${crate.name}@${version ?? \"?\"}`,\n\t\turl: `https://crates.io/crates/${crate.name}`,\n\t\tresumen: crate.description ?? \"\",\n\t\tdatos: { nombre: crate.name, version, licencia, homepage: crate.homepage ?? crate.repository },\n\t};\n};\n"]}
1
+ {"version":3,"file":"crates-io.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/crates-io.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,mCAAmC,MAAM,EAAE,EAAE;QAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,6BAA6B,EAAE;QACpF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAErG,OAAO;QACN,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,EAAE;QACzC,GAAG,EAAE,4BAA4B,KAAK,CAAC,IAAI,EAAE;QAC7C,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;KAC9F,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"docs-rs.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/docs-rs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoBjD,eAAO,MAAM,QAAQ,EAAE,cAwBtB,CAAC","sourcesContent":["/**\n * docs.rs no tiene una API JSON estable y pública para metadatos (el índice de\n * búsqueda es un blob interno versionado). Lo que un agente quiere de una URL\n * de docs.rs —versión y licencia del crate— SÍ lo tiene crates.io, así que se\n * reutiliza su API: docs.rs y crates.io comparten el mismo nombre de crate por\n * construcción (docs.rs se genera A PARTIR de lo publicado en crates.io).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocCratesIo {\n\tcrate?: {\n\t\tname?: string;\n\t\tmax_stable_version?: string;\n\t\tmax_version?: string;\n\t\tdescription?: string;\n\t\thomepage?: string;\n\t};\n\tversions?: Array<{ num?: string; license?: string }>;\n}\n\n/** `/crate/<nombre>[/<version>]` o `/<nombre>/<version>/...` — ambas formas empiezan por el crate. */\nfunction crateDeRuta(pathname: string): string | undefined {\n\tconst partes = pathname.split(\"/\").filter(Boolean);\n\tif (partes.length === 0) return undefined;\n\treturn partes[0] === \"crate\" ? partes[1] : partes[0];\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"docs.rs\") return null;\n\tconst nombre = crateDeRuta(url.pathname);\n\tif (!nombre) return null;\n\n\tconst respuesta = await fetchImpl(`https://crates.io/api/v1/crates/${nombre}`, {\n\t\theaders: { Accept: \"application/json\", \"User-Agent\": \"ada-cli (web_fetch scraper)\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`docs.rs (vía crates.io) respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocCratesIo;\n\tconst crate = doc.crate;\n\tif (!crate?.name) return null;\n\n\tconst version = crate.max_stable_version ?? crate.max_version;\n\tconst licencia = doc.versions?.find((v) => v.num === version)?.license ?? doc.versions?.[0]?.license;\n\n\treturn {\n\t\ttitulo: `${crate.name}@${version ?? \"?\"} — docs.rs`,\n\t\turl: `https://docs.rs/${crate.name}/latest/${crate.name}/`,\n\t\tresumen: crate.description ?? \"\",\n\t\tdatos: { nombre: crate.name, version, licencia, homepage: crate.homepage },\n\t};\n};\n"]}
1
+ {"version":3,"file":"docs-rs.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/docs-rs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoBjD,eAAO,MAAM,QAAQ,EAAE,cAwBtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"docs-rs.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/docs-rs.ts"],"names":[],"mappings":"AAoBA,wGAAsG;AACtG,SAAS,WAAW,CAAC,QAAgB,EAAsB;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAAA,CACrD;AAED,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,mCAAmC,MAAM,EAAE,EAAE;QAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,6BAA6B,EAAE;QACpF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA0C,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAErG,OAAO;QACN,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,cAAY;QACnD,GAAG,EAAE,mBAAmB,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,GAAG;QAC1D,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;KAC1E,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * docs.rs no tiene una API JSON estable y pública para metadatos (el índice de\n * búsqueda es un blob interno versionado). Lo que un agente quiere de una URL\n * de docs.rs —versión y licencia del crate— SÍ lo tiene crates.io, así que se\n * reutiliza su API: docs.rs y crates.io comparten el mismo nombre de crate por\n * construcción (docs.rs se genera A PARTIR de lo publicado en crates.io).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocCratesIo {\n\tcrate?: {\n\t\tname?: string;\n\t\tmax_stable_version?: string;\n\t\tmax_version?: string;\n\t\tdescription?: string;\n\t\thomepage?: string;\n\t};\n\tversions?: Array<{ num?: string; license?: string }>;\n}\n\n/** `/crate/<nombre>[/<version>]` o `/<nombre>/<version>/...` — ambas formas empiezan por el crate. */\nfunction crateDeRuta(pathname: string): string | undefined {\n\tconst partes = pathname.split(\"/\").filter(Boolean);\n\tif (partes.length === 0) return undefined;\n\treturn partes[0] === \"crate\" ? partes[1] : partes[0];\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"docs.rs\") return null;\n\tconst nombre = crateDeRuta(url.pathname);\n\tif (!nombre) return null;\n\n\tconst respuesta = await fetchImpl(`https://crates.io/api/v1/crates/${nombre}`, {\n\t\theaders: { Accept: \"application/json\", \"User-Agent\": \"ada-cli (web_fetch scraper)\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`docs.rs (vía crates.io) respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocCratesIo;\n\tconst crate = doc.crate;\n\tif (!crate?.name) return null;\n\n\tconst version = crate.max_stable_version ?? crate.max_version;\n\tconst licencia = doc.versions?.find((v) => v.num === version)?.license ?? doc.versions?.[0]?.license;\n\n\treturn {\n\t\ttitulo: `${crate.name}@${version ?? \"?\"} — docs.rs`,\n\t\turl: `https://docs.rs/${crate.name}/latest/${crate.name}/`,\n\t\tresumen: crate.description ?? \"\",\n\t\tdatos: { nombre: crate.name, version, licencia, homepage: crate.homepage },\n\t};\n};\n"]}
1
+ {"version":3,"file":"docs-rs.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/docs-rs.ts"],"names":[],"mappings":"AAoBA,sGAAsG;AACtG,SAAS,WAAW,CAAC,QAAgB;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,mCAAmC,MAAM,EAAE,EAAE;QAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,6BAA6B,EAAE;QACpF,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAErG,OAAO;QACN,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,YAAY;QACnD,GAAG,EAAE,mBAAmB,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,GAAG;QAC1D,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;KAC1E,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/github.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA+BjD,eAAO,MAAM,QAAQ,EAAE,cAoDtB,CAAC","sourcesContent":["/**\n * GitHub: repos e issues/PRs, vía la API REST pública (`api.github.com`).\n * Sin clave: 60 peticiones/hora por IP, suficiente para una consulta suelta.\n */\nimport { htmlToText } from \"../texto.ts\";\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocRepo {\n\tfull_name?: string;\n\tdescription?: string;\n\tlicense?: { spdx_id?: string };\n\tstargazers_count?: number;\n\topen_issues_count?: number;\n\tdefault_branch?: string;\n\tlanguage?: string;\n\thtml_url?: string;\n}\n\ninterface DocIssue {\n\ttitle?: string;\n\tbody?: string;\n\tstate?: string;\n\tnumber?: number;\n\tuser?: { login?: string };\n\tcomments?: number;\n\tpull_request?: unknown;\n\thtml_url?: string;\n}\n\nasync function pedirJson<T>(fetchImpl: typeof fetch, url: string, signal?: AbortSignal): Promise<T | null> {\n\tconst respuesta = await fetchImpl(url, { headers: { Accept: \"application/vnd.github+json\" }, signal });\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`GitHub respondió HTTP ${respuesta.status}.`);\n\treturn (await respuesta.json()) as T;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tlet owner: string;\n\tlet repo: string;\n\tlet apiBase: string;\n\tif (url.hostname === \"github.com\") {\n\t\tconst partes = url.pathname.split(\"/\").filter(Boolean);\n\t\tif (partes.length < 2) return null;\n\t\t[owner, repo] = partes;\n\t\tapiBase = `https://api.github.com/repos/${owner}/${repo}`;\n\n\t\tconst seccion = partes[2];\n\t\tconst numero = partes[3];\n\t\tif ((seccion === \"issues\" || seccion === \"pull\") && /^\\d+$/.test(numero ?? \"\")) {\n\t\t\tconst issue = await pedirJson<DocIssue>(fetchImpl, `${apiBase}/issues/${numero}`, signal);\n\t\t\tif (!issue?.title) return null;\n\t\t\treturn {\n\t\t\t\ttitulo: `${issue.pull_request ? \"PR\" : \"Issue\"} #${issue.number}: ${issue.title}`,\n\t\t\t\turl: issue.html_url ?? url.href,\n\t\t\t\tresumen: htmlToText(issue.body ?? \"\").slice(0, 600),\n\t\t\t\tdatos: {\n\t\t\t\t\tnumero: issue.number,\n\t\t\t\t\testado: issue.state,\n\t\t\t\t\tautor: issue.user?.login,\n\t\t\t\t\tcomentarios: issue.comments,\n\t\t\t\t\tesPR: Boolean(issue.pull_request),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (seccion !== undefined && seccion !== \"\") return null; // otras subrutas (blob, tree…) no son de este scraper\n\t} else if (url.hostname === \"api.github.com\") {\n\t\tapiBase = url.href.replace(/\\/issues\\/\\d+$/, \"\");\n\t\tconst match = url.pathname.match(/^\\/repos\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, owner, repo] = match;\n\t} else {\n\t\treturn null;\n\t}\n\n\tconst repoDoc = await pedirJson<DocRepo>(fetchImpl, `https://api.github.com/repos/${owner}/${repo}`, signal);\n\tif (!repoDoc?.full_name) return null;\n\treturn {\n\t\ttitulo: repoDoc.full_name,\n\t\turl: repoDoc.html_url ?? `https://github.com/${owner}/${repo}`,\n\t\tresumen: repoDoc.description ?? \"\",\n\t\tdatos: {\n\t\t\tlicencia: repoDoc.license?.spdx_id,\n\t\t\testrellas: repoDoc.stargazers_count,\n\t\t\tissuesAbiertas: repoDoc.open_issues_count,\n\t\t\tramaPorDefecto: repoDoc.default_branch,\n\t\t\tlenguaje: repoDoc.language,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/github.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA+BjD,eAAO,MAAM,QAAQ,EAAE,cAoDtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/github.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * GitHub: repos e issues/PRs, vía la API REST pública (`api.github.com`).\n * Sin clave: 60 peticiones/hora por IP, suficiente para una consulta suelta.\n */\nimport { htmlToText } from \"../texto.ts\";\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocRepo {\n\tfull_name?: string;\n\tdescription?: string;\n\tlicense?: { spdx_id?: string };\n\tstargazers_count?: number;\n\topen_issues_count?: number;\n\tdefault_branch?: string;\n\tlanguage?: string;\n\thtml_url?: string;\n}\n\ninterface DocIssue {\n\ttitle?: string;\n\tbody?: string;\n\tstate?: string;\n\tnumber?: number;\n\tuser?: { login?: string };\n\tcomments?: number;\n\tpull_request?: unknown;\n\thtml_url?: string;\n}\n\nasync function pedirJson<T>(fetchImpl: typeof fetch, url: string, signal?: AbortSignal): Promise<T | null> {\n\tconst respuesta = await fetchImpl(url, { headers: { Accept: \"application/vnd.github+json\" }, signal });\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`GitHub respondió HTTP ${respuesta.status}.`);\n\treturn (await respuesta.json()) as T;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tlet owner: string;\n\tlet repo: string;\n\tlet apiBase: string;\n\tif (url.hostname === \"github.com\") {\n\t\tconst partes = url.pathname.split(\"/\").filter(Boolean);\n\t\tif (partes.length < 2) return null;\n\t\t[owner, repo] = partes;\n\t\tapiBase = `https://api.github.com/repos/${owner}/${repo}`;\n\n\t\tconst seccion = partes[2];\n\t\tconst numero = partes[3];\n\t\tif ((seccion === \"issues\" || seccion === \"pull\") && /^\\d+$/.test(numero ?? \"\")) {\n\t\t\tconst issue = await pedirJson<DocIssue>(fetchImpl, `${apiBase}/issues/${numero}`, signal);\n\t\t\tif (!issue?.title) return null;\n\t\t\treturn {\n\t\t\t\ttitulo: `${issue.pull_request ? \"PR\" : \"Issue\"} #${issue.number}: ${issue.title}`,\n\t\t\t\turl: issue.html_url ?? url.href,\n\t\t\t\tresumen: htmlToText(issue.body ?? \"\").slice(0, 600),\n\t\t\t\tdatos: {\n\t\t\t\t\tnumero: issue.number,\n\t\t\t\t\testado: issue.state,\n\t\t\t\t\tautor: issue.user?.login,\n\t\t\t\t\tcomentarios: issue.comments,\n\t\t\t\t\tesPR: Boolean(issue.pull_request),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (seccion !== undefined && seccion !== \"\") return null; // otras subrutas (blob, tree…) no son de este scraper\n\t} else if (url.hostname === \"api.github.com\") {\n\t\tapiBase = url.href.replace(/\\/issues\\/\\d+$/, \"\");\n\t\tconst match = url.pathname.match(/^\\/repos\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, owner, repo] = match;\n\t} else {\n\t\treturn null;\n\t}\n\n\tconst repoDoc = await pedirJson<DocRepo>(fetchImpl, `https://api.github.com/repos/${owner}/${repo}`, signal);\n\tif (!repoDoc?.full_name) return null;\n\treturn {\n\t\ttitulo: repoDoc.full_name,\n\t\turl: repoDoc.html_url ?? `https://github.com/${owner}/${repo}`,\n\t\tresumen: repoDoc.description ?? \"\",\n\t\tdatos: {\n\t\t\tlicencia: repoDoc.license?.spdx_id,\n\t\t\testrellas: repoDoc.stargazers_count,\n\t\t\tissuesAbiertas: repoDoc.open_issues_count,\n\t\t\tramaPorDefecto: repoDoc.default_branch,\n\t\t\tlenguaje: repoDoc.language,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/github.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"go-pkg.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/go-pkg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjD,eAAO,MAAM,QAAQ,EAAE,cA0BtB,CAAC","sourcesContent":["/**\n * pkg.go.dev, vía el proxy de módulos de Go (`proxy.golang.org`) — sin clave,\n * es infraestructura pública del propio toolchain de Go.\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocGoInfo {\n\tVersion?: string;\n\tTime?: string;\n\tOrigin?: { URL?: string };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"pkg.go.dev\") return null;\n\tconst ruta = url.pathname.slice(1);\n\tif (!ruta) return null;\n\n\t// Formas: /modulo, /modulo@version, /modulo/subpaquete[@version]. El proxy\n\t// solo entiende el módulo raíz, así que se descarta todo lo de después de `@`.\n\tconst arroba = ruta.indexOf(\"@\");\n\tconst modulo = arroba === -1 ? ruta : ruta.slice(0, arroba);\n\n\t// Limitación conocida: un subpaquete (p.ej. golang.org/x/text/encoding) no es\n\t// el módulo raíz (golang.org/x/text), y resolver eso implicaría ir probando\n\t// prefijos contra el proxy. Se deja sin resolver a propósito: un 404 aquí\n\t// cae al `web_fetch` genérico, que sí sabe leer la página humana.\n\tconst respuesta = await fetchImpl(`https://proxy.golang.org/${encodeURIComponent(modulo)}/@latest`, { signal });\n\tif (respuesta.status === 404 || respuesta.status === 410) return null;\n\tif (!respuesta.ok) throw new Error(`pkg.go.dev (vía proxy.golang.org) respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocGoInfo;\n\tif (!doc.Version) return null;\n\n\treturn {\n\t\ttitulo: `${modulo}@${doc.Version}`,\n\t\turl: `https://pkg.go.dev/${modulo}`,\n\t\tresumen: \"\",\n\t\tdatos: { modulo, version: doc.Version, publicado: doc.Time, origen: doc.Origin?.URL },\n\t};\n};\n"]}
1
+ {"version":3,"file":"go-pkg.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/go-pkg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjD,eAAO,MAAM,QAAQ,EAAE,cA0BtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"go-pkg.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/go-pkg.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,2EAA2E;IAC3E,mFAA+E;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5D,+EAA8E;IAC9E,+EAA4E;IAC5E,4EAA0E;IAC1E,qEAAkE;IAClE,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAoD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5G,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAc,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO;QACN,MAAM,EAAE,GAAG,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;QAClC,GAAG,EAAE,sBAAsB,MAAM,EAAE;QACnC,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;KACrF,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * pkg.go.dev, vía el proxy de módulos de Go (`proxy.golang.org`) — sin clave,\n * es infraestructura pública del propio toolchain de Go.\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocGoInfo {\n\tVersion?: string;\n\tTime?: string;\n\tOrigin?: { URL?: string };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"pkg.go.dev\") return null;\n\tconst ruta = url.pathname.slice(1);\n\tif (!ruta) return null;\n\n\t// Formas: /modulo, /modulo@version, /modulo/subpaquete[@version]. El proxy\n\t// solo entiende el módulo raíz, así que se descarta todo lo de después de `@`.\n\tconst arroba = ruta.indexOf(\"@\");\n\tconst modulo = arroba === -1 ? ruta : ruta.slice(0, arroba);\n\n\t// Limitación conocida: un subpaquete (p.ej. golang.org/x/text/encoding) no es\n\t// el módulo raíz (golang.org/x/text), y resolver eso implicaría ir probando\n\t// prefijos contra el proxy. Se deja sin resolver a propósito: un 404 aquí\n\t// cae al `web_fetch` genérico, que sí sabe leer la página humana.\n\tconst respuesta = await fetchImpl(`https://proxy.golang.org/${encodeURIComponent(modulo)}/@latest`, { signal });\n\tif (respuesta.status === 404 || respuesta.status === 410) return null;\n\tif (!respuesta.ok) throw new Error(`pkg.go.dev (vía proxy.golang.org) respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocGoInfo;\n\tif (!doc.Version) return null;\n\n\treturn {\n\t\ttitulo: `${modulo}@${doc.Version}`,\n\t\turl: `https://pkg.go.dev/${modulo}`,\n\t\tresumen: \"\",\n\t\tdatos: { modulo, version: doc.Version, publicado: doc.Time, origen: doc.Origin?.URL },\n\t};\n};\n"]}
1
+ {"version":3,"file":"go-pkg.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/go-pkg.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5D,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,kEAAkE;IAClE,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5G,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAc,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO;QACN,MAAM,EAAE,GAAG,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;QAClC,GAAG,EAAE,sBAAsB,MAAM,EAAE;QACnC,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;KACrF,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/hex.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUjD,eAAO,MAAM,QAAQ,EAAE,cAsBtB,CAAC","sourcesContent":["/**\n * Hex (Elixir/Erlang), vía su API pública (`hex.pm/api/packages/<paquete>`).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocHex {\n\tname?: string;\n\tmeta?: { licenses?: string[]; description?: string; links?: Record<string, string> };\n\tlatest_stable_version?: string;\n\tlatest_version?: string;\n\thtml_url?: string;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"hex.pm\") return null;\n\tconst match = url.pathname.match(/^\\/packages\\/([^/]+)/);\n\tif (!match) return null;\n\tconst paquete = decodeURIComponent(match[1]);\n\n\tconst respuesta = await fetchImpl(`https://hex.pm/api/packages/${paquete}`, {\n\t\theaders: { Accept: \"application/json\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`Hex respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocHex;\n\tif (!doc.name) return null;\n\tconst version = doc.latest_stable_version ?? doc.latest_version;\n\n\treturn {\n\t\ttitulo: `${doc.name}@${version ?? \"?\"}`,\n\t\turl: doc.html_url ?? `https://hex.pm/packages/${doc.name}`,\n\t\tresumen: doc.meta?.description ?? \"\",\n\t\tdatos: { nombre: doc.name, version, licencias: doc.meta?.licenses ?? [], homepage: doc.meta?.links?.GitHub },\n\t};\n};\n"]}
1
+ {"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/hex.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUjD,eAAO,MAAM,QAAQ,EAAE,cAsBtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/hex.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,+BAA+B,OAAO,EAAE,EAAE;QAC3E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAW,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,cAAc,CAAC;IAEhE,OAAO;QACN,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,EAAE;QACvC,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,2BAA2B,GAAG,CAAC,IAAI,EAAE;QAC1D,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;QACpC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5G,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * Hex (Elixir/Erlang), vía su API pública (`hex.pm/api/packages/<paquete>`).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocHex {\n\tname?: string;\n\tmeta?: { licenses?: string[]; description?: string; links?: Record<string, string> };\n\tlatest_stable_version?: string;\n\tlatest_version?: string;\n\thtml_url?: string;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"hex.pm\") return null;\n\tconst match = url.pathname.match(/^\\/packages\\/([^/]+)/);\n\tif (!match) return null;\n\tconst paquete = decodeURIComponent(match[1]);\n\n\tconst respuesta = await fetchImpl(`https://hex.pm/api/packages/${paquete}`, {\n\t\theaders: { Accept: \"application/json\" },\n\t\tsignal,\n\t});\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`Hex respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocHex;\n\tif (!doc.name) return null;\n\tconst version = doc.latest_stable_version ?? doc.latest_version;\n\n\treturn {\n\t\ttitulo: `${doc.name}@${version ?? \"?\"}`,\n\t\turl: doc.html_url ?? `https://hex.pm/packages/${doc.name}`,\n\t\tresumen: doc.meta?.description ?? \"\",\n\t\tdatos: { nombre: doc.name, version, licencias: doc.meta?.licenses ?? [], homepage: doc.meta?.links?.GitHub },\n\t};\n};\n"]}
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/hex.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,+BAA+B,OAAO,EAAE,EAAE;QAC3E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM;KACN,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAW,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,cAAc,CAAC;IAEhE,OAAO;QACN,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,GAAG,EAAE;QACvC,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,2BAA2B,GAAG,CAAC,IAAI,EAAE;QAC1D,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;QACpC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5G,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/maven.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,eAAO,MAAM,QAAQ,EAAE,cAmCtB,CAAC","sourcesContent":["/**\n * Maven Central, vía su API de búsqueda Solr (`search.maven.org`). Encaja\n * también con `mvnrepository.com/artifact/<g>/<a>[/<version>]`, un espejo muy\n * usado que no tiene API propia — se traduce a la búsqueda oficial.\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocMaven {\n\tresponse?: { docs?: Array<{ g?: string; a?: string; latestVersion?: string; p?: string }> };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tlet groupId: string | undefined;\n\tlet artifactId: string | undefined;\n\tif (url.hostname === \"search.maven.org\") {\n\t\tconst match = url.pathname.match(/^\\/artifact\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, groupId, artifactId] = match;\n\t} else if (url.hostname === \"mvnrepository.com\" || url.hostname === \"www.mvnrepository.com\") {\n\t\tconst match = url.pathname.match(/^\\/artifact\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, groupId, artifactId] = match;\n\t} else {\n\t\treturn null;\n\t}\n\n\tconst consulta = `g:${encodeURIComponent(groupId)}+AND+a:${encodeURIComponent(artifactId)}`;\n\tconst respuesta = await fetchImpl(`https://search.maven.org/solrsearch/select?q=${consulta}&wt=json&rows=1`, {\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Maven Central respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocMaven;\n\tconst artefacto = doc.response?.docs?.[0];\n\tif (!artefacto?.latestVersion) return null;\n\n\treturn {\n\t\ttitulo: `${artefacto.g}:${artefacto.a}@${artefacto.latestVersion}`,\n\t\turl: `https://search.maven.org/artifact/${artefacto.g}/${artefacto.a}/${artefacto.latestVersion}/${artefacto.p ?? \"jar\"}`,\n\t\tresumen: \"\",\n\t\tdatos: {\n\t\t\tgroupId: artefacto.g,\n\t\t\tartifactId: artefacto.a,\n\t\t\tversion: artefacto.latestVersion,\n\t\t\tempaquetado: artefacto.p,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/maven.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,eAAO,MAAM,QAAQ,EAAE,cAmCtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"maven.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/maven.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,OAA2B,CAAC;IAChC,IAAI,UAA8B,CAAC;IACnC,IAAI,GAAG,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,IAAI,GAAG,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5F,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,gDAAgD,QAAQ,iBAAiB,EAAE;QAC5G,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAgC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAa,CAAC;IACjD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,aAAa;QAAE,OAAO,IAAI,CAAC;IAE3C,OAAO;QACN,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE;QAClE,GAAG,EAAE,qCAAqC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,EAAE;QACzH,OAAO,EAAE,EAAE;QACX,KAAK,EAAE;YACN,OAAO,EAAE,SAAS,CAAC,CAAC;YACpB,UAAU,EAAE,SAAS,CAAC,CAAC;YACvB,OAAO,EAAE,SAAS,CAAC,aAAa;YAChC,WAAW,EAAE,SAAS,CAAC,CAAC;SACxB;KACD,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * Maven Central, vía su API de búsqueda Solr (`search.maven.org`). Encaja\n * también con `mvnrepository.com/artifact/<g>/<a>[/<version>]`, un espejo muy\n * usado que no tiene API propia — se traduce a la búsqueda oficial.\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocMaven {\n\tresponse?: { docs?: Array<{ g?: string; a?: string; latestVersion?: string; p?: string }> };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tlet groupId: string | undefined;\n\tlet artifactId: string | undefined;\n\tif (url.hostname === \"search.maven.org\") {\n\t\tconst match = url.pathname.match(/^\\/artifact\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, groupId, artifactId] = match;\n\t} else if (url.hostname === \"mvnrepository.com\" || url.hostname === \"www.mvnrepository.com\") {\n\t\tconst match = url.pathname.match(/^\\/artifact\\/([^/]+)\\/([^/]+)/);\n\t\tif (!match) return null;\n\t\t[, groupId, artifactId] = match;\n\t} else {\n\t\treturn null;\n\t}\n\n\tconst consulta = `g:${encodeURIComponent(groupId)}+AND+a:${encodeURIComponent(artifactId)}`;\n\tconst respuesta = await fetchImpl(`https://search.maven.org/solrsearch/select?q=${consulta}&wt=json&rows=1`, {\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Maven Central respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocMaven;\n\tconst artefacto = doc.response?.docs?.[0];\n\tif (!artefacto?.latestVersion) return null;\n\n\treturn {\n\t\ttitulo: `${artefacto.g}:${artefacto.a}@${artefacto.latestVersion}`,\n\t\turl: `https://search.maven.org/artifact/${artefacto.g}/${artefacto.a}/${artefacto.latestVersion}/${artefacto.p ?? \"jar\"}`,\n\t\tresumen: \"\",\n\t\tdatos: {\n\t\t\tgroupId: artefacto.g,\n\t\t\tartifactId: artefacto.a,\n\t\t\tversion: artefacto.latestVersion,\n\t\t\tempaquetado: artefacto.p,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"maven.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/maven.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,OAA2B,CAAC;IAChC,IAAI,UAA8B,CAAC;IACnC,IAAI,GAAG,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,IAAI,GAAG,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5F,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,gDAAgD,QAAQ,iBAAiB,EAAE;QAC5G,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAa,CAAC;IACjD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,aAAa;QAAE,OAAO,IAAI,CAAC;IAE3C,OAAO;QACN,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE;QAClE,GAAG,EAAE,qCAAqC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,EAAE;QACzH,OAAO,EAAE,EAAE;QACX,KAAK,EAAE;YACN,OAAO,EAAE,SAAS,CAAC,CAAC;YACpB,UAAU,EAAE,SAAS,CAAC,CAAC;YACvB,OAAO,EAAE,SAAS,CAAC,aAAa;YAChC,WAAW,EAAE,SAAS,CAAC,CAAC;SACxB;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mdn.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/mdn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMpE,eAAO,MAAM,QAAQ,EAAE,cAmBtB,CAAC","sourcesContent":["/**\n * MDN Web Docs, vía su API JSON (`<url>/index.json`), no la página React.\n */\nimport { esHostOSubdominio, type FuncionScraper } from \"./tipos.ts\";\n\ninterface DocMDN {\n\tdoc?: { title?: string; summary?: string; mdn_url?: string; baseline?: unknown };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (!esHostOSubdominio(url.hostname, \"developer.mozilla.org\")) return null;\n\tif (!url.pathname.includes(\"/docs/\")) return null;\n\n\tconst jsonUrl = url.pathname.endsWith(\"/\")\n\t\t? `${url.origin}${url.pathname}index.json`\n\t\t: `${url.origin}${url.pathname}/index.json`;\n\tconst respuesta = await fetchImpl(jsonUrl, { headers: { Accept: \"application/json\" }, signal });\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`MDN respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocMDN;\n\tif (!doc.doc?.title) return null;\n\n\treturn {\n\t\ttitulo: doc.doc.title,\n\t\turl: `https://developer.mozilla.org${doc.doc.mdn_url ?? url.pathname}`,\n\t\tresumen: doc.doc.summary ?? \"\",\n\t\tdatos: { titulo: doc.doc.title, baseline: doc.doc.baseline ?? null },\n\t};\n};\n"]}
1
+ {"version":3,"file":"mdn.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/mdn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMpE,eAAO,MAAM,QAAQ,EAAE,cAmBtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mdn.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/mdn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAMpE,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,YAAY;QAC1C,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,aAAa,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAW,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO;QACN,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK;QACrB,GAAG,EAAE,gCAAgC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE;QACtE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;QAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;KACpE,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * MDN Web Docs, vía su API JSON (`<url>/index.json`), no la página React.\n */\nimport { esHostOSubdominio, type FuncionScraper } from \"./tipos.ts\";\n\ninterface DocMDN {\n\tdoc?: { title?: string; summary?: string; mdn_url?: string; baseline?: unknown };\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (!esHostOSubdominio(url.hostname, \"developer.mozilla.org\")) return null;\n\tif (!url.pathname.includes(\"/docs/\")) return null;\n\n\tconst jsonUrl = url.pathname.endsWith(\"/\")\n\t\t? `${url.origin}${url.pathname}index.json`\n\t\t: `${url.origin}${url.pathname}/index.json`;\n\tconst respuesta = await fetchImpl(jsonUrl, { headers: { Accept: \"application/json\" }, signal });\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`MDN respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocMDN;\n\tif (!doc.doc?.title) return null;\n\n\treturn {\n\t\ttitulo: doc.doc.title,\n\t\turl: `https://developer.mozilla.org${doc.doc.mdn_url ?? url.pathname}`,\n\t\tresumen: doc.doc.summary ?? \"\",\n\t\tdatos: { titulo: doc.doc.title, baseline: doc.doc.baseline ?? null },\n\t};\n};\n"]}
1
+ {"version":3,"file":"mdn.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/mdn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAMpE,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;IACxE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,YAAY;QAC1C,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,aAAa,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAW,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO;QACN,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK;QACrB,GAAG,EAAE,gCAAgC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE;QACtE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;QAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;KACpE,CAAC;AACH,CAAC,CAAC"}