@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Encontrar adjuntos en línea dentro del payload del proveedor y sustituirlos
3
+ * por referencias a un fichero ya subido.
4
+ *
5
+ * Todo aquí es puro: entra un payload, sale otro. Ni red ni disco. Así el
6
+ * troceado se puede probar con el payload EXACTO que construye `packages/ai`
7
+ * sin montar una sesión.
8
+ *
9
+ * La distinción que sostiene la puerta 2 vive en el tipo de retorno de
10
+ * `localizarBlobs`:
11
+ *
12
+ * null → "no sé leer este payload" (API desconocida, o la forma no es la
13
+ * esperada). No es lo mismo que no haber encontrado nada.
14
+ * [] → "sé leerlo y no hay ningún adjunto que subir".
15
+ *
16
+ * Devolver `[]` en los dos casos convertiría un fallo de lectura en un informe
17
+ * tranquilizador de "no había nada", que es exactamente el defecto que este
18
+ * repositorio persigue.
19
+ */
20
+ export function claveDeRuta(ruta) {
21
+ return `${ruta.mensaje}:${ruta.bloque}:${ruta.anidado ?? -1}`;
22
+ }
23
+ /** Bytes reales que representa una cadena base64, sin decodificarla. */
24
+ export function bytesDeBase64(base64) {
25
+ const sinRelleno = base64.replace(/=+$/, "");
26
+ return Math.floor((sinRelleno.length * 3) / 4);
27
+ }
28
+ const DATA_URL = /^data:([^;,]+);base64,(.*)$/s;
29
+ /** `data:image/png;base64,AAAA` → `{ mime, base64 }`. */
30
+ export function partirDataUrl(url) {
31
+ if (typeof url !== "string")
32
+ return undefined;
33
+ const coincidencia = url.match(DATA_URL);
34
+ if (!coincidencia)
35
+ return undefined;
36
+ return { mime: coincidencia[1], base64: coincidencia[2] };
37
+ }
38
+ function comoObjeto(valor) {
39
+ return valor && typeof valor === "object" && !Array.isArray(valor) ? valor : undefined;
40
+ }
41
+ /** Los mensajes viven en `messages` (Anthropic) o en `input` (OpenAI responses). */
42
+ function listaDeMensajes(payload, api) {
43
+ const bruto = api === "anthropic-messages" ? payload.messages : payload.input;
44
+ return Array.isArray(bruto) ? bruto : undefined;
45
+ }
46
+ /**
47
+ * Nombre del campo donde un resultado de herramienta guarda sus adjuntos, o
48
+ * `undefined` si este bloque no es un resultado de herramienta.
49
+ *
50
+ * Existe porque las imágenes grandes de verdad casi nunca las pega el usuario:
51
+ * las trae una herramienta (`read` de una captura, `computer`). Y esas NO
52
+ * cuelgan del mensaje, van anidadas un nivel más adentro: Anthropic las mete en
53
+ * `tool_result.content[]` (anthropic-messages.ts:1141) y OpenAI responses en
54
+ * `function_call_output.output[]` (openai-responses-shared.ts:308). Sin mirar
55
+ * ahí, `localizarBlobs` devolvía `[]` con una captura de 2 MB delante y
56
+ * `/blobs` informaba "no hay ningún adjunto en la conversación" — un "no lo he
57
+ * mirado" disfrazado de "no hay".
58
+ */
59
+ function campoAnidado(bloque, api) {
60
+ if (api === "anthropic-messages") {
61
+ return bloque.type === "tool_result" && Array.isArray(bloque.content) ? "content" : undefined;
62
+ }
63
+ const esSalida = bloque.type === "function_call_output" || bloque.type === "custom_tool_call_output";
64
+ return esSalida && Array.isArray(bloque.output) ? "output" : undefined;
65
+ }
66
+ export function localizarBlobs(payload, api) {
67
+ if (api !== "anthropic-messages" && api !== "openai-responses")
68
+ return null;
69
+ const objeto = comoObjeto(payload);
70
+ if (!objeto)
71
+ return null;
72
+ const mensajes = listaDeMensajes(objeto, api);
73
+ if (!mensajes)
74
+ return null;
75
+ const encontrados = [];
76
+ const recoger = (lista, mensaje, bloque) => {
77
+ for (const [anidado, hijo] of lista.entries()) {
78
+ const encontrado = leerBloque(hijo, api);
79
+ if (encontrado)
80
+ encontrados.push({ ...encontrado, ruta: { mensaje, bloque, anidado } });
81
+ }
82
+ };
83
+ for (const [indiceMensaje, mensaje] of mensajes.entries()) {
84
+ const cuerpo = comoObjeto(mensaje);
85
+ if (!cuerpo)
86
+ continue;
87
+ // OpenAI responses: el resultado de herramienta es un item de primer nivel,
88
+ // no un bloque dentro de un mensaje. De ahí el `-1`.
89
+ const directo = campoAnidado(cuerpo, api);
90
+ if (directo) {
91
+ recoger(cuerpo[directo], indiceMensaje, -1);
92
+ continue;
93
+ }
94
+ // El contenido puede ser una cadena (Anthropic lo hace cuando solo hay
95
+ // texto): no es un fallo de lectura, es un mensaje sin adjuntos.
96
+ if (!Array.isArray(cuerpo.content))
97
+ continue;
98
+ for (const [indiceBloque, bloque] of cuerpo.content.entries()) {
99
+ const objetoBloque = comoObjeto(bloque);
100
+ const campo = objetoBloque && campoAnidado(objetoBloque, api);
101
+ if (objetoBloque && campo) {
102
+ recoger(objetoBloque[campo], indiceMensaje, indiceBloque);
103
+ continue;
104
+ }
105
+ const encontrado = leerBloque(bloque, api);
106
+ if (encontrado)
107
+ encontrados.push({ ...encontrado, ruta: { mensaje: indiceMensaje, bloque: indiceBloque } });
108
+ }
109
+ }
110
+ return encontrados;
111
+ }
112
+ function leerBloque(bloque, api) {
113
+ const objeto = comoObjeto(bloque);
114
+ if (!objeto)
115
+ return undefined;
116
+ if (api === "anthropic-messages") {
117
+ if (objeto.type !== "image" && objeto.type !== "document")
118
+ return undefined;
119
+ const fuente = comoObjeto(objeto.source);
120
+ if (!fuente || fuente.type !== "base64")
121
+ return undefined;
122
+ const base64 = fuente.data;
123
+ const mime = fuente.media_type;
124
+ if (typeof base64 !== "string" || typeof mime !== "string")
125
+ return undefined;
126
+ return { clase: objeto.type === "image" ? "imagen" : "documento", mime, base64, bytes: bytesDeBase64(base64) };
127
+ }
128
+ if (objeto.type === "input_image") {
129
+ const partes = partirDataUrl(objeto.image_url);
130
+ if (!partes)
131
+ return undefined;
132
+ return { clase: "imagen", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };
133
+ }
134
+ if (objeto.type === "input_file") {
135
+ const partes = partirDataUrl(objeto.file_data);
136
+ if (!partes)
137
+ return undefined;
138
+ return { clase: "documento", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };
139
+ }
140
+ return undefined;
141
+ }
142
+ /**
143
+ * Devuelve un payload nuevo con los bloques indicados sustituidos por su
144
+ * referencia. Copia solo la rama que cambia: el resto se comparte, para no
145
+ * duplicar en memoria un contexto que puede pesar megas.
146
+ */
147
+ export function reescribirBlobs(payload, api, ids) {
148
+ if (ids.size === 0)
149
+ return payload;
150
+ if (api !== "anthropic-messages" && api !== "openai-responses")
151
+ return payload;
152
+ const objeto = comoObjeto(payload);
153
+ if (!objeto)
154
+ return payload;
155
+ const mensajes = listaDeMensajes(objeto, api);
156
+ if (!mensajes)
157
+ return payload;
158
+ /** Devuelve la lista anidada reescrita, o `undefined` si no cambió nada. */
159
+ const reescribirAnidados = (lista, mensaje, bloque) => {
160
+ let cambiadoAqui = false;
161
+ const nueva = lista.map((hijo, anidado) => {
162
+ const id = ids.get(claveDeRuta({ mensaje, bloque, anidado }));
163
+ if (!id)
164
+ return hijo;
165
+ const referencia = referenciaDeFichero(hijo, api, id);
166
+ if (!referencia)
167
+ return hijo;
168
+ cambiadoAqui = true;
169
+ return referencia;
170
+ });
171
+ return cambiadoAqui ? nueva : undefined;
172
+ };
173
+ let cambiado = false;
174
+ const nuevosMensajes = mensajes.map((mensaje, indiceMensaje) => {
175
+ const cuerpo = comoObjeto(mensaje);
176
+ if (!cuerpo)
177
+ return mensaje;
178
+ const directo = campoAnidado(cuerpo, api);
179
+ if (directo) {
180
+ const nuevos = reescribirAnidados(cuerpo[directo], indiceMensaje, -1);
181
+ if (!nuevos)
182
+ return mensaje;
183
+ cambiado = true;
184
+ return { ...cuerpo, [directo]: nuevos };
185
+ }
186
+ if (!Array.isArray(cuerpo.content))
187
+ return mensaje;
188
+ let cambiadoAqui = false;
189
+ const nuevoContenido = cuerpo.content.map((bloque, indiceBloque) => {
190
+ const objetoBloque = comoObjeto(bloque);
191
+ const campo = objetoBloque && campoAnidado(objetoBloque, api);
192
+ if (objetoBloque && campo) {
193
+ const nuevos = reescribirAnidados(objetoBloque[campo], indiceMensaje, indiceBloque);
194
+ if (!nuevos)
195
+ return bloque;
196
+ cambiadoAqui = true;
197
+ return { ...objetoBloque, [campo]: nuevos };
198
+ }
199
+ const id = ids.get(claveDeRuta({ mensaje: indiceMensaje, bloque: indiceBloque }));
200
+ if (!id)
201
+ return bloque;
202
+ const referencia = referenciaDeFichero(bloque, api, id);
203
+ if (!referencia)
204
+ return bloque;
205
+ cambiadoAqui = true;
206
+ return referencia;
207
+ });
208
+ if (!cambiadoAqui)
209
+ return mensaje;
210
+ cambiado = true;
211
+ return { ...cuerpo, content: nuevoContenido };
212
+ });
213
+ if (!cambiado)
214
+ return payload;
215
+ return api === "anthropic-messages" ? { ...objeto, messages: nuevosMensajes } : { ...objeto, input: nuevosMensajes };
216
+ }
217
+ /**
218
+ * Se conserva TODO lo demás del bloque y solo se cambia de dónde salen los
219
+ * bytes.
220
+ *
221
+ * Antes se construía un bloque nuevo con `type` y la referencia, y eso tiraba
222
+ * en silencio las propiedades hermanas. La cara: `packages/ai` pone el
223
+ * breakpoint de caché de conversación en el ÚLTIMO bloque del último mensaje de
224
+ * usuario, y ese bloque es la imagen cuando la imagen va la última
225
+ * (anthropic-messages.ts:1296-1306). Comprobado ejecutándolo con el payload que
226
+ * construye `buildParams`: entraba `cache_control: {"type":"ephemeral"}` y salía
227
+ * sin él. Un módulo que existe para ahorrar rompía la caché de prompt y lo
228
+ * informaba como "1 subido". También se perdían `title`, `context` y
229
+ * `citations` de los bloques `document`.
230
+ */
231
+ function referenciaDeFichero(bloque, api, id) {
232
+ const objeto = comoObjeto(bloque);
233
+ if (!objeto)
234
+ return undefined;
235
+ if (api === "anthropic-messages") {
236
+ if (objeto.type !== "image" && objeto.type !== "document")
237
+ return undefined;
238
+ // Se copia el bloque entero y solo se cambia `source`. Esta es LA rama
239
+ // donde vive el `cache_control`: el breakpoint solo se pone en bloques
240
+ // `text`, `image` y `tool_result`, todos de Anthropic.
241
+ return { ...objeto, source: { type: "file", file_id: id } };
242
+ }
243
+ if (objeto.type === "input_image") {
244
+ // `detail` sobrevive con el resto: es la palanca de coste de visión de
245
+ // OpenAI y perderla cambiaría en silencio lo que paga el usuario.
246
+ const { image_url: _fuera, ...resto } = objeto;
247
+ return { ...resto, file_id: id };
248
+ }
249
+ if (objeto.type === "input_file") {
250
+ const { file_data: _fuera, ...resto } = objeto;
251
+ return { ...resto, file_id: id };
252
+ }
253
+ return undefined;
254
+ }
255
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/core/blobs/payload.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Encontrar adjuntos en línea dentro del payload del proveedor y sustituirlos\n * por referencias a un fichero ya subido.\n *\n * Todo aquí es puro: entra un payload, sale otro. Ni red ni disco. Así el\n * troceado se puede probar con el payload EXACTO que construye `packages/ai`\n * sin montar una sesión.\n *\n * La distinción que sostiene la puerta 2 vive en el tipo de retorno de\n * `localizarBlobs`:\n *\n * null → \"no sé leer este payload\" (API desconocida, o la forma no es la\n * esperada). No es lo mismo que no haber encontrado nada.\n * [] → \"sé leerlo y no hay ningún adjunto que subir\".\n *\n * Devolver `[]` en los dos casos convertiría un fallo de lectura en un informe\n * tranquilizador de \"no había nada\", que es exactamente el defecto que este\n * repositorio persigue.\n */\n\nexport type ApiDeBlobs = \"anthropic-messages\" | \"openai-responses\";\n\nexport interface BloqueBlob {\n\t/**\n\t * Dónde está: índice de mensaje, índice de bloque dentro de su contenido y,\n\t * si el bloque cuelga del resultado de una herramienta, el índice dentro de\n\t * ese resultado. `bloque: -1` = el contenedor ES el item de primer nivel\n\t * (así viaja `function_call_output` en OpenAI responses).\n\t */\n\truta: { mensaje: number; bloque: number; anidado?: number };\n\tclase: \"imagen\" | \"documento\";\n\tmime: string;\n\t/** Contenido en base64, sin el prefijo `data:`. */\n\tbase64: string;\n\t/** Tamaño del contenido decodificado. */\n\tbytes: number;\n}\n\nexport function claveDeRuta(ruta: BloqueBlob[\"ruta\"]): string {\n\treturn `${ruta.mensaje}:${ruta.bloque}:${ruta.anidado ?? -1}`;\n}\n\n/** Bytes reales que representa una cadena base64, sin decodificarla. */\nexport function bytesDeBase64(base64: string): number {\n\tconst sinRelleno = base64.replace(/=+$/, \"\");\n\treturn Math.floor((sinRelleno.length * 3) / 4);\n}\n\nconst DATA_URL = /^data:([^;,]+);base64,(.*)$/s;\n\n/** `data:image/png;base64,AAAA` → `{ mime, base64 }`. */\nexport function partirDataUrl(url: unknown): { mime: string; base64: string } | undefined {\n\tif (typeof url !== \"string\") return undefined;\n\tconst coincidencia = url.match(DATA_URL);\n\tif (!coincidencia) return undefined;\n\treturn { mime: coincidencia[1], base64: coincidencia[2] };\n}\n\nfunction comoObjeto(valor: unknown): Record<string, unknown> | undefined {\n\treturn valor && typeof valor === \"object\" && !Array.isArray(valor) ? (valor as Record<string, unknown>) : undefined;\n}\n\n/** Los mensajes viven en `messages` (Anthropic) o en `input` (OpenAI responses). */\nfunction listaDeMensajes(payload: Record<string, unknown>, api: ApiDeBlobs): unknown[] | undefined {\n\tconst bruto = api === \"anthropic-messages\" ? payload.messages : payload.input;\n\treturn Array.isArray(bruto) ? bruto : undefined;\n}\n\n/**\n * Nombre del campo donde un resultado de herramienta guarda sus adjuntos, o\n * `undefined` si este bloque no es un resultado de herramienta.\n *\n * Existe porque las imágenes grandes de verdad casi nunca las pega el usuario:\n * las trae una herramienta (`read` de una captura, `computer`). Y esas NO\n * cuelgan del mensaje, van anidadas un nivel más adentro: Anthropic las mete en\n * `tool_result.content[]` (anthropic-messages.ts:1141) y OpenAI responses en\n * `function_call_output.output[]` (openai-responses-shared.ts:308). Sin mirar\n * ahí, `localizarBlobs` devolvía `[]` con una captura de 2 MB delante y\n * `/blobs` informaba \"no hay ningún adjunto en la conversación\" — un \"no lo he\n * mirado\" disfrazado de \"no hay\".\n */\nfunction campoAnidado(bloque: Record<string, unknown>, api: ApiDeBlobs): \"content\" | \"output\" | undefined {\n\tif (api === \"anthropic-messages\") {\n\t\treturn bloque.type === \"tool_result\" && Array.isArray(bloque.content) ? \"content\" : undefined;\n\t}\n\tconst esSalida = bloque.type === \"function_call_output\" || bloque.type === \"custom_tool_call_output\";\n\treturn esSalida && Array.isArray(bloque.output) ? \"output\" : undefined;\n}\n\nexport function localizarBlobs(payload: unknown, api: string): BloqueBlob[] | null {\n\tif (api !== \"anthropic-messages\" && api !== \"openai-responses\") return null;\n\tconst objeto = comoObjeto(payload);\n\tif (!objeto) return null;\n\tconst mensajes = listaDeMensajes(objeto, api);\n\tif (!mensajes) return null;\n\n\tconst encontrados: BloqueBlob[] = [];\n\tconst recoger = (lista: unknown[], mensaje: number, bloque: number) => {\n\t\tfor (const [anidado, hijo] of lista.entries()) {\n\t\t\tconst encontrado = leerBloque(hijo, api);\n\t\t\tif (encontrado) encontrados.push({ ...encontrado, ruta: { mensaje, bloque, anidado } });\n\t\t}\n\t};\n\n\tfor (const [indiceMensaje, mensaje] of mensajes.entries()) {\n\t\tconst cuerpo = comoObjeto(mensaje);\n\t\tif (!cuerpo) continue;\n\t\t// OpenAI responses: el resultado de herramienta es un item de primer nivel,\n\t\t// no un bloque dentro de un mensaje. De ahí el `-1`.\n\t\tconst directo = campoAnidado(cuerpo, api);\n\t\tif (directo) {\n\t\t\trecoger(cuerpo[directo] as unknown[], indiceMensaje, -1);\n\t\t\tcontinue;\n\t\t}\n\t\t// El contenido puede ser una cadena (Anthropic lo hace cuando solo hay\n\t\t// texto): no es un fallo de lectura, es un mensaje sin adjuntos.\n\t\tif (!Array.isArray(cuerpo.content)) continue;\n\t\tfor (const [indiceBloque, bloque] of (cuerpo.content as unknown[]).entries()) {\n\t\t\tconst objetoBloque = comoObjeto(bloque);\n\t\t\tconst campo = objetoBloque && campoAnidado(objetoBloque, api);\n\t\t\tif (objetoBloque && campo) {\n\t\t\t\trecoger(objetoBloque[campo] as unknown[], indiceMensaje, indiceBloque);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst encontrado = leerBloque(bloque, api);\n\t\t\tif (encontrado) encontrados.push({ ...encontrado, ruta: { mensaje: indiceMensaje, bloque: indiceBloque } });\n\t\t}\n\t}\n\treturn encontrados;\n}\n\nfunction leerBloque(bloque: unknown, api: ApiDeBlobs): Omit<BloqueBlob, \"ruta\"> | undefined {\n\tconst objeto = comoObjeto(bloque);\n\tif (!objeto) return undefined;\n\n\tif (api === \"anthropic-messages\") {\n\t\tif (objeto.type !== \"image\" && objeto.type !== \"document\") return undefined;\n\t\tconst fuente = comoObjeto(objeto.source);\n\t\tif (!fuente || fuente.type !== \"base64\") return undefined;\n\t\tconst base64 = fuente.data;\n\t\tconst mime = fuente.media_type;\n\t\tif (typeof base64 !== \"string\" || typeof mime !== \"string\") return undefined;\n\t\treturn { clase: objeto.type === \"image\" ? \"imagen\" : \"documento\", mime, base64, bytes: bytesDeBase64(base64) };\n\t}\n\n\tif (objeto.type === \"input_image\") {\n\t\tconst partes = partirDataUrl(objeto.image_url);\n\t\tif (!partes) return undefined;\n\t\treturn { clase: \"imagen\", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };\n\t}\n\tif (objeto.type === \"input_file\") {\n\t\tconst partes = partirDataUrl(objeto.file_data);\n\t\tif (!partes) return undefined;\n\t\treturn { clase: \"documento\", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };\n\t}\n\treturn undefined;\n}\n\n/**\n * Devuelve un payload nuevo con los bloques indicados sustituidos por su\n * referencia. Copia solo la rama que cambia: el resto se comparte, para no\n * duplicar en memoria un contexto que puede pesar megas.\n */\nexport function reescribirBlobs(payload: unknown, api: string, ids: Map<string, string>): unknown {\n\tif (ids.size === 0) return payload;\n\tif (api !== \"anthropic-messages\" && api !== \"openai-responses\") return payload;\n\tconst objeto = comoObjeto(payload);\n\tif (!objeto) return payload;\n\tconst mensajes = listaDeMensajes(objeto, api);\n\tif (!mensajes) return payload;\n\n\t/** Devuelve la lista anidada reescrita, o `undefined` si no cambió nada. */\n\tconst reescribirAnidados = (lista: unknown[], mensaje: number, bloque: number): unknown[] | undefined => {\n\t\tlet cambiadoAqui = false;\n\t\tconst nueva = lista.map((hijo, anidado) => {\n\t\t\tconst id = ids.get(claveDeRuta({ mensaje, bloque, anidado }));\n\t\t\tif (!id) return hijo;\n\t\t\tconst referencia = referenciaDeFichero(hijo, api, id);\n\t\t\tif (!referencia) return hijo;\n\t\t\tcambiadoAqui = true;\n\t\t\treturn referencia;\n\t\t});\n\t\treturn cambiadoAqui ? nueva : undefined;\n\t};\n\n\tlet cambiado = false;\n\tconst nuevosMensajes = mensajes.map((mensaje, indiceMensaje) => {\n\t\tconst cuerpo = comoObjeto(mensaje);\n\t\tif (!cuerpo) return mensaje;\n\t\tconst directo = campoAnidado(cuerpo, api);\n\t\tif (directo) {\n\t\t\tconst nuevos = reescribirAnidados(cuerpo[directo] as unknown[], indiceMensaje, -1);\n\t\t\tif (!nuevos) return mensaje;\n\t\t\tcambiado = true;\n\t\t\treturn { ...cuerpo, [directo]: nuevos };\n\t\t}\n\t\tif (!Array.isArray(cuerpo.content)) return mensaje;\n\t\tlet cambiadoAqui = false;\n\t\tconst nuevoContenido = (cuerpo.content as unknown[]).map((bloque, indiceBloque) => {\n\t\t\tconst objetoBloque = comoObjeto(bloque);\n\t\t\tconst campo = objetoBloque && campoAnidado(objetoBloque, api);\n\t\t\tif (objetoBloque && campo) {\n\t\t\t\tconst nuevos = reescribirAnidados(objetoBloque[campo] as unknown[], indiceMensaje, indiceBloque);\n\t\t\t\tif (!nuevos) return bloque;\n\t\t\t\tcambiadoAqui = true;\n\t\t\t\treturn { ...objetoBloque, [campo]: nuevos };\n\t\t\t}\n\t\t\tconst id = ids.get(claveDeRuta({ mensaje: indiceMensaje, bloque: indiceBloque }));\n\t\t\tif (!id) return bloque;\n\t\t\tconst referencia = referenciaDeFichero(bloque, api, id);\n\t\t\tif (!referencia) return bloque;\n\t\t\tcambiadoAqui = true;\n\t\t\treturn referencia;\n\t\t});\n\t\tif (!cambiadoAqui) return mensaje;\n\t\tcambiado = true;\n\t\treturn { ...cuerpo, content: nuevoContenido };\n\t});\n\n\tif (!cambiado) return payload;\n\treturn api === \"anthropic-messages\" ? { ...objeto, messages: nuevosMensajes } : { ...objeto, input: nuevosMensajes };\n}\n\n/**\n * Se conserva TODO lo demás del bloque y solo se cambia de dónde salen los\n * bytes.\n *\n * Antes se construía un bloque nuevo con `type` y la referencia, y eso tiraba\n * en silencio las propiedades hermanas. La cara: `packages/ai` pone el\n * breakpoint de caché de conversación en el ÚLTIMO bloque del último mensaje de\n * usuario, y ese bloque es la imagen cuando la imagen va la última\n * (anthropic-messages.ts:1296-1306). Comprobado ejecutándolo con el payload que\n * construye `buildParams`: entraba `cache_control: {\"type\":\"ephemeral\"}` y salía\n * sin él. Un módulo que existe para ahorrar rompía la caché de prompt y lo\n * informaba como \"1 subido\". También se perdían `title`, `context` y\n * `citations` de los bloques `document`.\n */\nfunction referenciaDeFichero(bloque: unknown, api: ApiDeBlobs, id: string): Record<string, unknown> | undefined {\n\tconst objeto = comoObjeto(bloque);\n\tif (!objeto) return undefined;\n\tif (api === \"anthropic-messages\") {\n\t\tif (objeto.type !== \"image\" && objeto.type !== \"document\") return undefined;\n\t\t// Se copia el bloque entero y solo se cambia `source`. Esta es LA rama\n\t\t// donde vive el `cache_control`: el breakpoint solo se pone en bloques\n\t\t// `text`, `image` y `tool_result`, todos de Anthropic.\n\t\treturn { ...objeto, source: { type: \"file\", file_id: id } };\n\t}\n\tif (objeto.type === \"input_image\") {\n\t\t// `detail` sobrevive con el resto: es la palanca de coste de visión de\n\t\t// OpenAI y perderla cambiaría en silencio lo que paga el usuario.\n\t\tconst { image_url: _fuera, ...resto } = objeto;\n\t\treturn { ...resto, file_id: id };\n\t}\n\tif (objeto.type === \"input_file\") {\n\t\tconst { file_data: _fuera, ...resto } = objeto;\n\t\treturn { ...resto, file_id: id };\n\t}\n\treturn undefined;\n}\n"]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Qué proveedores tienen API de ficheros, y cómo se habla con ella.
3
+ *
4
+ * La pieza importante de este fichero no es la subida: es `capacidadDeBlobs`,
5
+ * que NUNCA devuelve un "no" mudo. Un proveedor sin API de ficheros y un
6
+ * proveedor con la API pero sin credencial son dos cosas distintas, y las dos
7
+ * son distintas de "no hay ningún adjunto en esta petición". Confundirlas es el
8
+ * defecto que más veces nos ha mordido: un "no puedo" leído como "no hay".
9
+ *
10
+ * Por qué se exige la URL oficial: un modelo `anthropic-messages` servido por
11
+ * un gateway (OpenRouter, un proxy propio, Bedrock) habla el mismo dialecto de
12
+ * mensajes pero NO expone `/v1/files`. Subir ahí devuelve 404 y, peor, un id
13
+ * inventado por el proxy que luego el modelo no reconoce. Si no es la URL
14
+ * oficial, decimos por qué no y mandamos el contenido en línea como siempre.
15
+ */
16
+ /** Lo mínimo que necesitamos del modelo. Evita atarnos al tipo `Model<Api>`. */
17
+ export interface ModeloParaBlobs {
18
+ provider?: string;
19
+ api?: string;
20
+ baseUrl?: string;
21
+ }
22
+ export interface CapacidadDeBlobs {
23
+ /** Clave de caché: los ids no son intercambiables entre proveedores. */
24
+ proveedor: string;
25
+ /** Familia de API de ficheros; decide multipart, cabeceras y forma del ref. */
26
+ familia: "anthropic" | "openai";
27
+ /** URL absoluta de la colección de ficheros. */
28
+ urlFicheros: string;
29
+ /** Cabeceras extra obligatorias (el beta de la Files API de Anthropic). */
30
+ cabeceras: Record<string, string>;
31
+ }
32
+ export interface SinCapacidad {
33
+ /** Por qué NO se puede subir. Nunca vacío. */
34
+ motivo: string;
35
+ }
36
+ export type ResultadoDeCapacidad = CapacidadDeBlobs | SinCapacidad;
37
+ export declare function puedeSubir(resultado: ResultadoDeCapacidad): resultado is CapacidadDeBlobs;
38
+ /** Beta obligatorio de la Files API de Anthropic. Sin él, /v1/files da 404. */
39
+ export declare const BETA_FICHEROS_ANTHROPIC = "files-api-2025-04-14";
40
+ export declare function capacidadDeBlobs(modelo: ModeloParaBlobs | undefined): ResultadoDeCapacidad;
41
+ export interface Credencial {
42
+ apiKey?: string;
43
+ cabeceras?: Record<string, string>;
44
+ }
45
+ export type Fetch = typeof globalThis.fetch;
46
+ export interface RespuestaDeSubida {
47
+ ok: true;
48
+ id: string;
49
+ }
50
+ export interface FalloDeSubida {
51
+ ok: false;
52
+ /**
53
+ * `rechazado` = el proveedor contestó y dijo que no (4xx). `transporte` = no
54
+ * se pudo ni preguntar. La diferencia importa: un rechazo se aprende, un
55
+ * fallo de transporte se reintenta en el turno siguiente.
56
+ */
57
+ clase: "rechazado" | "transporte";
58
+ motivo: string;
59
+ estado?: number;
60
+ }
61
+ export type ResultadoDeSubida = RespuestaDeSubida | FalloDeSubida;
62
+ /**
63
+ * Un token de OAuth de Anthropic (Claude Pro/Max: empieza por `sk-ant-oat`) NO
64
+ * vale como `x-api-key`. `packages/ai` lo sabe y construye el cliente con
65
+ * `authToken`, que es `Authorization: Bearer`
66
+ * (anthropic-messages.ts:873 y :923). El mismo criterio, `includes`, y no un
67
+ * `startsWith`: el token viaja a veces con prefijo de entorno.
68
+ */
69
+ export declare function esTokenOAuthAnthropic(apiKey: string): boolean;
70
+ export declare function subirFichero(capacidad: CapacidadDeBlobs, credencial: Credencial, fichero: {
71
+ datos: Uint8Array;
72
+ mime: string;
73
+ nombre: string;
74
+ }, fetchImpl?: Fetch, signal?: AbortSignal): Promise<ResultadoDeSubida>;
75
+ export type EstadoDeFichero = "vivo" | "muerto" | "desconocido";
76
+ /**
77
+ * ¿Sigue existiendo el id? Se pregunta UNA vez por proceso y solo para ids que
78
+ * vienen de una sesión anterior. Preguntarlo en cada turno costaría una
79
+ * petición por adjunto y por turno, que es justo lo que este módulo evita.
80
+ *
81
+ * `desconocido` no es `muerto`: si la red falla, no sabemos si el id sirve, y
82
+ * tratarlo como muerto resubiría el fichero cada vez que hubiera un corte.
83
+ */
84
+ export declare function verificarFichero(capacidad: CapacidadDeBlobs, credencial: Credencial, id: string, fetchImpl?: Fetch, signal?: AbortSignal): Promise<EstadoDeFichero>;
85
+ //# sourceMappingURL=proveedor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proveedor.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/proveedor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,iFAAgF;AAChF,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,yEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;IAChC,iDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC5B,gDAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEnE,wBAAgB,UAAU,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,IAAI,gBAAgB,CAEzF;AAED,gFAA+E;AAC/E,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAe9D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,oBAAoB,CAoD1F;AAID,MAAM,WAAW,UAAU;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV;;;;OAIG;IACH,KAAK,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,aAAa,CAAC;AAElE;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AA8BD,wBAAsB,YAAY,CACjC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5D,SAAS,GAAE,KAAwB,EACnC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA0C5B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACrC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,KAAwB,EACnC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC,CAe1B","sourcesContent":["/**\n * Qué proveedores tienen API de ficheros, y cómo se habla con ella.\n *\n * La pieza importante de este fichero no es la subida: es `capacidadDeBlobs`,\n * que NUNCA devuelve un \"no\" mudo. Un proveedor sin API de ficheros y un\n * proveedor con la API pero sin credencial son dos cosas distintas, y las dos\n * son distintas de \"no hay ningún adjunto en esta petición\". Confundirlas es el\n * defecto que más veces nos ha mordido: un \"no puedo\" leído como \"no hay\".\n *\n * Por qué se exige la URL oficial: un modelo `anthropic-messages` servido por\n * un gateway (OpenRouter, un proxy propio, Bedrock) habla el mismo dialecto de\n * mensajes pero NO expone `/v1/files`. Subir ahí devuelve 404 y, peor, un id\n * inventado por el proxy que luego el modelo no reconoce. Si no es la URL\n * oficial, decimos por qué no y mandamos el contenido en línea como siempre.\n */\n\n/** Lo mínimo que necesitamos del modelo. Evita atarnos al tipo `Model<Api>`. */\nexport interface ModeloParaBlobs {\n\tprovider?: string;\n\tapi?: string;\n\tbaseUrl?: string;\n}\n\nexport interface CapacidadDeBlobs {\n\t/** Clave de caché: los ids no son intercambiables entre proveedores. */\n\tproveedor: string;\n\t/** Familia de API de ficheros; decide multipart, cabeceras y forma del ref. */\n\tfamilia: \"anthropic\" | \"openai\";\n\t/** URL absoluta de la colección de ficheros. */\n\turlFicheros: string;\n\t/** Cabeceras extra obligatorias (el beta de la Files API de Anthropic). */\n\tcabeceras: Record<string, string>;\n}\n\nexport interface SinCapacidad {\n\t/** Por qué NO se puede subir. Nunca vacío. */\n\tmotivo: string;\n}\n\nexport type ResultadoDeCapacidad = CapacidadDeBlobs | SinCapacidad;\n\nexport function puedeSubir(resultado: ResultadoDeCapacidad): resultado is CapacidadDeBlobs {\n\treturn \"urlFicheros\" in resultado;\n}\n\n/** Beta obligatorio de la Files API de Anthropic. Sin él, /v1/files da 404. */\nexport const BETA_FICHEROS_ANTHROPIC = \"files-api-2025-04-14\";\n\nfunction anfitrion(url: string | undefined): string | undefined {\n\tif (!url) return undefined;\n\ttry {\n\t\treturn new URL(url).host.toLowerCase();\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction sinBarraFinal(url: string): string {\n\treturn url.replace(/\\/+$/, \"\");\n}\n\nexport function capacidadDeBlobs(modelo: ModeloParaBlobs | undefined): ResultadoDeCapacidad {\n\tif (!modelo) return { motivo: \"todavía no hay modelo seleccionado en la sesión\" };\n\tconst proveedor = modelo.provider ?? \"?\";\n\tconst api = modelo.api ?? \"?\";\n\tconst host = anfitrion(modelo.baseUrl);\n\n\tif (api === \"anthropic-messages\") {\n\t\tif (proveedor !== \"anthropic\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `\"${proveedor}\" habla el dialecto de mensajes de Anthropic pero no es Anthropic: no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\tif (host !== \"api.anthropic.com\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `el modelo apunta a ${host ?? \"una URL ilegible\"} y no a api.anthropic.com: un gateway no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tproveedor: \"anthropic\",\n\t\t\tfamilia: \"anthropic\",\n\t\t\turlFicheros: `${sinBarraFinal(modelo.baseUrl ?? \"\")}/v1/files`,\n\t\t\tcabeceras: { \"anthropic-beta\": BETA_FICHEROS_ANTHROPIC, \"anthropic-version\": \"2023-06-01\" },\n\t\t};\n\t}\n\n\tif (api === \"openai-responses\") {\n\t\tif (proveedor !== \"openai\") {\n\t\t\treturn { motivo: `\"${proveedor}\" usa la API de respuestas de OpenAI pero no expone /v1/files propio` };\n\t\t}\n\t\tif (host !== \"api.openai.com\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `el modelo apunta a ${host ?? \"una URL ilegible\"} y no a api.openai.com: un gateway no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tproveedor: \"openai\",\n\t\t\tfamilia: \"openai\",\n\t\t\turlFicheros: `${sinBarraFinal(modelo.baseUrl ?? \"\")}/files`,\n\t\t\tcabeceras: {},\n\t\t};\n\t}\n\n\t// `openai-completions` acepta `file_id` solo en bloques `file` (PDF), no en\n\t// `image_url`; como lo que hoy adjunta Ada son imágenes, aquí no hay nada\n\t// que ganar y sí un 400 que ganar. Se dice, no se intenta.\n\tif (api === \"openai-completions\") {\n\t\treturn {\n\t\t\tmotivo: `la API \"openai-completions\" no acepta file_id en bloques de imagen; solo URL o base64 en línea`,\n\t\t};\n\t}\n\n\treturn { motivo: `la API \"${api}\" del proveedor \"${proveedor}\" no tiene API de ficheros conocida` };\n}\n\n// ─── Transporte ─────────────────────────────────────────────────────────────\n\nexport interface Credencial {\n\tapiKey?: string;\n\tcabeceras?: Record<string, string>;\n}\n\nexport type Fetch = typeof globalThis.fetch;\n\nexport interface RespuestaDeSubida {\n\tok: true;\n\tid: string;\n}\n\nexport interface FalloDeSubida {\n\tok: false;\n\t/**\n\t * `rechazado` = el proveedor contestó y dijo que no (4xx). `transporte` = no\n\t * se pudo ni preguntar. La diferencia importa: un rechazo se aprende, un\n\t * fallo de transporte se reintenta en el turno siguiente.\n\t */\n\tclase: \"rechazado\" | \"transporte\";\n\tmotivo: string;\n\testado?: number;\n}\n\nexport type ResultadoDeSubida = RespuestaDeSubida | FalloDeSubida;\n\n/**\n * Un token de OAuth de Anthropic (Claude Pro/Max: empieza por `sk-ant-oat`) NO\n * vale como `x-api-key`. `packages/ai` lo sabe y construye el cliente con\n * `authToken`, que es `Authorization: Bearer`\n * (anthropic-messages.ts:873 y :923). El mismo criterio, `includes`, y no un\n * `startsWith`: el token viaja a veces con prefijo de entorno.\n */\nexport function esTokenOAuthAnthropic(apiKey: string): boolean {\n\treturn apiKey.includes(\"sk-ant-oat\");\n}\n\nfunction cabecerasDeAuth(capacidad: CapacidadDeBlobs, credencial: Credencial): Record<string, string> {\n\t// Las de `capacidad` van LAS ÚLTIMAS y ganan: son obligatorias (el beta de la\n\t// Files API). Si una cabecera de proveedor traía su propio `anthropic-beta`,\n\t// el orden de antes borraba el beta de ficheros y /v1/files contestaba 404 —\n\t// un \"no puedo\" que se leía como \"el proveedor no quiere el fichero\".\n\tconst cabeceras: Record<string, string> = { ...(credencial.cabeceras ?? {}), ...capacidad.cabeceras };\n\tif (credencial.apiKey) {\n\t\t// Con OAuth, mandar la clave en `x-api-key` da 401 en TODAS las subidas: el\n\t\t// módulo entero quedaba muerto para quien entra con Claude Pro/Max, que es\n\t\t// la mayoría, y el motivo que salía en `/blobs` era \"401 al subir\", que\n\t\t// echa la culpa al proveedor en vez de a la cabecera.\n\t\tif (capacidad.familia === \"anthropic\" && !esTokenOAuthAnthropic(credencial.apiKey)) {\n\t\t\tcabeceras[\"x-api-key\"] = credencial.apiKey;\n\t\t} else {\n\t\t\tcabeceras.authorization = `Bearer ${credencial.apiKey}`;\n\t\t}\n\t}\n\treturn cabeceras;\n}\n\nasync function textoBreve(respuesta: Response): Promise<string> {\n\ttry {\n\t\treturn (await respuesta.text()).slice(0, 300);\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nexport async function subirFichero(\n\tcapacidad: CapacidadDeBlobs,\n\tcredencial: Credencial,\n\tfichero: { datos: Uint8Array; mime: string; nombre: string },\n\tfetchImpl: Fetch = globalThis.fetch,\n\tsignal?: AbortSignal,\n): Promise<ResultadoDeSubida> {\n\tconst formulario = new FormData();\n\t// `new Blob([...])` y no `File`: el segundo no existe en todos los runtimes\n\t// donde se ejecutan los tests, y el nombre viaja igual en el `append`.\n\tformulario.append(\"file\", new Blob([fichero.datos], { type: fichero.mime }), fichero.nombre);\n\t// OpenAI exige `purpose`; Anthropic rechaza campos extra, así que va solo donde toca.\n\tif (capacidad.familia === \"openai\") formulario.append(\"purpose\", \"vision\");\n\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(capacidad.urlFicheros, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: cabecerasDeAuth(capacidad, credencial),\n\t\t\tbody: formulario,\n\t\t\tsignal,\n\t\t});\n\t} catch (error) {\n\t\treturn { ok: false, clase: \"transporte\", motivo: error instanceof Error ? error.message : String(error) };\n\t}\n\n\tif (!respuesta.ok) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tclase: respuesta.status >= 400 && respuesta.status < 500 ? \"rechazado\" : \"transporte\",\n\t\t\testado: respuesta.status,\n\t\t\tmotivo: `${respuesta.status} al subir: ${await textoBreve(respuesta)}`,\n\t\t};\n\t}\n\n\tlet cuerpo: unknown;\n\ttry {\n\t\tcuerpo = await respuesta.json();\n\t} catch (error) {\n\t\treturn { ok: false, clase: \"transporte\", motivo: `respuesta ilegible: ${String(error)}` };\n\t}\n\tconst id = (cuerpo as { id?: unknown })?.id;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t// 200 sin id es un fallo, no un éxito vacío. Devolverlo como ok dejaría\n\t\t// un `file_id: undefined` viajando en el payload.\n\t\treturn { ok: false, clase: \"rechazado\", motivo: \"el proveedor respondió 200 sin id de fichero\" };\n\t}\n\treturn { ok: true, id };\n}\n\nexport type EstadoDeFichero = \"vivo\" | \"muerto\" | \"desconocido\";\n\n/**\n * ¿Sigue existiendo el id? Se pregunta UNA vez por proceso y solo para ids que\n * vienen de una sesión anterior. Preguntarlo en cada turno costaría una\n * petición por adjunto y por turno, que es justo lo que este módulo evita.\n *\n * `desconocido` no es `muerto`: si la red falla, no sabemos si el id sirve, y\n * tratarlo como muerto resubiría el fichero cada vez que hubiera un corte.\n */\nexport async function verificarFichero(\n\tcapacidad: CapacidadDeBlobs,\n\tcredencial: Credencial,\n\tid: string,\n\tfetchImpl: Fetch = globalThis.fetch,\n\tsignal?: AbortSignal,\n): Promise<EstadoDeFichero> {\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(`${capacidad.urlFicheros}/${encodeURIComponent(id)}`, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: cabecerasDeAuth(capacidad, credencial),\n\t\t\tsignal,\n\t\t});\n\t} catch {\n\t\treturn \"desconocido\";\n\t}\n\tif (respuesta.ok) return \"vivo\";\n\tif (respuesta.status === 404 || respuesta.status === 410) return \"muerto\";\n\t// 401/403 no dicen nada del fichero, dicen algo de la credencial.\n\treturn \"desconocido\";\n}\n\n// Aquí vivía `borrarFichero`. No lo llamaba nadie: `/blobs purgar` solo tira la\n// entrada de la caché local, y el proveedor caduca sus ficheros solo. Código\n// escrito, probado y desenchufado; se borra en vez de dejarlo esperando a un\n// llamador que no existe.\n"]}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Qué proveedores tienen API de ficheros, y cómo se habla con ella.
3
+ *
4
+ * La pieza importante de este fichero no es la subida: es `capacidadDeBlobs`,
5
+ * que NUNCA devuelve un "no" mudo. Un proveedor sin API de ficheros y un
6
+ * proveedor con la API pero sin credencial son dos cosas distintas, y las dos
7
+ * son distintas de "no hay ningún adjunto en esta petición". Confundirlas es el
8
+ * defecto que más veces nos ha mordido: un "no puedo" leído como "no hay".
9
+ *
10
+ * Por qué se exige la URL oficial: un modelo `anthropic-messages` servido por
11
+ * un gateway (OpenRouter, un proxy propio, Bedrock) habla el mismo dialecto de
12
+ * mensajes pero NO expone `/v1/files`. Subir ahí devuelve 404 y, peor, un id
13
+ * inventado por el proxy que luego el modelo no reconoce. Si no es la URL
14
+ * oficial, decimos por qué no y mandamos el contenido en línea como siempre.
15
+ */
16
+ export function puedeSubir(resultado) {
17
+ return "urlFicheros" in resultado;
18
+ }
19
+ /** Beta obligatorio de la Files API de Anthropic. Sin él, /v1/files da 404. */
20
+ export const BETA_FICHEROS_ANTHROPIC = "files-api-2025-04-14";
21
+ function anfitrion(url) {
22
+ if (!url)
23
+ return undefined;
24
+ try {
25
+ return new URL(url).host.toLowerCase();
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ function sinBarraFinal(url) {
32
+ return url.replace(/\/+$/, "");
33
+ }
34
+ export function capacidadDeBlobs(modelo) {
35
+ if (!modelo)
36
+ return { motivo: "todavía no hay modelo seleccionado en la sesión" };
37
+ const proveedor = modelo.provider ?? "?";
38
+ const api = modelo.api ?? "?";
39
+ const host = anfitrion(modelo.baseUrl);
40
+ if (api === "anthropic-messages") {
41
+ if (proveedor !== "anthropic") {
42
+ return {
43
+ motivo: `"${proveedor}" habla el dialecto de mensajes de Anthropic pero no es Anthropic: no expone /v1/files`,
44
+ };
45
+ }
46
+ if (host !== "api.anthropic.com") {
47
+ return {
48
+ motivo: `el modelo apunta a ${host ?? "una URL ilegible"} y no a api.anthropic.com: un gateway no expone /v1/files`,
49
+ };
50
+ }
51
+ return {
52
+ proveedor: "anthropic",
53
+ familia: "anthropic",
54
+ urlFicheros: `${sinBarraFinal(modelo.baseUrl ?? "")}/v1/files`,
55
+ cabeceras: { "anthropic-beta": BETA_FICHEROS_ANTHROPIC, "anthropic-version": "2023-06-01" },
56
+ };
57
+ }
58
+ if (api === "openai-responses") {
59
+ if (proveedor !== "openai") {
60
+ return { motivo: `"${proveedor}" usa la API de respuestas de OpenAI pero no expone /v1/files propio` };
61
+ }
62
+ if (host !== "api.openai.com") {
63
+ return {
64
+ motivo: `el modelo apunta a ${host ?? "una URL ilegible"} y no a api.openai.com: un gateway no expone /v1/files`,
65
+ };
66
+ }
67
+ return {
68
+ proveedor: "openai",
69
+ familia: "openai",
70
+ urlFicheros: `${sinBarraFinal(modelo.baseUrl ?? "")}/files`,
71
+ cabeceras: {},
72
+ };
73
+ }
74
+ // `openai-completions` acepta `file_id` solo en bloques `file` (PDF), no en
75
+ // `image_url`; como lo que hoy adjunta Ada son imágenes, aquí no hay nada
76
+ // que ganar y sí un 400 que ganar. Se dice, no se intenta.
77
+ if (api === "openai-completions") {
78
+ return {
79
+ motivo: `la API "openai-completions" no acepta file_id en bloques de imagen; solo URL o base64 en línea`,
80
+ };
81
+ }
82
+ return { motivo: `la API "${api}" del proveedor "${proveedor}" no tiene API de ficheros conocida` };
83
+ }
84
+ /**
85
+ * Un token de OAuth de Anthropic (Claude Pro/Max: empieza por `sk-ant-oat`) NO
86
+ * vale como `x-api-key`. `packages/ai` lo sabe y construye el cliente con
87
+ * `authToken`, que es `Authorization: Bearer`
88
+ * (anthropic-messages.ts:873 y :923). El mismo criterio, `includes`, y no un
89
+ * `startsWith`: el token viaja a veces con prefijo de entorno.
90
+ */
91
+ export function esTokenOAuthAnthropic(apiKey) {
92
+ return apiKey.includes("sk-ant-oat");
93
+ }
94
+ function cabecerasDeAuth(capacidad, credencial) {
95
+ // Las de `capacidad` van LAS ÚLTIMAS y ganan: son obligatorias (el beta de la
96
+ // Files API). Si una cabecera de proveedor traía su propio `anthropic-beta`,
97
+ // el orden de antes borraba el beta de ficheros y /v1/files contestaba 404 —
98
+ // un "no puedo" que se leía como "el proveedor no quiere el fichero".
99
+ const cabeceras = { ...(credencial.cabeceras ?? {}), ...capacidad.cabeceras };
100
+ if (credencial.apiKey) {
101
+ // Con OAuth, mandar la clave en `x-api-key` da 401 en TODAS las subidas: el
102
+ // módulo entero quedaba muerto para quien entra con Claude Pro/Max, que es
103
+ // la mayoría, y el motivo que salía en `/blobs` era "401 al subir", que
104
+ // echa la culpa al proveedor en vez de a la cabecera.
105
+ if (capacidad.familia === "anthropic" && !esTokenOAuthAnthropic(credencial.apiKey)) {
106
+ cabeceras["x-api-key"] = credencial.apiKey;
107
+ }
108
+ else {
109
+ cabeceras.authorization = `Bearer ${credencial.apiKey}`;
110
+ }
111
+ }
112
+ return cabeceras;
113
+ }
114
+ async function textoBreve(respuesta) {
115
+ try {
116
+ return (await respuesta.text()).slice(0, 300);
117
+ }
118
+ catch {
119
+ return "";
120
+ }
121
+ }
122
+ export async function subirFichero(capacidad, credencial, fichero, fetchImpl = globalThis.fetch, signal) {
123
+ const formulario = new FormData();
124
+ // `new Blob([...])` y no `File`: el segundo no existe en todos los runtimes
125
+ // donde se ejecutan los tests, y el nombre viaja igual en el `append`.
126
+ formulario.append("file", new Blob([fichero.datos], { type: fichero.mime }), fichero.nombre);
127
+ // OpenAI exige `purpose`; Anthropic rechaza campos extra, así que va solo donde toca.
128
+ if (capacidad.familia === "openai")
129
+ formulario.append("purpose", "vision");
130
+ let respuesta;
131
+ try {
132
+ respuesta = await fetchImpl(capacidad.urlFicheros, {
133
+ method: "POST",
134
+ headers: cabecerasDeAuth(capacidad, credencial),
135
+ body: formulario,
136
+ signal,
137
+ });
138
+ }
139
+ catch (error) {
140
+ return { ok: false, clase: "transporte", motivo: error instanceof Error ? error.message : String(error) };
141
+ }
142
+ if (!respuesta.ok) {
143
+ return {
144
+ ok: false,
145
+ clase: respuesta.status >= 400 && respuesta.status < 500 ? "rechazado" : "transporte",
146
+ estado: respuesta.status,
147
+ motivo: `${respuesta.status} al subir: ${await textoBreve(respuesta)}`,
148
+ };
149
+ }
150
+ let cuerpo;
151
+ try {
152
+ cuerpo = await respuesta.json();
153
+ }
154
+ catch (error) {
155
+ return { ok: false, clase: "transporte", motivo: `respuesta ilegible: ${String(error)}` };
156
+ }
157
+ const id = cuerpo?.id;
158
+ if (typeof id !== "string" || id.length === 0) {
159
+ // 200 sin id es un fallo, no un éxito vacío. Devolverlo como ok dejaría
160
+ // un `file_id: undefined` viajando en el payload.
161
+ return { ok: false, clase: "rechazado", motivo: "el proveedor respondió 200 sin id de fichero" };
162
+ }
163
+ return { ok: true, id };
164
+ }
165
+ /**
166
+ * ¿Sigue existiendo el id? Se pregunta UNA vez por proceso y solo para ids que
167
+ * vienen de una sesión anterior. Preguntarlo en cada turno costaría una
168
+ * petición por adjunto y por turno, que es justo lo que este módulo evita.
169
+ *
170
+ * `desconocido` no es `muerto`: si la red falla, no sabemos si el id sirve, y
171
+ * tratarlo como muerto resubiría el fichero cada vez que hubiera un corte.
172
+ */
173
+ export async function verificarFichero(capacidad, credencial, id, fetchImpl = globalThis.fetch, signal) {
174
+ let respuesta;
175
+ try {
176
+ respuesta = await fetchImpl(`${capacidad.urlFicheros}/${encodeURIComponent(id)}`, {
177
+ method: "GET",
178
+ headers: cabecerasDeAuth(capacidad, credencial),
179
+ signal,
180
+ });
181
+ }
182
+ catch {
183
+ return "desconocido";
184
+ }
185
+ if (respuesta.ok)
186
+ return "vivo";
187
+ if (respuesta.status === 404 || respuesta.status === 410)
188
+ return "muerto";
189
+ // 401/403 no dicen nada del fichero, dicen algo de la credencial.
190
+ return "desconocido";
191
+ }
192
+ // Aquí vivía `borrarFichero`. No lo llamaba nadie: `/blobs purgar` solo tira la
193
+ // entrada de la caché local, y el proveedor caduca sus ficheros solo. Código
194
+ // escrito, probado y desenchufado; se borra en vez de dejarlo esperando a un
195
+ // llamador que no existe.
196
+ //# sourceMappingURL=proveedor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proveedor.js","sourceRoot":"","sources":["../../../src/core/blobs/proveedor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Qué proveedores tienen API de ficheros, y cómo se habla con ella.\n *\n * La pieza importante de este fichero no es la subida: es `capacidadDeBlobs`,\n * que NUNCA devuelve un \"no\" mudo. Un proveedor sin API de ficheros y un\n * proveedor con la API pero sin credencial son dos cosas distintas, y las dos\n * son distintas de \"no hay ningún adjunto en esta petición\". Confundirlas es el\n * defecto que más veces nos ha mordido: un \"no puedo\" leído como \"no hay\".\n *\n * Por qué se exige la URL oficial: un modelo `anthropic-messages` servido por\n * un gateway (OpenRouter, un proxy propio, Bedrock) habla el mismo dialecto de\n * mensajes pero NO expone `/v1/files`. Subir ahí devuelve 404 y, peor, un id\n * inventado por el proxy que luego el modelo no reconoce. Si no es la URL\n * oficial, decimos por qué no y mandamos el contenido en línea como siempre.\n */\n\n/** Lo mínimo que necesitamos del modelo. Evita atarnos al tipo `Model<Api>`. */\nexport interface ModeloParaBlobs {\n\tprovider?: string;\n\tapi?: string;\n\tbaseUrl?: string;\n}\n\nexport interface CapacidadDeBlobs {\n\t/** Clave de caché: los ids no son intercambiables entre proveedores. */\n\tproveedor: string;\n\t/** Familia de API de ficheros; decide multipart, cabeceras y forma del ref. */\n\tfamilia: \"anthropic\" | \"openai\";\n\t/** URL absoluta de la colección de ficheros. */\n\turlFicheros: string;\n\t/** Cabeceras extra obligatorias (el beta de la Files API de Anthropic). */\n\tcabeceras: Record<string, string>;\n}\n\nexport interface SinCapacidad {\n\t/** Por qué NO se puede subir. Nunca vacío. */\n\tmotivo: string;\n}\n\nexport type ResultadoDeCapacidad = CapacidadDeBlobs | SinCapacidad;\n\nexport function puedeSubir(resultado: ResultadoDeCapacidad): resultado is CapacidadDeBlobs {\n\treturn \"urlFicheros\" in resultado;\n}\n\n/** Beta obligatorio de la Files API de Anthropic. Sin él, /v1/files da 404. */\nexport const BETA_FICHEROS_ANTHROPIC = \"files-api-2025-04-14\";\n\nfunction anfitrion(url: string | undefined): string | undefined {\n\tif (!url) return undefined;\n\ttry {\n\t\treturn new URL(url).host.toLowerCase();\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction sinBarraFinal(url: string): string {\n\treturn url.replace(/\\/+$/, \"\");\n}\n\nexport function capacidadDeBlobs(modelo: ModeloParaBlobs | undefined): ResultadoDeCapacidad {\n\tif (!modelo) return { motivo: \"todavía no hay modelo seleccionado en la sesión\" };\n\tconst proveedor = modelo.provider ?? \"?\";\n\tconst api = modelo.api ?? \"?\";\n\tconst host = anfitrion(modelo.baseUrl);\n\n\tif (api === \"anthropic-messages\") {\n\t\tif (proveedor !== \"anthropic\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `\"${proveedor}\" habla el dialecto de mensajes de Anthropic pero no es Anthropic: no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\tif (host !== \"api.anthropic.com\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `el modelo apunta a ${host ?? \"una URL ilegible\"} y no a api.anthropic.com: un gateway no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tproveedor: \"anthropic\",\n\t\t\tfamilia: \"anthropic\",\n\t\t\turlFicheros: `${sinBarraFinal(modelo.baseUrl ?? \"\")}/v1/files`,\n\t\t\tcabeceras: { \"anthropic-beta\": BETA_FICHEROS_ANTHROPIC, \"anthropic-version\": \"2023-06-01\" },\n\t\t};\n\t}\n\n\tif (api === \"openai-responses\") {\n\t\tif (proveedor !== \"openai\") {\n\t\t\treturn { motivo: `\"${proveedor}\" usa la API de respuestas de OpenAI pero no expone /v1/files propio` };\n\t\t}\n\t\tif (host !== \"api.openai.com\") {\n\t\t\treturn {\n\t\t\t\tmotivo: `el modelo apunta a ${host ?? \"una URL ilegible\"} y no a api.openai.com: un gateway no expone /v1/files`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tproveedor: \"openai\",\n\t\t\tfamilia: \"openai\",\n\t\t\turlFicheros: `${sinBarraFinal(modelo.baseUrl ?? \"\")}/files`,\n\t\t\tcabeceras: {},\n\t\t};\n\t}\n\n\t// `openai-completions` acepta `file_id` solo en bloques `file` (PDF), no en\n\t// `image_url`; como lo que hoy adjunta Ada son imágenes, aquí no hay nada\n\t// que ganar y sí un 400 que ganar. Se dice, no se intenta.\n\tif (api === \"openai-completions\") {\n\t\treturn {\n\t\t\tmotivo: `la API \"openai-completions\" no acepta file_id en bloques de imagen; solo URL o base64 en línea`,\n\t\t};\n\t}\n\n\treturn { motivo: `la API \"${api}\" del proveedor \"${proveedor}\" no tiene API de ficheros conocida` };\n}\n\n// ─── Transporte ─────────────────────────────────────────────────────────────\n\nexport interface Credencial {\n\tapiKey?: string;\n\tcabeceras?: Record<string, string>;\n}\n\nexport type Fetch = typeof globalThis.fetch;\n\nexport interface RespuestaDeSubida {\n\tok: true;\n\tid: string;\n}\n\nexport interface FalloDeSubida {\n\tok: false;\n\t/**\n\t * `rechazado` = el proveedor contestó y dijo que no (4xx). `transporte` = no\n\t * se pudo ni preguntar. La diferencia importa: un rechazo se aprende, un\n\t * fallo de transporte se reintenta en el turno siguiente.\n\t */\n\tclase: \"rechazado\" | \"transporte\";\n\tmotivo: string;\n\testado?: number;\n}\n\nexport type ResultadoDeSubida = RespuestaDeSubida | FalloDeSubida;\n\n/**\n * Un token de OAuth de Anthropic (Claude Pro/Max: empieza por `sk-ant-oat`) NO\n * vale como `x-api-key`. `packages/ai` lo sabe y construye el cliente con\n * `authToken`, que es `Authorization: Bearer`\n * (anthropic-messages.ts:873 y :923). El mismo criterio, `includes`, y no un\n * `startsWith`: el token viaja a veces con prefijo de entorno.\n */\nexport function esTokenOAuthAnthropic(apiKey: string): boolean {\n\treturn apiKey.includes(\"sk-ant-oat\");\n}\n\nfunction cabecerasDeAuth(capacidad: CapacidadDeBlobs, credencial: Credencial): Record<string, string> {\n\t// Las de `capacidad` van LAS ÚLTIMAS y ganan: son obligatorias (el beta de la\n\t// Files API). Si una cabecera de proveedor traía su propio `anthropic-beta`,\n\t// el orden de antes borraba el beta de ficheros y /v1/files contestaba 404 —\n\t// un \"no puedo\" que se leía como \"el proveedor no quiere el fichero\".\n\tconst cabeceras: Record<string, string> = { ...(credencial.cabeceras ?? {}), ...capacidad.cabeceras };\n\tif (credencial.apiKey) {\n\t\t// Con OAuth, mandar la clave en `x-api-key` da 401 en TODAS las subidas: el\n\t\t// módulo entero quedaba muerto para quien entra con Claude Pro/Max, que es\n\t\t// la mayoría, y el motivo que salía en `/blobs` era \"401 al subir\", que\n\t\t// echa la culpa al proveedor en vez de a la cabecera.\n\t\tif (capacidad.familia === \"anthropic\" && !esTokenOAuthAnthropic(credencial.apiKey)) {\n\t\t\tcabeceras[\"x-api-key\"] = credencial.apiKey;\n\t\t} else {\n\t\t\tcabeceras.authorization = `Bearer ${credencial.apiKey}`;\n\t\t}\n\t}\n\treturn cabeceras;\n}\n\nasync function textoBreve(respuesta: Response): Promise<string> {\n\ttry {\n\t\treturn (await respuesta.text()).slice(0, 300);\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nexport async function subirFichero(\n\tcapacidad: CapacidadDeBlobs,\n\tcredencial: Credencial,\n\tfichero: { datos: Uint8Array; mime: string; nombre: string },\n\tfetchImpl: Fetch = globalThis.fetch,\n\tsignal?: AbortSignal,\n): Promise<ResultadoDeSubida> {\n\tconst formulario = new FormData();\n\t// `new Blob([...])` y no `File`: el segundo no existe en todos los runtimes\n\t// donde se ejecutan los tests, y el nombre viaja igual en el `append`.\n\tformulario.append(\"file\", new Blob([fichero.datos], { type: fichero.mime }), fichero.nombre);\n\t// OpenAI exige `purpose`; Anthropic rechaza campos extra, así que va solo donde toca.\n\tif (capacidad.familia === \"openai\") formulario.append(\"purpose\", \"vision\");\n\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(capacidad.urlFicheros, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: cabecerasDeAuth(capacidad, credencial),\n\t\t\tbody: formulario,\n\t\t\tsignal,\n\t\t});\n\t} catch (error) {\n\t\treturn { ok: false, clase: \"transporte\", motivo: error instanceof Error ? error.message : String(error) };\n\t}\n\n\tif (!respuesta.ok) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tclase: respuesta.status >= 400 && respuesta.status < 500 ? \"rechazado\" : \"transporte\",\n\t\t\testado: respuesta.status,\n\t\t\tmotivo: `${respuesta.status} al subir: ${await textoBreve(respuesta)}`,\n\t\t};\n\t}\n\n\tlet cuerpo: unknown;\n\ttry {\n\t\tcuerpo = await respuesta.json();\n\t} catch (error) {\n\t\treturn { ok: false, clase: \"transporte\", motivo: `respuesta ilegible: ${String(error)}` };\n\t}\n\tconst id = (cuerpo as { id?: unknown })?.id;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t// 200 sin id es un fallo, no un éxito vacío. Devolverlo como ok dejaría\n\t\t// un `file_id: undefined` viajando en el payload.\n\t\treturn { ok: false, clase: \"rechazado\", motivo: \"el proveedor respondió 200 sin id de fichero\" };\n\t}\n\treturn { ok: true, id };\n}\n\nexport type EstadoDeFichero = \"vivo\" | \"muerto\" | \"desconocido\";\n\n/**\n * ¿Sigue existiendo el id? Se pregunta UNA vez por proceso y solo para ids que\n * vienen de una sesión anterior. Preguntarlo en cada turno costaría una\n * petición por adjunto y por turno, que es justo lo que este módulo evita.\n *\n * `desconocido` no es `muerto`: si la red falla, no sabemos si el id sirve, y\n * tratarlo como muerto resubiría el fichero cada vez que hubiera un corte.\n */\nexport async function verificarFichero(\n\tcapacidad: CapacidadDeBlobs,\n\tcredencial: Credencial,\n\tid: string,\n\tfetchImpl: Fetch = globalThis.fetch,\n\tsignal?: AbortSignal,\n): Promise<EstadoDeFichero> {\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(`${capacidad.urlFicheros}/${encodeURIComponent(id)}`, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: cabecerasDeAuth(capacidad, credencial),\n\t\t\tsignal,\n\t\t});\n\t} catch {\n\t\treturn \"desconocido\";\n\t}\n\tif (respuesta.ok) return \"vivo\";\n\tif (respuesta.status === 404 || respuesta.status === 410) return \"muerto\";\n\t// 401/403 no dicen nada del fichero, dicen algo de la credencial.\n\treturn \"desconocido\";\n}\n\n// Aquí vivía `borrarFichero`. No lo llamaba nadie: `/blobs purgar` solo tira la\n// entrada de la caché local, y el proveedor caduca sus ficheros solo. Código\n// escrito, probado y desenchufado; se borra en vez de dejarlo esperando a un\n// llamador que no existe.\n"]}