@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,318 @@
1
+ /**
2
+ * Libro de sesión — qué HIZO el agente, en una cadena de hashes verificable.
3
+ *
4
+ * `memory-engine/audit.ts` ya tenía el mecanismo: JSONL append-only donde cada
5
+ * entrada lleva el hash de la anterior, de modo que alterar un registro se
6
+ * detecta reverificando la cadena. Lo que no tenía era ALCANCE: solo lo usaba
7
+ * el motor de memoria, así que auditábamos escrituras de memoria y no
8
+ * ejecuciones de tool, llamadas al modelo, ficheros tocados ni comandos.
9
+ *
10
+ * Este módulo aplica el mismo mecanismo a lo que un DPO pregunta de verdad, que
11
+ * es el registro del artículo 12 del AI Act y el 30 del RGPD.
12
+ *
13
+ * Dos decisiones de diseño que conviene no deshacer sin pensarlo:
14
+ *
15
+ * 1. **Minimización por defecto.** El libro guarda la FORMA de lo que pasó, no
16
+ * su contenido: del fichero, su hash antes y después, nunca el texto. Un
17
+ * registro de cumplimiento que copiara los datos sería un segundo almacén de
18
+ * justo aquello que el RGPD quiere minimizar.
19
+ * 2. **Una sola canonicalización.** `memory-engine/audit.ts` construye la carga
20
+ * a hashear dos veces, en `append` y en `verify`, con dos listas de campos
21
+ * escritas a mano. Añadir un campo a una y olvidar la otra rompe la
22
+ * verificación en silencio y solo para las entradas nuevas. Aquí la
23
+ * verificación reconstruye la carga con un rest (`{hash, prevHash, ...resto}`),
24
+ * así que un campo nuevo entra solo y las dos caras no pueden divergir.
25
+ */
26
+ /** Lo que se le puede pedir al libro que anote. */
27
+ export type SucesoDeSesion = {
28
+ tipo: "tool";
29
+ nombre: string;
30
+ ok: boolean;
31
+ decision?: string;
32
+ motivo?: string;
33
+ } | {
34
+ tipo: "modelo";
35
+ proveedor: string;
36
+ modelo: string;
37
+ entrada: number;
38
+ salida: number;
39
+ coste?: number;
40
+ /** `stop`, `toolUse`, `error`, `aborted`… Un fallo del modelo también es auditable. */
41
+ motivoParada?: string;
42
+ } | {
43
+ tipo: "comando";
44
+ argv: string[];
45
+ codigo: number;
46
+ sandbox?: "permitido" | "bloqueado";
47
+ violaciones?: string[];
48
+ /**
49
+ * Quién escribió el comando: el agente (por defecto, si se omite), el
50
+ * usuario desde la terminal integrada del escritorio, o una extensión
51
+ * a través de `pi.exec`.
52
+ *
53
+ * La terminal ejecuta lo que el usuario teclea SIN pasar por la
54
+ * política de aprobación — es su shell, no la del agente — así que este
55
+ * campo es lo único que evita que un registro de cumplimiento confunda
56
+ * "lo que decidió el agente" con "lo que tecleó la persona". Omitirlo
57
+ * en vez de dar por defecto "agente" habría dejado pasar en silencio
58
+ * una terminal que se le olvida anotarse.
59
+ *
60
+ * `extension` es el tercer estado, y hasta hoy faltaba: `pi.exec` no
61
+ * pasaba por la política NI dejaba rastro, así que una extensión leía
62
+ * el vault y el libro no lo sabía. Atribuirlo al "agente" habría sido
63
+ * peor que no anotarlo: quien audite tiene que poder distinguir lo que
64
+ * decidió el modelo de lo que hizo código de terceros cargado en el
65
+ * proceso.
66
+ */
67
+ origen?: "agente" | "usuario" | "extension";
68
+ /** Ruta de la extensión, cuando `origen` es `extension`. Sin ella el aviso no es accionable. */
69
+ extension?: string;
70
+ } | {
71
+ /**
72
+ * Una purga por retención, anotada como HECHO en vez de dejada como
73
+ * hueco. Sin esto, cumplir el art. 5.1.e del RGPD hacía que
74
+ * `verificar` acusara de manipulación; y borrar también el índice
75
+ * hacía desaparecer la purga sin rastro. Ver `audit/retencion.ts`.
76
+ */
77
+ tipo: "purga";
78
+ fichero: string;
79
+ entradas: number;
80
+ desde: string;
81
+ hasta: string;
82
+ hashDeCierre: string;
83
+ politica: string;
84
+ } | {
85
+ tipo: "fichero";
86
+ ruta: string;
87
+ antes: string | null;
88
+ despues: string | null;
89
+ tool: string;
90
+ } | {
91
+ tipo: "red";
92
+ dominio: string;
93
+ permitido: boolean;
94
+ motivo?: string;
95
+ } | {
96
+ /** El broker de credenciales (core/credenciales/) es lo que oh-my-pi no
97
+ * tiene: un registro de quién usó qué cuenta y cuándo. `accion` distingue
98
+ * PEDIR una credencial de REPORTAR cómo fue usarla. */
99
+ tipo: "credencial";
100
+ accion: "resuelta" | "uso";
101
+ proveedor: string;
102
+ /** `null` en "resuelta" = no había ninguna credencial activa (no es que fallara el libro). */
103
+ credencialId: string | null;
104
+ /** "ok" | "sin-credencial-activa" | una `ClaseDeError` de errores/proveedor.ts. */
105
+ resultado: string;
106
+ cliente?: string;
107
+ };
108
+ export interface EntradaDelLibro {
109
+ seq: number;
110
+ ts: string;
111
+ sesion: string;
112
+ suceso: Record<string, unknown>;
113
+ hash: string;
114
+ prevHash: string | null;
115
+ }
116
+ export interface Veredicto {
117
+ valido: boolean;
118
+ comprobadas: number;
119
+ /** Sello de tiempo de la primera entrada que no cuadra. */
120
+ alteradaEn?: string;
121
+ /**
122
+ * Fichero donde está esa entrada.
123
+ *
124
+ * Sin esto el veredicto decía «alterada en la del 03:09:55» sobre un
125
+ * directorio con 26 ficheros de sesión: cierto, verificable y no accionable.
126
+ * Quien recibe un aviso de manipulación necesita saber DÓNDE mirar, o el
127
+ * aviso se queda en susto.
128
+ */
129
+ ficheroAlterado?: string;
130
+ /**
131
+ * Por qué no verifica, en una frase estable.
132
+ *
133
+ * Existe para no confundir «lo he mirado y no cuadra» con «no lo he podido
134
+ * mirar»: un fichero ilegible y un hash que no coincide daban el mismo
135
+ * veredicto y el mismo mensaje, y son dos cosas distintas para quien
136
+ * responde a una auditoría.
137
+ */
138
+ motivo?: string;
139
+ /**
140
+ * Lo que FALTA: ficheros que el índice recuerda y que ya no están en
141
+ * `sesion/`, con cuántas entradas tenía cada uno.
142
+ *
143
+ * Es el tercer estado, y es el que faltaba. Antes de esto la cadena
144
+ * distinguía «íntegra» de «alterada» y nada más, así que borrar el fichero
145
+ * entero —lo que haría un agente tapando sus pasos— salía como
146
+ * `{valido: true, comprobadas: 0}`: un fallo que se lee como éxito en la
147
+ * pieza que se vende como prueba. Medido ejecutando el CLI: con tres
148
+ * comandos anotados decía «cadena íntegra: 3 entradas», y tras un `rm`
149
+ * decía «el libro está vacío» y salía con código 0.
150
+ */
151
+ faltan?: {
152
+ fichero: string;
153
+ entradas: number;
154
+ }[];
155
+ /**
156
+ * Ficheros que ya no están y cuya ausencia el libro EXPLICA con una lápida
157
+ * de purga. No cuentan como manipulación: son el art. 5.1.e cumplido.
158
+ */
159
+ purgados?: {
160
+ fichero: string;
161
+ entradas: number;
162
+ politica: string;
163
+ }[];
164
+ /**
165
+ * Sitios donde la cadena vuelve a empezar dentro de un mismo fichero.
166
+ *
167
+ * Ni íntegro ni alterado: el TERCER estado. Un reinicio del proceso lo
168
+ * produce, y quien quite entradas del medio y escriba una cadena nueva
169
+ * produce exactamente lo mismo. Desde el fichero no se distinguen, así que se
170
+ * dice dónde está y se deja que lo juzgue quien audita, en vez de acusar o de
171
+ * absolver por nuestra cuenta.
172
+ */
173
+ reinicios?: {
174
+ fichero: string;
175
+ ts: string;
176
+ entradasAntes: number;
177
+ }[];
178
+ /**
179
+ * Ficheros presentes en `sesion/` sin ancla en el índice.
180
+ *
181
+ * NO cuenta como manipulación y por eso va aparte de `faltan`: son los
182
+ * libros escritos antes de que el índice existiera, y también lo que queda
183
+ * en un sistema de ficheros sin enlaces duros. Meterlo en `valido: false`
184
+ * habría hecho que toda instalación ya existente gritara «manipulado» el
185
+ * día de la actualización — un detector que grita siempre no vale, y
186
+ * además volvería indistinguible la manipulación real.
187
+ */
188
+ sinAncla?: string[];
189
+ }
190
+ export declare class LibroDeSesion {
191
+ private readonly dir;
192
+ /** El índice: un enlace duro por fichero de sesión. Ver `DIR_INDICE`. */
193
+ private readonly dirIndice;
194
+ private readonly sesion;
195
+ private seq;
196
+ private ultimoHash;
197
+ /** Fijado en la primera escritura por `reservarFichero`; no cambia despues. */
198
+ private rutaFichero;
199
+ constructor(raiz: string, sesionId: string);
200
+ /**
201
+ * Un fichero por sesión, no uno por día.
202
+ *
203
+ * Compartir fichero entre sesiones parecía más ordenado y hacía el libro
204
+ * INVERIFICABLE, cosa que solo se vio ejecutando: cada proceso arranca su
205
+ * `seq` en 1 y su hash anterior en `null`, así que tres sesiones seguidas
206
+ * dejaban tres cadenas encadenadas dentro del mismo fichero y `verificar`
207
+ * fallaba en la primera entrada de la segunda.
208
+ *
209
+ * Arreglarlo cargando el último hash al abrir no habría bastado: el CLI y el
210
+ * escritorio corren a la vez, y dos procesos que leyeran el mismo hash
211
+ * anterior escribirían dos entradas con el mismo `prevHash`.
212
+ *
213
+ * El límite que esto dejaba, y que era el agujero: borrar el fichero de una
214
+ * sesión entera no lo detecta la cadena, que solo ve la modificación DENTRO
215
+ * de una sesión. Se documentaba aquí mientras el veredicto seguía diciendo
216
+ * `valido: true` — o sea, un fallo que se leía como éxito en la pieza que se
217
+ * vende como prueba. Lo cierra el índice de `reservarFichero`.
218
+ *
219
+ * «Un fichero, un escritor» es la PRECONDICIÓN de todo lo anterior, y por eso
220
+ * `reservarFichero` la impone en vez de confiar en ella. Se rompía por dos
221
+ * caminos distintos, los dos encontrados sobre el libro real de esta máquina:
222
+ *
223
+ * 1. Dos escritores en un fichero. El escritorio usa el id fijo `desktop`,
224
+ * así que cada encarnación del proceso —cada recompilación de Next—
225
+ * abría el MISMO fichero creyéndose la primera y escribía otra entrada
226
+ * con `seq 1` y `prevHash null`. Encontrado en
227
+ * `sesion-2026-08-24-desktop.jsonl`: dos entradas, las dos `seq 1`.
228
+ * 2. Un escritor que cruza la medianoche. El nombre salía de la fecha de
229
+ * CADA entrada, así que a las 00:00 la sesión saltaba a un fichero nuevo
230
+ * cuya primera entrada llevaba el `prevHash` del fichero anterior —
231
+ * mientras `verificar` arranca cada fichero esperando `null`.
232
+ *
233
+ * Los dos daban `CADENA ALTERADA` sobre un libro que nadie había tocado. Y el
234
+ * daño no es el ruido: es que una alteración de verdad queda indistinguible
235
+ * del caso benigno, y un medidor que grita siempre deja de leerse.
236
+ */
237
+ private nombreBase;
238
+ /**
239
+ * Reserva el fichero de ESTA instancia, una sola vez, y no lo suelta.
240
+ *
241
+ * Fijarlo en la primera escritura mata el caso 2 de golpe: la sesión se queda
242
+ * en su fichero aunque cambie el día.
243
+ *
244
+ * Para el caso 1 se reclama el nombre con `wx` —crear-o-fallar—, que es
245
+ * atómico en el sistema de ficheros. Quien lo gana lo tiene; quien lo pierde
246
+ * prueba el siguiente. Así el «un escritor por fichero» deja de ser un
247
+ * acuerdo entre quienes llaman y pasa a ser cierto por construcción, incluso
248
+ * entre procesos distintos que no se conocen.
249
+ *
250
+ * Se prefiere partir en dos ficheros antes que leer la cola del ajeno y
251
+ * continuarlo: dos procesos que leyeran el mismo último hash escribirían dos
252
+ * entradas con el mismo `prevHash`, que es otra vez una cadena rota sin nadie
253
+ * manipulando nada. Dos ficheros íntegros son mejor que uno dudoso, y
254
+ * `verificar` ya los trata por separado.
255
+ *
256
+ * EL ANCLA. El nombre se reclama en el ÍNDICE y el fichero de `sesion/` es un
257
+ * ENLACE DURO al del índice, no una copia. Tres propiedades que hacen falta
258
+ * las tres:
259
+ *
260
+ * 1. `rm -rf sesion/` —el movimiento del agente que quiere tapar sus
261
+ * pasos— borra un NOMBRE, no el fichero: los bytes siguen ahí bajo el
262
+ * otro nombre, así que `verificar` no solo detecta la desaparición sino
263
+ * que puede seguir leyendo lo que se quiso esconder.
264
+ * 2. El ancla no puede desincronizarse del libro, porque no es un
265
+ * resumen que haya que mantener al día: es el mismo inodo. Un índice
266
+ * con su propio contador tendría que escribirse en cada anotación, y
267
+ * dos procesos escribiendo el mismo índice es la carrera que ya nos
268
+ * dejó el libro inverificable una vez.
269
+ * 3. El nombre se reclama en el índice y no en `sesion/`, así que un
270
+ * nombre gastado no se puede reutilizar aunque su fichero de sesión
271
+ * haya desaparecido. Sin esto, borrar y reescribir con una entrada
272
+ * dejaba el libro con el mismo aspecto que uno legítimo de una entrada.
273
+ *
274
+ * Hasta dónde llega, dicho sin adornos: quien borre los DOS directorios deja
275
+ * un libro vacío indistinguible de una instalación nueva. Contra eso está la
276
+ * otra mitad del trabajo —la política, que deniega la carpeta al agente
277
+ * incluso en `yolo`— y no un tercer ancla, porque un ancla que viva en el
278
+ * mismo disco y con los mismos permisos siempre se puede borrar igual. Lo que
279
+ * esto elimina es que un solo `rm` pase desapercibido.
280
+ */
281
+ /**
282
+ * El fichero que esta sesión está escribiendo, o `null` si aún no ha escrito.
283
+ *
284
+ * La purga lo necesita para no llevarse el suelo de un libro vivo, y tiene que
285
+ * saberlo por IDENTIDAD, no por fecha: fiarlo a «su última entrada es de hoy»
286
+ * deja el caso raro —un reloj movido, una sesión larga— rompiendo la cadena en
287
+ * memoria sin avisar.
288
+ */
289
+ get ficheroEnCurso(): string | null;
290
+ private reservarFichero;
291
+ /**
292
+ * Anota un suceso. Nunca lanza: un fallo del libro no puede tumbar la
293
+ * conversación, igual que en el audit del motor de memoria.
294
+ */
295
+ anotar(suceso: SucesoDeSesion): Promise<void>;
296
+ private escribir;
297
+ private listar;
298
+ private inventario;
299
+ /** Las últimas entradas, de la más reciente hacia atrás. */
300
+ leer(limite?: number): Promise<EntradaDelLibro[]>;
301
+ /**
302
+ * Reverifica la cadena entera y contesta TRES estados, no dos.
303
+ *
304
+ * «Íntegra», «alterada» y «FALTA algo que debería estar». El tercero es el
305
+ * que faltaba: la cadena de hashes detecta la modificación DENTRO de un
306
+ * fichero y no puede, por construcción, notar la desaparición del fichero —
307
+ * para eso hace falta saber qué debería haber, que es lo que aporta el índice
308
+ * (ver `reservarFichero`).
309
+ *
310
+ * De la cadena rota devuelve en la PRIMERA entrada que no cuadra, y
311
+ * `comprobadas` cuenta las que sí cuadraban antes de ella — así el número
312
+ * dice dónde empieza la manipulación, no cuántas hay en total. Lo que ya se
313
+ * hubiera detectado como ausente viaja con esa respuesta: no se pierde por
314
+ * salir antes.
315
+ */
316
+ verificar(): Promise<Veredicto>;
317
+ }
318
+ //# sourceMappingURL=libro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libro.d.ts","sourceRoot":"","sources":["../../../src/core/audit/libro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAUH,mDAAmD;AACnD,MAAM,MAAM,cAAc,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACjF;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,iGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;CAClB,GACD;IACA;;;;;OAKG;IACH,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7F;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE;IACA;;4DAEuD;IACvD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA8F;IAC9F,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEL,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAoDD,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,2EAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,UAAU,CAAuB;IACzC,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAuB;IAE1C,YAAY,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAIzC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH;;;;;;;OAOG;IACH,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAED,OAAO,CAAC,eAAe;IAoCvB;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5C;IAED,OAAO,CAAC,QAAQ;YAmBF,MAAM;YAeN,UAAU;IAmCxB,+DAA4D;IACtD,IAAI,CAAC,MAAM,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAqBlD;IAED;;;;;;;;;;;;;;OAcG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CA6IpC;CACD","sourcesContent":["/**\n * Libro de sesión — qué HIZO el agente, en una cadena de hashes verificable.\n *\n * `memory-engine/audit.ts` ya tenía el mecanismo: JSONL append-only donde cada\n * entrada lleva el hash de la anterior, de modo que alterar un registro se\n * detecta reverificando la cadena. Lo que no tenía era ALCANCE: solo lo usaba\n * el motor de memoria, así que auditábamos escrituras de memoria y no\n * ejecuciones de tool, llamadas al modelo, ficheros tocados ni comandos.\n *\n * Este módulo aplica el mismo mecanismo a lo que un DPO pregunta de verdad, que\n * es el registro del artículo 12 del AI Act y el 30 del RGPD.\n *\n * Dos decisiones de diseño que conviene no deshacer sin pensarlo:\n *\n * 1. **Minimización por defecto.** El libro guarda la FORMA de lo que pasó, no\n * su contenido: del fichero, su hash antes y después, nunca el texto. Un\n * registro de cumplimiento que copiara los datos sería un segundo almacén de\n * justo aquello que el RGPD quiere minimizar.\n * 2. **Una sola canonicalización.** `memory-engine/audit.ts` construye la carga\n * a hashear dos veces, en `append` y en `verify`, con dos listas de campos\n * escritas a mano. Añadir un campo a una y olvidar la otra rompe la\n * verificación en silencio y solo para las entradas nuevas. Aquí la\n * verificación reconstruye la carga con un rest (`{hash, prevHash, ...resto}`),\n * así que un campo nuevo entra solo y las dos caras no pueden divergir.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { appendFileSync, linkSync, mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport { taparAntesDeEscribir } from \"../privacidad/tapar.ts\";\nimport { ficherosPurgados } from \"./retencion.ts\";\nimport { DIR_INDICE, DIR_SESION } from \"./rutas.ts\";\n\n/** Lo que se le puede pedir al libro que anote. */\nexport type SucesoDeSesion =\n\t| { tipo: \"tool\"; nombre: string; ok: boolean; decision?: string; motivo?: string }\n\t| {\n\t\t\ttipo: \"modelo\";\n\t\t\tproveedor: string;\n\t\t\tmodelo: string;\n\t\t\tentrada: number;\n\t\t\tsalida: number;\n\t\t\tcoste?: number;\n\t\t\t/** `stop`, `toolUse`, `error`, `aborted`… Un fallo del modelo también es auditable. */\n\t\t\tmotivoParada?: string;\n\t }\n\t| {\n\t\t\ttipo: \"comando\";\n\t\t\targv: string[];\n\t\t\tcodigo: number;\n\t\t\tsandbox?: \"permitido\" | \"bloqueado\";\n\t\t\tviolaciones?: string[];\n\t\t\t/**\n\t\t\t * Quién escribió el comando: el agente (por defecto, si se omite), el\n\t\t\t * usuario desde la terminal integrada del escritorio, o una extensión\n\t\t\t * a través de `pi.exec`.\n\t\t\t *\n\t\t\t * La terminal ejecuta lo que el usuario teclea SIN pasar por la\n\t\t\t * política de aprobación — es su shell, no la del agente — así que este\n\t\t\t * campo es lo único que evita que un registro de cumplimiento confunda\n\t\t\t * \"lo que decidió el agente\" con \"lo que tecleó la persona\". Omitirlo\n\t\t\t * en vez de dar por defecto \"agente\" habría dejado pasar en silencio\n\t\t\t * una terminal que se le olvida anotarse.\n\t\t\t *\n\t\t\t * `extension` es el tercer estado, y hasta hoy faltaba: `pi.exec` no\n\t\t\t * pasaba por la política NI dejaba rastro, así que una extensión leía\n\t\t\t * el vault y el libro no lo sabía. Atribuirlo al \"agente\" habría sido\n\t\t\t * peor que no anotarlo: quien audite tiene que poder distinguir lo que\n\t\t\t * decidió el modelo de lo que hizo código de terceros cargado en el\n\t\t\t * proceso.\n\t\t\t */\n\t\t\torigen?: \"agente\" | \"usuario\" | \"extension\";\n\t\t\t/** Ruta de la extensión, cuando `origen` es `extension`. Sin ella el aviso no es accionable. */\n\t\t\textension?: string;\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * Una purga por retención, anotada como HECHO en vez de dejada como\n\t\t\t * hueco. Sin esto, cumplir el art. 5.1.e del RGPD hacía que\n\t\t\t * `verificar` acusara de manipulación; y borrar también el índice\n\t\t\t * hacía desaparecer la purga sin rastro. Ver `audit/retencion.ts`.\n\t\t\t */\n\t\t\ttipo: \"purga\";\n\t\t\tfichero: string;\n\t\t\tentradas: number;\n\t\t\tdesde: string;\n\t\t\thasta: string;\n\t\t\thashDeCierre: string;\n\t\t\tpolitica: string;\n\t }\n\t| { tipo: \"fichero\"; ruta: string; antes: string | null; despues: string | null; tool: string }\n\t| { tipo: \"red\"; dominio: string; permitido: boolean; motivo?: string }\n\t| {\n\t\t\t/** El broker de credenciales (core/credenciales/) es lo que oh-my-pi no\n\t\t\t * tiene: un registro de quién usó qué cuenta y cuándo. `accion` distingue\n\t\t\t * PEDIR una credencial de REPORTAR cómo fue usarla. */\n\t\t\ttipo: \"credencial\";\n\t\t\taccion: \"resuelta\" | \"uso\";\n\t\t\tproveedor: string;\n\t\t\t/** `null` en \"resuelta\" = no había ninguna credencial activa (no es que fallara el libro). */\n\t\t\tcredencialId: string | null;\n\t\t\t/** \"ok\" | \"sin-credencial-activa\" | una `ClaseDeError` de errores/proveedor.ts. */\n\t\t\tresultado: string;\n\t\t\tcliente?: string;\n\t };\n\nexport interface EntradaDelLibro {\n\tseq: number;\n\tts: string;\n\tsesion: string;\n\tsuceso: Record<string, unknown>;\n\thash: string;\n\tprevHash: string | null;\n}\n\nexport interface Veredicto {\n\tvalido: boolean;\n\tcomprobadas: number;\n\t/** Sello de tiempo de la primera entrada que no cuadra. */\n\talteradaEn?: string;\n\t/**\n\t * Fichero donde está esa entrada.\n\t *\n\t * Sin esto el veredicto decía «alterada en la del 03:09:55» sobre un\n\t * directorio con 26 ficheros de sesión: cierto, verificable y no accionable.\n\t * Quien recibe un aviso de manipulación necesita saber DÓNDE mirar, o el\n\t * aviso se queda en susto.\n\t */\n\tficheroAlterado?: string;\n\t/**\n\t * Por qué no verifica, en una frase estable.\n\t *\n\t * Existe para no confundir «lo he mirado y no cuadra» con «no lo he podido\n\t * mirar»: un fichero ilegible y un hash que no coincide daban el mismo\n\t * veredicto y el mismo mensaje, y son dos cosas distintas para quien\n\t * responde a una auditoría.\n\t */\n\tmotivo?: string;\n\t/**\n\t * Lo que FALTA: ficheros que el índice recuerda y que ya no están en\n\t * `sesion/`, con cuántas entradas tenía cada uno.\n\t *\n\t * Es el tercer estado, y es el que faltaba. Antes de esto la cadena\n\t * distinguía «íntegra» de «alterada» y nada más, así que borrar el fichero\n\t * entero —lo que haría un agente tapando sus pasos— salía como\n\t * `{valido: true, comprobadas: 0}`: un fallo que se lee como éxito en la\n\t * pieza que se vende como prueba. Medido ejecutando el CLI: con tres\n\t * comandos anotados decía «cadena íntegra: 3 entradas», y tras un `rm`\n\t * decía «el libro está vacío» y salía con código 0.\n\t */\n\tfaltan?: { fichero: string; entradas: number }[];\n\t/**\n\t * Ficheros que ya no están y cuya ausencia el libro EXPLICA con una lápida\n\t * de purga. No cuentan como manipulación: son el art. 5.1.e cumplido.\n\t */\n\tpurgados?: { fichero: string; entradas: number; politica: string }[];\n\t/**\n\t * Sitios donde la cadena vuelve a empezar dentro de un mismo fichero.\n\t *\n\t * Ni íntegro ni alterado: el TERCER estado. Un reinicio del proceso lo\n\t * produce, y quien quite entradas del medio y escriba una cadena nueva\n\t * produce exactamente lo mismo. Desde el fichero no se distinguen, así que se\n\t * dice dónde está y se deja que lo juzgue quien audita, en vez de acusar o de\n\t * absolver por nuestra cuenta.\n\t */\n\treinicios?: { fichero: string; ts: string; entradasAntes: number }[];\n\t/**\n\t * Ficheros presentes en `sesion/` sin ancla en el índice.\n\t *\n\t * NO cuenta como manipulación y por eso va aparte de `faltan`: son los\n\t * libros escritos antes de que el índice existiera, y también lo que queda\n\t * en un sistema de ficheros sin enlaces duros. Meterlo en `valido: false`\n\t * habría hecho que toda instalación ya existente gritara «manipulado» el\n\t * día de la actualización — un detector que grita siempre no vale, y\n\t * además volvería indistinguible la manipulación real.\n\t */\n\tsinAncla?: string[];\n}\n\n/** Un fichero del libro, mirado desde los dos directorios a la vez. */\ninterface FicheroDelLibro {\n\tnombre: string;\n\t/** De dónde se leen las entradas: la copia que exista. */\n\truta: string;\n\t/** Está en el índice y ya NO en `sesion/`: alguien lo borró. */\n\tfalta: boolean;\n\t/** Está en `sesion/` y no en el índice: libro antiguo o FS sin enlaces duros. */\n\tsinAncla: boolean;\n\t/** Están los dos nombres pero NO son el mismo fichero: sustitución. */\n\tsuplantado: boolean;\n}\n\n/** Hash de un contenido de fichero. `null` = el fichero no existía. */\nfunction hashContenido(texto: string | null): string | null {\n\treturn texto === null ? null : createHash(\"sha256\").update(texto).digest(\"hex\").slice(0, 16);\n}\n\n/**\n * Redacta cada hoja de texto por separado.\n *\n * Se hace hoja a hoja y no sobre el JSON ya serializado a propósito: un patrón\n * que se pasara de largo sobre el texto serializado podría comerse una comilla\n * y dejar el registro sin parsear. Sobre la hoja, lo peor que puede pasar es\n * que redacte de más.\n */\nfunction redactarHoja(valor: unknown): unknown {\n\tif (typeof valor === \"string\") return taparAntesDeEscribir(valor, \"strict\");\n\tif (Array.isArray(valor)) return valor.map(redactarHoja);\n\tif (valor && typeof valor === \"object\") {\n\t\treturn Object.fromEntries(Object.entries(valor).map(([k, v]) => [k, redactarHoja(v)]));\n\t}\n\treturn valor;\n}\n\n/** Pasa del suceso que da quien llama al registro que se guarda. */\nfunction aRegistro(suceso: SucesoDeSesion): Record<string, unknown> {\n\tconst base =\n\t\tsuceso.tipo === \"fichero\"\n\t\t\t? { ...suceso, antes: hashContenido(suceso.antes), despues: hashContenido(suceso.despues) }\n\t\t\t: suceso;\n\treturn redactarHoja(base) as Record<string, unknown>;\n}\n\nfunction hashDe(prevHash: string | null, carga: Omit<EntradaDelLibro, \"hash\" | \"prevHash\">): string {\n\treturn createHash(\"sha256\")\n\t\t.update(JSON.stringify({ prevHash, ...carga }))\n\t\t.digest(\"hex\");\n}\n\nexport class LibroDeSesion {\n\tprivate readonly dir: string;\n\t/** El índice: un enlace duro por fichero de sesión. Ver `DIR_INDICE`. */\n\tprivate readonly dirIndice: string;\n\tprivate readonly sesion: string;\n\tprivate seq = 0;\n\tprivate ultimoHash: string | null = null;\n\t/** Fijado en la primera escritura por `reservarFichero`; no cambia despues. */\n\tprivate rutaFichero: string | null = null;\n\n\tconstructor(raiz: string, sesionId: string) {\n\t\tthis.dir = join(raiz, DIR_SESION);\n\t\tthis.dirIndice = join(raiz, DIR_INDICE);\n\t\tthis.sesion = sesionId;\n\t}\n\n\t/**\n\t * Un fichero por sesión, no uno por día.\n\t *\n\t * Compartir fichero entre sesiones parecía más ordenado y hacía el libro\n\t * INVERIFICABLE, cosa que solo se vio ejecutando: cada proceso arranca su\n\t * `seq` en 1 y su hash anterior en `null`, así que tres sesiones seguidas\n\t * dejaban tres cadenas encadenadas dentro del mismo fichero y `verificar`\n\t * fallaba en la primera entrada de la segunda.\n\t *\n\t * Arreglarlo cargando el último hash al abrir no habría bastado: el CLI y el\n\t * escritorio corren a la vez, y dos procesos que leyeran el mismo hash\n\t * anterior escribirían dos entradas con el mismo `prevHash`.\n\t *\n\t * El límite que esto dejaba, y que era el agujero: borrar el fichero de una\n\t * sesión entera no lo detecta la cadena, que solo ve la modificación DENTRO\n\t * de una sesión. Se documentaba aquí mientras el veredicto seguía diciendo\n\t * `valido: true` — o sea, un fallo que se leía como éxito en la pieza que se\n\t * vende como prueba. Lo cierra el índice de `reservarFichero`.\n\t *\n\t * «Un fichero, un escritor» es la PRECONDICIÓN de todo lo anterior, y por eso\n\t * `reservarFichero` la impone en vez de confiar en ella. Se rompía por dos\n\t * caminos distintos, los dos encontrados sobre el libro real de esta máquina:\n\t *\n\t * 1. Dos escritores en un fichero. El escritorio usa el id fijo `desktop`,\n\t * así que cada encarnación del proceso —cada recompilación de Next—\n\t * abría el MISMO fichero creyéndose la primera y escribía otra entrada\n\t * con `seq 1` y `prevHash null`. Encontrado en\n\t * `sesion-2026-08-24-desktop.jsonl`: dos entradas, las dos `seq 1`.\n\t * 2. Un escritor que cruza la medianoche. El nombre salía de la fecha de\n\t * CADA entrada, así que a las 00:00 la sesión saltaba a un fichero nuevo\n\t * cuya primera entrada llevaba el `prevHash` del fichero anterior —\n\t * mientras `verificar` arranca cada fichero esperando `null`.\n\t *\n\t * Los dos daban `CADENA ALTERADA` sobre un libro que nadie había tocado. Y el\n\t * daño no es el ruido: es que una alteración de verdad queda indistinguible\n\t * del caso benigno, y un medidor que grita siempre deja de leerse.\n\t */\n\tprivate nombreBase(fecha: string): string {\n\t\tconst id = this.sesion.replace(/[^a-zA-Z0-9-]/g, \"_\").slice(0, 40);\n\t\treturn `sesion-${fecha}-${id}.jsonl`;\n\t}\n\n\t/**\n\t * Reserva el fichero de ESTA instancia, una sola vez, y no lo suelta.\n\t *\n\t * Fijarlo en la primera escritura mata el caso 2 de golpe: la sesión se queda\n\t * en su fichero aunque cambie el día.\n\t *\n\t * Para el caso 1 se reclama el nombre con `wx` —crear-o-fallar—, que es\n\t * atómico en el sistema de ficheros. Quien lo gana lo tiene; quien lo pierde\n\t * prueba el siguiente. Así el «un escritor por fichero» deja de ser un\n\t * acuerdo entre quienes llaman y pasa a ser cierto por construcción, incluso\n\t * entre procesos distintos que no se conocen.\n\t *\n\t * Se prefiere partir en dos ficheros antes que leer la cola del ajeno y\n\t * continuarlo: dos procesos que leyeran el mismo último hash escribirían dos\n\t * entradas con el mismo `prevHash`, que es otra vez una cadena rota sin nadie\n\t * manipulando nada. Dos ficheros íntegros son mejor que uno dudoso, y\n\t * `verificar` ya los trata por separado.\n\t *\n\t * EL ANCLA. El nombre se reclama en el ÍNDICE y el fichero de `sesion/` es un\n\t * ENLACE DURO al del índice, no una copia. Tres propiedades que hacen falta\n\t * las tres:\n\t *\n\t * 1. `rm -rf sesion/` —el movimiento del agente que quiere tapar sus\n\t * pasos— borra un NOMBRE, no el fichero: los bytes siguen ahí bajo el\n\t * otro nombre, así que `verificar` no solo detecta la desaparición sino\n\t * que puede seguir leyendo lo que se quiso esconder.\n\t * 2. El ancla no puede desincronizarse del libro, porque no es un\n\t * resumen que haya que mantener al día: es el mismo inodo. Un índice\n\t * con su propio contador tendría que escribirse en cada anotación, y\n\t * dos procesos escribiendo el mismo índice es la carrera que ya nos\n\t * dejó el libro inverificable una vez.\n\t * 3. El nombre se reclama en el índice y no en `sesion/`, así que un\n\t * nombre gastado no se puede reutilizar aunque su fichero de sesión\n\t * haya desaparecido. Sin esto, borrar y reescribir con una entrada\n\t * dejaba el libro con el mismo aspecto que uno legítimo de una entrada.\n\t *\n\t * Hasta dónde llega, dicho sin adornos: quien borre los DOS directorios deja\n\t * un libro vacío indistinguible de una instalación nueva. Contra eso está la\n\t * otra mitad del trabajo —la política, que deniega la carpeta al agente\n\t * incluso en `yolo`— y no un tercer ancla, porque un ancla que viva en el\n\t * mismo disco y con los mismos permisos siempre se puede borrar igual. Lo que\n\t * esto elimina es que un solo `rm` pase desapercibido.\n\t */\n\t/**\n\t * El fichero que esta sesión está escribiendo, o `null` si aún no ha escrito.\n\t *\n\t * La purga lo necesita para no llevarse el suelo de un libro vivo, y tiene que\n\t * saberlo por IDENTIDAD, no por fecha: fiarlo a «su última entrada es de hoy»\n\t * deja el caso raro —un reloj movido, una sesión larga— rompiendo la cadena en\n\t * memoria sin avisar.\n\t */\n\tget ficheroEnCurso(): string | null {\n\t\treturn this.rutaFichero ? basename(this.rutaFichero) : null;\n\t}\n\n\tprivate reservarFichero(fecha: string): string {\n\t\tif (this.rutaFichero) return this.rutaFichero;\n\t\tmkdirSync(this.dirIndice, { recursive: true });\n\t\tconst base = this.nombreBase(fecha);\n\t\tfor (let n = 1; ; n++) {\n\t\t\tconst nombre = n === 1 ? base : base.replace(/\\.jsonl$/, `-${n}.jsonl`);\n\t\t\tconst ancla = join(this.dirIndice, nombre);\n\t\t\ttry {\n\t\t\t\twriteFileSync(ancla, \"\", { flag: \"wx\" });\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n\t\t\t\tcontinue; // nombre gastado (otro escritor, u otra ejecución): el siguiente\n\t\t\t}\n\t\t\tconst ruta = join(this.dir, nombre);\n\t\t\ttry {\n\t\t\t\tlinkSync(ancla, ruta);\n\t\t\t} catch (error) {\n\t\t\t\t// El nombre estaba libre en el índice pero ocupado en `sesion/`: es un\n\t\t\t\t// libro escrito ANTES de que el índice existiera. Se suelta el ancla\n\t\t\t\t// vacía y se prueba el siguiente nombre. Soltarla no es cosmético:\n\t\t\t\t// dejar un ancla de 0 bytes junto a un fichero de sesión con\n\t\t\t\t// contenido son dos inodos con el mismo nombre, y `verificar` lo\n\t\t\t\t// leería como suplantación en toda instalación que se actualice.\n\t\t\t\trmSync(ancla, { force: true });\n\t\t\t\tif ((error as NodeJS.ErrnoException).code === \"EEXIST\") continue;\n\t\t\t\t// Sin enlaces duros (FS exótico, montaje raro) el libro sigue\n\t\t\t\t// funcionando SIN ancla, porque un libro que no se escribe es peor\n\t\t\t\t// que uno sin ancla; `verificar` lo dirá como `sinAncla`, que es un\n\t\t\t\t// tercer estado y no una acusación.\n\t\t\t\twriteFileSync(ruta, \"\", { flag: \"wx\" });\n\t\t\t}\n\t\t\tthis.rutaFichero = ruta;\n\t\t\treturn ruta;\n\t\t}\n\t}\n\n\t/**\n\t * Anota un suceso. Nunca lanza: un fallo del libro no puede tumbar la\n\t * conversación, igual que en el audit del motor de memoria.\n\t */\n\tanotar(suceso: SucesoDeSesion): Promise<void> {\n\t\t// SÍNCRONO, y no es una simplificación perezosa: es lo correcto aquí.\n\t\t//\n\t\t// Antes esto encolaba una escritura asíncrona y devolvía la promesa, y casi\n\t\t// todos los llamantes hacen `void libro.anotar(...)` — no la esperan, porque\n\t\t// un fallo del libro no puede tumbar la conversación. Eso deja dos agujeros:\n\t\t//\n\t\t// 1. Las últimas entradas se pierden si el proceso termina antes de que\n\t\t// la cola se vacíe. En un registro de cumplimiento, perder justo lo\n\t\t// último que hizo el agente es perder lo que más se va a mirar.\n\t\t// 2. Escrituras que aterrizan DESPUÉS de que la sesión se haya cerrado.\n\t\t// Salió en una prueba de regresión de upstream: al borrar su\n\t\t// directorio temporal, el libro seguía creando ficheros dentro y\n\t\t// `rmSync` fallaba con ENOTEMPTY. La prueba pasaba en HEAD~1 y falló\n\t\t// al fusionar el índice — el ancla ensanchó una carrera que ya existía.\n\t\t//\n\t\t// El coste está MEDIDO, y sale a favor: 40 µs por entrada en síncrono\n\t\t// frente a 56 µs en asíncrono (1.000 escrituras de 268 bytes). Es más\n\t\t// rápido porque para una escritura tan pequeña la promesa pesa más que el\n\t\t// `write`. Y 40 µs contra una llamada a herramienta que tarda milisegundos\n\t\t// o segundos no se nota.\n\t\t//\n\t\t// Además desaparece la cola entera: JavaScript es de un solo hilo, así que\n\t\t// dos `anotar` seguidos ya no pueden leer el mismo `ultimoHash`. La carrera\n\t\t// que la cola existía para evitar deja de ser posible por construcción, que\n\t\t// es mejor que evitarla con disciplina.\n\t\t//\n\t\t// Se mantiene la firma `Promise<void>` para no tocar a los llamantes.\n\t\tthis.escribir(suceso);\n\t\treturn Promise.resolve();\n\t}\n\n\tprivate escribir(suceso: SucesoDeSesion): void {\n\t\ttry {\n\t\t\tmkdirSync(this.dir, { recursive: true });\n\t\t\tconst carga = {\n\t\t\t\tseq: ++this.seq,\n\t\t\t\tts: new Date().toISOString(),\n\t\t\t\tsesion: this.sesion,\n\t\t\t\tsuceso: aRegistro(suceso),\n\t\t\t};\n\t\t\tconst hash = hashDe(this.ultimoHash, carga);\n\t\t\tconst entrada: EntradaDelLibro = { ...carga, hash, prevHash: this.ultimoHash };\n\t\t\tthis.ultimoHash = hash;\n\t\t\tconst ruta = this.reservarFichero(carga.ts.slice(0, 10));\n\t\t\tappendFileSync(ruta, `${JSON.stringify(entrada)}\\n`, \"utf-8\");\n\t\t} catch {\n\t\t\t// El libro nunca rompe la sesión.\n\t\t}\n\t}\n\n\tprivate async listar(dir: string): Promise<string[]> {\n\t\ttry {\n\t\t\treturn (await readdir(dir)).filter((f) => /^sesion-.*\\.jsonl$/.test(f)).sort();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Los ficheros del libro vistos desde los DOS directorios.\n\t *\n\t * Esta es la comparación que antes no existía: `readdir(sesion/)` solo puede\n\t * contestar «lo que hay», nunca «lo que debería haber», y por eso un borrado\n\t * salía como un libro vacío.\n\t */\n\tprivate async inventario(): Promise<FicheroDelLibro[]> {\n\t\tconst enSesion = new Set(await this.listar(this.dir));\n\t\tconst enIndice = new Set(await this.listar(this.dirIndice));\n\t\tconst out: FicheroDelLibro[] = [];\n\t\tfor (const nombre of [...new Set([...enSesion, ...enIndice])].sort()) {\n\t\t\tconst s = enSesion.has(nombre);\n\t\t\tconst i = enIndice.has(nombre);\n\t\t\t// Con los dos nombres presentes tienen que ser el MISMO inodo, porque\n\t\t\t// así los creó `reservarFichero`. Si no lo son, alguien borró el de\n\t\t\t// `sesion/` y puso otro en su sitio — y como el algoritmo de la cadena\n\t\t\t// es público, ese otro puede tener una cadena interna perfecta. Sin\n\t\t\t// esta comprobación la suplantación se leería como «cadena íntegra».\n\t\t\tlet suplantado = false;\n\t\t\tif (s && i) {\n\t\t\t\ttry {\n\t\t\t\t\tconst [a, b] = await Promise.all([stat(join(this.dir, nombre)), stat(join(this.dirIndice, nombre))]);\n\t\t\t\t\tsuplantado = a.ino !== b.ino;\n\t\t\t\t} catch {\n\t\t\t\t\t// No se pudo mirar: no se acusa. «No lo he podido comprobar» no es\n\t\t\t\t\t// «está manipulado», y el fichero se verifica igual más abajo.\n\t\t\t\t}\n\t\t\t}\n\t\t\tout.push({\n\t\t\t\tnombre,\n\t\t\t\t// Se lee del índice cuando el de `sesion/` no está (es el caso del\n\t\t\t\t// borrado) o cuando no coincide con él: el índice es el ancla.\n\t\t\t\truta: s && !suplantado ? join(this.dir, nombre) : join(this.dirIndice, nombre),\n\t\t\t\tfalta: i && !s,\n\t\t\t\tsinAncla: s && !i,\n\t\t\t\tsuplantado,\n\t\t\t});\n\t\t}\n\t\treturn out;\n\t}\n\n\t/** Las últimas entradas, de la más reciente hacia atrás. */\n\tasync leer(limite = 50): Promise<EntradaDelLibro[]> {\n\t\tconst out: EntradaDelLibro[] = [];\n\t\tfor (const f of (await this.inventario()).reverse()) {\n\t\t\tlet crudo: string;\n\t\t\ttry {\n\t\t\t\t// Por `f.ruta` y no por `sesion/`: las entradas de un fichero borrado\n\t\t\t\t// sobreviven en el índice y quien investiga tiene que poder verlas.\n\t\t\t\tcrudo = await readFile(f.ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const linea of crudo.split(\"\\n\").filter(Boolean).reverse()) {\n\t\t\t\ttry {\n\t\t\t\t\tout.push(JSON.parse(linea) as EntradaDelLibro);\n\t\t\t\t\tif (out.length >= limite) return out;\n\t\t\t\t} catch {\n\t\t\t\t\t// Línea ilegible: la verificación es quien lo denuncia, no la lectura.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * Reverifica la cadena entera y contesta TRES estados, no dos.\n\t *\n\t * «Íntegra», «alterada» y «FALTA algo que debería estar». El tercero es el\n\t * que faltaba: la cadena de hashes detecta la modificación DENTRO de un\n\t * fichero y no puede, por construcción, notar la desaparición del fichero —\n\t * para eso hace falta saber qué debería haber, que es lo que aporta el índice\n\t * (ver `reservarFichero`).\n\t *\n\t * De la cadena rota devuelve en la PRIMERA entrada que no cuadra, y\n\t * `comprobadas` cuenta las que sí cuadraban antes de ella — así el número\n\t * dice dónde empieza la manipulación, no cuántas hay en total. Lo que ya se\n\t * hubiera detectado como ausente viaja con esa respuesta: no se pierde por\n\t * salir antes.\n\t */\n\tasync verificar(): Promise<Veredicto> {\n\t\tlet comprobadas = 0;\n\t\tconst faltan: { fichero: string; entradas: number }[] = [];\n\t\tconst reinicios: { fichero: string; ts: string; entradasAntes: number }[] = [];\n\t\tconst sinAncla: string[] = [];\n\t\t// Las lápidas se leen ANTES de recorrer: una purga anotada en el fichero de\n\t\t// hoy explica un hueco de un fichero de hace un año.\n\t\tconst purgados = ficherosPurgados(await this.leer());\n\t\tfor (const f of await this.inventario()) {\n\t\t\tif (f.suplantado) {\n\t\t\t\treturn {\n\t\t\t\t\tvalido: false,\n\t\t\t\t\tcomprobadas,\n\t\t\t\t\tficheroAlterado: f.nombre,\n\t\t\t\t\tmotivo: \"el fichero de sesión ya no es el mismo que el del índice: lo han sustituido\",\n\t\t\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t\t\t...(sinAncla.length ? { sinAncla } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\t// La cadena empieza de cero en CADA fichero, porque cada fichero es una\n\t\t\t// sesión y su primera entrada lleva `prevHash: null`. Arrastrar el hash\n\t\t\t// de un fichero al siguiente es lo que hacía fallar la verificación en\n\t\t\t// cuanto había más de una sesión.\n\t\t\tlet prevHash: string | null = null;\n\t\t\tlet enEste = 0;\n\t\t\tlet crudo: string;\n\t\t\ttry {\n\t\t\t\tcrudo = await readFile(f.ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tvalido: false,\n\t\t\t\t\tcomprobadas,\n\t\t\t\t\tficheroAlterado: f.nombre,\n\t\t\t\t\tmotivo: \"no se ha podido leer el fichero: no es «está bien», es «no lo sé»\",\n\t\t\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (const linea of crudo.split(\"\\n\").filter(Boolean)) {\n\t\t\t\tlet entrada: EntradaDelLibro;\n\t\t\t\ttry {\n\t\t\t\t\tentrada = JSON.parse(linea) as EntradaDelLibro;\n\t\t\t\t} catch {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalido: false,\n\t\t\t\t\t\tcomprobadas,\n\t\t\t\t\t\tficheroAlterado: f.nombre,\n\t\t\t\t\t\tmotivo: \"hay una línea que no es JSON válido\",\n\t\t\t\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// El rest es lo que impide que esta lista y la de `escribir`\n\t\t\t\t// se separen: aquí no hay lista.\n\t\t\t\tconst { hash, prevHash: declarado, ...resto } = entrada;\n\t\t\t\t// Se separan DOS preguntas que antes iban juntas y contestaban lo\n\t\t\t\t// mismo, acusando siempre de lo primero:\n\t\t\t\t//\n\t\t\t\t// · ¿el hash cuadra con SU PROPIO contenido? Si no, alguien editó la\n\t\t\t\t// entrada. Eso es manipulación y se dice así.\n\t\t\t\t// · ¿su `prevHash` apunta a la entrada anterior? Si no, el enlace\n\t\t\t\t// está roto, que es otra cosa: faltan entradas o están cambiadas\n\t\t\t\t// de orden.\n\t\t\t\t//\n\t\t\t\t// Medido sobre el libro real de esta máquina: un fichero de dos\n\t\t\t\t// entradas, las dos con `seq: 1` y `prevHash: null`, salía como «el\n\t\t\t\t// hash de una entrada no cuadra con su contenido». Cuadraba\n\t\t\t\t// perfectamente. Eran dos procesos del escritorio escribiendo el mismo\n\t\t\t\t// fichero antes de que `reservarFichero` diera nombres distintos.\n\t\t\t\tif (hash !== hashDe(declarado, resto)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalido: false,\n\t\t\t\t\t\tcomprobadas,\n\t\t\t\t\t\talteradaEn: entrada.ts,\n\t\t\t\t\t\tficheroAlterado: f.nombre,\n\t\t\t\t\t\tmotivo: \"el hash de una entrada no cuadra con su contenido: la han editado\",\n\t\t\t\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (declarado !== prevHash) {\n\t\t\t\t\t// Una cadena que vuelve a empezar dentro del mismo fichero. Lo\n\t\t\t\t\t// produce un reinicio del proceso —y lo produce igual quien quite\n\t\t\t\t\t// entradas del medio y escriba una cadena nueva—. Desde el fichero\n\t\t\t\t\t// no se distinguen, así que NO se llama manipulación ni se da por\n\t\t\t\t\t// bueno: es el tercer estado, y se dice entero en `reinicios`.\n\t\t\t\t\tif (declarado === null && prevHash !== null) {\n\t\t\t\t\t\treinicios.push({ fichero: f.nombre, ts: entrada.ts, entradasAntes: enEste });\n\t\t\t\t\t\tprevHash = hash;\n\t\t\t\t\t\tcomprobadas++;\n\t\t\t\t\t\tenEste++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalido: false,\n\t\t\t\t\t\tcomprobadas,\n\t\t\t\t\t\talteradaEn: entrada.ts,\n\t\t\t\t\t\tficheroAlterado: f.nombre,\n\t\t\t\t\t\tmotivo:\n\t\t\t\t\t\t\t\"el enlace de una entrada no apunta a la anterior: faltan entradas o están cambiadas de orden\",\n\t\t\t\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tprevHash = hash;\n\t\t\t\tcomprobadas++;\n\t\t\t\tenEste++;\n\t\t\t}\n\t\t\t// Un fichero VACÍO que falta no es una ausencia: es una reserva de\n\t\t\t// nombre que nunca llegó a escribirse (la sesión murió entre reservar y\n\t\t\t// anotar). Contarlo habría hecho que una sesión nueva y legítima, sin\n\t\t\t// una sola entrada todavía, se reportara como manipulada — la mitad que\n\t\t\t// decide, porque un detector que grita siempre no distingue nada.\n\t\t\tif (enEste === 0) continue;\n\t\t\t// Un hueco EXPLICADO no es una manipulación.\n\t\t\t//\n\t\t\t// Si el propio libro lleva una lápida diciendo que ese fichero se purgó\n\t\t\t// —cuándo, cuántas entradas, bajo qué política y con qué hash de\n\t\t\t// cierre—, la ausencia es un hecho declarado y no una desaparición. Sin\n\t\t\t// esto, cumplir el art. 5.1.e del RGPD hacía que `verificar` contestara\n\t\t\t// «alguien los ha borrado»: la ley nos acusaba de manipular. Ver\n\t\t\t// `audit/retencion.ts`.\n\t\t\tif (f.falta && !purgados.has(f.nombre)) faltan.push({ fichero: f.nombre, entradas: enEste });\n\t\t\tif (f.sinAncla) sinAncla.push(f.nombre);\n\t\t}\n\t\t// Las lápidas se enseñan TODAS, no solo las que tapan un hueco del\n\t\t// inventario. Una purga completa se lleva el fichero Y su ancla, así que no\n\t\t// deja hueco ninguno: si solo se informara de las que explican una ausencia,\n\t\t// el caso normal —el que de verdad ocurre— saldría mudo y el DPO leería\n\t\t// «cadena íntegra, 1 entrada» sin enterarse de que se purgaron tres. Que es\n\t\t// exactamente el «desaparece sin rastro» que este mecanismo existe para\n\t\t// impedir.\n\t\tconst explicados = [...purgados.values()].map((l) => ({\n\t\t\tfichero: l.fichero,\n\t\t\tentradas: l.entradas,\n\t\t\tpolitica: l.politica,\n\t\t}));\n\t\treturn {\n\t\t\tvalido: faltan.length === 0,\n\t\t\t...(explicados.length ? { purgados: explicados } : {}),\n\t\t\t...(reinicios.length ? { reinicios } : {}),\n\t\t\tcomprobadas,\n\t\t\t...(faltan.length ? { faltan } : {}),\n\t\t\t...(sinAncla.length ? { sinAncla } : {}),\n\t\t};\n\t}\n}\n"]}