@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hallazgo.js","sourceRoot":"","sources":["../../../src/core/revision/hallazgo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC,gFAA6E;AAC7E,MAAM,UAAU,GAA8B;IAC7C,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,WAAW,EAAE,CAAC;CACd,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,SAAoB,EAAU;IAC1D,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAAA,CAC7B;AAED,+EAA+E;AAC/E,MAAM,UAAU,UAAU,CAAC,SAAoB,EAAyC;IACvF,QAAQ,SAAS,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,MAAM;YACV,OAAO,OAAO,CAAC;QAChB,KAAK,OAAO;YACX,OAAO,SAAS,CAAC;QAClB,KAAK,MAAM;YACV,OAAO,MAAM,CAAC;QACf;YACC,OAAO,MAAM,CAAC;IAChB,CAAC;AAAA,CACD;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,QAA0D,EAAU;IAC5F,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,SAAS,QAAQ,CAAC,IAAI,SAAS,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CAClH;AAED,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,QAA2B,EAAiB;IACxE,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,gDAAgD,CAAC;IAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,4CAA2C,CAAC;IACvE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;QAAE,OAAO,gDAA+C,CAAC;IACxF,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,2DAAuD,CAAC;IAChE,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjF,OAAO,yCAAwC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ","sourcesContent":["/**\n * Un hallazgo de revisión, con evidencia obligatoria.\n *\n * La evidencia no es un adorno del tipo: es lo que separa una revisión de una\n * opinión. Un hallazgo que dice «esto podría tener una condición de carrera» sin\n * señalar las líneas que la producen no se puede comprobar, no se puede arreglar\n * y no se puede rebatir — y a las tres veces el equipo deja de leer la revisión\n * entera. Por eso `evidencia` es obligatoria y no opcional.\n *\n * El otro campo que importa es la HUELLA. Es lo que permite que un hallazgo\n * repetido entre ejecuciones se reconozca como el mismo aunque el fichero se\n * haya movido: se calcula sobre la regla, la ruta y la evidencia, y\n * deliberadamente NO sobre el número de línea. Un hallazgo que cambia de huella\n * cada vez que alguien añade un import aparece como nuevo en cada ejecución, y\n * eso convierte cualquier panel en ruido.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type Severidad = \"critica\" | \"alta\" | \"media\" | \"baja\" | \"informativa\";\n\nexport interface Hallazgo {\n\t/** Identificador estable de la regla, p. ej. `ada/cruce-de-frontera`. */\n\treglaId: string;\n\ttitulo: string;\n\tresumen: string;\n\tseveridad: Severidad;\n\t/** Ruta relativa a la raíz del repositorio. */\n\truta: string;\n\tlineaInicio: number;\n\tlineaFin?: number;\n\t/** El fragmento exacto que lo justifica. Obligatorio a propósito. */\n\tevidencia: string;\n\t/** Qué hacer. Un hallazgo sin salida es una queja. */\n\tremedio?: string;\n\t/** CWE, OWASP, lo que sirva para clasificar. */\n\tetiquetas?: string[];\n}\n\n/** Puntuación 0–10, la escala que entiende GitHub en `security-severity`. */\nconst PUNTUACION: Record<Severidad, number> = {\n\tcritica: 9.5,\n\talta: 7.5,\n\tmedia: 5,\n\tbaja: 3,\n\tinformativa: 0,\n};\n\nexport function puntuacionDe(severidad: Severidad): number {\n\treturn PUNTUACION[severidad];\n}\n\n/** Nivel SARIF. `informativa` es `none`, que GitHub muestra pero no cuenta. */\nexport function nivelSarif(severidad: Severidad): \"error\" | \"warning\" | \"note\" | \"none\" {\n\tswitch (severidad) {\n\t\tcase \"critica\":\n\t\tcase \"alta\":\n\t\t\treturn \"error\";\n\t\tcase \"media\":\n\t\t\treturn \"warning\";\n\t\tcase \"baja\":\n\t\t\treturn \"note\";\n\t\tdefault:\n\t\t\treturn \"none\";\n\t}\n}\n\n/**\n * Huella estable del hallazgo.\n *\n * Sobre regla + ruta + evidencia normalizada. Sin número de línea: si lo\n * llevara, mover el bloque diez líneas más abajo crearía un hallazgo \"nuevo\" y\n * el anterior quedaría como \"resuelto\", que es mentira dos veces.\n *\n * La evidencia se normaliza en espacios porque un reformateo no cambia el\n * problema.\n */\nexport function huellaDe(hallazgo: Pick<Hallazgo, \"reglaId\" | \"ruta\" | \"evidencia\">): string {\n\tconst normalizada = hallazgo.evidencia.replace(/\\s+/g, \" \").trim();\n\treturn createHash(\"sha256\").update(`${hallazgo.reglaId}\\u0000${hallazgo.ruta}\\u0000${normalizada}`).digest(\"hex\");\n}\n\n/** Motivo por el que un hallazgo no vale, o `null` si vale. */\nexport function porQueNoVale(hallazgo: Partial<Hallazgo>): string | null {\n\tif (!hallazgo.reglaId) return \"sin reglaId: no se puede agrupar ni deduplicar\";\n\tif (!hallazgo.ruta) return \"sin ruta: no se puede anclar en el código\";\n\tif (!hallazgo.evidencia?.trim()) return \"sin evidencia: es una opinión, no un hallazgo\";\n\tif (typeof hallazgo.lineaInicio !== \"number\" || hallazgo.lineaInicio < 1) {\n\t\treturn \"sin línea de inicio válida: no se puede señalar dónde\";\n\t}\n\tif (hallazgo.lineaFin !== undefined && hallazgo.lineaFin < hallazgo.lineaInicio) {\n\t\treturn \"la línea final va antes que la inicial\";\n\t}\n\treturn null;\n}\n"]}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Revisión de un diff, con los hallazgos anclados al código.
3
+ *
4
+ * Lo que separa esto de «pídele al modelo que revise» es el ANCLAJE: un
5
+ * hallazgo cuya evidencia no aparece en el diff se descarta, se cuente lo
6
+ * convincente que se cuente. Un revisor que inventa una línea plausible es peor
7
+ * que no tener revisor, porque cuesta tiempo comprobar que no existe y quema la
8
+ * confianza del equipo en la herramienta entera.
9
+ *
10
+ * El anclaje también es lo que hace la puerta de esta fase comprobable: sobre un
11
+ * diff limpio, un revisor honesto devuelve cero, y uno que inventa no puede
12
+ * porque no hay dónde anclar.
13
+ */
14
+ import { type Hallazgo } from "./hallazgo.ts";
15
+ /**
16
+ * Las líneas AÑADIDAS de un diff unificado, sin el `+` inicial.
17
+ *
18
+ * Solo las añadidas: revisar lo que el diff borra es señalar un problema que la
19
+ * propia edición ya resolvió, y ese ruido es de los que hacen que se deje de
20
+ * leer la revisión.
21
+ */
22
+ export declare function lineasAnadidas(diff: string): string[];
23
+ /**
24
+ * ¿La evidencia existe de verdad en lo que se ha añadido?
25
+ *
26
+ * Se compara sobre el texto normalizado y completo, y no línea a línea, porque
27
+ * una evidencia legítima puede abarcar varias.
28
+ */
29
+ export declare function estaAnclado(evidencia: string, diff: string): boolean;
30
+ export interface Descarte {
31
+ hallazgo: Partial<Hallazgo>;
32
+ motivo: string;
33
+ }
34
+ export interface Cribado {
35
+ aceptados: Hallazgo[];
36
+ descartados: Descarte[];
37
+ }
38
+ /**
39
+ * Deja pasar solo lo comprobable.
40
+ *
41
+ * Los descartes se devuelven, no se tiran: sin ellos no hay forma de saber si
42
+ * el revisor está afinado o si está tirando la mitad de lo que encuentra, y esa
43
+ * diferencia solo se ve con los números delante.
44
+ */
45
+ export declare function cribar(candidatos: Array<Partial<Hallazgo>>, diff: string): Cribado;
46
+ /**
47
+ * Resultado de leer la respuesta del modelo. Tres estados, no dos.
48
+ *
49
+ * `ok: false` es «NO HE PODIDO LEERLO», que no es lo mismo que «no hay
50
+ * hallazgos». Antes las dos cosas volvían como `[]` y el comando imprimía «El
51
+ * revisor no ha encontrado nada en este diff» con código 0 — la misma frase, el
52
+ * mismo código de salida y los mismos bytes que un diff genuinamente limpio.
53
+ * Medido ejecutando el comando: con el modelo contestando «No puedo ayudarte con
54
+ * eso.» y con el modelo contestando `[]`, la salida era IDÉNTICA.
55
+ *
56
+ * Es el defecto que este repositorio persigue —un fallo que se lee como éxito—
57
+ * y aquí era el peor de los casos: un certificado de limpieza sobre un diff que
58
+ * nadie revisó.
59
+ */
60
+ export type Extraccion = {
61
+ ok: true;
62
+ candidatos: Array<Partial<Hallazgo>>;
63
+ } | {
64
+ ok: false;
65
+ motivo: string;
66
+ };
67
+ /**
68
+ * Saca el JSON de la respuesta del modelo.
69
+ *
70
+ * Tolera que venga envuelto en un bloque de código o con texto alrededor,
71
+ * porque eso pasa a menudo y fallar por ello convertiría una revisión buena en
72
+ * un error. Lo que NO hace es inventarse la estructura: si no hay un array, eso
73
+ * es un fallo de contrato y sale como fallo, no como «cero hallazgos».
74
+ *
75
+ * `[]` sigue siendo una respuesta válida y frecuente: es `ok: true` con la lista
76
+ * vacía. La diferencia entre esa y la de abajo es justo lo que hay que conservar.
77
+ */
78
+ export declare function extraerCandidatos(salida: string): Extraccion;
79
+ /** Lo que se le pide al modelo. */
80
+ export declare const PROMPT_REVISION: string;
81
+ //# sourceMappingURL=revisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisor.d.ts","sourceRoot":"","sources":["../../../src/core/revision/revisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAgC,MAAM,eAAe,CAAC;AAS5E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBlF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQ5G;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAiB5D;AAED,mCAAmC;AACnC,eAAO,MAAM,eAAe,QAsBhB,CAAC","sourcesContent":["/**\n * Revisión de un diff, con los hallazgos anclados al código.\n *\n * Lo que separa esto de «pídele al modelo que revise» es el ANCLAJE: un\n * hallazgo cuya evidencia no aparece en el diff se descarta, se cuente lo\n * convincente que se cuente. Un revisor que inventa una línea plausible es peor\n * que no tener revisor, porque cuesta tiempo comprobar que no existe y quema la\n * confianza del equipo en la herramienta entera.\n *\n * El anclaje también es lo que hace la puerta de esta fase comprobable: sobre un\n * diff limpio, un revisor honesto devuelve cero, y uno que inventa no puede\n * porque no hay dónde anclar.\n */\n\nimport { type Hallazgo, porQueNoVale, type Severidad } from \"./hallazgo.ts\";\n\nconst SEVERIDADES: Severidad[] = [\"critica\", \"alta\", \"media\", \"baja\", \"informativa\"];\n\n/** Espacios normalizados: un reformateo no debe romper el anclaje. */\nfunction normalizar(texto: string): string {\n\treturn texto.replace(/\\s+/g, \" \").trim();\n}\n\n/**\n * Las líneas AÑADIDAS de un diff unificado, sin el `+` inicial.\n *\n * Solo las añadidas: revisar lo que el diff borra es señalar un problema que la\n * propia edición ya resolvió, y ese ruido es de los que hacen que se deje de\n * leer la revisión.\n */\nexport function lineasAnadidas(diff: string): string[] {\n\treturn diff\n\t\t.split(\"\\n\")\n\t\t.filter((l) => l.startsWith(\"+\") && !l.startsWith(\"+++\"))\n\t\t.map((l) => l.slice(1));\n}\n\n/**\n * ¿La evidencia existe de verdad en lo que se ha añadido?\n *\n * Se compara sobre el texto normalizado y completo, y no línea a línea, porque\n * una evidencia legítima puede abarcar varias.\n */\nexport function estaAnclado(evidencia: string, diff: string): boolean {\n\tconst aguja = normalizar(evidencia);\n\tif (aguja.length < 3) return false;\n\treturn normalizar(lineasAnadidas(diff).join(\" \")).includes(aguja);\n}\n\nexport interface Descarte {\n\thallazgo: Partial<Hallazgo>;\n\tmotivo: string;\n}\n\nexport interface Cribado {\n\taceptados: Hallazgo[];\n\tdescartados: Descarte[];\n}\n\n/**\n * Deja pasar solo lo comprobable.\n *\n * Los descartes se devuelven, no se tiran: sin ellos no hay forma de saber si\n * el revisor está afinado o si está tirando la mitad de lo que encuentra, y esa\n * diferencia solo se ve con los números delante.\n */\nexport function cribar(candidatos: Array<Partial<Hallazgo>>, diff: string): Cribado {\n\tconst aceptados: Hallazgo[] = [];\n\tconst descartados: Descarte[] = [];\n\tfor (const c of candidatos) {\n\t\tconst problema = porQueNoVale(c);\n\t\tif (problema) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: problema });\n\t\t\tcontinue;\n\t\t}\n\t\tif (!SEVERIDADES.includes(c.severidad as Severidad)) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: `severidad desconocida: ${String(c.severidad)}` });\n\t\t\tcontinue;\n\t\t}\n\t\tif (!estaAnclado(c.evidencia as string, diff)) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: \"la evidencia no aparece en el diff: no se puede comprobar\" });\n\t\t\tcontinue;\n\t\t}\n\t\taceptados.push(c as Hallazgo);\n\t}\n\treturn { aceptados, descartados };\n}\n\n/**\n * Resultado de leer la respuesta del modelo. Tres estados, no dos.\n *\n * `ok: false` es «NO HE PODIDO LEERLO», que no es lo mismo que «no hay\n * hallazgos». Antes las dos cosas volvían como `[]` y el comando imprimía «El\n * revisor no ha encontrado nada en este diff» con código 0 — la misma frase, el\n * mismo código de salida y los mismos bytes que un diff genuinamente limpio.\n * Medido ejecutando el comando: con el modelo contestando «No puedo ayudarte con\n * eso.» y con el modelo contestando `[]`, la salida era IDÉNTICA.\n *\n * Es el defecto que este repositorio persigue —un fallo que se lee como éxito—\n * y aquí era el peor de los casos: un certificado de limpieza sobre un diff que\n * nadie revisó.\n */\nexport type Extraccion = { ok: true; candidatos: Array<Partial<Hallazgo>> } | { ok: false; motivo: string };\n\n/** Un trozo de la respuesta, para que el motivo diga QUÉ llegó y no solo que no valía. */\nfunction recorte(texto: string): string {\n\tconst limpio = normalizar(texto);\n\treturn limpio.length > 160 ? `${limpio.slice(0, 160)}…` : limpio;\n}\n\n/**\n * Saca el JSON de la respuesta del modelo.\n *\n * Tolera que venga envuelto en un bloque de código o con texto alrededor,\n * porque eso pasa a menudo y fallar por ello convertiría una revisión buena en\n * un error. Lo que NO hace es inventarse la estructura: si no hay un array, eso\n * es un fallo de contrato y sale como fallo, no como «cero hallazgos».\n *\n * `[]` sigue siendo una respuesta válida y frecuente: es `ok: true` con la lista\n * vacía. La diferencia entre esa y la de abajo es justo lo que hay que conservar.\n */\nexport function extraerCandidatos(salida: string): Extraccion {\n\tconst cercado = salida.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n\tconst bruto = cercado ? cercado[1] : salida;\n\tconst inicio = bruto.indexOf(\"[\");\n\tconst fin = bruto.lastIndexOf(\"]\");\n\tif (inicio === -1 || fin <= inicio) {\n\t\treturn { ok: false, motivo: `la respuesta no traía ningún array JSON. Llegó esto: ${recorte(salida)}` };\n\t}\n\ttry {\n\t\t// El trozo empieza en `[` y acaba en `]`, así que si analiza es un array:\n\t\t// no hace falta una rama para «analizó pero no es array», que nunca se\n\t\t// dispararía.\n\t\treturn { ok: true, candidatos: JSON.parse(bruto.slice(inicio, fin + 1)) as Array<Partial<Hallazgo>> };\n\t} catch (error) {\n\t\tconst detalle = error instanceof Error ? error.message : String(error);\n\t\treturn { ok: false, motivo: `el array JSON venía roto (${detalle}). Llegó esto: ${recorte(salida)}` };\n\t}\n}\n\n/** Lo que se le pide al modelo. */\nexport const PROMPT_REVISION = [\n\t\"Eres un revisor de código. Revisas SOLO el diff que se te da.\",\n\t\"\",\n\t\"Devuelve un array JSON de hallazgos, y NADA más. Cada hallazgo:\",\n\t' { \"reglaId\": \"ada/<categoria>\", \"titulo\": \"...\", \"resumen\": \"...\",',\n\t' \"severidad\": \"critica|alta|media|baja|informativa\",',\n\t' \"ruta\": \"<ruta del fichero>\", \"lineaInicio\": <n>, \"lineaFin\": <n>,',\n\t' \"evidencia\": \"<el fragmento EXACTO del diff, copiado literalmente>\",',\n\t' \"remedio\": \"<qué hacer>\" }',\n\t\"\",\n\t\"Reglas que no se negocian:\",\n\t\"- `evidencia` tiene que estar COPIADA LITERALMENTE de una línea añadida del\",\n\t\" diff. Si no puedes copiarla, no tienes hallazgo: no lo inventes.\",\n\t\"- Revisa solo lo AÑADIDO. Señalar algo que el diff borra es ruido.\",\n\t\"- Si el diff está limpio, devuelve `[]`. Un array vacío es una respuesta\",\n\t\" correcta y frecuente; rellenar con hallazgos menores para parecer útil es\",\n\t\" la forma más rápida de que dejen de leer las revisiones.\",\n\t\"\",\n\t\"Qué buscar, por orden: fallos de corrección · fugas de seguridad o de\",\n\t\"secretos · errores que se tragan en silencio · cruces de frontera sin\",\n\t\"validar (dato externo que llega a una ruta de fichero, una consulta o un\",\n\t\"comando) · condiciones de carrera · recursos que no se cierran.\",\n].join(\"\\n\");\n"]}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Revisión de un diff, con los hallazgos anclados al código.
3
+ *
4
+ * Lo que separa esto de «pídele al modelo que revise» es el ANCLAJE: un
5
+ * hallazgo cuya evidencia no aparece en el diff se descarta, se cuente lo
6
+ * convincente que se cuente. Un revisor que inventa una línea plausible es peor
7
+ * que no tener revisor, porque cuesta tiempo comprobar que no existe y quema la
8
+ * confianza del equipo en la herramienta entera.
9
+ *
10
+ * El anclaje también es lo que hace la puerta de esta fase comprobable: sobre un
11
+ * diff limpio, un revisor honesto devuelve cero, y uno que inventa no puede
12
+ * porque no hay dónde anclar.
13
+ */
14
+ import { porQueNoVale } from "./hallazgo.js";
15
+ const SEVERIDADES = ["critica", "alta", "media", "baja", "informativa"];
16
+ /** Espacios normalizados: un reformateo no debe romper el anclaje. */
17
+ function normalizar(texto) {
18
+ return texto.replace(/\s+/g, " ").trim();
19
+ }
20
+ /**
21
+ * Las líneas AÑADIDAS de un diff unificado, sin el `+` inicial.
22
+ *
23
+ * Solo las añadidas: revisar lo que el diff borra es señalar un problema que la
24
+ * propia edición ya resolvió, y ese ruido es de los que hacen que se deje de
25
+ * leer la revisión.
26
+ */
27
+ export function lineasAnadidas(diff) {
28
+ return diff
29
+ .split("\n")
30
+ .filter((l) => l.startsWith("+") && !l.startsWith("+++"))
31
+ .map((l) => l.slice(1));
32
+ }
33
+ /**
34
+ * ¿La evidencia existe de verdad en lo que se ha añadido?
35
+ *
36
+ * Se compara sobre el texto normalizado y completo, y no línea a línea, porque
37
+ * una evidencia legítima puede abarcar varias.
38
+ */
39
+ export function estaAnclado(evidencia, diff) {
40
+ const aguja = normalizar(evidencia);
41
+ if (aguja.length < 3)
42
+ return false;
43
+ return normalizar(lineasAnadidas(diff).join(" ")).includes(aguja);
44
+ }
45
+ /**
46
+ * Deja pasar solo lo comprobable.
47
+ *
48
+ * Los descartes se devuelven, no se tiran: sin ellos no hay forma de saber si
49
+ * el revisor está afinado o si está tirando la mitad de lo que encuentra, y esa
50
+ * diferencia solo se ve con los números delante.
51
+ */
52
+ export function cribar(candidatos, diff) {
53
+ const aceptados = [];
54
+ const descartados = [];
55
+ for (const c of candidatos) {
56
+ const problema = porQueNoVale(c);
57
+ if (problema) {
58
+ descartados.push({ hallazgo: c, motivo: problema });
59
+ continue;
60
+ }
61
+ if (!SEVERIDADES.includes(c.severidad)) {
62
+ descartados.push({ hallazgo: c, motivo: `severidad desconocida: ${String(c.severidad)}` });
63
+ continue;
64
+ }
65
+ if (!estaAnclado(c.evidencia, diff)) {
66
+ descartados.push({ hallazgo: c, motivo: "la evidencia no aparece en el diff: no se puede comprobar" });
67
+ continue;
68
+ }
69
+ aceptados.push(c);
70
+ }
71
+ return { aceptados, descartados };
72
+ }
73
+ /** Un trozo de la respuesta, para que el motivo diga QUÉ llegó y no solo que no valía. */
74
+ function recorte(texto) {
75
+ const limpio = normalizar(texto);
76
+ return limpio.length > 160 ? `${limpio.slice(0, 160)}…` : limpio;
77
+ }
78
+ /**
79
+ * Saca el JSON de la respuesta del modelo.
80
+ *
81
+ * Tolera que venga envuelto en un bloque de código o con texto alrededor,
82
+ * porque eso pasa a menudo y fallar por ello convertiría una revisión buena en
83
+ * un error. Lo que NO hace es inventarse la estructura: si no hay un array, eso
84
+ * es un fallo de contrato y sale como fallo, no como «cero hallazgos».
85
+ *
86
+ * `[]` sigue siendo una respuesta válida y frecuente: es `ok: true` con la lista
87
+ * vacía. La diferencia entre esa y la de abajo es justo lo que hay que conservar.
88
+ */
89
+ export function extraerCandidatos(salida) {
90
+ const cercado = salida.match(/```(?:json)?\s*([\s\S]*?)```/);
91
+ const bruto = cercado ? cercado[1] : salida;
92
+ const inicio = bruto.indexOf("[");
93
+ const fin = bruto.lastIndexOf("]");
94
+ if (inicio === -1 || fin <= inicio) {
95
+ return { ok: false, motivo: `la respuesta no traía ningún array JSON. Llegó esto: ${recorte(salida)}` };
96
+ }
97
+ try {
98
+ // El trozo empieza en `[` y acaba en `]`, así que si analiza es un array:
99
+ // no hace falta una rama para «analizó pero no es array», que nunca se
100
+ // dispararía.
101
+ return { ok: true, candidatos: JSON.parse(bruto.slice(inicio, fin + 1)) };
102
+ }
103
+ catch (error) {
104
+ const detalle = error instanceof Error ? error.message : String(error);
105
+ return { ok: false, motivo: `el array JSON venía roto (${detalle}). Llegó esto: ${recorte(salida)}` };
106
+ }
107
+ }
108
+ /** Lo que se le pide al modelo. */
109
+ export const PROMPT_REVISION = [
110
+ "Eres un revisor de código. Revisas SOLO el diff que se te da.",
111
+ "",
112
+ "Devuelve un array JSON de hallazgos, y NADA más. Cada hallazgo:",
113
+ ' { "reglaId": "ada/<categoria>", "titulo": "...", "resumen": "...",',
114
+ ' "severidad": "critica|alta|media|baja|informativa",',
115
+ ' "ruta": "<ruta del fichero>", "lineaInicio": <n>, "lineaFin": <n>,',
116
+ ' "evidencia": "<el fragmento EXACTO del diff, copiado literalmente>",',
117
+ ' "remedio": "<qué hacer>" }',
118
+ "",
119
+ "Reglas que no se negocian:",
120
+ "- `evidencia` tiene que estar COPIADA LITERALMENTE de una línea añadida del",
121
+ " diff. Si no puedes copiarla, no tienes hallazgo: no lo inventes.",
122
+ "- Revisa solo lo AÑADIDO. Señalar algo que el diff borra es ruido.",
123
+ "- Si el diff está limpio, devuelve `[]`. Un array vacío es una respuesta",
124
+ " correcta y frecuente; rellenar con hallazgos menores para parecer útil es",
125
+ " la forma más rápida de que dejen de leer las revisiones.",
126
+ "",
127
+ "Qué buscar, por orden: fallos de corrección · fugas de seguridad o de",
128
+ "secretos · errores que se tragan en silencio · cruces de frontera sin",
129
+ "validar (dato externo que llega a una ruta de fichero, una consulta o un",
130
+ "comando) · condiciones de carrera · recursos que no se cierran.",
131
+ ].join("\n");
132
+ //# sourceMappingURL=revisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisor.js","sourceRoot":"","sources":["../../../src/core/revision/revisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAiB,YAAY,EAAkB,MAAM,eAAe,CAAC;AAE5E,MAAM,WAAW,GAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAErF,sEAAsE;AACtE,SAAS,UAAU,CAAC,KAAa,EAAU;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAAA,CACzC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAY;IACtD,OAAO,IAAI;SACT,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CACzB;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,IAAY,EAAW;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAAA,CAClE;AAYD;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,UAAoC,EAAE,IAAY,EAAW;IACnF,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,WAAW,GAAe,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpD,SAAS;QACV,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAsB,CAAC,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,0BAA0B,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,SAAS;QACV,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAmB,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,2DAA2D,EAAE,CAAC,CAAC;YACvG,SAAS;QACV,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAa,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAAA,CAClC;AAkBD,6FAA0F;AAC1F,SAAS,OAAO,CAAC,KAAa,EAAU;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAAA,CACjE;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAc;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2DAAwD,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACzG,CAAC;IACD,IAAI,CAAC;QACJ,2EAA0E;QAC1E,0EAAuE;QACvE,eAAc;QACd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAA6B,EAAE,CAAC;IACvG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA6B,OAAO,mBAAkB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACvG,CAAC;AAAA,CACD;AAED,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,gEAA+D;IAC/D,EAAE;IACF,kEAAiE;IACjE,sEAAsE;IACtE,yDAAyD;IACzD,wEAAwE;IACxE,0EAA0E;IAC1E,iCAAgC;IAChC,EAAE;IACF,4BAA4B;IAC5B,+EAA6E;IAC7E,oEAAoE;IACpE,sEAAoE;IACpE,4EAA0E;IAC1E,8EAA6E;IAC7E,8DAA4D;IAC5D,EAAE;IACF,0EAAuE;IACvE,yEAAuE;IACvE,0EAA0E;IAC1E,mEAAiE;CACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC","sourcesContent":["/**\n * Revisión de un diff, con los hallazgos anclados al código.\n *\n * Lo que separa esto de «pídele al modelo que revise» es el ANCLAJE: un\n * hallazgo cuya evidencia no aparece en el diff se descarta, se cuente lo\n * convincente que se cuente. Un revisor que inventa una línea plausible es peor\n * que no tener revisor, porque cuesta tiempo comprobar que no existe y quema la\n * confianza del equipo en la herramienta entera.\n *\n * El anclaje también es lo que hace la puerta de esta fase comprobable: sobre un\n * diff limpio, un revisor honesto devuelve cero, y uno que inventa no puede\n * porque no hay dónde anclar.\n */\n\nimport { type Hallazgo, porQueNoVale, type Severidad } from \"./hallazgo.ts\";\n\nconst SEVERIDADES: Severidad[] = [\"critica\", \"alta\", \"media\", \"baja\", \"informativa\"];\n\n/** Espacios normalizados: un reformateo no debe romper el anclaje. */\nfunction normalizar(texto: string): string {\n\treturn texto.replace(/\\s+/g, \" \").trim();\n}\n\n/**\n * Las líneas AÑADIDAS de un diff unificado, sin el `+` inicial.\n *\n * Solo las añadidas: revisar lo que el diff borra es señalar un problema que la\n * propia edición ya resolvió, y ese ruido es de los que hacen que se deje de\n * leer la revisión.\n */\nexport function lineasAnadidas(diff: string): string[] {\n\treturn diff\n\t\t.split(\"\\n\")\n\t\t.filter((l) => l.startsWith(\"+\") && !l.startsWith(\"+++\"))\n\t\t.map((l) => l.slice(1));\n}\n\n/**\n * ¿La evidencia existe de verdad en lo que se ha añadido?\n *\n * Se compara sobre el texto normalizado y completo, y no línea a línea, porque\n * una evidencia legítima puede abarcar varias.\n */\nexport function estaAnclado(evidencia: string, diff: string): boolean {\n\tconst aguja = normalizar(evidencia);\n\tif (aguja.length < 3) return false;\n\treturn normalizar(lineasAnadidas(diff).join(\" \")).includes(aguja);\n}\n\nexport interface Descarte {\n\thallazgo: Partial<Hallazgo>;\n\tmotivo: string;\n}\n\nexport interface Cribado {\n\taceptados: Hallazgo[];\n\tdescartados: Descarte[];\n}\n\n/**\n * Deja pasar solo lo comprobable.\n *\n * Los descartes se devuelven, no se tiran: sin ellos no hay forma de saber si\n * el revisor está afinado o si está tirando la mitad de lo que encuentra, y esa\n * diferencia solo se ve con los números delante.\n */\nexport function cribar(candidatos: Array<Partial<Hallazgo>>, diff: string): Cribado {\n\tconst aceptados: Hallazgo[] = [];\n\tconst descartados: Descarte[] = [];\n\tfor (const c of candidatos) {\n\t\tconst problema = porQueNoVale(c);\n\t\tif (problema) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: problema });\n\t\t\tcontinue;\n\t\t}\n\t\tif (!SEVERIDADES.includes(c.severidad as Severidad)) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: `severidad desconocida: ${String(c.severidad)}` });\n\t\t\tcontinue;\n\t\t}\n\t\tif (!estaAnclado(c.evidencia as string, diff)) {\n\t\t\tdescartados.push({ hallazgo: c, motivo: \"la evidencia no aparece en el diff: no se puede comprobar\" });\n\t\t\tcontinue;\n\t\t}\n\t\taceptados.push(c as Hallazgo);\n\t}\n\treturn { aceptados, descartados };\n}\n\n/**\n * Resultado de leer la respuesta del modelo. Tres estados, no dos.\n *\n * `ok: false` es «NO HE PODIDO LEERLO», que no es lo mismo que «no hay\n * hallazgos». Antes las dos cosas volvían como `[]` y el comando imprimía «El\n * revisor no ha encontrado nada en este diff» con código 0 — la misma frase, el\n * mismo código de salida y los mismos bytes que un diff genuinamente limpio.\n * Medido ejecutando el comando: con el modelo contestando «No puedo ayudarte con\n * eso.» y con el modelo contestando `[]`, la salida era IDÉNTICA.\n *\n * Es el defecto que este repositorio persigue —un fallo que se lee como éxito—\n * y aquí era el peor de los casos: un certificado de limpieza sobre un diff que\n * nadie revisó.\n */\nexport type Extraccion = { ok: true; candidatos: Array<Partial<Hallazgo>> } | { ok: false; motivo: string };\n\n/** Un trozo de la respuesta, para que el motivo diga QUÉ llegó y no solo que no valía. */\nfunction recorte(texto: string): string {\n\tconst limpio = normalizar(texto);\n\treturn limpio.length > 160 ? `${limpio.slice(0, 160)}…` : limpio;\n}\n\n/**\n * Saca el JSON de la respuesta del modelo.\n *\n * Tolera que venga envuelto en un bloque de código o con texto alrededor,\n * porque eso pasa a menudo y fallar por ello convertiría una revisión buena en\n * un error. Lo que NO hace es inventarse la estructura: si no hay un array, eso\n * es un fallo de contrato y sale como fallo, no como «cero hallazgos».\n *\n * `[]` sigue siendo una respuesta válida y frecuente: es `ok: true` con la lista\n * vacía. La diferencia entre esa y la de abajo es justo lo que hay que conservar.\n */\nexport function extraerCandidatos(salida: string): Extraccion {\n\tconst cercado = salida.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n\tconst bruto = cercado ? cercado[1] : salida;\n\tconst inicio = bruto.indexOf(\"[\");\n\tconst fin = bruto.lastIndexOf(\"]\");\n\tif (inicio === -1 || fin <= inicio) {\n\t\treturn { ok: false, motivo: `la respuesta no traía ningún array JSON. Llegó esto: ${recorte(salida)}` };\n\t}\n\ttry {\n\t\t// El trozo empieza en `[` y acaba en `]`, así que si analiza es un array:\n\t\t// no hace falta una rama para «analizó pero no es array», que nunca se\n\t\t// dispararía.\n\t\treturn { ok: true, candidatos: JSON.parse(bruto.slice(inicio, fin + 1)) as Array<Partial<Hallazgo>> };\n\t} catch (error) {\n\t\tconst detalle = error instanceof Error ? error.message : String(error);\n\t\treturn { ok: false, motivo: `el array JSON venía roto (${detalle}). Llegó esto: ${recorte(salida)}` };\n\t}\n}\n\n/** Lo que se le pide al modelo. */\nexport const PROMPT_REVISION = [\n\t\"Eres un revisor de código. Revisas SOLO el diff que se te da.\",\n\t\"\",\n\t\"Devuelve un array JSON de hallazgos, y NADA más. Cada hallazgo:\",\n\t' { \"reglaId\": \"ada/<categoria>\", \"titulo\": \"...\", \"resumen\": \"...\",',\n\t' \"severidad\": \"critica|alta|media|baja|informativa\",',\n\t' \"ruta\": \"<ruta del fichero>\", \"lineaInicio\": <n>, \"lineaFin\": <n>,',\n\t' \"evidencia\": \"<el fragmento EXACTO del diff, copiado literalmente>\",',\n\t' \"remedio\": \"<qué hacer>\" }',\n\t\"\",\n\t\"Reglas que no se negocian:\",\n\t\"- `evidencia` tiene que estar COPIADA LITERALMENTE de una línea añadida del\",\n\t\" diff. Si no puedes copiarla, no tienes hallazgo: no lo inventes.\",\n\t\"- Revisa solo lo AÑADIDO. Señalar algo que el diff borra es ruido.\",\n\t\"- Si el diff está limpio, devuelve `[]`. Un array vacío es una respuesta\",\n\t\" correcta y frecuente; rellenar con hallazgos menores para parecer útil es\",\n\t\" la forma más rápida de que dejen de leer las revisiones.\",\n\t\"\",\n\t\"Qué buscar, por orden: fallos de corrección · fugas de seguridad o de\",\n\t\"secretos · errores que se tragan en silencio · cruces de frontera sin\",\n\t\"validar (dato externo que llega a una ruta de fichero, una consulta o un\",\n\t\"comando) · condiciones de carrera · recursos que no se cierran.\",\n].join(\"\\n\");\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Exportación a SARIF 2.1.0.
3
+ *
4
+ * SARIF es el formato que ingieren GitHub Code Scanning y Azure DevOps. Sin él,
5
+ * los hallazgos de una revisión se quedan en la terminal de quien la lanzó: no
6
+ * entran en el proceso de seguridad de la empresa, no aparecen en la pestaña de
7
+ * la pull request y no cuentan para una homologación. Es un requisito de
8
+ * compra, no una mejora.
9
+ *
10
+ * oh-my-pi lo tiene solo para su escáner de seguridad. Aquí vale para CUALQUIER
11
+ * revisión, que es la diferencia entre «tenemos un escáner que exporta» y
12
+ * «nuestro agente habla el idioma de tu proceso».
13
+ *
14
+ * Dos cosas que hacen que GitHub lo acepte y que se pierden fácil:
15
+ *
16
+ * - **Toda regla citada en `results` tiene que estar en `driver.rules`.** Si
17
+ * falta, el resultado se ingiere sin descripción ni severidad, o se rechaza.
18
+ * - **`originalUriBaseIds` con la raíz del repositorio**, para que las rutas
19
+ * relativas se resuelvan contra el árbol y no contra la máquina que lo generó.
20
+ */
21
+ import { type Hallazgo } from "./hallazgo.ts";
22
+ export interface OpcionesSarif {
23
+ /** Raíz del repositorio, para `originalUriBaseIds`. */
24
+ raizRepo: string;
25
+ herramienta?: string;
26
+ version?: string;
27
+ uriInformacion?: string;
28
+ }
29
+ export declare function aSarif(hallazgos: Hallazgo[], opciones: OpcionesSarif): Record<string, unknown>;
30
+ //# sourceMappingURL=sarif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../../src/core/revision/sarif.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,KAAK,QAAQ,EAAsC,MAAM,eAAe,CAAC;AAElF,MAAM,WAAW,aAAa;IAC7B,wDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0D9F","sourcesContent":["/**\n * Exportación a SARIF 2.1.0.\n *\n * SARIF es el formato que ingieren GitHub Code Scanning y Azure DevOps. Sin él,\n * los hallazgos de una revisión se quedan en la terminal de quien la lanzó: no\n * entran en el proceso de seguridad de la empresa, no aparecen en la pestaña de\n * la pull request y no cuentan para una homologación. Es un requisito de\n * compra, no una mejora.\n *\n * oh-my-pi lo tiene solo para su escáner de seguridad. Aquí vale para CUALQUIER\n * revisión, que es la diferencia entre «tenemos un escáner que exporta» y\n * «nuestro agente habla el idioma de tu proceso».\n *\n * Dos cosas que hacen que GitHub lo acepte y que se pierden fácil:\n *\n * - **Toda regla citada en `results` tiene que estar en `driver.rules`.** Si\n * falta, el resultado se ingiere sin descripción ni severidad, o se rechaza.\n * - **`originalUriBaseIds` con la raíz del repositorio**, para que las rutas\n * relativas se resuelvan contra el árbol y no contra la máquina que lo generó.\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { type Hallazgo, huellaDe, nivelSarif, puntuacionDe } from \"./hallazgo.ts\";\n\nexport interface OpcionesSarif {\n\t/** Raíz del repositorio, para `originalUriBaseIds`. */\n\traizRepo: string;\n\therramienta?: string;\n\tversion?: string;\n\turiInformacion?: string;\n}\n\nexport function aSarif(hallazgos: Hallazgo[], opciones: OpcionesSarif): Record<string, unknown> {\n\t// Una regla por `reglaId`, con la descripción del primer hallazgo que la usa.\n\tconst reglas = new Map<string, Hallazgo>();\n\tfor (const h of hallazgos) if (!reglas.has(h.reglaId)) reglas.set(h.reglaId, h);\n\n\treturn {\n\t\t$schema: \"https://json.schemastore.org/sarif-2.1.0.json\",\n\t\tversion: \"2.1.0\",\n\t\truns: [\n\t\t\t{\n\t\t\t\ttool: {\n\t\t\t\t\tdriver: {\n\t\t\t\t\t\tname: opciones.herramienta ?? \"Ada\",\n\t\t\t\t\t\tversion: opciones.version ?? \"0.0.0\",\n\t\t\t\t\t\tinformationUri: opciones.uriInformacion ?? \"https://hoilab.com/ada\",\n\t\t\t\t\t\trules: [...reglas.values()].map((h) => ({\n\t\t\t\t\t\t\tid: h.reglaId,\n\t\t\t\t\t\t\tname: h.reglaId,\n\t\t\t\t\t\t\tshortDescription: { text: h.titulo },\n\t\t\t\t\t\t\tfullDescription: { text: h.resumen },\n\t\t\t\t\t\t\t...(h.remedio ? { help: { text: h.remedio } } : {}),\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\ttags: h.etiquetas ?? [],\n\t\t\t\t\t\t\t\t\"security-severity\": String(puntuacionDe(h.severidad)),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tresults: hallazgos.map((h) => ({\n\t\t\t\t\truleId: h.reglaId,\n\t\t\t\t\tlevel: nivelSarif(h.severidad),\n\t\t\t\t\tmessage: { text: h.resumen },\n\t\t\t\t\tlocations: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tphysicalLocation: {\n\t\t\t\t\t\t\t\tartifactLocation: { uri: h.ruta, uriBaseId: \"%SRCROOT%\" },\n\t\t\t\t\t\t\t\tregion: {\n\t\t\t\t\t\t\t\t\tstartLine: h.lineaInicio,\n\t\t\t\t\t\t\t\t\tendLine: h.lineaFin ?? h.lineaInicio,\n\t\t\t\t\t\t\t\t\t// La evidencia viaja como fragmento de la región: es lo\n\t\t\t\t\t\t\t\t\t// que hace que el hallazgo sea comprobable desde el panel\n\t\t\t\t\t\t\t\t\t// sin abrir el repositorio.\n\t\t\t\t\t\t\t\t\tsnippet: { text: h.evidencia },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t// Lo que permite a GitHub reconocer el mismo hallazgo entre\n\t\t\t\t\t// ejecuciones aunque el fichero se haya movido.\n\t\t\t\t\tpartialFingerprints: { \"ada/v1\": huellaDe(h) },\n\t\t\t\t\tproperties: { severidad: h.severidad, \"security-severity\": String(puntuacionDe(h.severidad)) },\n\t\t\t\t})),\n\t\t\t\toriginalUriBaseIds: {\n\t\t\t\t\t\"%SRCROOT%\": { uri: pathToFileURL(opciones.raizRepo).href.replace(/\\/?$/, \"/\") },\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n"]}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Exportación a SARIF 2.1.0.
3
+ *
4
+ * SARIF es el formato que ingieren GitHub Code Scanning y Azure DevOps. Sin él,
5
+ * los hallazgos de una revisión se quedan en la terminal de quien la lanzó: no
6
+ * entran en el proceso de seguridad de la empresa, no aparecen en la pestaña de
7
+ * la pull request y no cuentan para una homologación. Es un requisito de
8
+ * compra, no una mejora.
9
+ *
10
+ * oh-my-pi lo tiene solo para su escáner de seguridad. Aquí vale para CUALQUIER
11
+ * revisión, que es la diferencia entre «tenemos un escáner que exporta» y
12
+ * «nuestro agente habla el idioma de tu proceso».
13
+ *
14
+ * Dos cosas que hacen que GitHub lo acepte y que se pierden fácil:
15
+ *
16
+ * - **Toda regla citada en `results` tiene que estar en `driver.rules`.** Si
17
+ * falta, el resultado se ingiere sin descripción ni severidad, o se rechaza.
18
+ * - **`originalUriBaseIds` con la raíz del repositorio**, para que las rutas
19
+ * relativas se resuelvan contra el árbol y no contra la máquina que lo generó.
20
+ */
21
+ import { pathToFileURL } from "node:url";
22
+ import { huellaDe, nivelSarif, puntuacionDe } from "./hallazgo.js";
23
+ export function aSarif(hallazgos, opciones) {
24
+ // Una regla por `reglaId`, con la descripción del primer hallazgo que la usa.
25
+ const reglas = new Map();
26
+ for (const h of hallazgos)
27
+ if (!reglas.has(h.reglaId))
28
+ reglas.set(h.reglaId, h);
29
+ return {
30
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
31
+ version: "2.1.0",
32
+ runs: [
33
+ {
34
+ tool: {
35
+ driver: {
36
+ name: opciones.herramienta ?? "Ada",
37
+ version: opciones.version ?? "0.0.0",
38
+ informationUri: opciones.uriInformacion ?? "https://hoilab.com/ada",
39
+ rules: [...reglas.values()].map((h) => ({
40
+ id: h.reglaId,
41
+ name: h.reglaId,
42
+ shortDescription: { text: h.titulo },
43
+ fullDescription: { text: h.resumen },
44
+ ...(h.remedio ? { help: { text: h.remedio } } : {}),
45
+ properties: {
46
+ tags: h.etiquetas ?? [],
47
+ "security-severity": String(puntuacionDe(h.severidad)),
48
+ },
49
+ })),
50
+ },
51
+ },
52
+ results: hallazgos.map((h) => ({
53
+ ruleId: h.reglaId,
54
+ level: nivelSarif(h.severidad),
55
+ message: { text: h.resumen },
56
+ locations: [
57
+ {
58
+ physicalLocation: {
59
+ artifactLocation: { uri: h.ruta, uriBaseId: "%SRCROOT%" },
60
+ region: {
61
+ startLine: h.lineaInicio,
62
+ endLine: h.lineaFin ?? h.lineaInicio,
63
+ // La evidencia viaja como fragmento de la región: es lo
64
+ // que hace que el hallazgo sea comprobable desde el panel
65
+ // sin abrir el repositorio.
66
+ snippet: { text: h.evidencia },
67
+ },
68
+ },
69
+ },
70
+ ],
71
+ // Lo que permite a GitHub reconocer el mismo hallazgo entre
72
+ // ejecuciones aunque el fichero se haya movido.
73
+ partialFingerprints: { "ada/v1": huellaDe(h) },
74
+ properties: { severidad: h.severidad, "security-severity": String(puntuacionDe(h.severidad)) },
75
+ })),
76
+ originalUriBaseIds: {
77
+ "%SRCROOT%": { uri: pathToFileURL(opciones.raizRepo).href.replace(/\/?$/, "/") },
78
+ },
79
+ },
80
+ ],
81
+ };
82
+ }
83
+ //# sourceMappingURL=sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../../src/core/revision/sarif.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAiB,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAUlF,MAAM,UAAU,MAAM,CAAC,SAAqB,EAAE,QAAuB,EAA2B;IAC/F,+EAA8E;IAC9E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEhF,OAAO;QACN,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACL;gBACC,IAAI,EAAE;oBACL,MAAM,EAAE;wBACP,IAAI,EAAE,QAAQ,CAAC,WAAW,IAAI,KAAK;wBACnC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,OAAO;wBACpC,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,wBAAwB;wBACnE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACvC,EAAE,EAAE,CAAC,CAAC,OAAO;4BACb,IAAI,EAAE,CAAC,CAAC,OAAO;4BACf,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;4BACpC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;4BACpC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACnD,UAAU,EAAE;gCACX,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;gCACvB,mBAAmB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;6BACtD;yBACD,CAAC,CAAC;qBACH;iBACD;gBACD,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9B,MAAM,EAAE,CAAC,CAAC,OAAO;oBACjB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;oBAC5B,SAAS,EAAE;wBACV;4BACC,gBAAgB,EAAE;gCACjB,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE;gCACzD,MAAM,EAAE;oCACP,SAAS,EAAE,CAAC,CAAC,WAAW;oCACxB,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW;oCACpC,yDAAwD;oCACxD,0DAA0D;oCAC1D,4BAA4B;oCAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE;iCAC9B;6BACD;yBACD;qBACD;oBACD,4DAA4D;oBAC5D,gDAAgD;oBAChD,mBAAmB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAC9C,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;iBAC9F,CAAC,CAAC;gBACH,kBAAkB,EAAE;oBACnB,WAAW,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;iBAChF;aACD;SACD;KACD,CAAC;AAAA,CACF","sourcesContent":["/**\n * Exportación a SARIF 2.1.0.\n *\n * SARIF es el formato que ingieren GitHub Code Scanning y Azure DevOps. Sin él,\n * los hallazgos de una revisión se quedan en la terminal de quien la lanzó: no\n * entran en el proceso de seguridad de la empresa, no aparecen en la pestaña de\n * la pull request y no cuentan para una homologación. Es un requisito de\n * compra, no una mejora.\n *\n * oh-my-pi lo tiene solo para su escáner de seguridad. Aquí vale para CUALQUIER\n * revisión, que es la diferencia entre «tenemos un escáner que exporta» y\n * «nuestro agente habla el idioma de tu proceso».\n *\n * Dos cosas que hacen que GitHub lo acepte y que se pierden fácil:\n *\n * - **Toda regla citada en `results` tiene que estar en `driver.rules`.** Si\n * falta, el resultado se ingiere sin descripción ni severidad, o se rechaza.\n * - **`originalUriBaseIds` con la raíz del repositorio**, para que las rutas\n * relativas se resuelvan contra el árbol y no contra la máquina que lo generó.\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { type Hallazgo, huellaDe, nivelSarif, puntuacionDe } from \"./hallazgo.ts\";\n\nexport interface OpcionesSarif {\n\t/** Raíz del repositorio, para `originalUriBaseIds`. */\n\traizRepo: string;\n\therramienta?: string;\n\tversion?: string;\n\turiInformacion?: string;\n}\n\nexport function aSarif(hallazgos: Hallazgo[], opciones: OpcionesSarif): Record<string, unknown> {\n\t// Una regla por `reglaId`, con la descripción del primer hallazgo que la usa.\n\tconst reglas = new Map<string, Hallazgo>();\n\tfor (const h of hallazgos) if (!reglas.has(h.reglaId)) reglas.set(h.reglaId, h);\n\n\treturn {\n\t\t$schema: \"https://json.schemastore.org/sarif-2.1.0.json\",\n\t\tversion: \"2.1.0\",\n\t\truns: [\n\t\t\t{\n\t\t\t\ttool: {\n\t\t\t\t\tdriver: {\n\t\t\t\t\t\tname: opciones.herramienta ?? \"Ada\",\n\t\t\t\t\t\tversion: opciones.version ?? \"0.0.0\",\n\t\t\t\t\t\tinformationUri: opciones.uriInformacion ?? \"https://hoilab.com/ada\",\n\t\t\t\t\t\trules: [...reglas.values()].map((h) => ({\n\t\t\t\t\t\t\tid: h.reglaId,\n\t\t\t\t\t\t\tname: h.reglaId,\n\t\t\t\t\t\t\tshortDescription: { text: h.titulo },\n\t\t\t\t\t\t\tfullDescription: { text: h.resumen },\n\t\t\t\t\t\t\t...(h.remedio ? { help: { text: h.remedio } } : {}),\n\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\ttags: h.etiquetas ?? [],\n\t\t\t\t\t\t\t\t\"security-severity\": String(puntuacionDe(h.severidad)),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tresults: hallazgos.map((h) => ({\n\t\t\t\t\truleId: h.reglaId,\n\t\t\t\t\tlevel: nivelSarif(h.severidad),\n\t\t\t\t\tmessage: { text: h.resumen },\n\t\t\t\t\tlocations: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tphysicalLocation: {\n\t\t\t\t\t\t\t\tartifactLocation: { uri: h.ruta, uriBaseId: \"%SRCROOT%\" },\n\t\t\t\t\t\t\t\tregion: {\n\t\t\t\t\t\t\t\t\tstartLine: h.lineaInicio,\n\t\t\t\t\t\t\t\t\tendLine: h.lineaFin ?? h.lineaInicio,\n\t\t\t\t\t\t\t\t\t// La evidencia viaja como fragmento de la región: es lo\n\t\t\t\t\t\t\t\t\t// que hace que el hallazgo sea comprobable desde el panel\n\t\t\t\t\t\t\t\t\t// sin abrir el repositorio.\n\t\t\t\t\t\t\t\t\tsnippet: { text: h.evidencia },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t// Lo que permite a GitHub reconocer el mismo hallazgo entre\n\t\t\t\t\t// ejecuciones aunque el fichero se haya movido.\n\t\t\t\t\tpartialFingerprints: { \"ada/v1\": huellaDe(h) },\n\t\t\t\t\tproperties: { severidad: h.severidad, \"security-severity\": String(puntuacionDe(h.severidad)) },\n\t\t\t\t})),\n\t\t\t\toriginalUriBaseIds: {\n\t\t\t\t\t\"%SRCROOT%\": { uri: pathToFileURL(opciones.raizRepo).href.replace(/\\/?$/, \"/\") },\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n"]}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Scheduler: trabajo recurrente o diferido.
3
+ *
4
+ * Copiado del competidor SOLO en los dos detalles que separan un scheduler de
5
+ * un pie de plomo:
6
+ *
7
+ * 1. **Reclamar antes de entregar.** Un job cuya ejecución anterior sigue en
8
+ * vuelo se SALTA, no se encola. Sin esto, un job más lento que su intervalo
9
+ * acumula ejecuciones hasta ahogar la sesión.
10
+ * 2. **`nextRunAt` avanza al reclamar**, no al terminar. Así una ejecución lenta
11
+ * no arrastra el horario.
12
+ *
13
+ * Y tres frenos que a ellos les faltan, cada uno por un riesgo real:
14
+ *
15
+ * - **Nunca hace steer.** Su modo por defecto inyecta el prompt recurrente
16
+ * DENTRO de un turno activo, que es un vector de inyección: lo que diga el
17
+ * texto programado entra a mitad de un razonamiento. Aquí siempre se entrega
18
+ * como turno nuevo, y no es configurable.
19
+ * - **Techo de ejecuciones y caducidad obligatorios.** Un heartbeat desatendido
20
+ * gasta tokens para siempre; ellos no tienen tope alguno.
21
+ * - **Se desactiva solo tras fallos seguidos**, para que un job roto no siga
22
+ * quemando presupuesto indefinidamente.
23
+ */
24
+ export interface ScheduledJob {
25
+ id: string;
26
+ /** Texto que se entrega como turno nuevo. */
27
+ prompt: string;
28
+ /** Repetición en ms. Ausente = ejecución única. */
29
+ intervalMs?: number;
30
+ nextRunAt: string;
31
+ runsUsed: number;
32
+ /** Obligatorio: sin techo no se crea el job. */
33
+ maxRuns: number;
34
+ /** ISO. Pasada esta fecha el job no vuelve a correr. */
35
+ expiresAt: string;
36
+ enabled: boolean;
37
+ consecutiveFailures: number;
38
+ createdAt: string;
39
+ }
40
+ export interface Dispatch {
41
+ dispatchId: string;
42
+ job: ScheduledJob;
43
+ }
44
+ export declare class Scheduler {
45
+ private path;
46
+ private data;
47
+ private loaded;
48
+ private counter;
49
+ constructor(agentDir: string);
50
+ private load;
51
+ private save;
52
+ list(): ScheduledJob[];
53
+ /**
54
+ * Programa un job. `maxRuns` y `expiresAt` son obligatorios a propósito: un
55
+ * scheduler sin techo es una fuga de presupuesto con sintaxis bonita.
56
+ */
57
+ add(input: {
58
+ id: string;
59
+ prompt: string;
60
+ firstRunAt: string;
61
+ intervalMs?: number;
62
+ maxRuns: number;
63
+ expiresAt: string;
64
+ now?: string;
65
+ }): {
66
+ ok: boolean;
67
+ error?: string;
68
+ };
69
+ remove(id: string): boolean;
70
+ /**
71
+ * Reclama los jobs vencidos.
72
+ *
73
+ * Un job con una ejecución en vuelo se salta: avanza su horario pero no se
74
+ * entrega. Es lo que impide que un job lento se acumule sobre sí mismo.
75
+ */
76
+ claimDue(nowIso: string): Dispatch[];
77
+ /** Cierra una ejecución. Tras varios fallos seguidos el job se desactiva. */
78
+ complete(dispatchId: string, ok: boolean): void;
79
+ /**
80
+ * Libera ejecuciones que murieron con el proceso.
81
+ *
82
+ * Sin esto un crash deja el job marcado como "en vuelo" para siempre y no
83
+ * vuelve a entregarse nunca — el mismo fallo que teníamos en los workflows.
84
+ */
85
+ reconcile(nowIso: string, staleAfterMs?: number): number;
86
+ }
87
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,sDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,YAAY,CAAC;CAClB;AASD,qBAAa,SAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAyD;IACrE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAK;IAEpB,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAED,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,IAAI;IAOZ,IAAI,IAAI,YAAY,EAAE,CAGrB;IAED;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KACb,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CA6BlC;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAO1B;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAkCnC;IAED,8EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAW9C;IAED;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,SAAiB,GAAG,MAAM,CAQ/D;CACD","sourcesContent":["/**\n * Scheduler: trabajo recurrente o diferido.\n *\n * Copiado del competidor SOLO en los dos detalles que separan un scheduler de\n * un pie de plomo:\n *\n * 1. **Reclamar antes de entregar.** Un job cuya ejecución anterior sigue en\n * vuelo se SALTA, no se encola. Sin esto, un job más lento que su intervalo\n * acumula ejecuciones hasta ahogar la sesión.\n * 2. **`nextRunAt` avanza al reclamar**, no al terminar. Así una ejecución lenta\n * no arrastra el horario.\n *\n * Y tres frenos que a ellos les faltan, cada uno por un riesgo real:\n *\n * - **Nunca hace steer.** Su modo por defecto inyecta el prompt recurrente\n * DENTRO de un turno activo, que es un vector de inyección: lo que diga el\n * texto programado entra a mitad de un razonamiento. Aquí siempre se entrega\n * como turno nuevo, y no es configurable.\n * - **Techo de ejecuciones y caducidad obligatorios.** Un heartbeat desatendido\n * gasta tokens para siempre; ellos no tienen tope alguno.\n * - **Se desactiva solo tras fallos seguidos**, para que un job roto no siga\n * quemando presupuesto indefinidamente.\n */\n\nimport { mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/** Tope duro: ningún job puede programarse sin límite de ejecuciones. */\nconst MAX_RUNS_CEILING = 1000;\nconst FAILURES_BEFORE_DISABLE = 3;\n\nexport interface ScheduledJob {\n\tid: string;\n\t/** Texto que se entrega como turno nuevo. */\n\tprompt: string;\n\t/** Repetición en ms. Ausente = ejecución única. */\n\tintervalMs?: number;\n\tnextRunAt: string;\n\trunsUsed: number;\n\t/** Obligatorio: sin techo no se crea el job. */\n\tmaxRuns: number;\n\t/** ISO. Pasada esta fecha el job no vuelve a correr. */\n\texpiresAt: string;\n\tenabled: boolean;\n\tconsecutiveFailures: number;\n\tcreatedAt: string;\n}\n\nexport interface Dispatch {\n\tdispatchId: string;\n\tjob: ScheduledJob;\n}\n\ninterface SchedulerFile {\n\tversion: 1;\n\tjobs: ScheduledJob[];\n\t/** Ejecuciones reclamadas y aún sin cerrar. */\n\tinFlight: Array<{ dispatchId: string; jobId: string; claimedAt: string }>;\n}\n\nexport class Scheduler {\n\tprivate path: string;\n\tprivate data: SchedulerFile = { version: 1, jobs: [], inFlight: [] };\n\tprivate loaded = false;\n\tprivate counter = 0;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"scheduler.json\");\n\t}\n\n\tprivate load(): void {\n\t\tif (this.loaded) return;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(readFileSync(this.path, \"utf-8\")) as SchedulerFile;\n\t\t\tif (parsed.version === 1 && Array.isArray(parsed.jobs)) {\n\t\t\t\tthis.data = { version: 1, jobs: parsed.jobs, inFlight: parsed.inFlight ?? [] };\n\t\t\t}\n\t\t} catch {\n\t\t\t// primer arranque o fichero corrupto\n\t\t}\n\t\tthis.loaded = true;\n\t}\n\n\tprivate save(): void {\n\t\tmkdirSync(dirname(this.path), { recursive: true });\n\t\tconst tmp = `${this.path}.tmp`;\n\t\twriteFileSync(tmp, JSON.stringify(this.data, null, 1), \"utf-8\");\n\t\trenameSync(tmp, this.path);\n\t}\n\n\tlist(): ScheduledJob[] {\n\t\tthis.load();\n\t\treturn this.data.jobs;\n\t}\n\n\t/**\n\t * Programa un job. `maxRuns` y `expiresAt` son obligatorios a propósito: un\n\t * scheduler sin techo es una fuga de presupuesto con sintaxis bonita.\n\t */\n\tadd(input: {\n\t\tid: string;\n\t\tprompt: string;\n\t\tfirstRunAt: string;\n\t\tintervalMs?: number;\n\t\tmaxRuns: number;\n\t\texpiresAt: string;\n\t\tnow?: string;\n\t}): { ok: boolean; error?: string } {\n\t\tthis.load();\n\t\tif (!input.prompt.trim()) return { ok: false, error: \"El prompt no puede estar vacío.\" };\n\t\tif (!Number.isFinite(input.maxRuns) || input.maxRuns < 1) {\n\t\t\treturn { ok: false, error: \"maxRuns es obligatorio y debe ser >= 1.\" };\n\t\t}\n\t\tif (input.maxRuns > MAX_RUNS_CEILING) {\n\t\t\treturn { ok: false, error: `maxRuns no puede superar ${MAX_RUNS_CEILING}.` };\n\t\t}\n\t\tif (Number.isNaN(Date.parse(input.expiresAt))) {\n\t\t\treturn { ok: false, error: \"expiresAt es obligatorio y debe ser una fecha ISO.\" };\n\t\t}\n\t\tif (this.data.jobs.some((job) => job.id === input.id)) {\n\t\t\treturn { ok: false, error: `Ya existe un job con id '${input.id}'.` };\n\t\t}\n\t\tthis.data.jobs.push({\n\t\t\tid: input.id,\n\t\t\tprompt: input.prompt,\n\t\t\tintervalMs: input.intervalMs,\n\t\t\tnextRunAt: input.firstRunAt,\n\t\t\trunsUsed: 0,\n\t\t\tmaxRuns: input.maxRuns,\n\t\t\texpiresAt: input.expiresAt,\n\t\t\tenabled: true,\n\t\t\tconsecutiveFailures: 0,\n\t\t\tcreatedAt: input.now ?? new Date().toISOString(),\n\t\t});\n\t\tthis.save();\n\t\treturn { ok: true };\n\t}\n\n\tremove(id: string): boolean {\n\t\tthis.load();\n\t\tconst before = this.data.jobs.length;\n\t\tthis.data.jobs = this.data.jobs.filter((job) => job.id !== id);\n\t\tif (this.data.jobs.length === before) return false;\n\t\tthis.save();\n\t\treturn true;\n\t}\n\n\t/**\n\t * Reclama los jobs vencidos.\n\t *\n\t * Un job con una ejecución en vuelo se salta: avanza su horario pero no se\n\t * entrega. Es lo que impide que un job lento se acumule sobre sí mismo.\n\t */\n\tclaimDue(nowIso: string): Dispatch[] {\n\t\tthis.load();\n\t\tconst now = Date.parse(nowIso);\n\t\tconst inFlightJobs = new Set(this.data.inFlight.map((entry) => entry.jobId));\n\t\tconst dispatches: Dispatch[] = [];\n\n\t\tfor (const job of this.data.jobs) {\n\t\t\tif (!job.enabled) continue;\n\t\t\tif (Date.parse(job.expiresAt) <= now) {\n\t\t\t\tjob.enabled = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (job.runsUsed >= job.maxRuns) {\n\t\t\t\tjob.enabled = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (Date.parse(job.nextRunAt) > now) continue;\n\n\t\t\t// El horario avanza SIEMPRE al reclamar, incluso si se salta: una\n\t\t\t// ejecución lenta no debe arrastrar el calendario.\n\t\t\tjob.nextRunAt = job.intervalMs\n\t\t\t\t? new Date(now + job.intervalMs).toISOString()\n\t\t\t\t: new Date(now + 1).toISOString();\n\t\t\tif (!job.intervalMs) job.enabled = false; // ejecución única\n\n\t\t\tif (inFlightJobs.has(job.id)) continue; // ya hay una en vuelo: se salta\n\n\t\t\tconst dispatchId = `d-${job.id}-${++this.counter}`;\n\t\t\tthis.data.inFlight.push({ dispatchId, jobId: job.id, claimedAt: nowIso });\n\t\t\tjob.runsUsed += 1;\n\t\t\tdispatches.push({ dispatchId, job: { ...job } });\n\t\t}\n\t\tthis.save();\n\t\treturn dispatches;\n\t}\n\n\t/** Cierra una ejecución. Tras varios fallos seguidos el job se desactiva. */\n\tcomplete(dispatchId: string, ok: boolean): void {\n\t\tthis.load();\n\t\tconst index = this.data.inFlight.findIndex((entry) => entry.dispatchId === dispatchId);\n\t\tif (index === -1) return;\n\t\tconst [entry] = this.data.inFlight.splice(index, 1);\n\t\tconst job = this.data.jobs.find((candidate) => candidate.id === entry.jobId);\n\t\tif (job) {\n\t\t\tjob.consecutiveFailures = ok ? 0 : job.consecutiveFailures + 1;\n\t\t\tif (job.consecutiveFailures >= FAILURES_BEFORE_DISABLE) job.enabled = false;\n\t\t}\n\t\tthis.save();\n\t}\n\n\t/**\n\t * Libera ejecuciones que murieron con el proceso.\n\t *\n\t * Sin esto un crash deja el job marcado como \"en vuelo\" para siempre y no\n\t * vuelve a entregarse nunca — el mismo fallo que teníamos en los workflows.\n\t */\n\treconcile(nowIso: string, staleAfterMs = 30 * 60 * 1000): number {\n\t\tthis.load();\n\t\tconst now = Date.parse(nowIso);\n\t\tconst before = this.data.inFlight.length;\n\t\tthis.data.inFlight = this.data.inFlight.filter((entry) => now - Date.parse(entry.claimedAt) < staleAfterMs);\n\t\tconst reclaimed = before - this.data.inFlight.length;\n\t\tif (reclaimed > 0) this.save();\n\t\treturn reclaimed;\n\t}\n}\n"]}