@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 @@
1
+ {"version":3,"file":"reposo.d.ts","sourceRoot":"","sources":["../../../src/core/credenciales/reposo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAMH,OAAO,KAAK,EAAwB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAmE7D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AA4KD;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,YAAY,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAY3C;CACD;AAwJD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CA4BxG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAyC,GACjD,UAAU,GAAG,SAAS,CAUxB;AAED,8EAA6E;AAC7E,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,mFAAkF;AAClF,wBAAgB,mCAAmC,IAAI,IAAI,CAY1D","sourcesContent":["/**\n * Cifrado en reposo de `<agentDir>/auth.json`.\n *\n * EL HUECO: vendemos \"vault cifrado con clasificación y auditoría\"\n * (memory-engine/vault.ts) mientras las claves de API y los tokens OAuth de\n * los proveedores viven en auth.json EN CLARO, con permisos 0600 pero\n * legibles por cualquier proceso del usuario. La política de aprobación\n * (aprobacion/politica.ts) ya le impide leerlo a NUESTRO agente; esto le\n * cierra la puerta a cualquier OTRO proceso.\n *\n * DISEÑO — envolver, no sustituir:\n * `auth-storage.ts` es de upstream y el presupuesto de fork está agotado\n * (ver scripts/sync-ada.sh --check). No podemos reescribir su lectura/\n * escritura de fichero ni su bloqueo entre procesos (proper-lockfile) sin\n * pagar hunks que no tenemos. En vez de eso, ENVOLVEMOS su\n * `AuthStorageBackend`: el interior (`FileAuthStorageBackend`) sigue\n * poseyendo el candado y el `ensureFileExists`/`ensureParentDir`; nosotros\n * solo transformamos el CONTENIDO que entra y sale del candado. Todo el\n * cifrado ocurre DENTRO de la sección crítica del candado que ya existía,\n * así que la seguridad frente a otros procesos de Ada no cambia.\n *\n * CLAVE: un secreto aleatorio de 256 bits en el LLAVERO del sistema (no una\n * passphrase memorizable — nadie va a teclear una contraseña para que el\n * CLI arranque). Se deriva de nada: se genera con randomBytes y se guarda\n * en Keychain la primera vez que hace falta. Sin llavero disponible (CI,\n * contenedor, Linux sin secret-service) NO SE CIFRA: una clave que vive en\n * el mismo disco que el fichero que protege es ofuscación, no cifrado, y\n * llamarlo cifrado sería mentir en la única parte del producto donde no se\n * puede mentir. Se avisa una vez, con una línea clara, y se sigue\n * funcionando en claro (mismo comportamiento que hoy).\n *\n * FORMATO: una cabecera literal al principio del fichero distingue claro de\n * cifrado — nunca adivinamos intentando JSON.parse (un fichero cifrado\n * corrupto a medias podría parsear igual como JSON basura y confundirse con\n * \"en claro\", perdiendo credenciales calladamente).\n *\n * MIGRACIÓN: en cada lectura, si el contenido está en claro se devuelve tal\n * cual (nunca bloquea al llamador) y se agenda un recifrado en segundo\n * plano con `setImmediate` — nunca DENTRO del candado que la propia lectura\n * mantiene abierto, porque volver a pedirlo desde dentro se autobloquearía.\n * En cada escritura (a través del wrapper) se cifra antes de tocar disco,\n * con copia de seguridad y escritura atómica (fichero temporal + rename):\n * si esto corrompe auth.json, el usuario pierde el acceso a TODOS sus\n * proveedores, así que no se sustituye el fichero real hasta que el\n * temporal esté completo en disco.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { createCipheriv, createDecipheriv, randomBytes } from \"node:crypto\";\nimport { chmodSync, existsSync, readFileSync, renameSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AuthOperationOptions, Credential } from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { stripBom } from \"../../utils/text.ts\";\nimport type { AuthStorageBackend } from \"../auth-storage.ts\";\n\n// ─── Formato: cabecera literal, nunca \"adivinada\" por JSON.parse ───────────\n\nconst CABECERA_CIFRADO = \"ADA-AUTHJSON-CIFRADO-V1\\n\";\n\ninterface SobreCifrado {\n\tiv: string; // base64\n\ttag: string; // base64 (GCM auth tag)\n\tdatos: string; // base64\n}\n\nfunction esFormatoCifrado(contenido: string): boolean {\n\treturn contenido.startsWith(CABECERA_CIFRADO);\n}\n\n// ─── Llavero del sistema (macOS Keychain vía `security`, sin bindings nativos) ───\n\nconst SERVICIO_LLAVERO_PRODUCCION = \"ada-cli-credenciales\";\nconst CUENTA_LLAVERO = \"auth-json-clave-maestra\";\nconst TIMEOUT_LLAVERO_MS = 5_000;\n\n/**\n * Bajo qué nombre vive la clave maestra en el llavero REAL de la máquina.\n *\n * Se puede sustituir por entorno porque las pruebas de este módulo necesitan un\n * llavero de verdad —no hay bindings nativos que fingir, y fingir `execFileSync`\n * probaría el mock, no el Keychain— y hasta ahora usaban la entrada de\n * PRODUCCIÓN. Con `__eliminarClaveDeLlaveroParaPruebas()` en su `afterEach`,\n * cada corrida de la suite BORRABA la clave maestra del usuario y creaba otra.\n *\n * Lo que eso deja detrás no es un inconveniente: el `~/.ada/agent/auth.json`\n * del usuario quedó cifrado con la clave anterior, así que pasa a ser\n * indescifrable PARA SIEMPRE, y su `.bak` también (se recifra con la misma\n * clave). Medido en esta máquina, con la huella SHA-256 de la clave del\n * llavero antes y después:\n *\n * == antes == 15900260def30338\n * npx vitest --run test/commit-mensaje.test.ts\n * == después == 15900260def30338 (intacta)\n * npx vitest --run test/credenciales-reposo.test.ts\n * == después == c8b382bb95b2285b (OTRA)\n *\n * Y AGENTS.md manda ejecutar la suite antes de dar nada por terminado, así que\n * el flujo de trabajo del propio proyecto rompía las credenciales del usuario.\n *\n * Falla CERRADO bajo vitest: si alguien quita el ajuste de `vitest.config.ts`,\n * las pruebas del llavero se caen con este mensaje en vez de volver\n * calladamente a morder la entrada de producción.\n */\nfunction servicioLlavero(): string {\n\tconst propio = process.env.ADA_LLAVERO_SERVICIO;\n\tif (propio) return propio;\n\tif (process.env.VITEST) {\n\t\tthrow new Error(\n\t\t\t\"Una prueba ha intentado usar la entrada de llavero de PRODUCCIÓN \" +\n\t\t\t\t`(\"${SERVICIO_LLAVERO_PRODUCCION}\"). Eso borra la clave maestra del usuario y deja su ` +\n\t\t\t\t\"auth.json indescifrable. Define ADA_LLAVERO_SERVICIO (lo hace vitest.config.ts).\",\n\t\t);\n\t}\n\treturn SERVICIO_LLAVERO_PRODUCCION;\n}\n\nfunction esMacOS(): boolean {\n\treturn typeof process !== \"undefined\" && process.platform === \"darwin\";\n}\n\n/**\n * True cuando hay un llavero de sistema utilizable en esta máquina.\n *\n * `ADA_SIN_LLAVERO=1` fuerza \"no disponible\" aunque estemos en macOS — es la\n * única forma de probar de verdad la rama \"sin llavero\" (headless/CI) sin\n * necesitar una máquina Linux, y también sirve de escape manual para quien\n * quiera desactivar el uso del Keychain explícitamente.\n */\nexport function hayLlaveroDisponible(): boolean {\n\treturn esMacOS() && process.env.ADA_SIN_LLAVERO !== \"1\";\n}\n\n/**\n * Tres estados, y la diferencia entre el segundo y el tercero costó las\n * credenciales de esta máquina.\n *\n * Antes esto devolvía `Buffer | null` y `null` significaba a la vez «todavía no\n * hay clave» y «no he podido leerla». Quien llamaba entendía lo primero,\n * generaba una clave nueva y la guardaba con `-U` (sobrescribir). Un fallo\n * PASAJERO de `security` —un tiempo de espera agotado con la máquina cargada,\n * el llavero bloqueado— bastaba para rotar la clave maestra y dejar\n * PERMANENTEMENTE ilegible todo `auth.json` cifrado con la anterior.\n *\n * Pasó de verdad el 2026-08-24 sobre `~/.ada/agent/auth.json`: seis\n * proveedores perdidos, sin recuperación posible, porque el llavero de macOS no\n * guarda historial.\n *\n * Es la familia de siempre —«no puedo» leído como «no hay»— pero aquí no\n * informa mal: DESTRUYE DATOS. Por eso son tres estados y no dos.\n */\ntype LecturaDeClave =\n\t| { estado: \"leida\"; clave: Buffer }\n\t| { estado: \"no-existe\" }\n\t| { estado: \"error\"; motivo: string };\n\n/** `security` devuelve 44 (errSecItemNotFound) cuando la entrada no está. */\nconst CODIGO_NO_ENCONTRADO = 44;\n\nfunction leerClaveDelLlavero(): LecturaDeClave {\n\tif (!hayLlaveroDisponible()) return { estado: \"no-existe\" };\n\t// Fuera del try a propósito: si `servicioLlavero()` se planta porque una\n\t// prueba iba a morder la entrada de producción, ese error tiene que SALIR.\n\t// Dentro del try acabaría clasificado como un `estado: \"error\"` cualquiera,\n\t// y lo que hay que hacer con él es parar, no seguir sin cifrar.\n\tconst servicio = servicioLlavero();\n\tlet salida: string;\n\ttry {\n\t\tsalida = execFileSync(\n\t\t\t\"/usr/bin/security\",\n\t\t\t[\"find-generic-password\", \"-s\", servicio, \"-a\", CUENTA_LLAVERO, \"-w\"],\n\t\t\t// stdio \"pipe\" en los tres canales: sin esto, `security` hereda\n\t\t\t// nuestro stderr y el \"could not be found in the keychain\" (normal\n\t\t\t// en el primer arranque, antes de crear la clave) se ve como si\n\t\t\t// algo hubiera ido mal.\n\t\t\t{ timeout: TIMEOUT_LLAVERO_MS, encoding: \"utf-8\", windowsHide: true, stdio: [\"pipe\", \"pipe\", \"pipe\"] },\n\t\t).trim();\n\t} catch (error) {\n\t\tconst e = error as NodeJS.ErrnoException & { status?: number | null };\n\t\tif (e.status === CODIGO_NO_ENCONTRADO) return { estado: \"no-existe\" };\n\t\t// Todo lo demás es un fallo del que NO se puede deducir que no haya\n\t\t// clave: tiempo agotado (`ETIMEDOUT`), llavero bloqueado, `security`\n\t\t// que no arranca. Rotar aquí es lo que destruyó las credenciales.\n\t\treturn { estado: \"error\", motivo: e.code ?? `security salió con ${e.status}` };\n\t}\n\tif (!salida) return { estado: \"error\", motivo: \"el llavero devolvió una entrada vacía\" };\n\tconst clave = Buffer.from(salida, \"base64\");\n\t// Una entrada presente pero con el tamaño equivocado también es un error, no\n\t// una ausencia: sobrescribirla tiraría la clave buena si el fallo está en la\n\t// lectura y no en el dato.\n\tif (clave.length !== 32)\n\t\treturn { estado: \"error\", motivo: `la clave del llavero mide ${clave.length} bytes, no 32` };\n\treturn { estado: \"leida\", clave };\n}\n\nfunction guardarClaveEnLlavero(clave: Buffer): boolean {\n\tif (!hayLlaveroDisponible()) return false;\n\tconst servicio = servicioLlavero(); // fuera del try: ver `leerClaveDelLlavero`\n\ttry {\n\t\t// -w sin valor en argv: la contraseña se pasa por stdin para que no quede\n\t\t// visible en `ps`/el historial del proceso (mismo patrón que\n\t\t// memory-engine/keychain.ts). Comprobado a mano: `security` pide el valor\n\t\t// DOS VECES por stdin (password + confirmación) aunque no haya terminal;\n\t\t// una sola línea deja la segunda lectura vacía y falla con \"passwords\n\t\t// don't match\".\n\t\tconst valor = clave.toString(\"base64\");\n\t\texecFileSync(\n\t\t\t\"/usr/bin/security\",\n\t\t\t// SIN `-U`. Con `-U` esto SOBRESCRIBE la entrada existente, y ese es el\n\t\t\t// segundo camino por el que se perdieron las credenciales de esta\n\t\t\t// máquina: un fallo de lectura hacía creer que no había clave y este\n\t\t\t// `-U` remataba tirando la buena. Sin él, `security` falla si ya existe,\n\t\t\t// que es justo la señal que quien llama necesita para releer.\n\t\t\t//\n\t\t\t// El PRIMER camino lo encontró la revisión de `hueco-commit` y es\n\t\t\t// distinto: las pruebas de este módulo borraban la entrada de\n\t\t\t// PRODUCCIÓN en su `afterEach`. Los dos arreglos hacen falta —\n\t\t\t// `servicioLlavero()` impide que una prueba toque la clave real, y esto\n\t\t\t// impide que un fallo pasajero la rote.\n\t\t\t[\"add-generic-password\", \"-s\", servicio, \"-a\", CUENTA_LLAVERO, \"-w\"],\n\t\t\t{\n\t\t\t\ttimeout: TIMEOUT_LLAVERO_MS,\n\t\t\t\twindowsHide: true,\n\t\t\t\tinput: `${valor}\\n${valor}\\n`,\n\t\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\t},\n\t\t);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nlet claveEnCache: Buffer | null | undefined; // undefined = aún no consultada\n\n/**\n * Clave maestra. `null` = no hay llavero en esta máquina (CI, contenedor), que\n * es el caso legítimo de \"no se cifra\". **Lanza** si el llavero está pero no se\n * ha podido leer: ahí seguir sería inventarse una clave nueva y perder lo\n * cifrado con la anterior.\n */\nfunction obtenerOCrearClave(): Buffer | null {\n\tif (!hayLlaveroDisponible()) return null;\n\tif (claveEnCache !== undefined) return claveEnCache;\n\n\tconst lectura = leerClaveDelLlavero();\n\tif (lectura.estado === \"leida\") {\n\t\tclaveEnCache = lectura.clave;\n\t\treturn claveEnCache;\n\t}\n\tif (lectura.estado === \"error\") {\n\t\t// Fallar cerrado. Un error aquí NO se cachea: el fallo puede ser pasajero\n\t\t// y el siguiente intento debe volver a preguntarle al llavero.\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer la clave maestra del llavero (${lectura.motivo}).\\n` +\n\t\t\t\t\"No se genera una nueva a propósito: eso dejaría ilegible para siempre el auth.json\\n\" +\n\t\t\t\t\"ya cifrado. Desbloquea el llavero y vuelve a intentarlo, o exporta ADA_SIN_LLAVERO=1\\n\" +\n\t\t\t\t\"para trabajar sin cifrado en reposo.\",\n\t\t);\n\t}\n\n\t// No existe: primera vez. Se crea SIN `-U`, para que dos procesos a la vez no\n\t// se pisen — quien pierde la carrera relee en vez de sobrescribir.\n\tconst nueva = randomBytes(32);\n\tif (guardarClaveEnLlavero(nueva)) {\n\t\tclaveEnCache = nueva;\n\t\treturn claveEnCache;\n\t}\n\tconst segunda = leerClaveDelLlavero();\n\tif (segunda.estado === \"leida\") {\n\t\tclaveEnCache = segunda.clave;\n\t\treturn claveEnCache;\n\t}\n\t// Ni se pudo crear ni leer: sin llavero utilizable. Se deja sin cifrar, que\n\t// es el comportamiento documentado, y se avisa una vez.\n\tclaveEnCache = null;\n\treturn null;\n}\n\n// ─── AES-256-GCM ────────────────────────────────────────────────────────────\n\nfunction cifrar(contenidoClaro: string, clave: Buffer): string {\n\tconst iv = randomBytes(12);\n\tconst cipher = createCipheriv(\"aes-256-gcm\", clave, iv);\n\tconst datos = Buffer.concat([cipher.update(contenidoClaro, \"utf-8\"), cipher.final()]);\n\tconst sobre: SobreCifrado = {\n\t\tiv: iv.toString(\"base64\"),\n\t\ttag: cipher.getAuthTag().toString(\"base64\"),\n\t\tdatos: datos.toString(\"base64\"),\n\t};\n\treturn CABECERA_CIFRADO + JSON.stringify(sobre);\n}\n\nfunction descifrar(contenidoFichero: string, clave: Buffer): string {\n\tconst sobre = JSON.parse(contenidoFichero.slice(CABECERA_CIFRADO.length)) as SobreCifrado;\n\tconst decipher = createDecipheriv(\"aes-256-gcm\", clave, Buffer.from(sobre.iv, \"base64\"));\n\tdecipher.setAuthTag(Buffer.from(sobre.tag, \"base64\"));\n\tconst claro = Buffer.concat([decipher.update(Buffer.from(sobre.datos, \"base64\")), decipher.final()]);\n\treturn claro.toString(\"utf-8\");\n}\n\n// ─── Error legible: nunca un stack para un fichero dañado ─────────────────\n\n/**\n * auth.json cifrado que no se puede leer: auth tag inválido, JSON del sobre\n * truncado, o llavero sin la clave que lo cifró (p.ej. copiado desde otra\n * máquina). \"no he podido leerlo\" y \"no hay credenciales\" son cosas\n * distintas: esto SIEMPRE es lo primero, nunca se confunde con un auth.json\n * vacío legítimo.\n */\nexport class AuthJsonCorruptoError extends Error {\n\tconstructor(authPath: string, causa: unknown) {\n\t\tsuper(\n\t\t\t`auth.json está cifrado pero no se ha podido leer (${authPath}).\\n` +\n\t\t\t\t`Puede estar dañado, o cifrado con la clave de otra máquina.\\n` +\n\t\t\t\t`Qué hacer:\\n` +\n\t\t\t\t` 1. Si existe una copia de seguridad, restáurala:\\n` +\n\t\t\t\t` cp \"${authPath}.bak\" \"${authPath}\"\\n` +\n\t\t\t\t` 2. Si no, vuelve a iniciar sesión con cada proveedor:\\n` +\n\t\t\t\t` ada-cli auth login <proveedor>\\n` +\n\t\t\t\t(causa instanceof Error ? `(detalle técnico: ${causa.message})` : \"\"),\n\t\t);\n\t\tthis.name = \"AuthJsonCorruptoError\";\n\t}\n}\n\n// ─── Escritura: copia de seguridad + atómica (temporal + rename) ──────────\n\nfunction escrituraAtomicaConCopia(authPath: string, contenido: string, contenidoParaCopia?: string): void {\n\t// El permiso del fichero (0600, o 0660 si un administrador lo gestiona) es\n\t// intencional y no es nuestro para decidir — igual que\n\t// AUTH_FILE_WRITE_OPTIONS en auth-storage.ts, que solo fija el modo al\n\t// CREAR. Un rename sustituye el inodo entero, así que sin esto el permiso\n\t// original se perdería silenciosamente en cada recifrado.\n\tconst modoExistente = existsSync(authPath) ? statSync(authPath).mode & 0o777 : 0o600;\n\t// Copia ANTES de tocar el fichero real: si el rename de abajo no llegara a\n\t// completarse (disco lleno a mitad, proceso matado entre write y rename),\n\t// .bak es la única vía para no perder el acceso a TODOS los proveedores.\n\t//\n\t// `contenidoParaCopia` (si se pasa) sustituye lo que hay en disco: la\n\t// primera migración de un auth.json en claro pasa por aquí con el fichero\n\t// TODAVÍA en claro sobre disco, y una copia literal (`readFileSync`)\n\t// dejaría el secreto en claro para siempre en `.bak` — con el mismo modo\n\t// 0600 que el propio auth.json ya tenía, así que no cierra nada: reabre\n\t// exactamente el agujero que este módulo existe para tapar. Quien llama\n\t// (`escribirConCifradoSiHayClave`) cifra ese contenido antes de pasarlo.\n\tif (existsSync(authPath)) {\n\t\tconst backupPath = `${authPath}.bak`;\n\t\twriteFileSync(backupPath, contenidoParaCopia ?? readFileSync(authPath), { mode: modoExistente });\n\t\tchmodSync(backupPath, modoExistente); // mismo motivo que el temporal: el umask no debe recortar el modo\n\t}\n\tconst tmpPath = `${authPath}.tmp-${process.pid}-${Date.now()}`;\n\twriteFileSync(tmpPath, contenido, { encoding: \"utf-8\", mode: modoExistente });\n\t// El `mode` de writeFileSync pasa por el umask del proceso al CREAR un\n\t// fichero (0660 con umask 022 se queda en 0640) — algo que un `writeFileSync`\n\t// normal sobre un fichero YA existente no sufre, porque el modo se ignora\n\t// del todo si no hay creación. Como el temporal siempre es nuevo, hace\n\t// falta un chmod explícito (ignora el umask) para replicar ese mismo\n\t// comportamiento y no perder un modo gestionado por un administrador.\n\tchmodSync(tmpPath, modoExistente);\n\trenameSync(tmpPath, authPath); // rename es atómico dentro del mismo filesystem\n}\n\nlet avisoSinLlaveroMostrado = false;\n\n/** Se llama tanto al detectar un fichero en claro sin poder cifrarlo como al querer escribir sin llavero. */\nfunction avisarSinLlaveroUnaVez(): void {\n\tif (avisoSinLlaveroMostrado) return;\n\tavisoSinLlaveroMostrado = true;\n\tconsole.error(\n\t\t`[ada] auth.json NO se cifra: no hay llavero del sistema disponible en esta máquina ` +\n\t\t\t`(CI, contenedor, o Linux sin secret-service). Una clave guardada en el mismo disco que ` +\n\t\t\t`el fichero que protege sería ofuscación, no cifrado — se deja en claro con permisos 0600, ` +\n\t\t\t`como hasta ahora.`,\n\t);\n}\n\nfunction escribirConCifradoSiHayClave(authPath: string, contenidoClaro: string): void {\n\tconst clave = obtenerOCrearClave();\n\tif (!clave) {\n\t\tavisarSinLlaveroUnaVez();\n\t\tescrituraAtomicaConCopia(authPath, contenidoClaro);\n\t\treturn;\n\t}\n\t// Si lo que hay AHORA en disco está en claro (primera migración), la copia\n\t// de seguridad se cifra también con la misma clave — en vez de dejar que\n\t// `escrituraAtomicaConCopia` copie los bytes tal cual. `.bak` sigue\n\t// sirviendo para recuperar de una escritura a medias: al restaurarlo,\n\t// `decodificarParaLectura` reconoce la cabecera y lo descifra igual que al\n\t// auth.json real.\n\tconst actual = existsSync(authPath) ? readFileSync(authPath, \"utf-8\") : undefined;\n\tconst copiaSegura = actual !== undefined && !esFormatoCifrado(actual) ? cifrar(actual, clave) : actual;\n\tescrituraAtomicaConCopia(authPath, cifrar(contenidoClaro, clave), copiaSegura);\n}\n\nlet avisoCorruptoMostrado = false;\n\n/**\n * `AuthStorage.reload()` (upstream, `auth-storage.ts`) atrapa CUALQUIER error\n * de su backend y lo trata como \"transitorio, conserva el último estado\n * bueno\" — y sin `signal`, `readLatestData()` hace lo mismo. Si solo\n * lanzáramos, ese catch se come el error y el llamador ve \"no hay\n * credenciales\" en vez de \"no he podido leerlas\": exactamente la confusión\n * que no puede pasar (ver AGENTS.md, regla de errores). Por eso esto SIEMPRE\n * imprime la guía en stderr, una vez, ANTES de lanzar: quien atrape la\n * excepción se la queda para sí, pero el aviso ya salió por su cuenta.\n */\nfunction lanzarCorrupto(authPath: string, causa: unknown): never {\n\tconst error = new AuthJsonCorruptoError(authPath, causa);\n\tif (!avisoCorruptoMostrado) {\n\t\tavisoCorruptoMostrado = true;\n\t\tconsole.error(`[ada] ${error.message}`);\n\t}\n\tthrow error;\n}\n\n/** Descifra si hace falta; el contenido en claro se devuelve tal cual, sin adivinar. */\nfunction decodificarParaLectura(authPath: string, contenidoBruto: string | undefined): string | undefined {\n\tif (contenidoBruto === undefined || !esFormatoCifrado(contenidoBruto)) return contenidoBruto;\n\tconst clave = obtenerOCrearClave();\n\tif (!clave) {\n\t\tlanzarCorrupto(\n\t\t\tauthPath,\n\t\t\tnew Error(\"el fichero está cifrado pero no hay llavero disponible para descifrarlo aquí\"),\n\t\t);\n\t}\n\ttry {\n\t\treturn descifrar(contenidoBruto, clave);\n\t} catch (error) {\n\t\tlanzarCorrupto(authPath, error);\n\t}\n}\n\n// ─── Migración en segundo plano (nunca dentro del candado de la lectura) ──\n\nconst migracionEnCursoPara = new Set<string>();\n\nfunction programarMigracionEnSegundoPlano(interno: AuthStorageBackend, authPath: string): void {\n\tif (!hayLlaveroDisponible()) {\n\t\t// Sin llavero no hay nada que recifrar: pedir el candado igualmente\n\t\t// solo para reescribir el mismo texto en claro es trabajo (y contención\n\t\t// entre procesos) sin beneficio. Basta con avisar.\n\t\tavisarSinLlaveroUnaVez();\n\t\treturn;\n\t}\n\tif (migracionEnCursoPara.has(authPath)) return; // ya hay una en vuelo; la lectura repetida no acumula trabajo\n\tmigracionEnCursoPara.add(authPath);\n\t// setImmediate: la lectura que detectó \"en claro\" todavía mantiene el\n\t// candado de `interno` abierto en su propia pila de llamadas. Pedirlo de\n\t// nuevo aquí mismo se autobloquearía; con setImmediate se agenda para\n\t// DESPUÉS de que esa lectura suelte el candado.\n\tsetImmediate(() => {\n\t\tvoid interno\n\t\t\t.withLockAsync(async (actual) => {\n\t\t\t\tif (actual === undefined || esFormatoCifrado(actual)) {\n\t\t\t\t\treturn { result: undefined }; // otro proceso ya migró, o no hay nada que migrar\n\t\t\t\t}\n\t\t\t\tescribirConCifradoSiHayClave(authPath, actual);\n\t\t\t\t// Ya escribimos nosotros mismos (copia + atómico); devolver `next`\n\t\t\t\t// aquí haría que el backend interno reescribiera SIN copia de\n\t\t\t\t// seguridad, pisando la que acabamos de crear.\n\t\t\t\treturn { result: undefined };\n\t\t\t}, {})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[ada] no se pudo recifrar auth.json en segundo plano: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tmigracionEnCursoPara.delete(authPath);\n\t\t\t});\n\t});\n}\n\n// ─── El wrapper ─────────────────────────────────────────────────────────────\n\n/**\n * Envuelve un `AuthStorageBackend` (normalmente un `FileAuthStorageBackend`\n * ya construido, que sigue poseyendo el candado entre procesos) para que\n * cifre/descifre en reposo de forma transparente para quien lo use.\n */\nexport function envolverBackendCifrado(interno: AuthStorageBackend, authPath: string): AuthStorageBackend {\n\treturn {\n\t\twithLock<T>(fn: (current: string | undefined) => { result: T; next?: string }): T {\n\t\t\treturn interno.withLock((actual) => {\n\t\t\t\tconst claro = decodificarParaLectura(authPath, actual);\n\t\t\t\tif (actual !== undefined && !esFormatoCifrado(actual)) {\n\t\t\t\t\tprogramarMigracionEnSegundoPlano(interno, authPath);\n\t\t\t\t}\n\t\t\t\tconst { result, next } = fn(claro);\n\t\t\t\tif (next !== undefined) escribirConCifradoSiHayClave(authPath, next);\n\t\t\t\treturn { result }; // `next` siempre undefined hacia `interno`: la escritura ya ocurrió arriba\n\t\t\t});\n\t\t},\n\t\tasync withLockAsync<T>(\n\t\t\tfn: (current: string | undefined) => Promise<{ result: T; next?: string }>,\n\t\t\toptions?: AuthOperationOptions,\n\t\t): Promise<T> {\n\t\t\treturn interno.withLockAsync(async (actual) => {\n\t\t\t\tconst claro = decodificarParaLectura(authPath, actual);\n\t\t\t\tif (actual !== undefined && !esFormatoCifrado(actual)) {\n\t\t\t\t\tprogramarMigracionEnSegundoPlano(interno, authPath);\n\t\t\t\t}\n\t\t\t\tconst { result, next } = await fn(claro);\n\t\t\t\tif (next !== undefined) escribirConCifradoSiHayClave(authPath, next);\n\t\t\t\treturn { result };\n\t\t\t}, options);\n\t\t},\n\t};\n}\n\n/**\n * Lectura síncrona de UNA credencial ya guardada, descifrando si hace falta.\n *\n * Sustituye a `readStoredCredential` (upstream, `auth-storage.ts`), exportada\n * en `index.ts` como parte de la API pública del SDK (`@hoilab/ada-cli`) para\n * lecturas puntuales sin instanciar `AuthStorage`. Esa función hace su propio\n * `readFileSync` + `JSON.parse` sin pasar por este módulo: con auth.json ya\n * migrado a cifrado, la cabecera `ADA-AUTHJSON-CIFRADO-V1\\n` delante del JSON\n * hace que `JSON.parse` lance un `SyntaxError` que su `catch { return\n * undefined; }` convierte en \"no hay credencial\" — indistinguible de un\n * proveedor sin configurar, para CUALQUIER consumidor de esta función\n * pública, presente o futuro. Mismo nombre y misma firma (con el mismo valor\n * por defecto de `authPath`) para seguir siendo un reemplazo directo.\n */\nexport function leerCredencialGuardada(\n\tproviderId: string,\n\tauthPath: string = join(getAgentDir(), \"auth.json\"),\n): Credential | undefined {\n\ttry {\n\t\tconst bruto = stripBom(readFileSync(authPath, \"utf-8\"));\n\t\tconst claro = decodificarParaLectura(authPath, bruto);\n\t\tif (claro === undefined) return undefined;\n\t\tconst datos = JSON.parse(claro) as Record<string, Credential>;\n\t\treturn datos[providerId];\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Solo para pruebas: limpia el estado en memoria del módulo entre casos. */\nexport function __resetEstadoParaPruebas(): void {\n\tclaveEnCache = undefined;\n\tavisoSinLlaveroMostrado = false;\n\tavisoCorruptoMostrado = false;\n\tmigracionEnCursoPara.clear();\n}\n\n/** Solo para pruebas: borra la clave maestra del llavero real de esta máquina. */\nexport function __eliminarClaveDeLlaveroParaPruebas(): void {\n\tif (!esMacOS()) return;\n\tconst servicio = servicioLlavero(); // fuera del try: ver `leerClaveDelLlavero`\n\ttry {\n\t\texecFileSync(\"/usr/bin/security\", [\"delete-generic-password\", \"-s\", servicio, \"-a\", CUENTA_LLAVERO], {\n\t\t\ttimeout: TIMEOUT_LLAVERO_MS,\n\t\t\twindowsHide: true,\n\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t});\n\t} catch {\n\t\t// no había clave que borrar\n\t}\n}\n"]}
@@ -0,0 +1,489 @@
1
+ /**
2
+ * Cifrado en reposo de `<agentDir>/auth.json`.
3
+ *
4
+ * EL HUECO: vendemos "vault cifrado con clasificación y auditoría"
5
+ * (memory-engine/vault.ts) mientras las claves de API y los tokens OAuth de
6
+ * los proveedores viven en auth.json EN CLARO, con permisos 0600 pero
7
+ * legibles por cualquier proceso del usuario. La política de aprobación
8
+ * (aprobacion/politica.ts) ya le impide leerlo a NUESTRO agente; esto le
9
+ * cierra la puerta a cualquier OTRO proceso.
10
+ *
11
+ * DISEÑO — envolver, no sustituir:
12
+ * `auth-storage.ts` es de upstream y el presupuesto de fork está agotado
13
+ * (ver scripts/sync-ada.sh --check). No podemos reescribir su lectura/
14
+ * escritura de fichero ni su bloqueo entre procesos (proper-lockfile) sin
15
+ * pagar hunks que no tenemos. En vez de eso, ENVOLVEMOS su
16
+ * `AuthStorageBackend`: el interior (`FileAuthStorageBackend`) sigue
17
+ * poseyendo el candado y el `ensureFileExists`/`ensureParentDir`; nosotros
18
+ * solo transformamos el CONTENIDO que entra y sale del candado. Todo el
19
+ * cifrado ocurre DENTRO de la sección crítica del candado que ya existía,
20
+ * así que la seguridad frente a otros procesos de Ada no cambia.
21
+ *
22
+ * CLAVE: un secreto aleatorio de 256 bits en el LLAVERO del sistema (no una
23
+ * passphrase memorizable — nadie va a teclear una contraseña para que el
24
+ * CLI arranque). Se deriva de nada: se genera con randomBytes y se guarda
25
+ * en Keychain la primera vez que hace falta. Sin llavero disponible (CI,
26
+ * contenedor, Linux sin secret-service) NO SE CIFRA: una clave que vive en
27
+ * el mismo disco que el fichero que protege es ofuscación, no cifrado, y
28
+ * llamarlo cifrado sería mentir en la única parte del producto donde no se
29
+ * puede mentir. Se avisa una vez, con una línea clara, y se sigue
30
+ * funcionando en claro (mismo comportamiento que hoy).
31
+ *
32
+ * FORMATO: una cabecera literal al principio del fichero distingue claro de
33
+ * cifrado — nunca adivinamos intentando JSON.parse (un fichero cifrado
34
+ * corrupto a medias podría parsear igual como JSON basura y confundirse con
35
+ * "en claro", perdiendo credenciales calladamente).
36
+ *
37
+ * MIGRACIÓN: en cada lectura, si el contenido está en claro se devuelve tal
38
+ * cual (nunca bloquea al llamador) y se agenda un recifrado en segundo
39
+ * plano con `setImmediate` — nunca DENTRO del candado que la propia lectura
40
+ * mantiene abierto, porque volver a pedirlo desde dentro se autobloquearía.
41
+ * En cada escritura (a través del wrapper) se cifra antes de tocar disco,
42
+ * con copia de seguridad y escritura atómica (fichero temporal + rename):
43
+ * si esto corrompe auth.json, el usuario pierde el acceso a TODOS sus
44
+ * proveedores, así que no se sustituye el fichero real hasta que el
45
+ * temporal esté completo en disco.
46
+ */
47
+ import { execFileSync } from "node:child_process";
48
+ import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
49
+ import { chmodSync, existsSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
50
+ import { join } from "node:path";
51
+ import { getAgentDir } from "../../config.js";
52
+ import { stripBom } from "../../utils/text.js";
53
+ // ─── Formato: cabecera literal, nunca "adivinada" por JSON.parse ───────────
54
+ const CABECERA_CIFRADO = "ADA-AUTHJSON-CIFRADO-V1\n";
55
+ function esFormatoCifrado(contenido) {
56
+ return contenido.startsWith(CABECERA_CIFRADO);
57
+ }
58
+ // ─── Llavero del sistema (macOS Keychain vía `security`, sin bindings nativos) ───
59
+ const SERVICIO_LLAVERO_PRODUCCION = "ada-cli-credenciales";
60
+ const CUENTA_LLAVERO = "auth-json-clave-maestra";
61
+ const TIMEOUT_LLAVERO_MS = 5_000;
62
+ /**
63
+ * Bajo qué nombre vive la clave maestra en el llavero REAL de la máquina.
64
+ *
65
+ * Se puede sustituir por entorno porque las pruebas de este módulo necesitan un
66
+ * llavero de verdad —no hay bindings nativos que fingir, y fingir `execFileSync`
67
+ * probaría el mock, no el Keychain— y hasta ahora usaban la entrada de
68
+ * PRODUCCIÓN. Con `__eliminarClaveDeLlaveroParaPruebas()` en su `afterEach`,
69
+ * cada corrida de la suite BORRABA la clave maestra del usuario y creaba otra.
70
+ *
71
+ * Lo que eso deja detrás no es un inconveniente: el `~/.ada/agent/auth.json`
72
+ * del usuario quedó cifrado con la clave anterior, así que pasa a ser
73
+ * indescifrable PARA SIEMPRE, y su `.bak` también (se recifra con la misma
74
+ * clave). Medido en esta máquina, con la huella SHA-256 de la clave del
75
+ * llavero antes y después:
76
+ *
77
+ * == antes == 15900260def30338
78
+ * npx vitest --run test/commit-mensaje.test.ts
79
+ * == después == 15900260def30338 (intacta)
80
+ * npx vitest --run test/credenciales-reposo.test.ts
81
+ * == después == c8b382bb95b2285b (OTRA)
82
+ *
83
+ * Y AGENTS.md manda ejecutar la suite antes de dar nada por terminado, así que
84
+ * el flujo de trabajo del propio proyecto rompía las credenciales del usuario.
85
+ *
86
+ * Falla CERRADO bajo vitest: si alguien quita el ajuste de `vitest.config.ts`,
87
+ * las pruebas del llavero se caen con este mensaje en vez de volver
88
+ * calladamente a morder la entrada de producción.
89
+ */
90
+ function servicioLlavero() {
91
+ const propio = process.env.ADA_LLAVERO_SERVICIO;
92
+ if (propio)
93
+ return propio;
94
+ if (process.env.VITEST) {
95
+ throw new Error("Una prueba ha intentado usar la entrada de llavero de PRODUCCIÓN " +
96
+ `("${SERVICIO_LLAVERO_PRODUCCION}"). Eso borra la clave maestra del usuario y deja su ` +
97
+ "auth.json indescifrable. Define ADA_LLAVERO_SERVICIO (lo hace vitest.config.ts).");
98
+ }
99
+ return SERVICIO_LLAVERO_PRODUCCION;
100
+ }
101
+ function esMacOS() {
102
+ return typeof process !== "undefined" && process.platform === "darwin";
103
+ }
104
+ /**
105
+ * True cuando hay un llavero de sistema utilizable en esta máquina.
106
+ *
107
+ * `ADA_SIN_LLAVERO=1` fuerza "no disponible" aunque estemos en macOS — es la
108
+ * única forma de probar de verdad la rama "sin llavero" (headless/CI) sin
109
+ * necesitar una máquina Linux, y también sirve de escape manual para quien
110
+ * quiera desactivar el uso del Keychain explícitamente.
111
+ */
112
+ export function hayLlaveroDisponible() {
113
+ return esMacOS() && process.env.ADA_SIN_LLAVERO !== "1";
114
+ }
115
+ /** `security` devuelve 44 (errSecItemNotFound) cuando la entrada no está. */
116
+ const CODIGO_NO_ENCONTRADO = 44;
117
+ function leerClaveDelLlavero() {
118
+ if (!hayLlaveroDisponible())
119
+ return { estado: "no-existe" };
120
+ // Fuera del try a propósito: si `servicioLlavero()` se planta porque una
121
+ // prueba iba a morder la entrada de producción, ese error tiene que SALIR.
122
+ // Dentro del try acabaría clasificado como un `estado: "error"` cualquiera,
123
+ // y lo que hay que hacer con él es parar, no seguir sin cifrar.
124
+ const servicio = servicioLlavero();
125
+ let salida;
126
+ try {
127
+ salida = execFileSync("/usr/bin/security", ["find-generic-password", "-s", servicio, "-a", CUENTA_LLAVERO, "-w"],
128
+ // stdio "pipe" en los tres canales: sin esto, `security` hereda
129
+ // nuestro stderr y el "could not be found in the keychain" (normal
130
+ // en el primer arranque, antes de crear la clave) se ve como si
131
+ // algo hubiera ido mal.
132
+ { timeout: TIMEOUT_LLAVERO_MS, encoding: "utf-8", windowsHide: true, stdio: ["pipe", "pipe", "pipe"] }).trim();
133
+ }
134
+ catch (error) {
135
+ const e = error;
136
+ if (e.status === CODIGO_NO_ENCONTRADO)
137
+ return { estado: "no-existe" };
138
+ // Todo lo demás es un fallo del que NO se puede deducir que no haya
139
+ // clave: tiempo agotado (`ETIMEDOUT`), llavero bloqueado, `security`
140
+ // que no arranca. Rotar aquí es lo que destruyó las credenciales.
141
+ return { estado: "error", motivo: e.code ?? `security salió con ${e.status}` };
142
+ }
143
+ if (!salida)
144
+ return { estado: "error", motivo: "el llavero devolvió una entrada vacía" };
145
+ const clave = Buffer.from(salida, "base64");
146
+ // Una entrada presente pero con el tamaño equivocado también es un error, no
147
+ // una ausencia: sobrescribirla tiraría la clave buena si el fallo está en la
148
+ // lectura y no en el dato.
149
+ if (clave.length !== 32)
150
+ return { estado: "error", motivo: `la clave del llavero mide ${clave.length} bytes, no 32` };
151
+ return { estado: "leida", clave };
152
+ }
153
+ function guardarClaveEnLlavero(clave) {
154
+ if (!hayLlaveroDisponible())
155
+ return false;
156
+ const servicio = servicioLlavero(); // fuera del try: ver `leerClaveDelLlavero`
157
+ try {
158
+ // -w sin valor en argv: la contraseña se pasa por stdin para que no quede
159
+ // visible en `ps`/el historial del proceso (mismo patrón que
160
+ // memory-engine/keychain.ts). Comprobado a mano: `security` pide el valor
161
+ // DOS VECES por stdin (password + confirmación) aunque no haya terminal;
162
+ // una sola línea deja la segunda lectura vacía y falla con "passwords
163
+ // don't match".
164
+ const valor = clave.toString("base64");
165
+ execFileSync("/usr/bin/security",
166
+ // SIN `-U`. Con `-U` esto SOBRESCRIBE la entrada existente, y ese es el
167
+ // segundo camino por el que se perdieron las credenciales de esta
168
+ // máquina: un fallo de lectura hacía creer que no había clave y este
169
+ // `-U` remataba tirando la buena. Sin él, `security` falla si ya existe,
170
+ // que es justo la señal que quien llama necesita para releer.
171
+ //
172
+ // El PRIMER camino lo encontró la revisión de `hueco-commit` y es
173
+ // distinto: las pruebas de este módulo borraban la entrada de
174
+ // PRODUCCIÓN en su `afterEach`. Los dos arreglos hacen falta —
175
+ // `servicioLlavero()` impide que una prueba toque la clave real, y esto
176
+ // impide que un fallo pasajero la rote.
177
+ ["add-generic-password", "-s", servicio, "-a", CUENTA_LLAVERO, "-w"], {
178
+ timeout: TIMEOUT_LLAVERO_MS,
179
+ windowsHide: true,
180
+ input: `${valor}\n${valor}\n`,
181
+ stdio: ["pipe", "pipe", "pipe"],
182
+ });
183
+ return true;
184
+ }
185
+ catch {
186
+ return false;
187
+ }
188
+ }
189
+ let claveEnCache; // undefined = aún no consultada
190
+ /**
191
+ * Clave maestra. `null` = no hay llavero en esta máquina (CI, contenedor), que
192
+ * es el caso legítimo de "no se cifra". **Lanza** si el llavero está pero no se
193
+ * ha podido leer: ahí seguir sería inventarse una clave nueva y perder lo
194
+ * cifrado con la anterior.
195
+ */
196
+ function obtenerOCrearClave() {
197
+ if (!hayLlaveroDisponible())
198
+ return null;
199
+ if (claveEnCache !== undefined)
200
+ return claveEnCache;
201
+ const lectura = leerClaveDelLlavero();
202
+ if (lectura.estado === "leida") {
203
+ claveEnCache = lectura.clave;
204
+ return claveEnCache;
205
+ }
206
+ if (lectura.estado === "error") {
207
+ // Fallar cerrado. Un error aquí NO se cachea: el fallo puede ser pasajero
208
+ // y el siguiente intento debe volver a preguntarle al llavero.
209
+ throw new Error(`No se ha podido leer la clave maestra del llavero (${lectura.motivo}).\n` +
210
+ "No se genera una nueva a propósito: eso dejaría ilegible para siempre el auth.json\n" +
211
+ "ya cifrado. Desbloquea el llavero y vuelve a intentarlo, o exporta ADA_SIN_LLAVERO=1\n" +
212
+ "para trabajar sin cifrado en reposo.");
213
+ }
214
+ // No existe: primera vez. Se crea SIN `-U`, para que dos procesos a la vez no
215
+ // se pisen — quien pierde la carrera relee en vez de sobrescribir.
216
+ const nueva = randomBytes(32);
217
+ if (guardarClaveEnLlavero(nueva)) {
218
+ claveEnCache = nueva;
219
+ return claveEnCache;
220
+ }
221
+ const segunda = leerClaveDelLlavero();
222
+ if (segunda.estado === "leida") {
223
+ claveEnCache = segunda.clave;
224
+ return claveEnCache;
225
+ }
226
+ // Ni se pudo crear ni leer: sin llavero utilizable. Se deja sin cifrar, que
227
+ // es el comportamiento documentado, y se avisa una vez.
228
+ claveEnCache = null;
229
+ return null;
230
+ }
231
+ // ─── AES-256-GCM ────────────────────────────────────────────────────────────
232
+ function cifrar(contenidoClaro, clave) {
233
+ const iv = randomBytes(12);
234
+ const cipher = createCipheriv("aes-256-gcm", clave, iv);
235
+ const datos = Buffer.concat([cipher.update(contenidoClaro, "utf-8"), cipher.final()]);
236
+ const sobre = {
237
+ iv: iv.toString("base64"),
238
+ tag: cipher.getAuthTag().toString("base64"),
239
+ datos: datos.toString("base64"),
240
+ };
241
+ return CABECERA_CIFRADO + JSON.stringify(sobre);
242
+ }
243
+ function descifrar(contenidoFichero, clave) {
244
+ const sobre = JSON.parse(contenidoFichero.slice(CABECERA_CIFRADO.length));
245
+ const decipher = createDecipheriv("aes-256-gcm", clave, Buffer.from(sobre.iv, "base64"));
246
+ decipher.setAuthTag(Buffer.from(sobre.tag, "base64"));
247
+ const claro = Buffer.concat([decipher.update(Buffer.from(sobre.datos, "base64")), decipher.final()]);
248
+ return claro.toString("utf-8");
249
+ }
250
+ // ─── Error legible: nunca un stack para un fichero dañado ─────────────────
251
+ /**
252
+ * auth.json cifrado que no se puede leer: auth tag inválido, JSON del sobre
253
+ * truncado, o llavero sin la clave que lo cifró (p.ej. copiado desde otra
254
+ * máquina). "no he podido leerlo" y "no hay credenciales" son cosas
255
+ * distintas: esto SIEMPRE es lo primero, nunca se confunde con un auth.json
256
+ * vacío legítimo.
257
+ */
258
+ export class AuthJsonCorruptoError extends Error {
259
+ constructor(authPath, causa) {
260
+ super(`auth.json está cifrado pero no se ha podido leer (${authPath}).\n` +
261
+ `Puede estar dañado, o cifrado con la clave de otra máquina.\n` +
262
+ `Qué hacer:\n` +
263
+ ` 1. Si existe una copia de seguridad, restáurala:\n` +
264
+ ` cp "${authPath}.bak" "${authPath}"\n` +
265
+ ` 2. Si no, vuelve a iniciar sesión con cada proveedor:\n` +
266
+ ` ada-cli auth login <proveedor>\n` +
267
+ (causa instanceof Error ? `(detalle técnico: ${causa.message})` : ""));
268
+ this.name = "AuthJsonCorruptoError";
269
+ }
270
+ }
271
+ // ─── Escritura: copia de seguridad + atómica (temporal + rename) ──────────
272
+ function escrituraAtomicaConCopia(authPath, contenido, contenidoParaCopia) {
273
+ // El permiso del fichero (0600, o 0660 si un administrador lo gestiona) es
274
+ // intencional y no es nuestro para decidir — igual que
275
+ // AUTH_FILE_WRITE_OPTIONS en auth-storage.ts, que solo fija el modo al
276
+ // CREAR. Un rename sustituye el inodo entero, así que sin esto el permiso
277
+ // original se perdería silenciosamente en cada recifrado.
278
+ const modoExistente = existsSync(authPath) ? statSync(authPath).mode & 0o777 : 0o600;
279
+ // Copia ANTES de tocar el fichero real: si el rename de abajo no llegara a
280
+ // completarse (disco lleno a mitad, proceso matado entre write y rename),
281
+ // .bak es la única vía para no perder el acceso a TODOS los proveedores.
282
+ //
283
+ // `contenidoParaCopia` (si se pasa) sustituye lo que hay en disco: la
284
+ // primera migración de un auth.json en claro pasa por aquí con el fichero
285
+ // TODAVÍA en claro sobre disco, y una copia literal (`readFileSync`)
286
+ // dejaría el secreto en claro para siempre en `.bak` — con el mismo modo
287
+ // 0600 que el propio auth.json ya tenía, así que no cierra nada: reabre
288
+ // exactamente el agujero que este módulo existe para tapar. Quien llama
289
+ // (`escribirConCifradoSiHayClave`) cifra ese contenido antes de pasarlo.
290
+ if (existsSync(authPath)) {
291
+ const backupPath = `${authPath}.bak`;
292
+ writeFileSync(backupPath, contenidoParaCopia ?? readFileSync(authPath), { mode: modoExistente });
293
+ chmodSync(backupPath, modoExistente); // mismo motivo que el temporal: el umask no debe recortar el modo
294
+ }
295
+ const tmpPath = `${authPath}.tmp-${process.pid}-${Date.now()}`;
296
+ writeFileSync(tmpPath, contenido, { encoding: "utf-8", mode: modoExistente });
297
+ // El `mode` de writeFileSync pasa por el umask del proceso al CREAR un
298
+ // fichero (0660 con umask 022 se queda en 0640) — algo que un `writeFileSync`
299
+ // normal sobre un fichero YA existente no sufre, porque el modo se ignora
300
+ // del todo si no hay creación. Como el temporal siempre es nuevo, hace
301
+ // falta un chmod explícito (ignora el umask) para replicar ese mismo
302
+ // comportamiento y no perder un modo gestionado por un administrador.
303
+ chmodSync(tmpPath, modoExistente);
304
+ renameSync(tmpPath, authPath); // rename es atómico dentro del mismo filesystem
305
+ }
306
+ let avisoSinLlaveroMostrado = false;
307
+ /** Se llama tanto al detectar un fichero en claro sin poder cifrarlo como al querer escribir sin llavero. */
308
+ function avisarSinLlaveroUnaVez() {
309
+ if (avisoSinLlaveroMostrado)
310
+ return;
311
+ avisoSinLlaveroMostrado = true;
312
+ console.error(`[ada] auth.json NO se cifra: no hay llavero del sistema disponible en esta máquina ` +
313
+ `(CI, contenedor, o Linux sin secret-service). Una clave guardada en el mismo disco que ` +
314
+ `el fichero que protege sería ofuscación, no cifrado — se deja en claro con permisos 0600, ` +
315
+ `como hasta ahora.`);
316
+ }
317
+ function escribirConCifradoSiHayClave(authPath, contenidoClaro) {
318
+ const clave = obtenerOCrearClave();
319
+ if (!clave) {
320
+ avisarSinLlaveroUnaVez();
321
+ escrituraAtomicaConCopia(authPath, contenidoClaro);
322
+ return;
323
+ }
324
+ // Si lo que hay AHORA en disco está en claro (primera migración), la copia
325
+ // de seguridad se cifra también con la misma clave — en vez de dejar que
326
+ // `escrituraAtomicaConCopia` copie los bytes tal cual. `.bak` sigue
327
+ // sirviendo para recuperar de una escritura a medias: al restaurarlo,
328
+ // `decodificarParaLectura` reconoce la cabecera y lo descifra igual que al
329
+ // auth.json real.
330
+ const actual = existsSync(authPath) ? readFileSync(authPath, "utf-8") : undefined;
331
+ const copiaSegura = actual !== undefined && !esFormatoCifrado(actual) ? cifrar(actual, clave) : actual;
332
+ escrituraAtomicaConCopia(authPath, cifrar(contenidoClaro, clave), copiaSegura);
333
+ }
334
+ let avisoCorruptoMostrado = false;
335
+ /**
336
+ * `AuthStorage.reload()` (upstream, `auth-storage.ts`) atrapa CUALQUIER error
337
+ * de su backend y lo trata como "transitorio, conserva el último estado
338
+ * bueno" — y sin `signal`, `readLatestData()` hace lo mismo. Si solo
339
+ * lanzáramos, ese catch se come el error y el llamador ve "no hay
340
+ * credenciales" en vez de "no he podido leerlas": exactamente la confusión
341
+ * que no puede pasar (ver AGENTS.md, regla de errores). Por eso esto SIEMPRE
342
+ * imprime la guía en stderr, una vez, ANTES de lanzar: quien atrape la
343
+ * excepción se la queda para sí, pero el aviso ya salió por su cuenta.
344
+ */
345
+ function lanzarCorrupto(authPath, causa) {
346
+ const error = new AuthJsonCorruptoError(authPath, causa);
347
+ if (!avisoCorruptoMostrado) {
348
+ avisoCorruptoMostrado = true;
349
+ console.error(`[ada] ${error.message}`);
350
+ }
351
+ throw error;
352
+ }
353
+ /** Descifra si hace falta; el contenido en claro se devuelve tal cual, sin adivinar. */
354
+ function decodificarParaLectura(authPath, contenidoBruto) {
355
+ if (contenidoBruto === undefined || !esFormatoCifrado(contenidoBruto))
356
+ return contenidoBruto;
357
+ const clave = obtenerOCrearClave();
358
+ if (!clave) {
359
+ lanzarCorrupto(authPath, new Error("el fichero está cifrado pero no hay llavero disponible para descifrarlo aquí"));
360
+ }
361
+ try {
362
+ return descifrar(contenidoBruto, clave);
363
+ }
364
+ catch (error) {
365
+ lanzarCorrupto(authPath, error);
366
+ }
367
+ }
368
+ // ─── Migración en segundo plano (nunca dentro del candado de la lectura) ──
369
+ const migracionEnCursoPara = new Set();
370
+ function programarMigracionEnSegundoPlano(interno, authPath) {
371
+ if (!hayLlaveroDisponible()) {
372
+ // Sin llavero no hay nada que recifrar: pedir el candado igualmente
373
+ // solo para reescribir el mismo texto en claro es trabajo (y contención
374
+ // entre procesos) sin beneficio. Basta con avisar.
375
+ avisarSinLlaveroUnaVez();
376
+ return;
377
+ }
378
+ if (migracionEnCursoPara.has(authPath))
379
+ return; // ya hay una en vuelo; la lectura repetida no acumula trabajo
380
+ migracionEnCursoPara.add(authPath);
381
+ // setImmediate: la lectura que detectó "en claro" todavía mantiene el
382
+ // candado de `interno` abierto en su propia pila de llamadas. Pedirlo de
383
+ // nuevo aquí mismo se autobloquearía; con setImmediate se agenda para
384
+ // DESPUÉS de que esa lectura suelte el candado.
385
+ setImmediate(() => {
386
+ void interno
387
+ .withLockAsync(async (actual) => {
388
+ if (actual === undefined || esFormatoCifrado(actual)) {
389
+ return { result: undefined }; // otro proceso ya migró, o no hay nada que migrar
390
+ }
391
+ escribirConCifradoSiHayClave(authPath, actual);
392
+ // Ya escribimos nosotros mismos (copia + atómico); devolver `next`
393
+ // aquí haría que el backend interno reescribiera SIN copia de
394
+ // seguridad, pisando la que acabamos de crear.
395
+ return { result: undefined };
396
+ }, {})
397
+ .catch((error) => {
398
+ console.error(`[ada] no se pudo recifrar auth.json en segundo plano: ${error instanceof Error ? error.message : String(error)}`);
399
+ })
400
+ .finally(() => {
401
+ migracionEnCursoPara.delete(authPath);
402
+ });
403
+ });
404
+ }
405
+ // ─── El wrapper ─────────────────────────────────────────────────────────────
406
+ /**
407
+ * Envuelve un `AuthStorageBackend` (normalmente un `FileAuthStorageBackend`
408
+ * ya construido, que sigue poseyendo el candado entre procesos) para que
409
+ * cifre/descifre en reposo de forma transparente para quien lo use.
410
+ */
411
+ export function envolverBackendCifrado(interno, authPath) {
412
+ return {
413
+ withLock(fn) {
414
+ return interno.withLock((actual) => {
415
+ const claro = decodificarParaLectura(authPath, actual);
416
+ if (actual !== undefined && !esFormatoCifrado(actual)) {
417
+ programarMigracionEnSegundoPlano(interno, authPath);
418
+ }
419
+ const { result, next } = fn(claro);
420
+ if (next !== undefined)
421
+ escribirConCifradoSiHayClave(authPath, next);
422
+ return { result }; // `next` siempre undefined hacia `interno`: la escritura ya ocurrió arriba
423
+ });
424
+ },
425
+ async withLockAsync(fn, options) {
426
+ return interno.withLockAsync(async (actual) => {
427
+ const claro = decodificarParaLectura(authPath, actual);
428
+ if (actual !== undefined && !esFormatoCifrado(actual)) {
429
+ programarMigracionEnSegundoPlano(interno, authPath);
430
+ }
431
+ const { result, next } = await fn(claro);
432
+ if (next !== undefined)
433
+ escribirConCifradoSiHayClave(authPath, next);
434
+ return { result };
435
+ }, options);
436
+ },
437
+ };
438
+ }
439
+ /**
440
+ * Lectura síncrona de UNA credencial ya guardada, descifrando si hace falta.
441
+ *
442
+ * Sustituye a `readStoredCredential` (upstream, `auth-storage.ts`), exportada
443
+ * en `index.ts` como parte de la API pública del SDK (`@hoilab/ada-cli`) para
444
+ * lecturas puntuales sin instanciar `AuthStorage`. Esa función hace su propio
445
+ * `readFileSync` + `JSON.parse` sin pasar por este módulo: con auth.json ya
446
+ * migrado a cifrado, la cabecera `ADA-AUTHJSON-CIFRADO-V1\n` delante del JSON
447
+ * hace que `JSON.parse` lance un `SyntaxError` que su `catch { return
448
+ * undefined; }` convierte en "no hay credencial" — indistinguible de un
449
+ * proveedor sin configurar, para CUALQUIER consumidor de esta función
450
+ * pública, presente o futuro. Mismo nombre y misma firma (con el mismo valor
451
+ * por defecto de `authPath`) para seguir siendo un reemplazo directo.
452
+ */
453
+ export function leerCredencialGuardada(providerId, authPath = join(getAgentDir(), "auth.json")) {
454
+ try {
455
+ const bruto = stripBom(readFileSync(authPath, "utf-8"));
456
+ const claro = decodificarParaLectura(authPath, bruto);
457
+ if (claro === undefined)
458
+ return undefined;
459
+ const datos = JSON.parse(claro);
460
+ return datos[providerId];
461
+ }
462
+ catch {
463
+ return undefined;
464
+ }
465
+ }
466
+ /** Solo para pruebas: limpia el estado en memoria del módulo entre casos. */
467
+ export function __resetEstadoParaPruebas() {
468
+ claveEnCache = undefined;
469
+ avisoSinLlaveroMostrado = false;
470
+ avisoCorruptoMostrado = false;
471
+ migracionEnCursoPara.clear();
472
+ }
473
+ /** Solo para pruebas: borra la clave maestra del llavero real de esta máquina. */
474
+ export function __eliminarClaveDeLlaveroParaPruebas() {
475
+ if (!esMacOS())
476
+ return;
477
+ const servicio = servicioLlavero(); // fuera del try: ver `leerClaveDelLlavero`
478
+ try {
479
+ execFileSync("/usr/bin/security", ["delete-generic-password", "-s", servicio, "-a", CUENTA_LLAVERO], {
480
+ timeout: TIMEOUT_LLAVERO_MS,
481
+ windowsHide: true,
482
+ stdio: ["pipe", "pipe", "pipe"],
483
+ });
484
+ }
485
+ catch {
486
+ // no había clave que borrar
487
+ }
488
+ }
489
+ //# sourceMappingURL=reposo.js.map