@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,280 @@
1
+ /**
2
+ * `ada-cli audit` — el libro de sesión desde la línea de comandos.
3
+ *
4
+ * El libro (`core/audit/libro.ts`) registra qué hizo el agente en una cadena de
5
+ * hashes. Sin una superficie que lo lea, es un fichero que nadie mira: quien
6
+ * tiene que responder a una auditoría necesita poder enseñar la verificación,
7
+ * no fiarse de que existe.
8
+ *
9
+ * Tres estados que hay que distinguir y que es fácil confundir en uno:
10
+ * no hay libro · el libro está vacío · el libro está alterado. Un mensaje que
11
+ * sale siempre no distingue una instalación nueva de una manipulada.
12
+ */
13
+ import { writeFile } from "node:fs/promises";
14
+ import { informeParaDpo } from "../core/audit/exportacion.js";
15
+ import { LibroDeSesion } from "../core/audit/libro.js";
16
+ /**
17
+ * Tope de la exportación.
18
+ *
19
+ * Existe porque `leer` necesita uno, no porque queramos recortar. Si se alcanza,
20
+ * el informe lo dice y deja de afirmar ausencias: sobre una lectura truncada,
21
+ * "no hubo transferencias" sería mentira.
22
+ */
23
+ const TOPE_EXPORT = 100_000;
24
+ const AYUDA = `Uso:
25
+ ada-cli audit verify Reverifica la cadena de hashes del libro
26
+ ada-cli audit show [--limit N] Enseña las últimas entradas (por defecto 20)
27
+ ada-cli audit export [--out F] Informe para un DPO en Markdown (por defecto, a la salida estándar)
28
+ ada-cli audit purge --dias N --politica "texto" [--dry-run]
29
+ Purga lo anterior al corte DEJANDO CONSTANCIA (art. 5.1.e RGPD).
30
+ También --antes-de AAAA-MM-DD.
31
+
32
+ El libro registra qué HIZO el agente —tools, comandos, llamadas al modelo,
33
+ ficheros tocados y salidas a la red— en una cadena donde cada entrada lleva
34
+ el hash de la anterior, así que alterar un registro se detecta al reverificar.
35
+
36
+ Guarda la forma, no el contenido: del fichero, su hash antes y después,
37
+ nunca el texto.
38
+
39
+ verify contesta tres estados y no dos: cadena íntegra, cadena alterada y
40
+ FALTA algo que debería estar. Lo último lo sabe por el índice, que guarda un
41
+ enlace duro a cada fichero de sesión, así que borrar sesion/ ya no deja un
42
+ libro valido y vacio.`;
43
+ /** Formatea un suceso en una línea legible. */
44
+ function describir(suceso) {
45
+ switch (suceso.tipo) {
46
+ case "modelo": {
47
+ const coste = typeof suceso.coste === "number" && suceso.coste > 0 ? ` ${suceso.coste.toFixed(4)} $` : "";
48
+ return `modelo ${suceso.proveedor}/${suceso.modelo} ${suceso.entrada}→${suceso.salida} tok${coste} ${suceso.motivoParada ?? ""}`;
49
+ }
50
+ case "comando": {
51
+ const argv = Array.isArray(suceso.argv) ? suceso.argv.join(" ") : "";
52
+ const encierro = suceso.sandbox ? ` [${suceso.sandbox}]` : "";
53
+ // Sin origen se asume "agente": es lo que escribía el bash tool antes
54
+ // de que existiera la terminal del usuario, y no hay que reetiquetar
55
+ // entradas antiguas para que sigan leyéndose bien.
56
+ // Y `extension` es el tercero: código de terceros cargado en el proceso,
57
+ // que no es ni el modelo ni la persona. Sin la ruta no es accionable —
58
+ // un "lo hizo una extensión" sin decir cuál no se puede investigar.
59
+ const origen = suceso.origen === "usuario"
60
+ ? " [usuario]"
61
+ : suceso.origen === "extension"
62
+ ? ` [extension ${suceso.extension ?? "?"}]`
63
+ : "";
64
+ return `comando ${argv.slice(0, 70)} →${suceso.codigo}${encierro}${origen}`;
65
+ }
66
+ case "fichero":
67
+ return `fichero ${suceso.ruta} ${suceso.antes ?? "(nuevo)"}→${suceso.despues ?? "(borrado)"} vía ${suceso.tool}`;
68
+ case "red":
69
+ return `red ${suceso.dominio} ${suceso.permitido ? "permitido" : "DENEGADO"}${suceso.motivo ? ` ${suceso.motivo}` : ""}`;
70
+ default: {
71
+ const decision = suceso.decision ? ` (${suceso.decision})` : "";
72
+ return `tool ${suceso.nombre} ${suceso.ok ? "ok" : "ERROR"}${decision}`;
73
+ }
74
+ }
75
+ }
76
+ function linea(entrada) {
77
+ const hora = entrada.ts.slice(11, 19);
78
+ return `#${String(entrada.seq).padStart(3)} ${hora} ${describir(entrada.suceso)}`;
79
+ }
80
+ /** Devuelve true si consumió los argumentos. */
81
+ export async function runAuditCommand(args, agentDir) {
82
+ if (args[0] !== "audit")
83
+ return false;
84
+ if (args.includes("--help") || args.includes("-h") || args.length === 1) {
85
+ console.log(AYUDA);
86
+ return true;
87
+ }
88
+ const libro = new LibroDeSesion(agentDir, "cli");
89
+ const sub = args[1];
90
+ if (sub === "verify") {
91
+ const veredicto = await libro.verificar();
92
+ // Lo que FALTA va PRIMERO, antes que «vacío» y antes que «íntegra».
93
+ //
94
+ // Es el estado que no existía y por el que se abrió este arreglo: borrado
95
+ // el fichero del libro, esto contestaba «el libro está vacío» y salía con
96
+ // código 0 — indistinguible de una instalación nueva. Un fichero que el
97
+ // índice recuerda y ya no está no es «nada»: es una ausencia, y se cuenta.
98
+ if (veredicto.faltan?.length) {
99
+ const entradas = veredicto.faltan.reduce((n, f) => n + f.entradas, 0);
100
+ console.error(`FALTAN ${veredicto.faltan.length} fichero(s) del libro con ${entradas} entrada(s): alguien los ha borrado de sesion/.`);
101
+ for (const f of veredicto.faltan)
102
+ console.error(` sesion/${f.fichero} ${f.entradas} entrada(s)`);
103
+ // Se dice que se pueden recuperar porque se puede: el índice no es una
104
+ // copia de metadatos, es un enlace duro al mismo fichero.
105
+ console.error("El índice conserva su contenido: ada-cli audit show los sigue enseñando.");
106
+ if (veredicto.motivo)
107
+ console.error(`Y además: ${veredicto.motivo}.`);
108
+ process.exitCode = 1;
109
+ return true;
110
+ }
111
+ // El tercer estado, y va antes que «íntegra» por la misma razón que
112
+ // `faltan`: si sale después, no sale. Ni acusa ni absuelve, porque desde el
113
+ // fichero no se puede hacer ninguna de las dos cosas.
114
+ if (veredicto.reinicios?.length) {
115
+ console.error(`La cadena vuelve a empezar en ${veredicto.reinicios.length} sitio(s) dentro de un mismo fichero:`);
116
+ for (const r of veredicto.reinicios) {
117
+ console.error(` sesion/${r.fichero} tras ${r.entradasAntes} entrada(s), en la del ${r.ts}`);
118
+ }
119
+ console.error("Lo produce un reinicio del proceso, y lo produce igual quien quite entradas\n" +
120
+ "del medio y escriba una cadena nueva: desde el fichero no se distinguen.\n" +
121
+ "Lo verificado sigue verificado; lo que no se puede afirmar es que no falte nada.");
122
+ process.exitCode = 1;
123
+ }
124
+ // Las purgas se dicen SIEMPRE, tanto si la cadena está íntegra como si no.
125
+ // Un libro con menos entradas de las que tuvo y ninguna explicación a la
126
+ // vista es indistinguible de uno al que le han quitado cosas.
127
+ if (veredicto.purgados?.length) {
128
+ const entradas = veredicto.purgados.reduce((n, f) => n + f.entradas, 0);
129
+ console.log(`Purgadas ${entradas} entrada(s) en ${veredicto.purgados.length} fichero(s), con constancia en el libro:`);
130
+ for (const f of veredicto.purgados) {
131
+ console.log(` ${f.fichero} ${f.entradas} entrada(s) política: ${f.politica}`);
132
+ }
133
+ }
134
+ if (veredicto.sinAncla?.length) {
135
+ // Ni bien ni mal: el tercer estado de verdad. Son libros escritos antes
136
+ // de que existiera el índice. Decirlo con la palabra «alterado» habría
137
+ // hecho gritar a toda instalación que se actualice.
138
+ console.log(`Nota: ${veredicto.sinAncla.length} fichero(s) sin ancla en el índice (escritos antes de que existiera). Su desaparición no se podría detectar.`);
139
+ }
140
+ if (veredicto.comprobadas === 0 && veredicto.valido) {
141
+ // Ni roto ni sano: no hay nada. Decirlo así evita el "todo correcto"
142
+ // que tranquiliza sobre un libro que no existe.
143
+ console.log("El libro está vacío: este agente aún no ha registrado nada.");
144
+ return true;
145
+ }
146
+ if (veredicto.valido) {
147
+ console.log(`Cadena íntegra: ${veredicto.comprobadas} entradas verificadas.`);
148
+ return true;
149
+ }
150
+ console.error(`CADENA ALTERADA tras ${veredicto.comprobadas} entradas correctas` +
151
+ (veredicto.alteradaEn ? `, en la del ${veredicto.alteradaEn}` : "") +
152
+ (veredicto.motivo ? `\n motivo: ${veredicto.motivo}` : "") +
153
+ (veredicto.ficheroAlterado ? `\n fichero: sesion/${veredicto.ficheroAlterado}` : "."));
154
+ console.error("Las entradas anteriores a esa siguen siendo fiables; a partir de ahí, no.");
155
+ process.exitCode = 1;
156
+ return true;
157
+ }
158
+ if (sub === "show") {
159
+ const i = args.indexOf("--limit");
160
+ const limite = i >= 0 ? Number(args[i + 1]) : 20;
161
+ if (!Number.isFinite(limite) || limite <= 0) {
162
+ console.error("--limit necesita un número positivo.");
163
+ process.exitCode = 1;
164
+ return true;
165
+ }
166
+ const entradas = await libro.leer(limite);
167
+ if (entradas.length === 0) {
168
+ console.log("El libro está vacío: este agente aún no ha registrado nada.");
169
+ return true;
170
+ }
171
+ for (const entrada of entradas)
172
+ console.log(linea(entrada));
173
+ // La verificación va DESPUÉS de listar: quien mira quiere ver las
174
+ // entradas aunque la cadena esté rota, y saber que lo está.
175
+ const veredicto = await libro.verificar();
176
+ if (!veredicto.valido) {
177
+ const faltan = veredicto.faltan?.length
178
+ ? `; FALTAN ${veredicto.faltan.length} fichero(s) borrados de sesion/, recuperados del índice`
179
+ : "";
180
+ console.error(`\n⚠ El libro NO verifica (${veredicto.comprobadas} entradas correctas${faltan}). Detalle: ada-cli audit verify`);
181
+ process.exitCode = 1;
182
+ }
183
+ return true;
184
+ }
185
+ if (sub === "export") {
186
+ // `leer` da las entradas de la más reciente hacia atrás; el informe las
187
+ // quiere en orden cronológico, que es como se lee un registro.
188
+ const recientesPrimero = await libro.leer(TOPE_EXPORT);
189
+ const entradas = [...recientesPrimero].reverse();
190
+ const veredicto = await libro.verificar();
191
+ const informe = informeParaDpo(entradas, veredicto, recientesPrimero.length >= TOPE_EXPORT);
192
+ const i = args.indexOf("--out");
193
+ const destino = i >= 0 ? args[i + 1] : undefined;
194
+ if (i >= 0 && !destino) {
195
+ console.error("--out necesita una ruta de fichero.");
196
+ process.exitCode = 1;
197
+ return true;
198
+ }
199
+ if (destino) {
200
+ await writeFile(destino, informe, "utf-8");
201
+ console.log(`Informe escrito en ${destino} (${entradas.length} entrada(s)).`);
202
+ }
203
+ else {
204
+ console.log(informe);
205
+ }
206
+ // La cadena rota NO impide exportar —el informe lo dice dentro y es
207
+ // justo lo que hay que poder enseñar—, pero sí sale con código 1: quien
208
+ // automatice la exportación tiene que enterarse sin leer el Markdown.
209
+ if (!veredicto.valido)
210
+ process.exitCode = 1;
211
+ return true;
212
+ }
213
+ if (sub === "purge" || sub === "purgar") {
214
+ // El art. 5.1.e del RGPD obliga a no conservar más de lo necesario, así que
215
+ // un DPO TIENE que poder borrar lo viejo. Hasta ahora el único camino era
216
+ // `rm`, y las dos formas de hacerlo salían mal: borrar `sesion/` hacía que
217
+ // `verify` acusara de manipulación, y borrar también el índice hacía
218
+ // desaparecer la purga sin rastro. Ver `core/audit/retencion.ts`.
219
+ const iDias = args.indexOf("--dias");
220
+ const iAntes = args.indexOf("--antes-de");
221
+ if (iDias < 0 && iAntes < 0) {
222
+ console.error("Falta el corte: --dias N (purga lo anterior a hace N días) o --antes-de AAAA-MM-DD.\n" +
223
+ "No hay valor por defecto a propósito: un borrado que se decide solo no es una política de retención.");
224
+ process.exitCode = 1;
225
+ return true;
226
+ }
227
+ let corte;
228
+ if (iAntes >= 0) {
229
+ corte = new Date(`${args[iAntes + 1]}T00:00:00Z`);
230
+ if (Number.isNaN(corte.getTime())) {
231
+ console.error(`--antes-de necesita una fecha AAAA-MM-DD (recibido: ${args[iAntes + 1] ?? "nada"}).`);
232
+ process.exitCode = 1;
233
+ return true;
234
+ }
235
+ }
236
+ else {
237
+ const dias = Number(args[iDias + 1]);
238
+ if (!Number.isFinite(dias) || dias < 0) {
239
+ console.error(`--dias necesita un número de días (recibido: ${args[iDias + 1] ?? "nada"}).`);
240
+ process.exitCode = 1;
241
+ return true;
242
+ }
243
+ corte = new Date(Date.now() - dias * 86_400_000);
244
+ }
245
+ const iPol = args.indexOf("--politica");
246
+ const politica = iPol >= 0 ? args[iPol + 1] : undefined;
247
+ if (!politica) {
248
+ // La política no es decoración: es lo que convierte el borrado en un
249
+ // hecho justificable delante de un auditor. Sin ella, la lápida diría
250
+ // «se purgó» y no «se purgó porque».
251
+ console.error('Falta --politica "texto": bajo qué regla se purga (p. ej. "retención 90 días, art. 5.1.e RGPD").\n' +
252
+ "Queda escrito en el libro, que es lo que hace la purga defendible.");
253
+ process.exitCode = 1;
254
+ return true;
255
+ }
256
+ const seco = args.includes("--dry-run") || args.includes("--simular");
257
+ const { purgarAntesDe } = await import("../core/audit/retencion.js");
258
+ const r = await purgarAntesDe(libro, agentDir, corte, politica, seco);
259
+ console.log(`${seco ? "Se purgarían" : "Purgados"} ${r.purgados.length} fichero(s) anteriores a ${corte.toISOString().slice(0, 10)}.`);
260
+ for (const l of r.purgados) {
261
+ console.log(` ${l.fichero} ${l.entradas} entrada(s) ${l.desde.slice(0, 10)} → ${l.hasta.slice(0, 10)}`);
262
+ }
263
+ for (const c of r.conservados)
264
+ console.log(` (conservado) ${c.fichero}: ${c.porque}`);
265
+ if (seco) {
266
+ console.log("\nSimulación: no se ha tocado nada. Repite sin --dry-run para purgar.");
267
+ return true;
268
+ }
269
+ if (r.purgados.length > 0) {
270
+ console.log(`\nCada purga ha quedado anotada en el libro bajo la política "${politica}".` +
271
+ "\n`audit verify` las cuenta como huecos EXPLICADOS, no como manipulación.");
272
+ }
273
+ return true;
274
+ }
275
+ console.error(`Subcomando desconocido: ${sub}\n`);
276
+ console.log(AYUDA);
277
+ process.exitCode = 1;
278
+ return true;
279
+ }
280
+ //# sourceMappingURL=audit-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-command.js","sourceRoot":"","sources":["../../src/cli/audit-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ada-cli audit` — el libro de sesión desde la línea de comandos.\n *\n * El libro (`core/audit/libro.ts`) registra qué hizo el agente en una cadena de\n * hashes. Sin una superficie que lo lea, es un fichero que nadie mira: quien\n * tiene que responder a una auditoría necesita poder enseñar la verificación,\n * no fiarse de que existe.\n *\n * Tres estados que hay que distinguir y que es fácil confundir en uno:\n * no hay libro · el libro está vacío · el libro está alterado. Un mensaje que\n * sale siempre no distingue una instalación nueva de una manipulada.\n */\n\nimport { writeFile } from \"node:fs/promises\";\nimport { informeParaDpo } from \"../core/audit/exportacion.ts\";\nimport type { EntradaDelLibro } from \"../core/audit/libro.ts\";\nimport { LibroDeSesion } from \"../core/audit/libro.ts\";\n\n/**\n * Tope de la exportación.\n *\n * Existe porque `leer` necesita uno, no porque queramos recortar. Si se alcanza,\n * el informe lo dice y deja de afirmar ausencias: sobre una lectura truncada,\n * \"no hubo transferencias\" sería mentira.\n */\nconst TOPE_EXPORT = 100_000;\n\nconst AYUDA = `Uso:\n ada-cli audit verify Reverifica la cadena de hashes del libro\n ada-cli audit show [--limit N] Enseña las últimas entradas (por defecto 20)\n ada-cli audit export [--out F] Informe para un DPO en Markdown (por defecto, a la salida estándar)\n ada-cli audit purge --dias N --politica \"texto\" [--dry-run]\n Purga lo anterior al corte DEJANDO CONSTANCIA (art. 5.1.e RGPD).\n También --antes-de AAAA-MM-DD.\n\nEl libro registra qué HIZO el agente —tools, comandos, llamadas al modelo,\nficheros tocados y salidas a la red— en una cadena donde cada entrada lleva\nel hash de la anterior, así que alterar un registro se detecta al reverificar.\n\nGuarda la forma, no el contenido: del fichero, su hash antes y después,\nnunca el texto.\n\nverify contesta tres estados y no dos: cadena íntegra, cadena alterada y\nFALTA algo que debería estar. Lo último lo sabe por el índice, que guarda un\nenlace duro a cada fichero de sesión, así que borrar sesion/ ya no deja un\nlibro valido y vacio.`;\n\n/** Formatea un suceso en una línea legible. */\nfunction describir(suceso: Record<string, unknown>): string {\n\tswitch (suceso.tipo) {\n\t\tcase \"modelo\": {\n\t\t\tconst coste = typeof suceso.coste === \"number\" && suceso.coste > 0 ? ` ${suceso.coste.toFixed(4)} $` : \"\";\n\t\t\treturn `modelo ${suceso.proveedor}/${suceso.modelo} ${suceso.entrada}→${suceso.salida} tok${coste} ${suceso.motivoParada ?? \"\"}`;\n\t\t}\n\t\tcase \"comando\": {\n\t\t\tconst argv = Array.isArray(suceso.argv) ? suceso.argv.join(\" \") : \"\";\n\t\t\tconst encierro = suceso.sandbox ? ` [${suceso.sandbox}]` : \"\";\n\t\t\t// Sin origen se asume \"agente\": es lo que escribía el bash tool antes\n\t\t\t// de que existiera la terminal del usuario, y no hay que reetiquetar\n\t\t\t// entradas antiguas para que sigan leyéndose bien.\n\t\t\t// Y `extension` es el tercero: código de terceros cargado en el proceso,\n\t\t\t// que no es ni el modelo ni la persona. Sin la ruta no es accionable —\n\t\t\t// un \"lo hizo una extensión\" sin decir cuál no se puede investigar.\n\t\t\tconst origen =\n\t\t\t\tsuceso.origen === \"usuario\"\n\t\t\t\t\t? \" [usuario]\"\n\t\t\t\t\t: suceso.origen === \"extension\"\n\t\t\t\t\t\t? ` [extension ${suceso.extension ?? \"?\"}]`\n\t\t\t\t\t\t: \"\";\n\t\t\treturn `comando ${argv.slice(0, 70)} →${suceso.codigo}${encierro}${origen}`;\n\t\t}\n\t\tcase \"fichero\":\n\t\t\treturn `fichero ${suceso.ruta} ${suceso.antes ?? \"(nuevo)\"}→${suceso.despues ?? \"(borrado)\"} vía ${suceso.tool}`;\n\t\tcase \"red\":\n\t\t\treturn `red ${suceso.dominio} ${suceso.permitido ? \"permitido\" : \"DENEGADO\"}${suceso.motivo ? ` ${suceso.motivo}` : \"\"}`;\n\t\tdefault: {\n\t\t\tconst decision = suceso.decision ? ` (${suceso.decision})` : \"\";\n\t\t\treturn `tool ${suceso.nombre} ${suceso.ok ? \"ok\" : \"ERROR\"}${decision}`;\n\t\t}\n\t}\n}\n\nfunction linea(entrada: EntradaDelLibro): string {\n\tconst hora = entrada.ts.slice(11, 19);\n\treturn `#${String(entrada.seq).padStart(3)} ${hora} ${describir(entrada.suceso)}`;\n}\n\n/** Devuelve true si consumió los argumentos. */\nexport async function runAuditCommand(args: string[], agentDir: string): Promise<boolean> {\n\tif (args[0] !== \"audit\") return false;\n\n\tif (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 1) {\n\t\tconsole.log(AYUDA);\n\t\treturn true;\n\t}\n\n\tconst libro = new LibroDeSesion(agentDir, \"cli\");\n\tconst sub = args[1];\n\n\tif (sub === \"verify\") {\n\t\tconst veredicto = await libro.verificar();\n\n\t\t// Lo que FALTA va PRIMERO, antes que «vacío» y antes que «íntegra».\n\t\t//\n\t\t// Es el estado que no existía y por el que se abrió este arreglo: borrado\n\t\t// el fichero del libro, esto contestaba «el libro está vacío» y salía con\n\t\t// código 0 — indistinguible de una instalación nueva. Un fichero que el\n\t\t// índice recuerda y ya no está no es «nada»: es una ausencia, y se cuenta.\n\t\tif (veredicto.faltan?.length) {\n\t\t\tconst entradas = veredicto.faltan.reduce((n, f) => n + f.entradas, 0);\n\t\t\tconsole.error(\n\t\t\t\t`FALTAN ${veredicto.faltan.length} fichero(s) del libro con ${entradas} entrada(s): alguien los ha borrado de sesion/.`,\n\t\t\t);\n\t\t\tfor (const f of veredicto.faltan) console.error(` sesion/${f.fichero} ${f.entradas} entrada(s)`);\n\t\t\t// Se dice que se pueden recuperar porque se puede: el índice no es una\n\t\t\t// copia de metadatos, es un enlace duro al mismo fichero.\n\t\t\tconsole.error(\"El índice conserva su contenido: ada-cli audit show los sigue enseñando.\");\n\t\t\tif (veredicto.motivo) console.error(`Y además: ${veredicto.motivo}.`);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\n\t\t// El tercer estado, y va antes que «íntegra» por la misma razón que\n\t\t// `faltan`: si sale después, no sale. Ni acusa ni absuelve, porque desde el\n\t\t// fichero no se puede hacer ninguna de las dos cosas.\n\t\tif (veredicto.reinicios?.length) {\n\t\t\tconsole.error(\n\t\t\t\t`La cadena vuelve a empezar en ${veredicto.reinicios.length} sitio(s) dentro de un mismo fichero:`,\n\t\t\t);\n\t\t\tfor (const r of veredicto.reinicios) {\n\t\t\t\tconsole.error(` sesion/${r.fichero} tras ${r.entradasAntes} entrada(s), en la del ${r.ts}`);\n\t\t\t}\n\t\t\tconsole.error(\n\t\t\t\t\"Lo produce un reinicio del proceso, y lo produce igual quien quite entradas\\n\" +\n\t\t\t\t\t\"del medio y escriba una cadena nueva: desde el fichero no se distinguen.\\n\" +\n\t\t\t\t\t\"Lo verificado sigue verificado; lo que no se puede afirmar es que no falte nada.\",\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\n\t\t// Las purgas se dicen SIEMPRE, tanto si la cadena está íntegra como si no.\n\t\t// Un libro con menos entradas de las que tuvo y ninguna explicación a la\n\t\t// vista es indistinguible de uno al que le han quitado cosas.\n\t\tif (veredicto.purgados?.length) {\n\t\t\tconst entradas = veredicto.purgados.reduce((n, f) => n + f.entradas, 0);\n\t\t\tconsole.log(\n\t\t\t\t`Purgadas ${entradas} entrada(s) en ${veredicto.purgados.length} fichero(s), con constancia en el libro:`,\n\t\t\t);\n\t\t\tfor (const f of veredicto.purgados) {\n\t\t\t\tconsole.log(` ${f.fichero} ${f.entradas} entrada(s) política: ${f.politica}`);\n\t\t\t}\n\t\t}\n\n\t\tif (veredicto.sinAncla?.length) {\n\t\t\t// Ni bien ni mal: el tercer estado de verdad. Son libros escritos antes\n\t\t\t// de que existiera el índice. Decirlo con la palabra «alterado» habría\n\t\t\t// hecho gritar a toda instalación que se actualice.\n\t\t\tconsole.log(\n\t\t\t\t`Nota: ${veredicto.sinAncla.length} fichero(s) sin ancla en el índice (escritos antes de que existiera). Su desaparición no se podría detectar.`,\n\t\t\t);\n\t\t}\n\n\t\tif (veredicto.comprobadas === 0 && veredicto.valido) {\n\t\t\t// Ni roto ni sano: no hay nada. Decirlo así evita el \"todo correcto\"\n\t\t\t// que tranquiliza sobre un libro que no existe.\n\t\t\tconsole.log(\"El libro está vacío: este agente aún no ha registrado nada.\");\n\t\t\treturn true;\n\t\t}\n\t\tif (veredicto.valido) {\n\t\t\tconsole.log(`Cadena íntegra: ${veredicto.comprobadas} entradas verificadas.`);\n\t\t\treturn true;\n\t\t}\n\t\tconsole.error(\n\t\t\t`CADENA ALTERADA tras ${veredicto.comprobadas} entradas correctas` +\n\t\t\t\t(veredicto.alteradaEn ? `, en la del ${veredicto.alteradaEn}` : \"\") +\n\t\t\t\t(veredicto.motivo ? `\\n motivo: ${veredicto.motivo}` : \"\") +\n\t\t\t\t(veredicto.ficheroAlterado ? `\\n fichero: sesion/${veredicto.ficheroAlterado}` : \".\"),\n\t\t);\n\t\tconsole.error(\"Las entradas anteriores a esa siguen siendo fiables; a partir de ahí, no.\");\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tif (sub === \"show\") {\n\t\tconst i = args.indexOf(\"--limit\");\n\t\tconst limite = i >= 0 ? Number(args[i + 1]) : 20;\n\t\tif (!Number.isFinite(limite) || limite <= 0) {\n\t\t\tconsole.error(\"--limit necesita un número positivo.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst entradas = await libro.leer(limite);\n\t\tif (entradas.length === 0) {\n\t\t\tconsole.log(\"El libro está vacío: este agente aún no ha registrado nada.\");\n\t\t\treturn true;\n\t\t}\n\t\tfor (const entrada of entradas) console.log(linea(entrada));\n\t\t// La verificación va DESPUÉS de listar: quien mira quiere ver las\n\t\t// entradas aunque la cadena esté rota, y saber que lo está.\n\t\tconst veredicto = await libro.verificar();\n\t\tif (!veredicto.valido) {\n\t\t\tconst faltan = veredicto.faltan?.length\n\t\t\t\t? `; FALTAN ${veredicto.faltan.length} fichero(s) borrados de sesion/, recuperados del índice`\n\t\t\t\t: \"\";\n\t\t\tconsole.error(\n\t\t\t\t`\\n⚠ El libro NO verifica (${veredicto.comprobadas} entradas correctas${faltan}). Detalle: ada-cli audit verify`,\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (sub === \"export\") {\n\t\t// `leer` da las entradas de la más reciente hacia atrás; el informe las\n\t\t// quiere en orden cronológico, que es como se lee un registro.\n\t\tconst recientesPrimero = await libro.leer(TOPE_EXPORT);\n\t\tconst entradas = [...recientesPrimero].reverse();\n\t\tconst veredicto = await libro.verificar();\n\t\tconst informe = informeParaDpo(entradas, veredicto, recientesPrimero.length >= TOPE_EXPORT);\n\n\t\tconst i = args.indexOf(\"--out\");\n\t\tconst destino = i >= 0 ? args[i + 1] : undefined;\n\t\tif (i >= 0 && !destino) {\n\t\t\tconsole.error(\"--out necesita una ruta de fichero.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tif (destino) {\n\t\t\tawait writeFile(destino, informe, \"utf-8\");\n\t\t\tconsole.log(`Informe escrito en ${destino} (${entradas.length} entrada(s)).`);\n\t\t} else {\n\t\t\tconsole.log(informe);\n\t\t}\n\t\t// La cadena rota NO impide exportar —el informe lo dice dentro y es\n\t\t// justo lo que hay que poder enseñar—, pero sí sale con código 1: quien\n\t\t// automatice la exportación tiene que enterarse sin leer el Markdown.\n\t\tif (!veredicto.valido) process.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tif (sub === \"purge\" || sub === \"purgar\") {\n\t\t// El art. 5.1.e del RGPD obliga a no conservar más de lo necesario, así que\n\t\t// un DPO TIENE que poder borrar lo viejo. Hasta ahora el único camino era\n\t\t// `rm`, y las dos formas de hacerlo salían mal: borrar `sesion/` hacía que\n\t\t// `verify` acusara de manipulación, y borrar también el índice hacía\n\t\t// desaparecer la purga sin rastro. Ver `core/audit/retencion.ts`.\n\t\tconst iDias = args.indexOf(\"--dias\");\n\t\tconst iAntes = args.indexOf(\"--antes-de\");\n\t\tif (iDias < 0 && iAntes < 0) {\n\t\t\tconsole.error(\n\t\t\t\t\"Falta el corte: --dias N (purga lo anterior a hace N días) o --antes-de AAAA-MM-DD.\\n\" +\n\t\t\t\t\t\"No hay valor por defecto a propósito: un borrado que se decide solo no es una política de retención.\",\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tlet corte: Date;\n\t\tif (iAntes >= 0) {\n\t\t\tcorte = new Date(`${args[iAntes + 1]}T00:00:00Z`);\n\t\t\tif (Number.isNaN(corte.getTime())) {\n\t\t\t\tconsole.error(`--antes-de necesita una fecha AAAA-MM-DD (recibido: ${args[iAntes + 1] ?? \"nada\"}).`);\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tconst dias = Number(args[iDias + 1]);\n\t\t\tif (!Number.isFinite(dias) || dias < 0) {\n\t\t\t\tconsole.error(`--dias necesita un número de días (recibido: ${args[iDias + 1] ?? \"nada\"}).`);\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcorte = new Date(Date.now() - dias * 86_400_000);\n\t\t}\n\n\t\tconst iPol = args.indexOf(\"--politica\");\n\t\tconst politica = iPol >= 0 ? args[iPol + 1] : undefined;\n\t\tif (!politica) {\n\t\t\t// La política no es decoración: es lo que convierte el borrado en un\n\t\t\t// hecho justificable delante de un auditor. Sin ella, la lápida diría\n\t\t\t// «se purgó» y no «se purgó porque».\n\t\t\tconsole.error(\n\t\t\t\t'Falta --politica \"texto\": bajo qué regla se purga (p. ej. \"retención 90 días, art. 5.1.e RGPD\").\\n' +\n\t\t\t\t\t\"Queda escrito en el libro, que es lo que hace la purga defendible.\",\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\n\t\tconst seco = args.includes(\"--dry-run\") || args.includes(\"--simular\");\n\t\tconst { purgarAntesDe } = await import(\"../core/audit/retencion.ts\");\n\t\tconst r = await purgarAntesDe(libro, agentDir, corte, politica, seco);\n\t\tconsole.log(\n\t\t\t`${seco ? \"Se purgarían\" : \"Purgados\"} ${r.purgados.length} fichero(s) anteriores a ${corte.toISOString().slice(0, 10)}.`,\n\t\t);\n\t\tfor (const l of r.purgados) {\n\t\t\tconsole.log(` ${l.fichero} ${l.entradas} entrada(s) ${l.desde.slice(0, 10)} → ${l.hasta.slice(0, 10)}`);\n\t\t}\n\t\tfor (const c of r.conservados) console.log(` (conservado) ${c.fichero}: ${c.porque}`);\n\t\tif (seco) {\n\t\t\tconsole.log(\"\\nSimulación: no se ha tocado nada. Repite sin --dry-run para purgar.\");\n\t\t\treturn true;\n\t\t}\n\t\tif (r.purgados.length > 0) {\n\t\t\tconsole.log(\n\t\t\t\t`\\nCada purga ha quedado anotada en el libro bajo la política \"${politica}\".` +\n\t\t\t\t\t\"\\n`audit verify` las cuenta como huecos EXPLICADOS, no como manipulación.\",\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\tconsole.error(`Subcomando desconocido: ${sub}\\n`);\n\tconsole.log(AYUDA);\n\tprocess.exitCode = 1;\n\treturn true;\n}\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `ada-cli banco` — el banco de fiabilidad de edición.
3
+ *
4
+ * Sin esto no había forma de MEDIR si tocar el editor mejora o empeora la
5
+ * precisión del modelo aplicando parches; solo opiniones. Tres subcomandos:
6
+ *
7
+ * generar produce casos deterministas desde nuestro propio código fuente,
8
+ * validando cada uno resolviéndolo antes de admitirlo.
9
+ * run los ejecuta contra un modelo de verdad — CUESTA DINERO, así que
10
+ * exige `--si` o confirmación interactiva.
11
+ * comparar enseña si una ejecución mejoró o empeoró frente a otra.
12
+ */
13
+ /** Devuelve true si consumió los argumentos. */
14
+ export declare function runBancoCommand(args: string[]): Promise<boolean>;
15
+ //# sourceMappingURL=banco-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banco-command.d.ts","sourceRoot":"","sources":["../../src/cli/banco-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqMH,iDAAgD;AAChD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BtE","sourcesContent":["/**\n * `ada-cli banco` — el banco de fiabilidad de edición.\n *\n * Sin esto no había forma de MEDIR si tocar el editor mejora o empeora la\n * precisión del modelo aplicando parches; solo opiniones. Tres subcomandos:\n *\n * generar produce casos deterministas desde nuestro propio código fuente,\n * validando cada uno resolviéndolo antes de admitirlo.\n * run los ejecuta contra un modelo de verdad — CUESTA DINERO, así que\n * exige `--si` o confirmación interactiva.\n * comparar enseña si una ejecución mejoró o empeoró frente a otra.\n */\n\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tcargarCasos,\n\tcargarResultados,\n\tguardarCasos,\n\tguardarResultados,\n\tnombreResultadosPorDefecto,\n\trutaCasosPorDefecto,\n} from \"../core/banco/almacenamiento.ts\";\nimport { compararEjecuciones, formatearComparacion } from \"../core/banco/comparar.ts\";\nimport { crearEjecutorReal, ejecutarCasos } from \"../core/banco/ejecutar.ts\";\nimport { generarCasos } from \"../core/banco/generar.ts\";\nimport type { Dificultad } from \"../core/banco/tipos.ts\";\n\nconst AYUDA = `Uso:\n ada-cli banco generar [--casos N] [--corpus <dir>] [--salida <fichero>]\n [--dificultad facil,medio,dificil,pesadilla] [--semilla N]\n ada-cli banco run [--casos N] [--entrada <fichero>] [--salida <fichero>]\n [--modelo proveedor/modelo] [--timeout <ms>] --si\n ada-cli banco comparar <resultadosA.json> <resultadosB.json>\n\n\"generar\" no llama a ningún proveedor: crea bugs deterministas a partir del\ncódigo fuente propio y valida cada caso resolviéndolo antes de admitirlo.\n\n\"run\" SÍ llama a un proveedor de verdad y cuesta dinero. Sin \"--si\" pide\nconfirmación interactiva enseñando cuántas llamadas va a hacer.`;\n\nfunction raizPaquete(): string {\n\treturn fileURLToPath(new URL(\"../..\", import.meta.url));\n}\n\nfunction valorDeFlag(args: string[], nombre: string): string | undefined {\n\tconst i = args.indexOf(nombre);\n\treturn i >= 0 ? args[i + 1] : undefined;\n}\n\nasync function confirmar(mensaje: string): Promise<boolean> {\n\tif (!process.stdin.isTTY) return false;\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\tconst respuesta = await new Promise<string>((res) => rl.question(`${mensaje} [y/N] `, res));\n\trl.close();\n\treturn respuesta.trim().toLowerCase() === \"y\" || respuesta.trim().toLowerCase() === \"yes\";\n}\n\nasync function runGenerar(args: string[]): Promise<void> {\n\tconst raiz = raizPaquete();\n\tconst numCasos = Number(valorDeFlag(args, \"--casos\") ?? \"20\");\n\tif (!Number.isFinite(numCasos) || numCasos <= 0) {\n\t\tconsole.error(\"--casos necesita un número positivo.\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst corpus = valorDeFlag(args, \"--corpus\") ?? join(raiz, \"src\");\n\tconst salida = valorDeFlag(args, \"--salida\") ?? rutaCasosPorDefecto(raiz);\n\tconst semilla = Number(valorDeFlag(args, \"--semilla\") ?? \"42\");\n\tconst dificultadArg = valorDeFlag(args, \"--dificultad\");\n\tconst dificultades = dificultadArg ? (dificultadArg.split(\",\") as Dificultad[]) : undefined;\n\n\tconst conjunto = generarCasos({ corpus, numCasos, semilla, dificultades });\n\tguardarCasos(salida, conjunto);\n\n\tconsole.log(`Generados ${conjunto.casos.length}/${numCasos} casos desde ${corpus}`);\n\tconsole.log(` descartados por AMBIGUOS: ${conjunto.descartadosPorAmbiguos}`);\n\tconsole.log(` descartados por no aplicable: ${conjunto.descartadosPorNoAplicable}`);\n\tconsole.log(` intentos totales: ${conjunto.intentos}`);\n\tif (conjunto.descartadosPorAmbiguos === 0 && conjunto.intentos > conjunto.casos.length) {\n\t\tconsole.log(\" (cero ambiguos con reintentos de por medio: revisa construirBloqueUnico si esto sorprende.)\");\n\t}\n\tconst porDificultad = new Map<string, number>();\n\tfor (const c of conjunto.casos) porDificultad.set(c.dificultad, (porDificultad.get(c.dificultad) ?? 0) + 1);\n\tfor (const [d, n] of porDificultad) console.log(` ${d}: ${n}`);\n\tconsole.log(`Guardado en ${salida}`);\n}\n\nasync function runRun(args: string[]): Promise<void> {\n\tconst raiz = raizPaquete();\n\tconst entrada = valorDeFlag(args, \"--entrada\") ?? rutaCasosPorDefecto(raiz);\n\tconst conjunto = cargarCasos(entrada);\n\tconst limite = valorDeFlag(args, \"--casos\");\n\tconst casos = limite ? conjunto.casos.slice(0, Number(limite)) : conjunto.casos;\n\tif (casos.length === 0) {\n\t\tconsole.error(\"No hay casos que ejecutar.\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst timeoutMs = Number(valorDeFlag(args, \"--timeout\") ?? \"180000\");\n\n\tconst { getAgentDir } = await import(\"../config.ts\");\n\tconst { ModelRuntime } = await import(\"../core/model-runtime.ts\");\n\tconst { resolveCliModel } = await import(\"../core/model-resolver.ts\");\n\tconst { SettingsManager } = await import(\"../core/settings-manager.ts\");\n\n\tconst agentDir = getAgentDir();\n\tconst modelRuntime = await ModelRuntime.create();\n\tconst ajustes = SettingsManager.create(process.cwd(), agentDir);\n\tconst spec = valorDeFlag(args, \"--modelo\");\n\tconst barra = spec?.indexOf(\"/\") ?? -1;\n\tconst { model, error } = resolveCliModel({\n\t\tmodelRuntime,\n\t\tcliProvider: barra > 0 ? spec?.slice(0, barra) : ajustes.getDefaultProvider(),\n\t\tcliModel: barra > 0 ? spec?.slice(barra + 1) : ajustes.getDefaultModel(),\n\t});\n\tif (error || !model) {\n\t\tconsole.error(\n\t\t\terror ?? \"No hay modelo configurado. Abre `ada-cli` y elige uno con /login o /model, o pasa --modelo.\",\n\t\t);\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\n\tconsole.log(`Esto hará ${casos.length} llamada(s) real(es) a ${model.provider}/${model.id}.`);\n\tconst si = args.includes(\"--si\");\n\tif (!si) {\n\t\tconst ok = await confirmar(\"¿Continuar?\");\n\t\tif (!ok) {\n\t\t\tconsole.log(\"Cancelado. Repite con --si para saltarte la confirmación.\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst ejecutor = crearEjecutorReal({ agentDir, model, timeoutMs });\n\tconst resultados = await ejecutarCasos(casos, ejecutor, {\n\t\tproveedor: model.provider,\n\t\tmodelo: model.id,\n\t\tcasosArchivo: entrada,\n\t\tonProgreso: (i, total, r) => {\n\t\t\tconst estado = r.timeout\n\t\t\t\t? \"TIMEOUT\"\n\t\t\t\t: r.vacio\n\t\t\t\t\t? \"VACIO\"\n\t\t\t\t\t: r.fantasma\n\t\t\t\t\t\t? \"FANTASMA\"\n\t\t\t\t\t\t: r.tareaOk\n\t\t\t\t\t\t\t? \"tarea-ok\"\n\t\t\t\t\t\t\t: r.edicionOk\n\t\t\t\t\t\t\t\t? \"solo-edicion\"\n\t\t\t\t\t\t\t\t: \"fallo\";\n\t\t\tconsole.log(` [${i}/${total}] ${r.casoId} ${estado}`);\n\t\t},\n\t});\n\n\tconst salida = valorDeFlag(args, \"--salida\") ?? nombreResultadosPorDefecto(raiz, model.provider, model.id);\n\tguardarResultados(salida, resultados);\n\n\tconsole.log(\"\");\n\tconsole.log(`tarea: ${resultados.resumen.tareaOkPct}%`);\n\tconsole.log(`edición: ${resultados.resumen.edicionOkPct}%`);\n\tconsole.log(`fantasma: ${resultados.resumen.fantasmaPct}%`);\n\tconsole.log(`timeout: ${resultados.resumen.timeoutPct}%`);\n\tif (resultados.resumen.vacioPct > 0) {\n\t\t// Un turno vacío no es \"el modelo decidió no editar\": es que no\n\t\t// contestó. Antes caía dentro de `fantasma` y convertía un proveedor\n\t\t// roto (`x-preview-f-free`) en un dato sobre el criterio del modelo.\n\t\tconsole.log(`vacío: ${resultados.resumen.vacioPct}% (el modelo no contestó; no cuentan como fantasma)`);\n\t}\n\tif (resultados.resumen.errorPct > 0) {\n\t\t// Aparte de las cuatro métricas: un error (sin API key, red caída) no\n\t\t// es \"el modelo no editó\", es \"no lo sabemos\". Mezclarlo con fantasma\n\t\t// convertiría un fallo de autenticación en un dato sobre el modelo.\n\t\tconsole.log(`error: ${resultados.resumen.errorPct}% (turnos que NO terminaron; no cuentan como fantasma)`);\n\t\t// Y se dice POR QUÉ, aquí mismo. Antes el motivo solo estaba dentro del\n\t\t// JSON de resultados: una ejecución con \"error 100%\" obligaba a abrir el\n\t\t// fichero para descubrir que faltaba la credencial. Un medidor que dice\n\t\t// que no midió tiene que decir qué se lo impidió, o el siguiente paso es\n\t\t// adivinar. Se agrupan porque 40 casos dan 40 veces el mismo error.\n\t\tconst porMotivo = new Map<string, number>();\n\t\tfor (const c of resultados.resultados) {\n\t\t\tif (!c.error) continue;\n\t\t\tconst primeraLinea = c.error.split(\"\\n\")[0].trim();\n\t\t\tporMotivo.set(primeraLinea, (porMotivo.get(primeraLinea) ?? 0) + 1);\n\t\t}\n\t\tfor (const [motivo, veces] of [...porMotivo].sort((a, b) => b[1] - a[1]).slice(0, 3)) {\n\t\t\tconsole.log(` ${veces}× ${motivo}`);\n\t\t}\n\t}\n\tfor (const [d, m] of Object.entries(resultados.resumen.porDificultad)) {\n\t\tconsole.log(` ${d}: tarea ${m.tareaOkPct}% / edición ${m.edicionOkPct}% (n=${m.total})`);\n\t}\n\tconsole.log(`Guardado en ${salida}`);\n}\n\nfunction runComparar(args: string[]): void {\n\tconst [rutaA, rutaB] = args;\n\tif (!rutaA || !rutaB) {\n\t\tconsole.error(\"Uso: ada-cli banco comparar <resultadosA.json> <resultadosB.json>\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst a = cargarResultados(rutaA);\n\tconst b = cargarResultados(rutaB);\n\tconsole.log(formatearComparacion(compararEjecuciones(a, b, rutaA, rutaB)));\n}\n\n/** Devuelve true si consumió los argumentos. */\nexport async function runBancoCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"banco\") return false;\n\n\tif (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 1) {\n\t\tconsole.log(AYUDA);\n\t\treturn true;\n\t}\n\n\tconst sub = args[1];\n\tconst resto = args.slice(2);\n\tif (sub === \"generar\") {\n\t\tawait runGenerar(resto);\n\t\treturn true;\n\t}\n\tif (sub === \"run\") {\n\t\tawait runRun(resto);\n\t\treturn true;\n\t}\n\tif (sub === \"comparar\") {\n\t\trunComparar(resto);\n\t\treturn true;\n\t}\n\n\tconsole.error(`Subcomando desconocido: ${sub}\\n`);\n\tconsole.log(AYUDA);\n\tprocess.exitCode = 1;\n\treturn true;\n}\n"]}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * `ada-cli banco` — el banco de fiabilidad de edición.
3
+ *
4
+ * Sin esto no había forma de MEDIR si tocar el editor mejora o empeora la
5
+ * precisión del modelo aplicando parches; solo opiniones. Tres subcomandos:
6
+ *
7
+ * generar produce casos deterministas desde nuestro propio código fuente,
8
+ * validando cada uno resolviéndolo antes de admitirlo.
9
+ * run los ejecuta contra un modelo de verdad — CUESTA DINERO, así que
10
+ * exige `--si` o confirmación interactiva.
11
+ * comparar enseña si una ejecución mejoró o empeoró frente a otra.
12
+ */
13
+ import { join } from "node:path";
14
+ import { createInterface } from "node:readline";
15
+ import { fileURLToPath } from "node:url";
16
+ import { cargarCasos, cargarResultados, guardarCasos, guardarResultados, nombreResultadosPorDefecto, rutaCasosPorDefecto, } from "../core/banco/almacenamiento.js";
17
+ import { compararEjecuciones, formatearComparacion } from "../core/banco/comparar.js";
18
+ import { crearEjecutorReal, ejecutarCasos } from "../core/banco/ejecutar.js";
19
+ import { generarCasos } from "../core/banco/generar.js";
20
+ const AYUDA = `Uso:
21
+ ada-cli banco generar [--casos N] [--corpus <dir>] [--salida <fichero>]
22
+ [--dificultad facil,medio,dificil,pesadilla] [--semilla N]
23
+ ada-cli banco run [--casos N] [--entrada <fichero>] [--salida <fichero>]
24
+ [--modelo proveedor/modelo] [--timeout <ms>] --si
25
+ ada-cli banco comparar <resultadosA.json> <resultadosB.json>
26
+
27
+ "generar" no llama a ningún proveedor: crea bugs deterministas a partir del
28
+ código fuente propio y valida cada caso resolviéndolo antes de admitirlo.
29
+
30
+ "run" SÍ llama a un proveedor de verdad y cuesta dinero. Sin "--si" pide
31
+ confirmación interactiva enseñando cuántas llamadas va a hacer.`;
32
+ function raizPaquete() {
33
+ return fileURLToPath(new URL("../..", import.meta.url));
34
+ }
35
+ function valorDeFlag(args, nombre) {
36
+ const i = args.indexOf(nombre);
37
+ return i >= 0 ? args[i + 1] : undefined;
38
+ }
39
+ async function confirmar(mensaje) {
40
+ if (!process.stdin.isTTY)
41
+ return false;
42
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
43
+ const respuesta = await new Promise((res) => rl.question(`${mensaje} [y/N] `, res));
44
+ rl.close();
45
+ return respuesta.trim().toLowerCase() === "y" || respuesta.trim().toLowerCase() === "yes";
46
+ }
47
+ async function runGenerar(args) {
48
+ const raiz = raizPaquete();
49
+ const numCasos = Number(valorDeFlag(args, "--casos") ?? "20");
50
+ if (!Number.isFinite(numCasos) || numCasos <= 0) {
51
+ console.error("--casos necesita un número positivo.");
52
+ process.exitCode = 1;
53
+ return;
54
+ }
55
+ const corpus = valorDeFlag(args, "--corpus") ?? join(raiz, "src");
56
+ const salida = valorDeFlag(args, "--salida") ?? rutaCasosPorDefecto(raiz);
57
+ const semilla = Number(valorDeFlag(args, "--semilla") ?? "42");
58
+ const dificultadArg = valorDeFlag(args, "--dificultad");
59
+ const dificultades = dificultadArg ? dificultadArg.split(",") : undefined;
60
+ const conjunto = generarCasos({ corpus, numCasos, semilla, dificultades });
61
+ guardarCasos(salida, conjunto);
62
+ console.log(`Generados ${conjunto.casos.length}/${numCasos} casos desde ${corpus}`);
63
+ console.log(` descartados por AMBIGUOS: ${conjunto.descartadosPorAmbiguos}`);
64
+ console.log(` descartados por no aplicable: ${conjunto.descartadosPorNoAplicable}`);
65
+ console.log(` intentos totales: ${conjunto.intentos}`);
66
+ if (conjunto.descartadosPorAmbiguos === 0 && conjunto.intentos > conjunto.casos.length) {
67
+ console.log(" (cero ambiguos con reintentos de por medio: revisa construirBloqueUnico si esto sorprende.)");
68
+ }
69
+ const porDificultad = new Map();
70
+ for (const c of conjunto.casos)
71
+ porDificultad.set(c.dificultad, (porDificultad.get(c.dificultad) ?? 0) + 1);
72
+ for (const [d, n] of porDificultad)
73
+ console.log(` ${d}: ${n}`);
74
+ console.log(`Guardado en ${salida}`);
75
+ }
76
+ async function runRun(args) {
77
+ const raiz = raizPaquete();
78
+ const entrada = valorDeFlag(args, "--entrada") ?? rutaCasosPorDefecto(raiz);
79
+ const conjunto = cargarCasos(entrada);
80
+ const limite = valorDeFlag(args, "--casos");
81
+ const casos = limite ? conjunto.casos.slice(0, Number(limite)) : conjunto.casos;
82
+ if (casos.length === 0) {
83
+ console.error("No hay casos que ejecutar.");
84
+ process.exitCode = 1;
85
+ return;
86
+ }
87
+ const timeoutMs = Number(valorDeFlag(args, "--timeout") ?? "180000");
88
+ const { getAgentDir } = await import("../config.js");
89
+ const { ModelRuntime } = await import("../core/model-runtime.js");
90
+ const { resolveCliModel } = await import("../core/model-resolver.js");
91
+ const { SettingsManager } = await import("../core/settings-manager.js");
92
+ const agentDir = getAgentDir();
93
+ const modelRuntime = await ModelRuntime.create();
94
+ const ajustes = SettingsManager.create(process.cwd(), agentDir);
95
+ const spec = valorDeFlag(args, "--modelo");
96
+ const barra = spec?.indexOf("/") ?? -1;
97
+ const { model, error } = resolveCliModel({
98
+ modelRuntime,
99
+ cliProvider: barra > 0 ? spec?.slice(0, barra) : ajustes.getDefaultProvider(),
100
+ cliModel: barra > 0 ? spec?.slice(barra + 1) : ajustes.getDefaultModel(),
101
+ });
102
+ if (error || !model) {
103
+ console.error(error ?? "No hay modelo configurado. Abre `ada-cli` y elige uno con /login o /model, o pasa --modelo.");
104
+ process.exitCode = 1;
105
+ return;
106
+ }
107
+ console.log(`Esto hará ${casos.length} llamada(s) real(es) a ${model.provider}/${model.id}.`);
108
+ const si = args.includes("--si");
109
+ if (!si) {
110
+ const ok = await confirmar("¿Continuar?");
111
+ if (!ok) {
112
+ console.log("Cancelado. Repite con --si para saltarte la confirmación.");
113
+ return;
114
+ }
115
+ }
116
+ const ejecutor = crearEjecutorReal({ agentDir, model, timeoutMs });
117
+ const resultados = await ejecutarCasos(casos, ejecutor, {
118
+ proveedor: model.provider,
119
+ modelo: model.id,
120
+ casosArchivo: entrada,
121
+ onProgreso: (i, total, r) => {
122
+ const estado = r.timeout
123
+ ? "TIMEOUT"
124
+ : r.vacio
125
+ ? "VACIO"
126
+ : r.fantasma
127
+ ? "FANTASMA"
128
+ : r.tareaOk
129
+ ? "tarea-ok"
130
+ : r.edicionOk
131
+ ? "solo-edicion"
132
+ : "fallo";
133
+ console.log(` [${i}/${total}] ${r.casoId} ${estado}`);
134
+ },
135
+ });
136
+ const salida = valorDeFlag(args, "--salida") ?? nombreResultadosPorDefecto(raiz, model.provider, model.id);
137
+ guardarResultados(salida, resultados);
138
+ console.log("");
139
+ console.log(`tarea: ${resultados.resumen.tareaOkPct}%`);
140
+ console.log(`edición: ${resultados.resumen.edicionOkPct}%`);
141
+ console.log(`fantasma: ${resultados.resumen.fantasmaPct}%`);
142
+ console.log(`timeout: ${resultados.resumen.timeoutPct}%`);
143
+ if (resultados.resumen.vacioPct > 0) {
144
+ // Un turno vacío no es "el modelo decidió no editar": es que no
145
+ // contestó. Antes caía dentro de `fantasma` y convertía un proveedor
146
+ // roto (`x-preview-f-free`) en un dato sobre el criterio del modelo.
147
+ console.log(`vacío: ${resultados.resumen.vacioPct}% (el modelo no contestó; no cuentan como fantasma)`);
148
+ }
149
+ if (resultados.resumen.errorPct > 0) {
150
+ // Aparte de las cuatro métricas: un error (sin API key, red caída) no
151
+ // es "el modelo no editó", es "no lo sabemos". Mezclarlo con fantasma
152
+ // convertiría un fallo de autenticación en un dato sobre el modelo.
153
+ console.log(`error: ${resultados.resumen.errorPct}% (turnos que NO terminaron; no cuentan como fantasma)`);
154
+ // Y se dice POR QUÉ, aquí mismo. Antes el motivo solo estaba dentro del
155
+ // JSON de resultados: una ejecución con "error 100%" obligaba a abrir el
156
+ // fichero para descubrir que faltaba la credencial. Un medidor que dice
157
+ // que no midió tiene que decir qué se lo impidió, o el siguiente paso es
158
+ // adivinar. Se agrupan porque 40 casos dan 40 veces el mismo error.
159
+ const porMotivo = new Map();
160
+ for (const c of resultados.resultados) {
161
+ if (!c.error)
162
+ continue;
163
+ const primeraLinea = c.error.split("\n")[0].trim();
164
+ porMotivo.set(primeraLinea, (porMotivo.get(primeraLinea) ?? 0) + 1);
165
+ }
166
+ for (const [motivo, veces] of [...porMotivo].sort((a, b) => b[1] - a[1]).slice(0, 3)) {
167
+ console.log(` ${veces}× ${motivo}`);
168
+ }
169
+ }
170
+ for (const [d, m] of Object.entries(resultados.resumen.porDificultad)) {
171
+ console.log(` ${d}: tarea ${m.tareaOkPct}% / edición ${m.edicionOkPct}% (n=${m.total})`);
172
+ }
173
+ console.log(`Guardado en ${salida}`);
174
+ }
175
+ function runComparar(args) {
176
+ const [rutaA, rutaB] = args;
177
+ if (!rutaA || !rutaB) {
178
+ console.error("Uso: ada-cli banco comparar <resultadosA.json> <resultadosB.json>");
179
+ process.exitCode = 1;
180
+ return;
181
+ }
182
+ const a = cargarResultados(rutaA);
183
+ const b = cargarResultados(rutaB);
184
+ console.log(formatearComparacion(compararEjecuciones(a, b, rutaA, rutaB)));
185
+ }
186
+ /** Devuelve true si consumió los argumentos. */
187
+ export async function runBancoCommand(args) {
188
+ if (args[0] !== "banco")
189
+ return false;
190
+ if (args.includes("--help") || args.includes("-h") || args.length === 1) {
191
+ console.log(AYUDA);
192
+ return true;
193
+ }
194
+ const sub = args[1];
195
+ const resto = args.slice(2);
196
+ if (sub === "generar") {
197
+ await runGenerar(resto);
198
+ return true;
199
+ }
200
+ if (sub === "run") {
201
+ await runRun(resto);
202
+ return true;
203
+ }
204
+ if (sub === "comparar") {
205
+ runComparar(resto);
206
+ return true;
207
+ }
208
+ console.error(`Subcomando desconocido: ${sub}\n`);
209
+ console.log(AYUDA);
210
+ process.exitCode = 1;
211
+ return true;
212
+ }
213
+ //# sourceMappingURL=banco-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banco-command.js","sourceRoot":"","sources":["../../src/cli/banco-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACN,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,MAAM,KAAK,GAAG;;;;;;;;;;;mEAWkD,CAAC;AAEjE,SAAS,WAAW,GAAW;IAC9B,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,CACxD;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,MAAc,EAAsB;IACxE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CACxC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe,EAAoB;IAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5F,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AAAA,CAC1F;AAED,KAAK,UAAU,UAAU,CAAC,IAAc,EAAiB;IACxD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,uCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3E,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,+BAA+B,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,IAAI,QAAQ,CAAC,sBAAsB,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK;QAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;AAAA,CACrC;AAED,KAAK,UAAU,MAAM,CAAC,IAAc,EAAiB;IACpD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,QAAQ,CAAC,CAAC;IAErE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAClE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACtE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;QACxC,YAAY;QACZ,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE;QAC7E,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE;KACxE,CAAC,CAAC;IACH,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CACZ,KAAK,IAAI,6FAA6F,CACtG,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAa,KAAK,CAAC,MAAM,0BAA0B,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9F,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,cAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,4DAA2D,CAAC,CAAC;YACzE,OAAO;QACR,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;QACvD,SAAS,EAAE,KAAK,CAAC,QAAQ;QACzB,MAAM,EAAE,KAAK,CAAC,EAAE;QAChB,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO;gBACvB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,CAAC,KAAK;oBACR,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,CAAC,CAAC,QAAQ;wBACX,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,CAAC,CAAC,OAAO;4BACV,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,CAAC,CAAC,SAAS;gCACZ,CAAC,CAAC,cAAc;gCAChB,CAAC,CAAC,OAAO,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;QAAA,CACxD;KACD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3G,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,cAAa,UAAU,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACrC,kEAAgE;QAChE,wEAAqE;QACrE,qEAAqE;QACrE,OAAO,CAAC,GAAG,CAAC,cAAa,UAAU,CAAC,OAAO,CAAC,QAAQ,uDAAsD,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACrC,wEAAsE;QACtE,uEAAsE;QACtE,sEAAoE;QACpE,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,QAAQ,yDAAyD,CAAC,CAAC;QAC/G,0EAAwE;QACxE,0EAAyE;QACzE,wEAAwE;QACxE,4EAAyE;QACzE,oEAAoE;QACpE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,SAAS;YACvB,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAK,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,UAAU,gBAAe,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;AAAA,CACrC;AAED,SAAS,WAAW,CAAC,IAAc,EAAQ;IAC1C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,CAC3E;AAED,iDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc,EAAoB;IACvE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACxB,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AAAA,CACZ","sourcesContent":["/**\n * `ada-cli banco` — el banco de fiabilidad de edición.\n *\n * Sin esto no había forma de MEDIR si tocar el editor mejora o empeora la\n * precisión del modelo aplicando parches; solo opiniones. Tres subcomandos:\n *\n * generar produce casos deterministas desde nuestro propio código fuente,\n * validando cada uno resolviéndolo antes de admitirlo.\n * run los ejecuta contra un modelo de verdad — CUESTA DINERO, así que\n * exige `--si` o confirmación interactiva.\n * comparar enseña si una ejecución mejoró o empeoró frente a otra.\n */\n\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\tcargarCasos,\n\tcargarResultados,\n\tguardarCasos,\n\tguardarResultados,\n\tnombreResultadosPorDefecto,\n\trutaCasosPorDefecto,\n} from \"../core/banco/almacenamiento.ts\";\nimport { compararEjecuciones, formatearComparacion } from \"../core/banco/comparar.ts\";\nimport { crearEjecutorReal, ejecutarCasos } from \"../core/banco/ejecutar.ts\";\nimport { generarCasos } from \"../core/banco/generar.ts\";\nimport type { Dificultad } from \"../core/banco/tipos.ts\";\n\nconst AYUDA = `Uso:\n ada-cli banco generar [--casos N] [--corpus <dir>] [--salida <fichero>]\n [--dificultad facil,medio,dificil,pesadilla] [--semilla N]\n ada-cli banco run [--casos N] [--entrada <fichero>] [--salida <fichero>]\n [--modelo proveedor/modelo] [--timeout <ms>] --si\n ada-cli banco comparar <resultadosA.json> <resultadosB.json>\n\n\"generar\" no llama a ningún proveedor: crea bugs deterministas a partir del\ncódigo fuente propio y valida cada caso resolviéndolo antes de admitirlo.\n\n\"run\" SÍ llama a un proveedor de verdad y cuesta dinero. Sin \"--si\" pide\nconfirmación interactiva enseñando cuántas llamadas va a hacer.`;\n\nfunction raizPaquete(): string {\n\treturn fileURLToPath(new URL(\"../..\", import.meta.url));\n}\n\nfunction valorDeFlag(args: string[], nombre: string): string | undefined {\n\tconst i = args.indexOf(nombre);\n\treturn i >= 0 ? args[i + 1] : undefined;\n}\n\nasync function confirmar(mensaje: string): Promise<boolean> {\n\tif (!process.stdin.isTTY) return false;\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\tconst respuesta = await new Promise<string>((res) => rl.question(`${mensaje} [y/N] `, res));\n\trl.close();\n\treturn respuesta.trim().toLowerCase() === \"y\" || respuesta.trim().toLowerCase() === \"yes\";\n}\n\nasync function runGenerar(args: string[]): Promise<void> {\n\tconst raiz = raizPaquete();\n\tconst numCasos = Number(valorDeFlag(args, \"--casos\") ?? \"20\");\n\tif (!Number.isFinite(numCasos) || numCasos <= 0) {\n\t\tconsole.error(\"--casos necesita un número positivo.\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst corpus = valorDeFlag(args, \"--corpus\") ?? join(raiz, \"src\");\n\tconst salida = valorDeFlag(args, \"--salida\") ?? rutaCasosPorDefecto(raiz);\n\tconst semilla = Number(valorDeFlag(args, \"--semilla\") ?? \"42\");\n\tconst dificultadArg = valorDeFlag(args, \"--dificultad\");\n\tconst dificultades = dificultadArg ? (dificultadArg.split(\",\") as Dificultad[]) : undefined;\n\n\tconst conjunto = generarCasos({ corpus, numCasos, semilla, dificultades });\n\tguardarCasos(salida, conjunto);\n\n\tconsole.log(`Generados ${conjunto.casos.length}/${numCasos} casos desde ${corpus}`);\n\tconsole.log(` descartados por AMBIGUOS: ${conjunto.descartadosPorAmbiguos}`);\n\tconsole.log(` descartados por no aplicable: ${conjunto.descartadosPorNoAplicable}`);\n\tconsole.log(` intentos totales: ${conjunto.intentos}`);\n\tif (conjunto.descartadosPorAmbiguos === 0 && conjunto.intentos > conjunto.casos.length) {\n\t\tconsole.log(\" (cero ambiguos con reintentos de por medio: revisa construirBloqueUnico si esto sorprende.)\");\n\t}\n\tconst porDificultad = new Map<string, number>();\n\tfor (const c of conjunto.casos) porDificultad.set(c.dificultad, (porDificultad.get(c.dificultad) ?? 0) + 1);\n\tfor (const [d, n] of porDificultad) console.log(` ${d}: ${n}`);\n\tconsole.log(`Guardado en ${salida}`);\n}\n\nasync function runRun(args: string[]): Promise<void> {\n\tconst raiz = raizPaquete();\n\tconst entrada = valorDeFlag(args, \"--entrada\") ?? rutaCasosPorDefecto(raiz);\n\tconst conjunto = cargarCasos(entrada);\n\tconst limite = valorDeFlag(args, \"--casos\");\n\tconst casos = limite ? conjunto.casos.slice(0, Number(limite)) : conjunto.casos;\n\tif (casos.length === 0) {\n\t\tconsole.error(\"No hay casos que ejecutar.\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst timeoutMs = Number(valorDeFlag(args, \"--timeout\") ?? \"180000\");\n\n\tconst { getAgentDir } = await import(\"../config.ts\");\n\tconst { ModelRuntime } = await import(\"../core/model-runtime.ts\");\n\tconst { resolveCliModel } = await import(\"../core/model-resolver.ts\");\n\tconst { SettingsManager } = await import(\"../core/settings-manager.ts\");\n\n\tconst agentDir = getAgentDir();\n\tconst modelRuntime = await ModelRuntime.create();\n\tconst ajustes = SettingsManager.create(process.cwd(), agentDir);\n\tconst spec = valorDeFlag(args, \"--modelo\");\n\tconst barra = spec?.indexOf(\"/\") ?? -1;\n\tconst { model, error } = resolveCliModel({\n\t\tmodelRuntime,\n\t\tcliProvider: barra > 0 ? spec?.slice(0, barra) : ajustes.getDefaultProvider(),\n\t\tcliModel: barra > 0 ? spec?.slice(barra + 1) : ajustes.getDefaultModel(),\n\t});\n\tif (error || !model) {\n\t\tconsole.error(\n\t\t\terror ?? \"No hay modelo configurado. Abre `ada-cli` y elige uno con /login o /model, o pasa --modelo.\",\n\t\t);\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\n\tconsole.log(`Esto hará ${casos.length} llamada(s) real(es) a ${model.provider}/${model.id}.`);\n\tconst si = args.includes(\"--si\");\n\tif (!si) {\n\t\tconst ok = await confirmar(\"¿Continuar?\");\n\t\tif (!ok) {\n\t\t\tconsole.log(\"Cancelado. Repite con --si para saltarte la confirmación.\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst ejecutor = crearEjecutorReal({ agentDir, model, timeoutMs });\n\tconst resultados = await ejecutarCasos(casos, ejecutor, {\n\t\tproveedor: model.provider,\n\t\tmodelo: model.id,\n\t\tcasosArchivo: entrada,\n\t\tonProgreso: (i, total, r) => {\n\t\t\tconst estado = r.timeout\n\t\t\t\t? \"TIMEOUT\"\n\t\t\t\t: r.vacio\n\t\t\t\t\t? \"VACIO\"\n\t\t\t\t\t: r.fantasma\n\t\t\t\t\t\t? \"FANTASMA\"\n\t\t\t\t\t\t: r.tareaOk\n\t\t\t\t\t\t\t? \"tarea-ok\"\n\t\t\t\t\t\t\t: r.edicionOk\n\t\t\t\t\t\t\t\t? \"solo-edicion\"\n\t\t\t\t\t\t\t\t: \"fallo\";\n\t\t\tconsole.log(` [${i}/${total}] ${r.casoId} ${estado}`);\n\t\t},\n\t});\n\n\tconst salida = valorDeFlag(args, \"--salida\") ?? nombreResultadosPorDefecto(raiz, model.provider, model.id);\n\tguardarResultados(salida, resultados);\n\n\tconsole.log(\"\");\n\tconsole.log(`tarea: ${resultados.resumen.tareaOkPct}%`);\n\tconsole.log(`edición: ${resultados.resumen.edicionOkPct}%`);\n\tconsole.log(`fantasma: ${resultados.resumen.fantasmaPct}%`);\n\tconsole.log(`timeout: ${resultados.resumen.timeoutPct}%`);\n\tif (resultados.resumen.vacioPct > 0) {\n\t\t// Un turno vacío no es \"el modelo decidió no editar\": es que no\n\t\t// contestó. Antes caía dentro de `fantasma` y convertía un proveedor\n\t\t// roto (`x-preview-f-free`) en un dato sobre el criterio del modelo.\n\t\tconsole.log(`vacío: ${resultados.resumen.vacioPct}% (el modelo no contestó; no cuentan como fantasma)`);\n\t}\n\tif (resultados.resumen.errorPct > 0) {\n\t\t// Aparte de las cuatro métricas: un error (sin API key, red caída) no\n\t\t// es \"el modelo no editó\", es \"no lo sabemos\". Mezclarlo con fantasma\n\t\t// convertiría un fallo de autenticación en un dato sobre el modelo.\n\t\tconsole.log(`error: ${resultados.resumen.errorPct}% (turnos que NO terminaron; no cuentan como fantasma)`);\n\t\t// Y se dice POR QUÉ, aquí mismo. Antes el motivo solo estaba dentro del\n\t\t// JSON de resultados: una ejecución con \"error 100%\" obligaba a abrir el\n\t\t// fichero para descubrir que faltaba la credencial. Un medidor que dice\n\t\t// que no midió tiene que decir qué se lo impidió, o el siguiente paso es\n\t\t// adivinar. Se agrupan porque 40 casos dan 40 veces el mismo error.\n\t\tconst porMotivo = new Map<string, number>();\n\t\tfor (const c of resultados.resultados) {\n\t\t\tif (!c.error) continue;\n\t\t\tconst primeraLinea = c.error.split(\"\\n\")[0].trim();\n\t\t\tporMotivo.set(primeraLinea, (porMotivo.get(primeraLinea) ?? 0) + 1);\n\t\t}\n\t\tfor (const [motivo, veces] of [...porMotivo].sort((a, b) => b[1] - a[1]).slice(0, 3)) {\n\t\t\tconsole.log(` ${veces}× ${motivo}`);\n\t\t}\n\t}\n\tfor (const [d, m] of Object.entries(resultados.resumen.porDificultad)) {\n\t\tconsole.log(` ${d}: tarea ${m.tareaOkPct}% / edición ${m.edicionOkPct}% (n=${m.total})`);\n\t}\n\tconsole.log(`Guardado en ${salida}`);\n}\n\nfunction runComparar(args: string[]): void {\n\tconst [rutaA, rutaB] = args;\n\tif (!rutaA || !rutaB) {\n\t\tconsole.error(\"Uso: ada-cli banco comparar <resultadosA.json> <resultadosB.json>\");\n\t\tprocess.exitCode = 1;\n\t\treturn;\n\t}\n\tconst a = cargarResultados(rutaA);\n\tconst b = cargarResultados(rutaB);\n\tconsole.log(formatearComparacion(compararEjecuciones(a, b, rutaA, rutaB)));\n}\n\n/** Devuelve true si consumió los argumentos. */\nexport async function runBancoCommand(args: string[]): Promise<boolean> {\n\tif (args[0] !== \"banco\") return false;\n\n\tif (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 1) {\n\t\tconsole.log(AYUDA);\n\t\treturn true;\n\t}\n\n\tconst sub = args[1];\n\tconst resto = args.slice(2);\n\tif (sub === \"generar\") {\n\t\tawait runGenerar(resto);\n\t\treturn true;\n\t}\n\tif (sub === \"run\") {\n\t\tawait runRun(resto);\n\t\treturn true;\n\t}\n\tif (sub === \"comparar\") {\n\t\trunComparar(resto);\n\t\treturn true;\n\t}\n\n\tconsole.error(`Subcomando desconocido: ${sub}\\n`);\n\tconsole.log(AYUDA);\n\tprocess.exitCode = 1;\n\treturn true;\n}\n"]}