@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1,127 @@
1
+ /**
2
+ * ¿A dónde va de verdad esta URL?
3
+ *
4
+ * EL FALLO. `assertFetchableUrl` compara el NOMBRE del host contra una lista y
5
+ * unas expresiones regulares. Eso para lo evidente y deja pasar todo lo que
6
+ * llega a la misma dirección por otro camino. Medido sobre nuestra guarda:
7
+ *
8
+ * http://127.0.0.1:8080/secreto bloqueado
9
+ * http://localhost:8080/secreto bloqueado
10
+ * http://[::1]:8080/secreto bloqueado
11
+ * http://[::ffff:127.0.0.1]:8080/secreto PASA ← IPv4 mapeada en IPv6
12
+ * http://localtest.me:8080/secreto PASA ← resuelve a 127.0.0.1
13
+ *
14
+ * Y había un tercero: `redirect: "follow"`. Una URL pública que responde 302
15
+ * hacia loopback llega igual, porque la guarda solo mira la primera.
16
+ *
17
+ * Para un agente esto es serio: el modelo puede pedir una descarga con una URL
18
+ * que parece de internet y acabar leyendo el panel de administración de la red
19
+ * interna, o el endpoint de metadatos de la nube — que es donde viven las
20
+ * credenciales de la máquina.
21
+ *
22
+ * LA CAUSA RAÍZ, y por eso este módulo existe aparte: un nombre no es un
23
+ * destino. Lo único que dice a dónde va una petición es la DIRECCIÓN a la que
24
+ * resuelve, así que hay que resolverla y mirarla. Las comprobaciones por nombre
25
+ * se quedan, pero como filtro barato de primera pasada, no como la defensa.
26
+ *
27
+ * LO QUE NO RESUELVE, dicho antes de que lo descubra nadie: entre que
28
+ * resolvemos y que la petición sale, el DNS puede cambiar de respuesta —el
29
+ * ataque clásico de «rebind». Cerrarlo del todo exige fijar la dirección
30
+ * resuelta al abrir la conexión, que es cosa del agente HTTP y no de aquí.
31
+ * Contra un servidor hostil que controle su propio DNS esto sube el listón; no
32
+ * lo cierra.
33
+ */
34
+ import { lookup } from "node:dns/promises";
35
+ /**
36
+ * ¿Esta dirección IP es de una red que no debe alcanzarse desde una tool web?
37
+ *
38
+ * Se trabaja sobre la dirección ya resuelta, así que da igual cómo se escribió
39
+ * el host: decimal, octal, mapeada en IPv6 o un dominio que apunta ahí.
40
+ */
41
+ export function direccionInterna(ip) {
42
+ const limpia = ip.toLowerCase().replace(/^\[|\]$/g, "");
43
+ // IPv4 mapeada en IPv6: se desenvuelve y se juzga como IPv4, que es lo que
44
+ // era. Sin esto, `[::ffff:127.0.0.1]` pasaba entera.
45
+ //
46
+ // Hay que cubrir LAS DOS FORMAS, y esto casi se me escapa: `new URL()`
47
+ // normaliza `[::ffff:127.0.0.1]` a `[::ffff:7f00:1]`, en hexadecimal. Una
48
+ // guarda que solo mirara la forma decimal daría verde sobre la única forma
49
+ // que llega de verdad desde una URL.
50
+ let dir = limpia;
51
+ const decimal = limpia.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
52
+ if (decimal) {
53
+ dir = decimal[1];
54
+ }
55
+ else {
56
+ const hex = limpia.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
57
+ if (hex) {
58
+ const alto = Number.parseInt(hex[1], 16);
59
+ const bajo = Number.parseInt(hex[2], 16);
60
+ dir = `${alto >> 8}.${alto & 0xff}.${bajo >> 8}.${bajo & 0xff}`;
61
+ }
62
+ }
63
+ if (/^\d+\.\d+\.\d+\.\d+$/.test(dir)) {
64
+ const [a, b] = dir.split(".").map(Number);
65
+ if (a === 127)
66
+ return "loopback";
67
+ if (a === 10)
68
+ return "red privada (10/8)";
69
+ if (a === 172 && b >= 16 && b <= 31)
70
+ return "red privada (172.16/12)";
71
+ if (a === 192 && b === 168)
72
+ return "red privada (192.168/16)";
73
+ if (a === 169 && b === 254)
74
+ return "enlace local (169.254/16), donde vive el endpoint de metadatos";
75
+ if (a === 100 && b >= 64 && b <= 127)
76
+ return "CGNAT (100.64/10)";
77
+ if (a === 0)
78
+ return "esta red (0/8)";
79
+ return null;
80
+ }
81
+ if (dir === "::1" || dir === "::")
82
+ return "loopback IPv6";
83
+ // `fc00::/7` son las direcciones únicas locales; `fe80::/10`, el enlace local.
84
+ if (/^f[cd]/.test(dir))
85
+ return "red privada IPv6 (fc00::/7)";
86
+ if (/^fe[89ab]/.test(dir))
87
+ return "enlace local IPv6 (fe80::/10)";
88
+ return null;
89
+ }
90
+ /**
91
+ * Resuelve el host y comprueba TODAS las direcciones que devuelve.
92
+ *
93
+ * Todas, no la primera: un dominio puede devolver una dirección pública y otra
94
+ * interna, y quedarse con una sola convierte la defensa en una moneda al aire.
95
+ *
96
+ * Un fallo de resolución NO es un permiso. Se devuelve rechazo con su motivo:
97
+ * «no he podido comprobarlo» y «está bien» son cosas distintas, y aquí
98
+ * confundirlas es abrir la puerta.
99
+ */
100
+ export async function destinoPermitido(url) {
101
+ const host = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
102
+ // Si el host YA es una dirección, no hay nada que resolver.
103
+ const directa = direccionInterna(host);
104
+ if (directa)
105
+ return { motivo: directa, direccion: host };
106
+ if (/^[\d.]+$/.test(host) || host.includes(":"))
107
+ return null;
108
+ let direcciones;
109
+ try {
110
+ direcciones = await lookup(host, { all: true });
111
+ }
112
+ catch (error) {
113
+ return {
114
+ motivo: `no se ha podido resolver el nombre (${error.code ?? "error"}), y sin saber a dónde apunta no se descarga`,
115
+ };
116
+ }
117
+ if (direcciones.length === 0) {
118
+ return { motivo: "el nombre no resuelve a ninguna dirección" };
119
+ }
120
+ for (const { address } of direcciones) {
121
+ const que = direccionInterna(address);
122
+ if (que)
123
+ return { motivo: `el nombre resuelve a ${que}`, direccion: address };
124
+ }
125
+ return null;
126
+ }
127
+ //# sourceMappingURL=destino.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destino.js","sourceRoot":"","sources":["../../../src/core/web/destino.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ¿A dónde va de verdad esta URL?\n *\n * EL FALLO. `assertFetchableUrl` compara el NOMBRE del host contra una lista y\n * unas expresiones regulares. Eso para lo evidente y deja pasar todo lo que\n * llega a la misma dirección por otro camino. Medido sobre nuestra guarda:\n *\n * http://127.0.0.1:8080/secreto bloqueado\n * http://localhost:8080/secreto bloqueado\n * http://[::1]:8080/secreto bloqueado\n * http://[::ffff:127.0.0.1]:8080/secreto PASA ← IPv4 mapeada en IPv6\n * http://localtest.me:8080/secreto PASA ← resuelve a 127.0.0.1\n *\n * Y había un tercero: `redirect: \"follow\"`. Una URL pública que responde 302\n * hacia loopback llega igual, porque la guarda solo mira la primera.\n *\n * Para un agente esto es serio: el modelo puede pedir una descarga con una URL\n * que parece de internet y acabar leyendo el panel de administración de la red\n * interna, o el endpoint de metadatos de la nube — que es donde viven las\n * credenciales de la máquina.\n *\n * LA CAUSA RAÍZ, y por eso este módulo existe aparte: un nombre no es un\n * destino. Lo único que dice a dónde va una petición es la DIRECCIÓN a la que\n * resuelve, así que hay que resolverla y mirarla. Las comprobaciones por nombre\n * se quedan, pero como filtro barato de primera pasada, no como la defensa.\n *\n * LO QUE NO RESUELVE, dicho antes de que lo descubra nadie: entre que\n * resolvemos y que la petición sale, el DNS puede cambiar de respuesta —el\n * ataque clásico de «rebind». Cerrarlo del todo exige fijar la dirección\n * resuelta al abrir la conexión, que es cosa del agente HTTP y no de aquí.\n * Contra un servidor hostil que controle su propio DNS esto sube el listón; no\n * lo cierra.\n */\n\nimport { lookup } from \"node:dns/promises\";\n\n/** Por qué se rechaza un destino. Nunca una lista vacía silenciosa. */\nexport interface DestinoRechazado {\n\tmotivo: string;\n\t/** La dirección concreta que lo delató, cuando la hay. */\n\tdireccion?: string;\n}\n\n/**\n * ¿Esta dirección IP es de una red que no debe alcanzarse desde una tool web?\n *\n * Se trabaja sobre la dirección ya resuelta, así que da igual cómo se escribió\n * el host: decimal, octal, mapeada en IPv6 o un dominio que apunta ahí.\n */\nexport function direccionInterna(ip: string): string | null {\n\tconst limpia = ip.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n\n\t// IPv4 mapeada en IPv6: se desenvuelve y se juzga como IPv4, que es lo que\n\t// era. Sin esto, `[::ffff:127.0.0.1]` pasaba entera.\n\t//\n\t// Hay que cubrir LAS DOS FORMAS, y esto casi se me escapa: `new URL()`\n\t// normaliza `[::ffff:127.0.0.1]` a `[::ffff:7f00:1]`, en hexadecimal. Una\n\t// guarda que solo mirara la forma decimal daría verde sobre la única forma\n\t// que llega de verdad desde una URL.\n\tlet dir = limpia;\n\tconst decimal = limpia.match(/^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/);\n\tif (decimal) {\n\t\tdir = decimal[1];\n\t} else {\n\t\tconst hex = limpia.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);\n\t\tif (hex) {\n\t\t\tconst alto = Number.parseInt(hex[1], 16);\n\t\t\tconst bajo = Number.parseInt(hex[2], 16);\n\t\t\tdir = `${alto >> 8}.${alto & 0xff}.${bajo >> 8}.${bajo & 0xff}`;\n\t\t}\n\t}\n\n\tif (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(dir)) {\n\t\tconst [a, b] = dir.split(\".\").map(Number);\n\t\tif (a === 127) return \"loopback\";\n\t\tif (a === 10) return \"red privada (10/8)\";\n\t\tif (a === 172 && b >= 16 && b <= 31) return \"red privada (172.16/12)\";\n\t\tif (a === 192 && b === 168) return \"red privada (192.168/16)\";\n\t\tif (a === 169 && b === 254) return \"enlace local (169.254/16), donde vive el endpoint de metadatos\";\n\t\tif (a === 100 && b >= 64 && b <= 127) return \"CGNAT (100.64/10)\";\n\t\tif (a === 0) return \"esta red (0/8)\";\n\t\treturn null;\n\t}\n\n\tif (dir === \"::1\" || dir === \"::\") return \"loopback IPv6\";\n\t// `fc00::/7` son las direcciones únicas locales; `fe80::/10`, el enlace local.\n\tif (/^f[cd]/.test(dir)) return \"red privada IPv6 (fc00::/7)\";\n\tif (/^fe[89ab]/.test(dir)) return \"enlace local IPv6 (fe80::/10)\";\n\treturn null;\n}\n\n/**\n * Resuelve el host y comprueba TODAS las direcciones que devuelve.\n *\n * Todas, no la primera: un dominio puede devolver una dirección pública y otra\n * interna, y quedarse con una sola convierte la defensa en una moneda al aire.\n *\n * Un fallo de resolución NO es un permiso. Se devuelve rechazo con su motivo:\n * «no he podido comprobarlo» y «está bien» son cosas distintas, y aquí\n * confundirlas es abrir la puerta.\n */\nexport async function destinoPermitido(url: URL): Promise<DestinoRechazado | null> {\n\tconst host = url.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n\n\t// Si el host YA es una dirección, no hay nada que resolver.\n\tconst directa = direccionInterna(host);\n\tif (directa) return { motivo: directa, direccion: host };\n\tif (/^[\\d.]+$/.test(host) || host.includes(\":\")) return null;\n\n\tlet direcciones: Array<{ address: string }>;\n\ttry {\n\t\tdirecciones = await lookup(host, { all: true });\n\t} catch (error) {\n\t\treturn {\n\t\t\tmotivo: `no se ha podido resolver el nombre (${(error as NodeJS.ErrnoException).code ?? \"error\"}), y sin saber a dónde apunta no se descarga`,\n\t\t};\n\t}\n\tif (direcciones.length === 0) {\n\t\treturn { motivo: \"el nombre no resuelve a ninguna dirección\" };\n\t}\n\tfor (const { address } of direcciones) {\n\t\tconst que = direccionInterna(address);\n\t\tif (que) return { motivo: `el nombre resuelve a ${que}`, direccion: address };\n\t}\n\treturn null;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Brave Search API. Requiere clave (`brave` en el vault, o BRAVE_API_KEY).
3
+ */
4
+ import type { FuncionBuscar } from "./tipos.ts";
5
+ export declare const buscar: FuncionBuscar;
6
+ //# sourceMappingURL=brave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brave.d.ts","sourceRoot":"","sources":["../../../../src/core/web/proveedores/brave.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAQpE,eAAO,MAAM,MAAM,EAAE,aAepB,CAAC","sourcesContent":["/**\n * Brave Search API. Requiere clave (`brave` en el vault, o BRAVE_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.search.brave.com/res/v1/web/search\";\n\ninterface RespuestaBrave {\n\tweb?: { results?: Array<{ title?: string; url?: string; description?: string }> };\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Brave requiere clave.\");\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"count\", String(Math.min(Math.max(maximo, 1), 20)));\n\tconst respuesta = await fetchImpl(url, {\n\t\theaders: { Accept: \"application/json\", \"X-Subscription-Token\": clave },\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Brave respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaBrave;\n\tconst resultados: ResultadoProveedor[] = (datos.web?.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.description }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
@@ -0,0 +1,20 @@
1
+ const ENDPOINT = "https://api.search.brave.com/res/v1/web/search";
2
+ export const buscar = async (consulta, maximo, clave, fetchImpl, signal) => {
3
+ if (!clave)
4
+ throw new Error("Brave requiere clave.");
5
+ const url = new URL(ENDPOINT);
6
+ url.searchParams.set("q", consulta);
7
+ url.searchParams.set("count", String(Math.min(Math.max(maximo, 1), 20)));
8
+ const respuesta = await fetchImpl(url, {
9
+ headers: { Accept: "application/json", "X-Subscription-Token": clave },
10
+ signal,
11
+ });
12
+ if (!respuesta.ok)
13
+ throw new Error(`Brave respondió HTTP ${respuesta.status}.`);
14
+ const datos = (await respuesta.json());
15
+ const resultados = (datos.web?.results ?? [])
16
+ .filter((r) => typeof r.url === "string" && r.url)
17
+ .map((r) => ({ titulo: r.title || r.url, url: r.url, resumen: r.description }));
18
+ return resultados.slice(0, maximo);
19
+ };
20
+ //# sourceMappingURL=brave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brave.js","sourceRoot":"","sources":["../../../../src/core/web/proveedores/brave.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ,GAAG,gDAAgD,CAAC;AAMlE,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,uBAAuB,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,KAAK,EAAE;QACtE,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAwB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAmB,CAAC;IACzD,MAAM,UAAU,GAAyB,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;SACjE,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,WAAW,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,CACnC,CAAC","sourcesContent":["/**\n * Brave Search API. Requiere clave (`brave` en el vault, o BRAVE_API_KEY).\n */\nimport type { FuncionBuscar, ResultadoProveedor } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.search.brave.com/res/v1/web/search\";\n\ninterface RespuestaBrave {\n\tweb?: { results?: Array<{ title?: string; url?: string; description?: string }> };\n}\n\nexport const buscar: FuncionBuscar = async (consulta, maximo, clave, fetchImpl, signal) => {\n\tif (!clave) throw new Error(\"Brave requiere clave.\");\n\tconst url = new URL(ENDPOINT);\n\turl.searchParams.set(\"q\", consulta);\n\turl.searchParams.set(\"count\", String(Math.min(Math.max(maximo, 1), 20)));\n\tconst respuesta = await fetchImpl(url, {\n\t\theaders: { Accept: \"application/json\", \"X-Subscription-Token\": clave },\n\t\tsignal,\n\t});\n\tif (!respuesta.ok) throw new Error(`Brave respondió HTTP ${respuesta.status}.`);\n\tconst datos = (await respuesta.json()) as RespuestaBrave;\n\tconst resultados: ResultadoProveedor[] = (datos.web?.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.description }));\n\treturn resultados.slice(0, maximo);\n};\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Resuelve la clave de un proveedor de búsqueda: vault primero, variable de
3
+ * entorno después (la que usa CI, donde no hay vault desbloqueado).
4
+ *
5
+ * Vive separado del registro para que `agent-session.ts` —de upstream, con el
6
+ * presupuesto de sincronización agotado— pueda enchufarlo con una sola
7
+ * llamada en vez de repetir aquí la lógica try/vault/env por cada proveedor.
8
+ */
9
+ /** Lo mínimo que hace falta del vault: buscar un secreto por nombre. */
10
+ export interface FuenteDeVault {
11
+ getSecret(nombre: string): string | null | undefined;
12
+ }
13
+ /**
14
+ * Construye el `obtenerClave` que espera `createWebTools`, atado a un vault
15
+ * concreto. `obtenerVault` se llama en cada búsqueda, no una vez: el vault
16
+ * puede desbloquearse o bloquearse durante la sesión.
17
+ */
18
+ export declare function crearObtenerClave(obtenerVault: () => FuenteDeVault | null | undefined): (nombreProveedor: string) => Promise<string | undefined>;
19
+ //# sourceMappingURL=claves.d.ts.map
@@ -0,0 +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"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Resuelve la clave de un proveedor de búsqueda: vault primero, variable de
3
+ * entorno después (la que usa CI, donde no hay vault desbloqueado).
4
+ *
5
+ * Vive separado del registro para que `agent-session.ts` —de upstream, con el
6
+ * presupuesto de sincronización agotado— pueda enchufarlo con una sola
7
+ * llamada en vez de repetir aquí la lógica try/vault/env por cada proveedor.
8
+ */
9
+ /** Nombre de proveedor → variable de entorno donde puede vivir su clave. */
10
+ const VARIABLE_ENTORNO = {
11
+ serper: "SERPER_API_KEY",
12
+ brave: "BRAVE_API_KEY",
13
+ tavily: "TAVILY_API_KEY",
14
+ exa: "EXA_API_KEY",
15
+ searxng: "SEARXNG_URL",
16
+ };
17
+ /**
18
+ * Construye el `obtenerClave` que espera `createWebTools`, atado a un vault
19
+ * concreto. `obtenerVault` se llama en cada búsqueda, no una vez: el vault
20
+ * puede desbloquearse o bloquearse durante la sesión.
21
+ */
22
+ export function crearObtenerClave(obtenerVault) {
23
+ return async (nombreProveedor) => {
24
+ const variable = VARIABLE_ENTORNO[nombreProveedor];
25
+ try {
26
+ const delVault = obtenerVault()?.getSecret(nombreProveedor);
27
+ if (delVault)
28
+ return delVault;
29
+ }
30
+ catch {
31
+ // Vault bloqueado o no inicializado: caer a la variable de entorno.
32
+ }
33
+ return variable ? process.env[variable] : undefined;
34
+ };
35
+ }
36
+ //# sourceMappingURL=claves.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,3 @@
1
+ import type { FuncionBuscar } from "./tipos.ts";
2
+ export declare const buscar: FuncionBuscar;
3
+ //# sourceMappingURL=duckduckgo.d.ts.map
@@ -0,0 +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"]}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * DuckDuckGo, vía su frontend HTML sin JS (`html.duckduckgo.com/html/`).
3
+ *
4
+ * Sin clave: es el único de los tres proveedores gratuitos que responde con
5
+ * resultados reales desde una red de centro de datos en la práctica —Mojeek y
6
+ * Ecosia sirven un captcha o un firewall a cualquier cliente sin navegador
7
+ * real la mayoría de las veces—. Por eso va primero en el grupo sin clave: es
8
+ * el que de verdad sostiene la puerta «sin ninguna clave, hay resultados».
9
+ *
10
+ * DuckDuckGo enruta cada resultado por `//duckduckgo.com/l/?uddg=<url>` para
11
+ * medir clics; hay que desenvolverlo o el agente termina con enlaces inútiles.
12
+ */
13
+ import { CABECERAS_NAVEGADOR } from "./navegador.js";
14
+ const ENDPOINT = "https://html.duckduckgo.com/html/";
15
+ /** `true` cuando la página es el modal anti-bot, no resultados. DDG mezcla 200 y 202 en este caso. */
16
+ function esBloqueoAntiBot(html) {
17
+ return html.includes("anomaly-modal") || html.includes("anomaly.js");
18
+ }
19
+ /**
20
+ * Desenvuelve la URL real de un resultado. Los orgánicos van envueltos en
21
+ * `uddg=`; los ANUNCIOS (`//duckduckgo.com/y.js?ad_domain=…`) no llevan ese
22
+ * envoltorio porque no apuntan a un destino final, sino al propio tracker de
23
+ * clics de DDG — por eso, tras desenvolver, cualquier URL que SIGA en
24
+ * duckduckgo.com se descarta: es un anuncio, no un resultado.
25
+ */
26
+ function desenvolverUrl(href) {
27
+ const decodificado = href.replace(/&amp;/gi, "&");
28
+ let resuelta;
29
+ const match = decodificado.match(/[?&]uddg=([^&]+)/);
30
+ if (match) {
31
+ try {
32
+ resuelta = decodeURIComponent(match[1]);
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ else if (decodificado.startsWith("//")) {
39
+ resuelta = `https:${decodificado}`;
40
+ }
41
+ else if (decodificado.startsWith("http://") || decodificado.startsWith("https://")) {
42
+ resuelta = decodificado;
43
+ }
44
+ else {
45
+ return undefined;
46
+ }
47
+ try {
48
+ if (new URL(resuelta).hostname.endsWith("duckduckgo.com"))
49
+ return undefined;
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ return resuelta;
55
+ }
56
+ function limpiarTexto(html) {
57
+ return html
58
+ .replace(/<[^>]*>/g, " ")
59
+ .replace(/&amp;/gi, "&")
60
+ .replace(/&lt;/gi, "<")
61
+ .replace(/&gt;/gi, ">")
62
+ .replace(/&quot;/gi, '"')
63
+ .replace(/&#39;|&apos;/gi, "'")
64
+ .replace(/&nbsp;/gi, " ")
65
+ .replace(/\s+/g, " ")
66
+ .trim();
67
+ }
68
+ const RE_BLOQUE = /<div\b[^>]*\bclass="[^"]*\bresult\b[^"]*"[^>]*>([\s\S]*?)(?=<div\b[^>]*\bclass="[^"]*\bresult\b|<div\b[^>]*\bclass="[^"]*\bnav-link\b|$)/g;
69
+ const RE_TITULO = /<a\b[^>]*\bclass="[^"]*\bresult__a\b[^"]*"[^>]*\bhref="([^"]+)"[^>]*>([\s\S]*?)<\/a>/;
70
+ const RE_SNIPPET = /<(?:a|div|span)\b[^>]*\bclass="[^"]*\bresult__snippet\b[^"]*"[^>]*>([\s\S]*?)<\/(?:a|div|span)>/;
71
+ function parsear(html) {
72
+ const resultados = [];
73
+ for (const bloque of html.matchAll(RE_BLOQUE)) {
74
+ const titulo = bloque[1].match(RE_TITULO);
75
+ if (!titulo)
76
+ continue;
77
+ const url = desenvolverUrl(titulo[1]);
78
+ if (!url)
79
+ continue;
80
+ const tituloTexto = limpiarTexto(titulo[2]);
81
+ if (!tituloTexto)
82
+ continue;
83
+ const snippet = bloque[1].match(RE_SNIPPET);
84
+ resultados.push({
85
+ titulo: tituloTexto,
86
+ url,
87
+ resumen: snippet ? limpiarTexto(snippet[1]) || undefined : undefined,
88
+ });
89
+ }
90
+ return resultados;
91
+ }
92
+ export const buscar = async (consulta, maximo, _clave, fetchImpl, signal) => {
93
+ // GET, no POST: probado en vivo contra `html.duckduckgo.com` — el mismo
94
+ // endpoint trata el POST (el envío "de formulario real" que usan otros
95
+ // scrapers) con más sospecha que un GET con la consulta en la query, al
96
+ // menos desde redes de centro de datos. Con GET responde con resultados
97
+ // reales de forma consistente; con POST, con el modal anti-bot.
98
+ const url = new URL(ENDPOINT);
99
+ url.searchParams.set("q", consulta);
100
+ const respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });
101
+ if (!respuesta.ok)
102
+ throw new Error(`DuckDuckGo respondió HTTP ${respuesta.status}.`);
103
+ const html = await respuesta.text();
104
+ if (esBloqueoAntiBot(html)) {
105
+ throw new Error("DuckDuckGo bloqueó la petición con su captcha anti-bot.");
106
+ }
107
+ return parsear(html).slice(0, maximo);
108
+ };
109
+ //# sourceMappingURL=duckduckgo.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,3 @@
1
+ import type { FuncionBuscar } from "./tipos.ts";
2
+ export declare const buscar: FuncionBuscar;
3
+ //# sourceMappingURL=ecosia.d.ts.map
@@ -0,0 +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"]}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Ecosia, vía su página HTML pública (`ecosia.org/search`).
3
+ *
4
+ * Sin clave. Su frontal Cloudflare bloquea con frecuencia a clientes sin
5
+ * navegador real (403 "Ecosia Firewall"); igual que Mojeek, se implementa
6
+ * porque cuando responde trae resultados reales y el registro salta al
7
+ * siguiente proveedor cuando este lanza.
8
+ */
9
+ import { CABECERAS_NAVEGADOR } from "./navegador.js";
10
+ const ENDPOINT = "https://www.ecosia.org/search";
11
+ function esBloqueado(status, html) {
12
+ return (status === 403 ||
13
+ status === 429 ||
14
+ html.includes("Ecosia Firewall") ||
15
+ html.includes("_cf_chl_opt") ||
16
+ html.includes("/cdn-cgi/challenge-platform/"));
17
+ }
18
+ function limpiarTexto(html) {
19
+ return html
20
+ .replace(/<[^>]*>/g, " ")
21
+ .replace(/&amp;/gi, "&")
22
+ .replace(/&lt;/gi, "<")
23
+ .replace(/&gt;/gi, ">")
24
+ .replace(/&quot;/gi, '"')
25
+ .replace(/&#39;|&apos;/gi, "'")
26
+ .replace(/&nbsp;/gi, " ")
27
+ .replace(/\s+/g, " ")
28
+ .trim();
29
+ }
30
+ /** Cada resultado orgánico es un `<article data-test-id="organic-result">`. */
31
+ const RE_ARTICULO = /<article\b[^>]*\bdata-test-id="organic-result"[^>]*>([\s\S]*?)<\/article>/g;
32
+ const RE_ENLACE_TITULO = /<a\b[^>]*\bhref="([^"]+)"[^>]*>[\s\S]*?data-test-id="result-title"[\s\S]*?<\/a>/;
33
+ const RE_TITULO_TEXTO = /data-test-id="result-title"[^>]*>([\s\S]*?)<\/h2>/;
34
+ const RE_DESCRIPCION = /data-test-id="(?:web-result-description|result-description)"[^>]*>([\s\S]*?)<\/p>/;
35
+ function parsear(html) {
36
+ const resultados = [];
37
+ for (const articulo of html.matchAll(RE_ARTICULO)) {
38
+ const bloque = articulo[1];
39
+ const enlace = bloque.match(RE_ENLACE_TITULO);
40
+ const titulo = bloque.match(RE_TITULO_TEXTO);
41
+ if (!enlace || !titulo)
42
+ continue;
43
+ const href = enlace[1];
44
+ if (!href.startsWith("http://") && !href.startsWith("https://"))
45
+ continue;
46
+ if (/^https?:\/\/(www\.)?ecosia\.org/i.test(href))
47
+ continue;
48
+ const tituloTexto = limpiarTexto(titulo[1]);
49
+ if (!tituloTexto)
50
+ continue;
51
+ const descripcion = bloque.match(RE_DESCRIPCION);
52
+ resultados.push({
53
+ titulo: tituloTexto,
54
+ url: href,
55
+ resumen: descripcion ? limpiarTexto(descripcion[1]) || undefined : undefined,
56
+ });
57
+ }
58
+ return resultados;
59
+ }
60
+ export const buscar = async (consulta, maximo, _clave, fetchImpl, signal) => {
61
+ const url = new URL(ENDPOINT);
62
+ url.searchParams.set("q", consulta);
63
+ const respuesta = await fetchImpl(url, { headers: CABECERAS_NAVEGADOR, signal });
64
+ const html = await respuesta.text();
65
+ if (esBloqueado(respuesta.status, html)) {
66
+ throw new Error("Ecosia bloqueó la petición con su firewall anti-bot.");
67
+ }
68
+ if (!respuesta.ok)
69
+ throw new Error(`Ecosia respondió HTTP ${respuesta.status}.`);
70
+ return parsear(html).slice(0, maximo);
71
+ };
72
+ //# sourceMappingURL=ecosia.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Exa Search API. Requiere clave (`exa` en el vault, o EXA_API_KEY).
3
+ */
4
+ import type { FuncionBuscar } from "./tipos.ts";
5
+ export declare const buscar: FuncionBuscar;
6
+ //# sourceMappingURL=exa.d.ts.map
@@ -0,0 +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"]}
@@ -0,0 +1,24 @@
1
+ const ENDPOINT = "https://api.exa.ai/search";
2
+ export const buscar = async (consulta, maximo, clave, fetchImpl, signal) => {
3
+ if (!clave)
4
+ throw new Error("Exa requiere clave.");
5
+ const respuesta = await fetchImpl(ENDPOINT, {
6
+ method: "POST",
7
+ headers: { "content-type": "application/json", "x-api-key": clave },
8
+ body: JSON.stringify({
9
+ query: consulta,
10
+ numResults: Math.min(Math.max(maximo, 1), 20),
11
+ type: "auto",
12
+ contents: { summary: { query: consulta } },
13
+ }),
14
+ signal,
15
+ });
16
+ if (!respuesta.ok)
17
+ throw new Error(`Exa respondió HTTP ${respuesta.status}.`);
18
+ const datos = (await respuesta.json());
19
+ const resultados = (datos.results ?? [])
20
+ .filter((r) => typeof r.url === "string" && r.url)
21
+ .map((r) => ({ titulo: r.title || r.url, url: r.url, resumen: r.summary || r.text }));
22
+ return resultados.slice(0, maximo);
23
+ };
24
+ //# sourceMappingURL=exa.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,3 @@
1
+ import type { FuncionBuscar } from "./tipos.ts";
2
+ export declare const buscar: FuncionBuscar;
3
+ //# sourceMappingURL=mojeek.d.ts.map
@@ -0,0 +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"]}