@hoilab/ada-cli 0.84.22 → 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 (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  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/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -0,0 +1,23 @@
1
+ export const scrapear = async (url, fetchImpl, signal) => {
2
+ if (url.hostname !== "rubygems.org")
3
+ return null;
4
+ const match = url.pathname.match(/^\/gems\/([^/]+)/);
5
+ if (!match)
6
+ return null;
7
+ const gema = decodeURIComponent(match[1]);
8
+ const respuesta = await fetchImpl(`https://rubygems.org/api/v1/gems/${encodeURIComponent(gema)}.json`, { signal });
9
+ if (respuesta.status === 404)
10
+ return null;
11
+ if (!respuesta.ok)
12
+ throw new Error(`RubyGems respondió HTTP ${respuesta.status}.`);
13
+ const doc = (await respuesta.json());
14
+ if (!doc.name)
15
+ return null;
16
+ return {
17
+ titulo: `${doc.name}@${doc.version ?? "?"}`,
18
+ url: `https://rubygems.org/gems/${doc.name}`,
19
+ resumen: doc.info ?? "",
20
+ datos: { nombre: doc.name, version: doc.version, licencias: doc.licenses ?? [], homepage: doc.homepage_uri },
21
+ };
22
+ };
23
+ //# sourceMappingURL=rubygems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubygems.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/rubygems.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,oCAAoC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnH,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA2B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACN,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE;QAC3C,GAAG,EAAE,6BAA6B,GAAG,CAAC,IAAI,EAAE;QAC5C,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;QACvB,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,YAAY,EAAE;KAC5G,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * RubyGems, vía su API pública (`rubygems.org/api/v1/gems/<gema>.json`).\n */\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface DocRubyGems {\n\tname?: string;\n\tversion?: string;\n\tlicenses?: string[] | null;\n\tinfo?: string;\n\thomepage_uri?: string;\n}\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"rubygems.org\") return null;\n\tconst match = url.pathname.match(/^\\/gems\\/([^/]+)/);\n\tif (!match) return null;\n\tconst gema = decodeURIComponent(match[1]);\n\n\tconst respuesta = await fetchImpl(`https://rubygems.org/api/v1/gems/${encodeURIComponent(gema)}.json`, { signal });\n\tif (respuesta.status === 404) return null;\n\tif (!respuesta.ok) throw new Error(`RubyGems respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as DocRubyGems;\n\tif (!doc.name) return null;\n\n\treturn {\n\t\ttitulo: `${doc.name}@${doc.version ?? \"?\"}`,\n\t\turl: `https://rubygems.org/gems/${doc.name}`,\n\t\tresumen: doc.info ?? \"\",\n\t\tdatos: { nombre: doc.name, version: doc.version, licencias: doc.licenses ?? [], homepage: doc.homepage_uri },\n\t};\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import type { FuncionScraper } from "./tipos.ts";
2
+ export declare const scrapear: FuncionScraper;
3
+ //# sourceMappingURL=stackoverflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackoverflow.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/stackoverflow.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmBjD,eAAO,MAAM,QAAQ,EAAE,cAwCtB,CAAC","sourcesContent":["/**\n * Stack Overflow, vía la API pública de Stack Exchange (sin clave, con\n * cuota compartida). Trae la pregunta y, si la hay, la respuesta aceptada —\n * es lo que un agente de código va a buscar en la URL, no el layout de la\n * página.\n */\nimport { htmlToText } from \"../texto.ts\";\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface Pregunta {\n\ttitle?: string;\n\tbody?: string;\n\tscore?: number;\n\ttags?: string[];\n\tanswer_count?: number;\n\tis_answered?: boolean;\n\taccepted_answer_id?: number;\n}\n\ninterface Respuesta {\n\tbody?: string;\n\tscore?: number;\n}\n\nconst RESUMEN_MAX = 600;\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"stackoverflow.com\" && url.hostname !== \"www.stackoverflow.com\") return null;\n\tconst match = url.pathname.match(/\\/questions\\/(\\d+)/);\n\tif (!match) return null;\n\tconst id = match[1];\n\n\tconst respuesta = await fetchImpl(\n\t\t`https://api.stackexchange.com/2.3/questions/${id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`,\n\t\t{ signal },\n\t);\n\tif (!respuesta.ok) throw new Error(`Stack Overflow respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as { items?: Pregunta[] };\n\tconst pregunta = doc.items?.[0];\n\tif (!pregunta?.title) return null;\n\n\tlet respuestaAceptada: string | undefined;\n\tif (pregunta.accepted_answer_id) {\n\t\tconst respAns = await fetchImpl(\n\t\t\t`https://api.stackexchange.com/2.3/answers/${pregunta.accepted_answer_id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`,\n\t\t\t{ signal },\n\t\t);\n\t\tif (respAns.ok) {\n\t\t\tconst docAns = (await respAns.json()) as { items?: Respuesta[] };\n\t\t\tconst cuerpo = docAns.items?.[0]?.body;\n\t\t\tif (cuerpo) respuestaAceptada = htmlToText(cuerpo);\n\t\t}\n\t}\n\n\treturn {\n\t\ttitulo: pregunta.title,\n\t\turl: `https://stackoverflow.com/questions/${id}`,\n\t\tresumen: htmlToText(pregunta.body ?? \"\").slice(0, RESUMEN_MAX),\n\t\tdatos: {\n\t\t\tpuntuacion: pregunta.score,\n\t\t\trespuestas: pregunta.answer_count,\n\t\t\tresuelta: pregunta.is_answered ?? false,\n\t\t\tetiquetas: pregunta.tags ?? [],\n\t\t\trespuestaAceptada,\n\t\t},\n\t};\n};\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Stack Overflow, vía la API pública de Stack Exchange (sin clave, con
3
+ * cuota compartida). Trae la pregunta y, si la hay, la respuesta aceptada —
4
+ * es lo que un agente de código va a buscar en la URL, no el layout de la
5
+ * página.
6
+ */
7
+ import { htmlToText } from "../texto.js";
8
+ const RESUMEN_MAX = 600;
9
+ export const scrapear = async (url, fetchImpl, signal) => {
10
+ if (url.hostname !== "stackoverflow.com" && url.hostname !== "www.stackoverflow.com")
11
+ return null;
12
+ const match = url.pathname.match(/\/questions\/(\d+)/);
13
+ if (!match)
14
+ return null;
15
+ const id = match[1];
16
+ const respuesta = await fetchImpl(`https://api.stackexchange.com/2.3/questions/${id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`, { signal });
17
+ if (!respuesta.ok)
18
+ throw new Error(`Stack Overflow respondió HTTP ${respuesta.status}.`);
19
+ const doc = (await respuesta.json());
20
+ const pregunta = doc.items?.[0];
21
+ if (!pregunta?.title)
22
+ return null;
23
+ let respuestaAceptada;
24
+ if (pregunta.accepted_answer_id) {
25
+ const respAns = await fetchImpl(`https://api.stackexchange.com/2.3/answers/${pregunta.accepted_answer_id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`, { signal });
26
+ if (respAns.ok) {
27
+ const docAns = (await respAns.json());
28
+ const cuerpo = docAns.items?.[0]?.body;
29
+ if (cuerpo)
30
+ respuestaAceptada = htmlToText(cuerpo);
31
+ }
32
+ }
33
+ return {
34
+ titulo: pregunta.title,
35
+ url: `https://stackoverflow.com/questions/${id}`,
36
+ resumen: htmlToText(pregunta.body ?? "").slice(0, RESUMEN_MAX),
37
+ datos: {
38
+ puntuacion: pregunta.score,
39
+ respuestas: pregunta.answer_count,
40
+ resuelta: pregunta.is_answered ?? false,
41
+ etiquetas: pregunta.tags ?? [],
42
+ respuestaAceptada,
43
+ },
44
+ };
45
+ };
46
+ //# sourceMappingURL=stackoverflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackoverflow.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/stackoverflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkBzC,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAmB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,IAAI,GAAG,CAAC,QAAQ,KAAK,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAClG,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,MAAM,SAAS,CAChC,+CAA+C,EAAE,2DAA2D,EAC5G,EAAE,MAAM,EAAE,CACV,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAiC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAA2B,CAAC;IAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,iBAAqC,CAAC;IAC1C,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,SAAS,CAC9B,6CAA6C,QAAQ,CAAC,kBAAkB,2DAA2D,EACnI,EAAE,MAAM,EAAE,CACV,CAAC;QACF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACvC,IAAI,MAAM;gBAAE,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IAED,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,KAAK;QACtB,GAAG,EAAE,uCAAuC,EAAE,EAAE;QAChD,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;QAC9D,KAAK,EAAE;YACN,UAAU,EAAE,QAAQ,CAAC,KAAK;YAC1B,UAAU,EAAE,QAAQ,CAAC,YAAY;YACjC,QAAQ,EAAE,QAAQ,CAAC,WAAW,IAAI,KAAK;YACvC,SAAS,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;YAC9B,iBAAiB;SACjB;KACD,CAAC;AAAA,CACF,CAAC","sourcesContent":["/**\n * Stack Overflow, vía la API pública de Stack Exchange (sin clave, con\n * cuota compartida). Trae la pregunta y, si la hay, la respuesta aceptada —\n * es lo que un agente de código va a buscar en la URL, no el layout de la\n * página.\n */\nimport { htmlToText } from \"../texto.ts\";\nimport type { FuncionScraper } from \"./tipos.ts\";\n\ninterface Pregunta {\n\ttitle?: string;\n\tbody?: string;\n\tscore?: number;\n\ttags?: string[];\n\tanswer_count?: number;\n\tis_answered?: boolean;\n\taccepted_answer_id?: number;\n}\n\ninterface Respuesta {\n\tbody?: string;\n\tscore?: number;\n}\n\nconst RESUMEN_MAX = 600;\n\nexport const scrapear: FuncionScraper = async (url, fetchImpl, signal) => {\n\tif (url.hostname !== \"stackoverflow.com\" && url.hostname !== \"www.stackoverflow.com\") return null;\n\tconst match = url.pathname.match(/\\/questions\\/(\\d+)/);\n\tif (!match) return null;\n\tconst id = match[1];\n\n\tconst respuesta = await fetchImpl(\n\t\t`https://api.stackexchange.com/2.3/questions/${id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`,\n\t\t{ signal },\n\t);\n\tif (!respuesta.ok) throw new Error(`Stack Overflow respondió HTTP ${respuesta.status}.`);\n\tconst doc = (await respuesta.json()) as { items?: Pregunta[] };\n\tconst pregunta = doc.items?.[0];\n\tif (!pregunta?.title) return null;\n\n\tlet respuestaAceptada: string | undefined;\n\tif (pregunta.accepted_answer_id) {\n\t\tconst respAns = await fetchImpl(\n\t\t\t`https://api.stackexchange.com/2.3/answers/${pregunta.accepted_answer_id}?order=desc&sort=votes&site=stackoverflow&filter=withbody`,\n\t\t\t{ signal },\n\t\t);\n\t\tif (respAns.ok) {\n\t\t\tconst docAns = (await respAns.json()) as { items?: Respuesta[] };\n\t\t\tconst cuerpo = docAns.items?.[0]?.body;\n\t\t\tif (cuerpo) respuestaAceptada = htmlToText(cuerpo);\n\t\t}\n\t}\n\n\treturn {\n\t\ttitulo: pregunta.title,\n\t\turl: `https://stackoverflow.com/questions/${id}`,\n\t\tresumen: htmlToText(pregunta.body ?? \"\").slice(0, RESUMEN_MAX),\n\t\tdatos: {\n\t\t\tpuntuacion: pregunta.score,\n\t\t\trespuestas: pregunta.answer_count,\n\t\t\tresuelta: pregunta.is_answered ?? false,\n\t\t\tetiquetas: pregunta.tags ?? [],\n\t\t\trespuestaAceptada,\n\t\t},\n\t};\n};\n"]}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Tipos compartidos por los scrapers de `web_fetch`.
3
+ *
4
+ * Un scraper devuelve datos ESTRUCTURADOS de una API pública en vez del HTML
5
+ * crudo de la página — un agente de código quiere la versión y la licencia de
6
+ * un paquete, no el DOM de `npmjs.com` con su menú y su footer. `null` cuando
7
+ * la URL entra en el sitio pero no en una forma reconocida (p.ej. la portada
8
+ * de npmjs.com, sin ruta de paquete): `web_fetch` cae entonces al fetch
9
+ * genérico, nunca se inventa un resultado vacío.
10
+ */
11
+ export interface ResultadoScraper {
12
+ titulo: string;
13
+ url: string;
14
+ resumen: string;
15
+ datos: unknown;
16
+ }
17
+ /**
18
+ * Debe LANZAR ante un fallo real (red, HTTP, JSON roto) para que `web_fetch`
19
+ * lo distinga de «esta URL no es mía» (`null`, sin lanzar).
20
+ */
21
+ export type FuncionScraper = (url: URL, fetchImpl: typeof fetch, signal?: AbortSignal) => Promise<ResultadoScraper | null>;
22
+ export interface ModuloScraper {
23
+ scrapear: FuncionScraper;
24
+ }
25
+ export interface DescriptorScraper {
26
+ nombre: string;
27
+ /** Barato y síncrono: decide si esta URL es de su sitio, sin tocar la red. */
28
+ encaja: (url: URL) => boolean;
29
+ /** Import perezoso: no se ejecuta hasta que la URL encaja de verdad. */
30
+ cargar: () => Promise<ModuloScraper>;
31
+ }
32
+ /**
33
+ * `hostname === dominio` o subdominio real de `dominio` (con el punto).
34
+ *
35
+ * Un `endsWith(dominio)` a secas confunde cualquier host que termine con
36
+ * los mismos caracteres sin ser un subdominio real —`notcisa.gov` con
37
+ * `cisa.gov`, `xnvd.nist.gov` con `nvd.nist.gov`— con el sitio de verdad.
38
+ * Comparar con el punto delante evita ese falso positivo sin perder los
39
+ * subdominios legítimos (`www.cisa.gov` sí encaja).
40
+ */
41
+ export declare function esHostOSubdominio(hostname: string, dominio: string): boolean;
42
+ //# sourceMappingURL=tipos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../../src/core/web/scrapers/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAC5B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,KAAK,EACvB,MAAM,CAAC,EAAE,WAAW,KAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+EAA8E;IAC9E,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9B,wEAAwE;IACxE,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5E","sourcesContent":["/**\n * Tipos compartidos por los scrapers de `web_fetch`.\n *\n * Un scraper devuelve datos ESTRUCTURADOS de una API pública en vez del HTML\n * crudo de la página — un agente de código quiere la versión y la licencia de\n * un paquete, no el DOM de `npmjs.com` con su menú y su footer. `null` cuando\n * la URL entra en el sitio pero no en una forma reconocida (p.ej. la portada\n * de npmjs.com, sin ruta de paquete): `web_fetch` cae entonces al fetch\n * genérico, nunca se inventa un resultado vacío.\n */\n\nexport interface ResultadoScraper {\n\ttitulo: string;\n\turl: string;\n\tresumen: string;\n\tdatos: unknown;\n}\n\n/**\n * Debe LANZAR ante un fallo real (red, HTTP, JSON roto) para que `web_fetch`\n * lo distinga de «esta URL no es mía» (`null`, sin lanzar).\n */\nexport type FuncionScraper = (\n\turl: URL,\n\tfetchImpl: typeof fetch,\n\tsignal?: AbortSignal,\n) => Promise<ResultadoScraper | null>;\n\nexport interface ModuloScraper {\n\tscrapear: FuncionScraper;\n}\n\nexport interface DescriptorScraper {\n\tnombre: string;\n\t/** Barato y síncrono: decide si esta URL es de su sitio, sin tocar la red. */\n\tencaja: (url: URL) => boolean;\n\t/** Import perezoso: no se ejecuta hasta que la URL encaja de verdad. */\n\tcargar: () => Promise<ModuloScraper>;\n}\n\n/**\n * `hostname === dominio` o subdominio real de `dominio` (con el punto).\n *\n * Un `endsWith(dominio)` a secas confunde cualquier host que termine con\n * los mismos caracteres sin ser un subdominio real —`notcisa.gov` con\n * `cisa.gov`, `xnvd.nist.gov` con `nvd.nist.gov`— con el sitio de verdad.\n * Comparar con el punto delante evita ese falso positivo sin perder los\n * subdominios legítimos (`www.cisa.gov` sí encaja).\n */\nexport function esHostOSubdominio(hostname: string, dominio: string): boolean {\n\treturn hostname === dominio || hostname.endsWith(`.${dominio}`);\n}\n"]}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Tipos compartidos por los scrapers de `web_fetch`.
3
+ *
4
+ * Un scraper devuelve datos ESTRUCTURADOS de una API pública en vez del HTML
5
+ * crudo de la página — un agente de código quiere la versión y la licencia de
6
+ * un paquete, no el DOM de `npmjs.com` con su menú y su footer. `null` cuando
7
+ * la URL entra en el sitio pero no en una forma reconocida (p.ej. la portada
8
+ * de npmjs.com, sin ruta de paquete): `web_fetch` cae entonces al fetch
9
+ * genérico, nunca se inventa un resultado vacío.
10
+ */
11
+ /**
12
+ * `hostname === dominio` o subdominio real de `dominio` (con el punto).
13
+ *
14
+ * Un `endsWith(dominio)` a secas confunde cualquier host que termine con
15
+ * los mismos caracteres sin ser un subdominio real —`notcisa.gov` con
16
+ * `cisa.gov`, `xnvd.nist.gov` con `nvd.nist.gov`— con el sitio de verdad.
17
+ * Comparar con el punto delante evita ese falso positivo sin perder los
18
+ * subdominios legítimos (`www.cisa.gov` sí encaja).
19
+ */
20
+ export function esHostOSubdominio(hostname, dominio) {
21
+ return hostname === dominio || hostname.endsWith(`.${dominio}`);
22
+ }
23
+ //# sourceMappingURL=tipos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../../src/core/web/scrapers/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+BH;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAAe,EAAW;IAC7E,OAAO,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,CAChE","sourcesContent":["/**\n * Tipos compartidos por los scrapers de `web_fetch`.\n *\n * Un scraper devuelve datos ESTRUCTURADOS de una API pública en vez del HTML\n * crudo de la página — un agente de código quiere la versión y la licencia de\n * un paquete, no el DOM de `npmjs.com` con su menú y su footer. `null` cuando\n * la URL entra en el sitio pero no en una forma reconocida (p.ej. la portada\n * de npmjs.com, sin ruta de paquete): `web_fetch` cae entonces al fetch\n * genérico, nunca se inventa un resultado vacío.\n */\n\nexport interface ResultadoScraper {\n\ttitulo: string;\n\turl: string;\n\tresumen: string;\n\tdatos: unknown;\n}\n\n/**\n * Debe LANZAR ante un fallo real (red, HTTP, JSON roto) para que `web_fetch`\n * lo distinga de «esta URL no es mía» (`null`, sin lanzar).\n */\nexport type FuncionScraper = (\n\turl: URL,\n\tfetchImpl: typeof fetch,\n\tsignal?: AbortSignal,\n) => Promise<ResultadoScraper | null>;\n\nexport interface ModuloScraper {\n\tscrapear: FuncionScraper;\n}\n\nexport interface DescriptorScraper {\n\tnombre: string;\n\t/** Barato y síncrono: decide si esta URL es de su sitio, sin tocar la red. */\n\tencaja: (url: URL) => boolean;\n\t/** Import perezoso: no se ejecuta hasta que la URL encaja de verdad. */\n\tcargar: () => Promise<ModuloScraper>;\n}\n\n/**\n * `hostname === dominio` o subdominio real de `dominio` (con el punto).\n *\n * Un `endsWith(dominio)` a secas confunde cualquier host que termine con\n * los mismos caracteres sin ser un subdominio real —`notcisa.gov` con\n * `cisa.gov`, `xnvd.nist.gov` con `nvd.nist.gov`— con el sitio de verdad.\n * Comparar con el punto delante evita ese falso positivo sin perder los\n * subdominios legítimos (`www.cisa.gov` sí encaja).\n */\nexport function esHostOSubdominio(hostname: string, dominio: string): boolean {\n\treturn hostname === dominio || hostname.endsWith(`.${dominio}`);\n}\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Limpieza de HTML a texto plano, compartida por `web_fetch` y los scrapers.
3
+ *
4
+ * Vive separada de `tools.ts` para que los scrapers puedan usarla sin crear
5
+ * un ciclo de imports estáticos con el fichero que orquesta su propio
6
+ * registro perezoso.
7
+ */
8
+ /** Extrae texto legible de HTML, sin dependencias. */
9
+ export declare function htmlToText(html: string): string;
10
+ //# sourceMappingURL=texto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texto.d.ts","sourceRoot":"","sources":["../../../src/core/web/texto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C","sourcesContent":["/**\n * Limpieza de HTML a texto plano, compartida por `web_fetch` y los scrapers.\n *\n * Vive separada de `tools.ts` para que los scrapers puedan usarla sin crear\n * un ciclo de imports estáticos con el fichero que orquesta su propio\n * registro perezoso.\n */\n\n/** Extrae texto legible de HTML, sin dependencias. */\nexport function htmlToText(html: string): string {\n\treturn (\n\t\thtml\n\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n\t\t\t.replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n\t\t\t.replace(/<!--[\\s\\S]*?-->/g, \" \")\n\t\t\t.replace(/<[^>]+>/g, \" \")\n\t\t\t.replace(/&nbsp;/g, \" \")\n\t\t\t.replace(/&lt;/g, \"<\")\n\t\t\t.replace(/&gt;/g, \">\")\n\t\t\t.replace(/&quot;/g, '\"')\n\t\t\t.replace(/&#39;/g, \"'\")\n\t\t\t// `&amp;` va AL FINAL: hacerlo antes reintroduciría `&` y convertiría\n\t\t\t// `&amp;lt;` (un `&lt;` literal escapado) en `<`.\n\t\t\t.replace(/&amp;/g, \"&\")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim()\n\t);\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Limpieza de HTML a texto plano, compartida por `web_fetch` y los scrapers.
3
+ *
4
+ * Vive separada de `tools.ts` para que los scrapers puedan usarla sin crear
5
+ * un ciclo de imports estáticos con el fichero que orquesta su propio
6
+ * registro perezoso.
7
+ */
8
+ /** Extrae texto legible de HTML, sin dependencias. */
9
+ export function htmlToText(html) {
10
+ return (html
11
+ .replace(/<script[\s\S]*?<\/script>/gi, " ")
12
+ .replace(/<style[\s\S]*?<\/style>/gi, " ")
13
+ .replace(/<!--[\s\S]*?-->/g, " ")
14
+ .replace(/<[^>]+>/g, " ")
15
+ .replace(/&nbsp;/g, " ")
16
+ .replace(/&lt;/g, "<")
17
+ .replace(/&gt;/g, ">")
18
+ .replace(/&quot;/g, '"')
19
+ .replace(/&#39;/g, "'")
20
+ // `&amp;` va AL FINAL: hacerlo antes reintroduciría `&` y convertiría
21
+ // `&amp;lt;` (un `&lt;` literal escapado) en `<`.
22
+ .replace(/&amp;/g, "&")
23
+ .replace(/\s+/g, " ")
24
+ .trim());
25
+ }
26
+ //# sourceMappingURL=texto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texto.js","sourceRoot":"","sources":["../../../src/core/web/texto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAU;IAChD,OAAO,CACN,IAAI;SACF,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC;SAC3C,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;SACzC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QACvB,wEAAsE;QACtE,kDAAkD;SACjD,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CACR,CAAC;AAAA,CACF","sourcesContent":["/**\n * Limpieza de HTML a texto plano, compartida por `web_fetch` y los scrapers.\n *\n * Vive separada de `tools.ts` para que los scrapers puedan usarla sin crear\n * un ciclo de imports estáticos con el fichero que orquesta su propio\n * registro perezoso.\n */\n\n/** Extrae texto legible de HTML, sin dependencias. */\nexport function htmlToText(html: string): string {\n\treturn (\n\t\thtml\n\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n\t\t\t.replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n\t\t\t.replace(/<!--[\\s\\S]*?-->/g, \" \")\n\t\t\t.replace(/<[^>]+>/g, \" \")\n\t\t\t.replace(/&nbsp;/g, \" \")\n\t\t\t.replace(/&lt;/g, \"<\")\n\t\t\t.replace(/&gt;/g, \">\")\n\t\t\t.replace(/&quot;/g, '\"')\n\t\t\t.replace(/&#39;/g, \"'\")\n\t\t\t// `&amp;` va AL FINAL: hacerlo antes reintroduciría `&` y convertiría\n\t\t\t// `&amp;lt;` (un `&lt;` literal escapado) en `<`.\n\t\t\t.replace(/&amp;/g, \"&\")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim()\n\t);\n}\n"]}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Tools de web: `web_search` y `web_fetch`.
3
+ *
4
+ * Existían por su NOMBRE en el builtin `deep_research` pero nadie las
5
+ * registraba, así que ese workflow —uno de los cinco que anunciamos— no podía
6
+ * funcionar: le pedía al agente usar herramientas inexistentes. Un nombre de
7
+ * tool dentro de un prompt no lo comprueba ni el compilador ni los tests.
8
+ *
9
+ * `web_search` prueba, en orden: la búsqueda nativa del proveedor de modelo
10
+ * activo (ya es la credencial con la que corre el agente) → el registro de
11
+ * proveedores de terceros con clave configurada (`proveedores/registro.ts`,
12
+ * vault primero, variable de entorno después) → los proveedores sin clave
13
+ * (DuckDuckGo, Mojeek, Ecosia), que garantizan que `web_search` funciona de
14
+ * fábrica incluso sin ninguna credencial de terceros y con un modelo que no
15
+ * traiga búsqueda propia.
16
+ *
17
+ * `web_fetch` prueba primero un scraper especializado (`scrapers/registro.ts`)
18
+ * que devuelve datos ESTRUCTURADOS de la API pública del sitio —versión y
19
+ * licencia de un paquete, no el HTML de la página—; si ninguno encaja o falla,
20
+ * cae al fetch genérico + limpieza de HTML de siempre.
21
+ *
22
+ * `web_fetch` trae guardas contra SSRF. Una tool que descarga cualquier URL que
23
+ * el modelo proponga es, sin ellas, una puerta a la red interna: basta con que
24
+ * el modelo lea una URL en un README para que acabe pidiéndola.
25
+ *
26
+ * El acceso a estas tools es opt-in por agente (`web: true`), nunca implícito
27
+ * en `readOnly` — ver `resolveAllowedTools` en workflows/agent-runner.ts.
28
+ */
29
+ import type { ToolDefinition } from "../extensions/types.ts";
30
+ import type { ResultadoWeb } from "./busqueda-nativa.ts";
31
+ import { htmlToText } from "./texto.ts";
32
+ export { htmlToText };
33
+ export interface WebToolsOptions {
34
+ /**
35
+ * Clave de un proveedor de búsqueda de terceros, por nombre (`serper`,
36
+ * `brave`, `tavily`, `exa`, `searxng`): vault primero, variable de entorno
37
+ * después. `undefined` cuando ese proveedor concreto no está configurado —
38
+ * eso lo salta, no lo hace fallar.
39
+ */
40
+ obtenerClave: (nombreProveedor: string) => Promise<string | undefined>;
41
+ /**
42
+ * Búsqueda con la credencial del modelo, cuando el proveedor la trae.
43
+ *
44
+ * Es lo que hace que `web_search` funcione sin configurar nada: el usuario ya
45
+ * tiene credencial —es con la que corre el agente— y los modelos de Anthropic
46
+ * saben buscar solos. Sin esto, la respuesta de fábrica era «Búsqueda web no
47
+ * configurada», que para un agente de código equivale a no poder mirar la
48
+ * documentación de ninguna librería.
49
+ *
50
+ * Va PRIMERO: es la credencial que el usuario ya está pagando, así que no
51
+ * tiene sentido preguntar por una clave de terceros antes de intentarla.
52
+ *
53
+ * Devuelve `null` cuando NO puede buscar (el proveedor activo no trae
54
+ * búsqueda propia) y `[]` cuando ha buscado y no ha encontrado nada. Los dos
55
+ * casos se leen igual desde fuera y no son lo mismo: al agente hay que
56
+ * decirle «no puedo» para que cambie de estrategia, no «no hay» para que se
57
+ * rinda. Se cometió justo ese fallo aquí, y solo salió ejecutando el
58
+ * producto: con un modelo de OpenRouter la tool contestaba «Sin resultados»
59
+ * cuando en realidad no había buscado.
60
+ */
61
+ buscarNativo?: (consulta: string, maximo: number) => Promise<ResultadoWeb[] | null>;
62
+ fetchImpl?: typeof fetch;
63
+ /**
64
+ * Anota una salida a la red en el libro de sesión: art. 44 y ss. del RGPD,
65
+ * "qué salió de la máquina y hacia dónde".
66
+ *
67
+ * El tipo `red` del libro existía sin que nadie lo anotara. Se engancha aquí y
68
+ * no en el manejador de tools de `agent-session.ts` porque desde allí el único
69
+ * destino visible es la URL que pidió el modelo, y la petición de verdad la
70
+ * hacen los scrapers y los proveedores de búsqueda a OTROS dominios (la API de
71
+ * npm, DuckDuckGo…). Envolviendo el `fetchImpl` que todos ellos comparten, el
72
+ * destino que se registra es el real y no el pedido.
73
+ *
74
+ * Solo el DOMINIO, nunca la ruta ni los parámetros: una query string lleva
75
+ * tokens y términos de búsqueda, y el libro guarda la forma, no el contenido.
76
+ *
77
+ * Nunca debe lanzar: un fallo del registro no puede tumbar una descarga.
78
+ */
79
+ anotarRed?: (dominio: string, permitido: boolean, motivo?: string) => void;
80
+ timeoutMs?: number;
81
+ }
82
+ /**
83
+ * Valida una URL antes de pedirla.
84
+ *
85
+ * Bloquea esquemas no-HTTP, loopback, rangos privados y el endpoint de metadatos
86
+ * de los proveedores cloud — que es el objetivo clásico de un SSRF y devuelve
87
+ * credenciales de la instancia.
88
+ */
89
+ export declare function assertFetchableUrl(raw: string): URL;
90
+ export declare function createWebTools(options: WebToolsOptions): Record<string, ToolDefinition>;
91
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/core/web/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,CAAC;AAKtB,MAAM,WAAW,eAAe;IAC/B;;;;;OAKG;IACH,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IACpF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAmBnD;AA2CD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAuMvF","sourcesContent":["/**\n * Tools de web: `web_search` y `web_fetch`.\n *\n * Existían por su NOMBRE en el builtin `deep_research` pero nadie las\n * registraba, así que ese workflow —uno de los cinco que anunciamos— no podía\n * funcionar: le pedía al agente usar herramientas inexistentes. Un nombre de\n * tool dentro de un prompt no lo comprueba ni el compilador ni los tests.\n *\n * `web_search` prueba, en orden: la búsqueda nativa del proveedor de modelo\n * activo (ya es la credencial con la que corre el agente) → el registro de\n * proveedores de terceros con clave configurada (`proveedores/registro.ts`,\n * vault primero, variable de entorno después) → los proveedores sin clave\n * (DuckDuckGo, Mojeek, Ecosia), que garantizan que `web_search` funciona de\n * fábrica incluso sin ninguna credencial de terceros y con un modelo que no\n * traiga búsqueda propia.\n *\n * `web_fetch` prueba primero un scraper especializado (`scrapers/registro.ts`)\n * que devuelve datos ESTRUCTURADOS de la API pública del sitio —versión y\n * licencia de un paquete, no el HTML de la página—; si ninguno encaja o falla,\n * cae al fetch genérico + limpieza de HTML de siempre.\n *\n * `web_fetch` trae guardas contra SSRF. Una tool que descarga cualquier URL que\n * el modelo proponga es, sin ellas, una puerta a la red interna: basta con que\n * el modelo lea una URL en un README para que acabe pidiéndola.\n *\n * El acceso a estas tools es opt-in por agente (`web: true`), nunca implícito\n * en `readOnly` — ver `resolveAllowedTools` en workflows/agent-runner.ts.\n */\n\nimport { Type } from \"typebox\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport type { ResultadoWeb } from \"./busqueda-nativa.ts\";\nimport { destinoPermitido } from \"./destino.ts\";\nimport { buscarConProveedores } from \"./proveedores/registro.ts\";\nimport { encontrarScraper } from \"./scrapers/registro.ts\";\nimport { htmlToText } from \"./texto.ts\";\n\nexport { htmlToText };\n\nconst MAX_FETCH_BYTES = 512 * 1024;\nconst DEFAULT_TIMEOUT_MS = 20_000;\n\nexport interface WebToolsOptions {\n\t/**\n\t * Clave de un proveedor de búsqueda de terceros, por nombre (`serper`,\n\t * `brave`, `tavily`, `exa`, `searxng`): vault primero, variable de entorno\n\t * después. `undefined` cuando ese proveedor concreto no está configurado —\n\t * eso lo salta, no lo hace fallar.\n\t */\n\tobtenerClave: (nombreProveedor: string) => Promise<string | undefined>;\n\t/**\n\t * Búsqueda con la credencial del modelo, cuando el proveedor la trae.\n\t *\n\t * Es lo que hace que `web_search` funcione sin configurar nada: el usuario ya\n\t * tiene credencial —es con la que corre el agente— y los modelos de Anthropic\n\t * saben buscar solos. Sin esto, la respuesta de fábrica era «Búsqueda web no\n\t * configurada», que para un agente de código equivale a no poder mirar la\n\t * documentación de ninguna librería.\n\t *\n\t * Va PRIMERO: es la credencial que el usuario ya está pagando, así que no\n\t * tiene sentido preguntar por una clave de terceros antes de intentarla.\n\t *\n\t * Devuelve `null` cuando NO puede buscar (el proveedor activo no trae\n\t * búsqueda propia) y `[]` cuando ha buscado y no ha encontrado nada. Los dos\n\t * casos se leen igual desde fuera y no son lo mismo: al agente hay que\n\t * decirle «no puedo» para que cambie de estrategia, no «no hay» para que se\n\t * rinda. Se cometió justo ese fallo aquí, y solo salió ejecutando el\n\t * producto: con un modelo de OpenRouter la tool contestaba «Sin resultados»\n\t * cuando en realidad no había buscado.\n\t */\n\tbuscarNativo?: (consulta: string, maximo: number) => Promise<ResultadoWeb[] | null>;\n\tfetchImpl?: typeof fetch;\n\t/**\n\t * Anota una salida a la red en el libro de sesión: art. 44 y ss. del RGPD,\n\t * \"qué salió de la máquina y hacia dónde\".\n\t *\n\t * El tipo `red` del libro existía sin que nadie lo anotara. Se engancha aquí y\n\t * no en el manejador de tools de `agent-session.ts` porque desde allí el único\n\t * destino visible es la URL que pidió el modelo, y la petición de verdad la\n\t * hacen los scrapers y los proveedores de búsqueda a OTROS dominios (la API de\n\t * npm, DuckDuckGo…). Envolviendo el `fetchImpl` que todos ellos comparten, el\n\t * destino que se registra es el real y no el pedido.\n\t *\n\t * Solo el DOMINIO, nunca la ruta ni los parámetros: una query string lleva\n\t * tokens y términos de búsqueda, y el libro guarda la forma, no el contenido.\n\t *\n\t * Nunca debe lanzar: un fallo del registro no puede tumbar una descarga.\n\t */\n\tanotarRed?: (dominio: string, permitido: boolean, motivo?: string) => void;\n\ttimeoutMs?: number;\n}\n\nfunction textResult(text: string): AgentToolResult<unknown> {\n\treturn { content: [{ type: \"text\" as const, text }], details: undefined };\n}\n\n/** Hosts que nunca deben alcanzarse desde una URL propuesta por el modelo. */\nconst BLOCKED_HOSTNAMES = new Set([\"localhost\", \"metadata.google.internal\", \"metadata\"]);\n\n/** Cuántos saltos se siguen antes de rendirse. Cada uno se revalida. */\nconst MAX_REDIRECCIONES = 5;\nconst PRIVATE_IPV4 =\n\t/^(?:10\\.|127\\.|0\\.|169\\.254\\.|192\\.168\\.|172\\.(?:1[6-9]|2\\d|3[01])\\.|100\\.(?:6[4-9]|[7-9]\\d|1[01]\\d|12[0-7])\\.)/;\n\n/**\n * Valida una URL antes de pedirla.\n *\n * Bloquea esquemas no-HTTP, loopback, rangos privados y el endpoint de metadatos\n * de los proveedores cloud — que es el objetivo clásico de un SSRF y devuelve\n * credenciales de la instancia.\n */\nexport function assertFetchableUrl(raw: string): URL {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(raw);\n\t} catch {\n\t\tthrow new Error(`URL inválida: ${raw}`);\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\tthrow new Error(`Solo se permiten http y https (recibido: ${url.protocol}).`);\n\t}\n\tconst host = url.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n\tif (host === \"169.254.169.254\") throw new Error(\"Endpoint de metadatos cloud bloqueado.\");\n\tif (BLOCKED_HOSTNAMES.has(host) || host.endsWith(\".localhost\")) {\n\t\tthrow new Error(`Host bloqueado: ${host}`);\n\t}\n\tif (PRIVATE_IPV4.test(host) || host === \"::1\" || host.startsWith(\"fc\") || host.startsWith(\"fd\")) {\n\t\tthrow new Error(`Dirección de red privada bloqueada: ${host}`);\n\t}\n\treturn url;\n}\n\nconst searchParams = Type.Object({\n\tquery: Type.String({ description: \"Consulta de búsqueda.\" }),\n\tcount: Type.Optional(Type.Number({ description: \"Número de resultados (por defecto 5, máximo 10).\" })),\n});\n\nconst fetchParams = Type.Object({\n\turl: Type.String({ description: \"URL http(s) a descargar.\" }),\n});\n\n/** Formatea resultados de búsqueda (nativos o de un proveedor) como texto numerado. */\nfunction formatearResultados(\n\tresultados: Array<{ titulo: string; url: string; resumen?: string; edad?: string }>,\n): string {\n\treturn resultados\n\t\t.map((r, i) => {\n\t\t\tconst partes = [`${i + 1}. ${r.titulo}`, ` ${r.url}`];\n\t\t\tif (r.resumen) partes.push(` ${r.resumen}`);\n\t\t\tif (r.edad) partes.push(` (${r.edad})`);\n\t\t\treturn partes.join(\"\\n\");\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\n/**\n * El dominio de destino, o `null` si no se puede leer.\n *\n * Solo el hostname: la ruta y la query se descartan aquí a propósito, porque es\n * el único sitio por el que pasan y un `?api_key=…` en el libro sería la fuga\n * que el libro existe para no tener.\n */\n// `Parameters<typeof fetch>[0]` y no `RequestInfo`: el proyecto compila sin la\n// librería DOM, así que ese nombre global no existe aquí.\nfunction dominioDe(destino: Parameters<typeof fetch>[0]): string | null {\n\ttry {\n\t\tconst crudo = typeof destino === \"string\" ? destino : destino instanceof URL ? destino.href : destino.url;\n\t\treturn new URL(crudo).hostname || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function createWebTools(options: WebToolsOptions): Record<string, ToolDefinition> {\n\tconst fetchCrudo = options.fetchImpl ?? fetch;\n\tconst anotarRed = options.anotarRed;\n\t// Un solo punto para todas las salidas: este `fetchImpl` es el que reciben los\n\t// scrapers (`modulo.scrapear(url, fetchImpl, …)`) y los proveedores de\n\t// búsqueda (`buscarConProveedores(…, { fetchImpl })`), así que envolverlo una\n\t// vez registra las salidas de los tres caminos y no solo del fetch genérico.\n\tconst fetchImpl: typeof fetch = anotarRed\n\t\t? (destino, init) => {\n\t\t\t\tconst dominio = dominioDe(destino);\n\t\t\t\t// `try` porque el registro es best-effort y la descarga no lo es.\n\t\t\t\tif (dominio) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tanotarRed(dominio, true);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Un fallo del libro no puede impedir una descarga.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn fetchCrudo(destino, init);\n\t\t\t}\n\t\t: fetchCrudo;\n\tconst timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\n\t/** Aborta la petición si tarda demasiado, y respeta el abort del agente. */\n\tconst withTimeout = async (\n\t\touter: AbortSignal | undefined,\n\t\trun: (signal: AbortSignal) => Promise<Response>,\n\t): Promise<Response> => {\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeoutMs);\n\t\tconst onAbort = () => controller.abort();\n\t\touter?.addEventListener(\"abort\", onAbort);\n\t\ttry {\n\t\t\treturn await run(controller.signal);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\touter?.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t};\n\n\tconst webSearch: ToolDefinition<typeof searchParams> = {\n\t\tname: \"web_search\",\n\t\tlabel: \"Buscar en la web\",\n\t\tdescription:\n\t\t\t\"Busca en la web y devuelve resultados con título, URL y extracto. \" +\n\t\t\t\"Úsalo para hechos que puedan haber cambiado o que no estén en el repositorio. \" +\n\t\t\t\"Cita siempre la URL exacta: un resultado sin fuente no vale como evidencia.\",\n\t\tpromptSnippet: \"buscar en la web\",\n\t\tparameters: searchParams,\n\t\tasync execute(_toolCallId, input, signal): Promise<AgentToolResult<unknown>> {\n\t\t\tconst query = String(input.query ?? \"\").trim();\n\t\t\tif (!query) return textResult(\"Error: 'query' es obligatorio.\");\n\t\t\tconst count = Math.min(Math.max(Number(input.count) || 5, 1), 10);\n\n\t\t\t// 1) Nativo del proveedor de modelo: la credencial que el usuario ya paga.\n\t\t\tif (options.buscarNativo) {\n\t\t\t\ttry {\n\t\t\t\t\tconst nativos = await options.buscarNativo(query, count);\n\t\t\t\t\tif (nativos !== null) {\n\t\t\t\t\t\tif (nativos.length === 0) return textResult(`Sin resultados para: ${query}`);\n\t\t\t\t\t\treturn textResult(formatearResultados(nativos));\n\t\t\t\t\t}\n\t\t\t\t\t// null: el proveedor activo no trae búsqueda propia — seguir al registro.\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn textResult(\n\t\t\t\t\t\t`La búsqueda con el modelo falló: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 2) Registro de proveedores: clave configurada > sin clave. Los tres sin\n\t\t\t// clave (duckduckgo, mojeek, ecosia) están siempre en la lista, así que\n\t\t\t// esto SIEMPRE tiene algo que probar — nunca \"no configurado\".\n\t\t\ttry {\n\t\t\t\tconst { resultados } = await buscarConProveedores(query, count, {\n\t\t\t\t\tobtenerClave: options.obtenerClave,\n\t\t\t\t\tfetchImpl,\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tif (resultados.length === 0) return textResult(`Sin resultados para: ${query}`);\n\t\t\t\treturn textResult(formatearResultados(resultados));\n\t\t\t} catch (error) {\n\t\t\t\t// Un fallo de red o de todos los proveedores es un FALLO, no \"sin\n\t\t\t\t// resultados\": el agente debe saber que no se ha buscado de verdad.\n\t\t\t\treturn textResult(`La búsqueda falló: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t}\n\t\t},\n\t};\n\n\tconst webFetch: ToolDefinition<typeof fetchParams> = {\n\t\tname: \"web_fetch\",\n\t\tlabel: \"Descargar URL\",\n\t\tdescription:\n\t\t\t\"Descarga una URL y devuelve su texto. Úsalo tras web_search para leer una fuente concreta. \" +\n\t\t\t\"Para registros de paquetes (npm, PyPI, crates.io…), GitHub, MDN, Stack Overflow y CVEs (NVD, CISA \" +\n\t\t\t\"KEV) devuelve datos estructurados en vez de HTML. Solo http/https públicos: la red interna está bloqueada.\",\n\t\tpromptSnippet: \"leer el contenido de una URL\",\n\t\tparameters: fetchParams,\n\t\tasync execute(_toolCallId, input, signal): Promise<AgentToolResult<unknown>> {\n\t\t\tconst raw = String(input.url ?? \"\").trim();\n\t\t\tif (!raw) return textResult(\"Error: 'url' es obligatorio.\");\n\t\t\tlet url: URL;\n\t\t\ttry {\n\t\t\t\turl = assertFetchableUrl(raw);\n\t\t\t} catch (error) {\n\t\t\t\tconst motivo = error instanceof Error ? error.message : String(error);\n\t\t\t\t// Un intento BLOQUEADO es tan auditable como una salida consumada, y es\n\t\t\t\t// el único que no pasa por el `fetchImpl` envuelto: la guarda SSRF corta\n\t\t\t\t// antes. Sin esta línea el libro solo tendría `permitido: true` y el\n\t\t\t\t// campo `permitido` sería decorativo — un registro que dice siempre lo\n\t\t\t\t// mismo no distingue nada.\n\t\t\t\ttry {\n\t\t\t\t\tanotarRed?.(dominioDe(raw) ?? \"(url ilegible)\", false, motivo);\n\t\t\t\t} catch {\n\t\t\t\t\t// best-effort, igual que arriba.\n\t\t\t\t}\n\t\t\t\treturn textResult(`Error: ${motivo}`);\n\t\t\t}\n\n\t\t\t// Scraper especializado primero: datos estructurados de la API del sitio\n\t\t\t// en vez del HTML de la página. Si no encaja o falla, se cae al fetch\n\t\t\t// genérico de siempre — la URL sigue siendo legible aunque no se pueda\n\t\t\t// enriquecer.\n\t\t\tconst descriptor = encontrarScraper(url);\n\t\t\tif (descriptor) {\n\t\t\t\ttry {\n\t\t\t\t\tconst modulo = await descriptor.cargar();\n\t\t\t\t\tconst resultado = await modulo.scrapear(url, fetchImpl, signal);\n\t\t\t\t\tif (resultado) {\n\t\t\t\t\t\treturn textResult(\n\t\t\t\t\t\t\t`${resultado.titulo}\\n${resultado.url}\\n\\n${resultado.resumen}\\n\\nDatos estructurados:\\n` +\n\t\t\t\t\t\t\t\tJSON.stringify(resultado.datos, null, 2),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// El scraper falló: se cae al fetch genérico en vez de dejar la\n\t\t\t\t\t// tool en blanco. La URL sigue siendo lo que el usuario pidió leer.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// La dirección, no el nombre. `assertFetchableUrl` compara cadenas y deja\n\t\t\t// pasar todo lo que llega al mismo sitio por otro camino: medido,\n\t\t\t// `[::ffff:127.0.0.1]` y un dominio que resuelve a 127.0.0.1 pasaban\n\t\t\t// enteros. Ver `core/web/destino.ts`.\n\t\t\tconst rechazo = await destinoPermitido(url);\n\t\t\tif (rechazo) {\n\t\t\t\tanotarRed?.(url.hostname, false, rechazo.motivo);\n\t\t\t\treturn textResult(\n\t\t\t\t\t`Descarga bloqueada: ${rechazo.motivo}${rechazo.direccion ? ` (${rechazo.direccion})` : \"\"}. ` +\n\t\t\t\t\t\t\"Las tools web no alcanzan la red interna ni la propia máquina.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// `redirect: \"manual\"` y cada salto revalidado. Con `follow`, una URL\n\t\t\t\t// pública que responde 302 hacia loopback llegaba igual, porque solo se\n\t\t\t\t// miraba la primera — era el tercer camino abierto de los tres.\n\t\t\t\tlet destino = url;\n\t\t\t\tlet response: Response | undefined;\n\t\t\t\tfor (let salto = 0; salto <= MAX_REDIRECCIONES; salto++) {\n\t\t\t\t\tresponse = await withTimeout(signal, (s) =>\n\t\t\t\t\t\tfetchImpl(destino.toString(), {\n\t\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\t\tsignal: s,\n\t\t\t\t\t\t\theaders: { \"user-agent\": \"ada-cli\" },\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tif (response.status < 300 || response.status >= 400) break;\n\t\t\t\t\tconst siguiente = response.headers.get(\"location\");\n\t\t\t\t\tif (!siguiente) break;\n\t\t\t\t\tif (salto === MAX_REDIRECCIONES) {\n\t\t\t\t\t\treturn textResult(`La descarga dio más de ${MAX_REDIRECCIONES} redirecciones y se ha parado.`);\n\t\t\t\t\t}\n\t\t\t\t\t// Relativa respecto al destino actual, como manda el estándar.\n\t\t\t\t\tdestino = new URL(siguiente, destino);\n\t\t\t\t\tassertFetchableUrl(destino.toString());\n\t\t\t\t\tconst rechazoSalto = await destinoPermitido(destino);\n\t\t\t\t\tif (rechazoSalto) {\n\t\t\t\t\t\tanotarRed?.(destino.hostname, false, `redirección a ${rechazoSalto.motivo}`);\n\t\t\t\t\t\treturn textResult(\n\t\t\t\t\t\t\t`Descarga bloqueada: la redirección lleva a ${rechazoSalto.motivo}` +\n\t\t\t\t\t\t\t\t`${rechazoSalto.direccion ? ` (${rechazoSalto.direccion})` : \"\"}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tanotarRed?.(destino.hostname, true, \"redirección\");\n\t\t\t\t}\n\t\t\t\tif (!response) return textResult(\"La descarga no devolvió respuesta.\");\n\t\t\t\tif (!response.ok) return textResult(`La descarga devolvió HTTP ${response.status}.`);\n\t\t\t\tconst body = await response.text();\n\t\t\t\tconst truncated = body.length > MAX_FETCH_BYTES;\n\t\t\t\tconst text = htmlToText(body.slice(0, MAX_FETCH_BYTES));\n\t\t\t\treturn textResult(truncated ? `${text}\\n\\n[truncado en ${MAX_FETCH_BYTES} bytes]` : text);\n\t\t\t} catch (error) {\n\t\t\t\treturn textResult(`La descarga falló: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn { web_search: webSearch as ToolDefinition, web_fetch: webFetch as ToolDefinition };\n}\n"]}