@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,183 @@
1
+ /**
2
+ * Observa cada edición: avisa si ha dejado el fichero roto, intenta
3
+ * repararlo solo cuando puede, y deja constancia de las tres cosas en el
4
+ * diario.
5
+ *
6
+ * Se engancha en los dos manejadores que ya existen: `beforeToolCall` guarda la
7
+ * preimagen y `afterToolCall` compara. Vive en su propio módulo, y no dentro de
8
+ * `agent-session.ts`, porque ese fichero es de upstream y el presupuesto de
9
+ * fork está en el tope: cuanto menos código nuestro viva ahí, menos cuesta
10
+ * seguir siendo un fork.
11
+ *
12
+ * Lee el fichero dos veces por edición. Es a propósito: la alternativa es
13
+ * tocar las tools `edit` y `write`, que también son de upstream, y una lectura
14
+ * de más en una operación que ya escribe a disco no se nota. Si algún día pesa,
15
+ * la respuesta es un `EditToolOptions` aguas arriba, no cachear aquí.
16
+ */
17
+ import { readFile, writeFile } from "node:fs/promises";
18
+ import { resolveToCwd } from "../tools/path-utils.js";
19
+ import { anotarEnDiario } from "./diario.js";
20
+ import { avisoDeParseoRoto, primerErrorDe, rompioElParseo } from "./parseo.js";
21
+ import { intentarReparar } from "./reparacion.js";
22
+ import { avisoDeTipos, ComprobadorDeTipos } from "./tipos.js";
23
+ /** Tools cuya salida es un fichero con contenido nuevo. */
24
+ const TOOLS_DE_EDICION = new Set(["edit", "write"]);
25
+ /** Lee el fichero, o `null` si no existe o no se puede leer. */
26
+ async function contenido(ruta) {
27
+ try {
28
+ return await readFile(ruta, "utf-8");
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /** La ruta que la tool va a tocar, ya resuelta contra el cwd. */
35
+ function rutaDe(args, cwd) {
36
+ const a = args;
37
+ const cruda = typeof a?.file_path === "string" ? a.file_path : typeof a?.path === "string" ? a.path : null;
38
+ return cruda === null ? null : resolveToCwd(cruda, cwd);
39
+ }
40
+ export class ObservadorDeEdiciones {
41
+ /** Preimagen por id de llamada. La borra quien la consume. */
42
+ previas = new Map();
43
+ /**
44
+ * Cambio observado por id de llamada, a la espera de que el libro lo anote.
45
+ *
46
+ * Es un hueco de estado y no un valor de retorno porque `despuesDe` ya
47
+ * devuelve el aviso para el modelo y tiene dieciocho llamadas en pruebas:
48
+ * cambiarle la firma para colar un segundo dato habría costado dieciocho
49
+ * ediciones sin comprar nada.
50
+ *
51
+ * Va por id y no en una sola ranura, y esto lo enseñó la prueba de la ruta
52
+ * real: el modelo puede pedir dos `write` en el mismo turno y el bucle del
53
+ * agente los ejecuta entrelazados, así que con una ranura única el segundo
54
+ * pisaba al primero antes de que nadie lo leyera. El libro registraba UN
55
+ * fichero de los dos — un fallo silencioso que se lee como éxito, porque el
56
+ * informe salía con una tabla poblada y creíble a la que le faltaba una fila.
57
+ */
58
+ cambios = new Map();
59
+ /**
60
+ * El cambio de fichero de esa llamada, o `null` si no editó nada. Lo consume:
61
+ * dos lecturas seguidas devuelven `null` la segunda, así que una llamada no
62
+ * puede heredar el cambio de otra y anotarlo dos veces en el libro.
63
+ */
64
+ ultimoCambio(idLlamada) {
65
+ const cambio = this.cambios.get(idLlamada) ?? null;
66
+ this.cambios.delete(idLlamada);
67
+ return cambio;
68
+ }
69
+ cwd;
70
+ agentDir;
71
+ /** `undefined` cuando no hay modelo disponible (p. ej. en pruebas): la reparación queda "no-aplicable", nunca "rechazada". */
72
+ completar;
73
+ /**
74
+ * Se crea una vez por sesión y mantiene vivo el programa de TypeScript entre
75
+ * ediciones: es lo que hace que la primera comprobación cueste 2,5 s y las
76
+ * siguientes 124 ms.
77
+ */
78
+ tipos = new ComprobadorDeTipos();
79
+ // Campos explícitos y no propiedades de parámetro: el proyecto compila con
80
+ // `erasableSyntaxOnly`, que prohíbe la forma corta por no ser borrable.
81
+ constructor(cwd, agentDir, completar) {
82
+ this.cwd = cwd;
83
+ this.agentDir = agentDir;
84
+ this.completar = completar;
85
+ }
86
+ /** Antes de editar: guarda cómo estaba el fichero. */
87
+ async antesDe(idLlamada, tool, args) {
88
+ if (!TOOLS_DE_EDICION.has(tool))
89
+ return;
90
+ const ruta = rutaDe(args, this.cwd());
91
+ if (ruta === null)
92
+ return;
93
+ // Tope de seguridad por si alguna llamada muere antes de consumirse.
94
+ if (this.previas.size > 256)
95
+ this.previas.clear();
96
+ this.previas.set(idLlamada, { ruta, antes: await contenido(ruta) });
97
+ }
98
+ /**
99
+ * Después de editar: devuelve el aviso (roto, o reparado — hay algo que
100
+ * decir en los dos casos), o `null` si no hay nada que decir. Deja
101
+ * constancia en el diario pase lo que pase.
102
+ *
103
+ * `null` en la inmensa mayoría de ediciones es lo correcto y lo que hace que
104
+ * el aviso signifique algo cuando aparece.
105
+ */
106
+ async despuesDe(idLlamada, huboError) {
107
+ const previa = this.previas.get(idLlamada);
108
+ this.previas.delete(idLlamada);
109
+ if (!previa || huboError)
110
+ return null;
111
+ const despues = await contenido(previa.ruta);
112
+ // Para el libro de sesión: el fichero se tocó, pase lo que pase con el
113
+ // parseo. Una edición que deja el fichero roto es MÁS auditable, no menos,
114
+ // así que esto va antes de cualquier rama y no dentro de la de éxito.
115
+ // Tope de seguridad, igual que en `previas`: si alguna llamada muriera sin
116
+ // que nadie consumiera su cambio, el mapa no puede crecer sin fin.
117
+ if (this.cambios.size > 256)
118
+ this.cambios.clear();
119
+ this.cambios.set(idLlamada, { ruta: previa.ruta, antes: previa.antes, despues });
120
+ // El orden es: sintaxis → reparación → tipos. No es arbitrario.
121
+ //
122
+ // Si el fichero no parsea, los errores de tipos son CONSECUENCIA de eso:
123
+ // enseñarlos mandaría al modelo a perseguir síntomas en vez de la causa.
124
+ // Y si la reparación funciona, los tipos hay que mirarlos sobre el
125
+ // fichero YA REPARADO, no sobre el roto — mirarlos antes daría una lista
126
+ // de errores que dejan de existir un instante después.
127
+ if (!rompioElParseo({ ruta: previa.ruta, antes: previa.antes, despues })) {
128
+ await anotarEnDiario(this.agentDir(), { ruta: previa.ruta, antes: previa.antes, despues, resultado: "ok" });
129
+ if (despues === null)
130
+ return null;
131
+ // Los tipos, que es lo que un comprobador de sintaxis nunca puede ver:
132
+ // cambiar una firma y romper a quien la llama en OTRO fichero.
133
+ return avisoDeTipos(previa.ruta, this.tipos.introducidos(previa.ruta, previa.antes, despues));
134
+ }
135
+ // `rompioElParseo` solo devuelve `true` cuando `antes` y `despues` no son
136
+ // `null` (así lo garantiza su propio contrato en parseo.ts) — el cast de
137
+ // abajo es ese contrato leído, no una suposición nueva.
138
+ //
139
+ // Todo este bloque va protegido: un fallo aquí (disco lleno, permisos, el
140
+ // fichero borrado por debajo entre la edición y este punto) no puede
141
+ // tumbar el turno entero solo por intentar mejorar el aviso — se degrada
142
+ // al aviso normal de parseo roto, igual que si la reparación se hubiera
143
+ // rechazado.
144
+ let reparacion;
145
+ try {
146
+ reparacion = await intentarReparar({ ruta: previa.ruta, antes: previa.antes, despues: despues }, this.completar);
147
+ if (reparacion.estado === "reparado") {
148
+ await writeFile(previa.ruta, reparacion.contenido, "utf-8");
149
+ }
150
+ }
151
+ catch {
152
+ reparacion = { estado: "rechazada" };
153
+ }
154
+ if (reparacion.estado === "reparado") {
155
+ // El libro tiene que llevar el hash de lo que QUEDÓ en disco, no el del
156
+ // intermedio roto que la reparación acaba de sobrescribir: si no, el hash
157
+ // del registro no coincidiría con el fichero y la auditoría acusaría una
158
+ // manipulación donde solo hubo una reparación.
159
+ this.cambios.set(idLlamada, { ruta: previa.ruta, antes: previa.antes, despues: reparacion.contenido });
160
+ await anotarEnDiario(this.agentDir(), {
161
+ ruta: previa.ruta,
162
+ antes: previa.antes,
163
+ despues,
164
+ resultado: "reparada",
165
+ });
166
+ const intentos = reparacion.intentos > 1 ? ` (hicieron falta ${reparacion.intentos} intentos)` : "";
167
+ // Sobre el fichero YA reparado: reparar la sintaxis no garantiza que
168
+ // los tipos cuadren, y callarlo aquí convertiría un "✓ reparado" en una
169
+ // media verdad.
170
+ const tipos = avisoDeTipos(previa.ruta, this.tipos.introducidos(previa.ruta, previa.antes, reparacion.contenido));
171
+ const nota = `✓ Esta edición dejó \`${previa.ruta}\` sintácticamente roto, pero se ha reparado sola conservando el cambio pretendido${intentos}.`;
172
+ return tipos ? `${nota}\n${tipos}` : nota;
173
+ }
174
+ void anotarEnDiario(this.agentDir(), {
175
+ ruta: previa.ruta,
176
+ antes: previa.antes,
177
+ despues,
178
+ resultado: reparacion.estado === "rechazada" ? "reparacion-rechazada" : "rota",
179
+ });
180
+ return avisoDeParseoRoto(previa.ruta, primerErrorDe(despues ?? "", previa.ruta));
181
+ }
182
+ }
183
+ //# sourceMappingURL=observador.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observador.js","sourceRoot":"","sources":["../../../src/core/edicion/observador.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Observa cada edición: avisa si ha dejado el fichero roto, intenta\n * repararlo solo cuando puede, y deja constancia de las tres cosas en el\n * diario.\n *\n * Se engancha en los dos manejadores que ya existen: `beforeToolCall` guarda la\n * preimagen y `afterToolCall` compara. Vive en su propio módulo, y no dentro de\n * `agent-session.ts`, porque ese fichero es de upstream y el presupuesto de\n * fork está en el tope: cuanto menos código nuestro viva ahí, menos cuesta\n * seguir siendo un fork.\n *\n * Lee el fichero dos veces por edición. Es a propósito: la alternativa es\n * tocar las tools `edit` y `write`, que también son de upstream, y una lectura\n * de más en una operación que ya escribe a disco no se nota. Si algún día pesa,\n * la respuesta es un `EditToolOptions` aguas arriba, no cachear aquí.\n */\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolveToCwd } from \"../tools/path-utils.ts\";\nimport { anotarEnDiario } from \"./diario.ts\";\nimport { avisoDeParseoRoto, primerErrorDe, rompioElParseo } from \"./parseo.ts\";\nimport { intentarReparar, type ResultadoReparacion } from \"./reparacion.ts\";\nimport { avisoDeTipos, ComprobadorDeTipos } from \"./tipos.ts\";\n\n/** Tools cuya salida es un fichero con contenido nuevo. */\nconst TOOLS_DE_EDICION = new Set([\"edit\", \"write\"]);\n\n/**\n * Lo que el libro de sesión necesita saber de una edición.\n *\n * Sale de aquí y no de `agent-session.ts` porque este observador YA lee el\n * fichero antes y después: pedirlo en otro sitio obligaría a leerlo una tercera\n * vez, y sobre todo dejaría fuera el caso reparado, donde el contenido final no\n * es el que dejó la tool.\n */\nexport interface CambioDeFichero {\n\truta: string;\n\t/** Contenido previo, o `null` si el fichero no existía. Lo hashea el libro. */\n\tantes: string | null;\n\t/** Contenido final, ya con la reparación aplicada si hubo. `null` = borrado. */\n\tdespues: string | null;\n}\n\n/** Lee el fichero, o `null` si no existe o no se puede leer. */\nasync function contenido(ruta: string): Promise<string | null> {\n\ttry {\n\t\treturn await readFile(ruta, \"utf-8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** La ruta que la tool va a tocar, ya resuelta contra el cwd. */\nfunction rutaDe(args: unknown, cwd: string): string | null {\n\tconst a = args as { path?: unknown; file_path?: unknown } | undefined;\n\tconst cruda = typeof a?.file_path === \"string\" ? a.file_path : typeof a?.path === \"string\" ? a.path : null;\n\treturn cruda === null ? null : resolveToCwd(cruda, cwd);\n}\n\nexport class ObservadorDeEdiciones {\n\t/** Preimagen por id de llamada. La borra quien la consume. */\n\tprivate readonly previas = new Map<string, { ruta: string; antes: string | null }>();\n\n\t/**\n\t * Cambio observado por id de llamada, a la espera de que el libro lo anote.\n\t *\n\t * Es un hueco de estado y no un valor de retorno porque `despuesDe` ya\n\t * devuelve el aviso para el modelo y tiene dieciocho llamadas en pruebas:\n\t * cambiarle la firma para colar un segundo dato habría costado dieciocho\n\t * ediciones sin comprar nada.\n\t *\n\t * Va por id y no en una sola ranura, y esto lo enseñó la prueba de la ruta\n\t * real: el modelo puede pedir dos `write` en el mismo turno y el bucle del\n\t * agente los ejecuta entrelazados, así que con una ranura única el segundo\n\t * pisaba al primero antes de que nadie lo leyera. El libro registraba UN\n\t * fichero de los dos — un fallo silencioso que se lee como éxito, porque el\n\t * informe salía con una tabla poblada y creíble a la que le faltaba una fila.\n\t */\n\tprivate readonly cambios = new Map<string, CambioDeFichero>();\n\n\t/**\n\t * El cambio de fichero de esa llamada, o `null` si no editó nada. Lo consume:\n\t * dos lecturas seguidas devuelven `null` la segunda, así que una llamada no\n\t * puede heredar el cambio de otra y anotarlo dos veces en el libro.\n\t */\n\tultimoCambio(idLlamada: string): CambioDeFichero | null {\n\t\tconst cambio = this.cambios.get(idLlamada) ?? null;\n\t\tthis.cambios.delete(idLlamada);\n\t\treturn cambio;\n\t}\n\n\tprivate readonly cwd: () => string;\n\tprivate readonly agentDir: () => string;\n\t/** `undefined` cuando no hay modelo disponible (p. ej. en pruebas): la reparación queda \"no-aplicable\", nunca \"rechazada\". */\n\tprivate readonly completar?: (prompt: string) => Promise<string | null>;\n\t/**\n\t * Se crea una vez por sesión y mantiene vivo el programa de TypeScript entre\n\t * ediciones: es lo que hace que la primera comprobación cueste 2,5 s y las\n\t * siguientes 124 ms.\n\t */\n\tprivate readonly tipos = new ComprobadorDeTipos();\n\n\t// Campos explícitos y no propiedades de parámetro: el proyecto compila con\n\t// `erasableSyntaxOnly`, que prohíbe la forma corta por no ser borrable.\n\tconstructor(cwd: () => string, agentDir: () => string, completar?: (prompt: string) => Promise<string | null>) {\n\t\tthis.cwd = cwd;\n\t\tthis.agentDir = agentDir;\n\t\tthis.completar = completar;\n\t}\n\n\t/** Antes de editar: guarda cómo estaba el fichero. */\n\tasync antesDe(idLlamada: string, tool: string, args: unknown): Promise<void> {\n\t\tif (!TOOLS_DE_EDICION.has(tool)) return;\n\t\tconst ruta = rutaDe(args, this.cwd());\n\t\tif (ruta === null) return;\n\t\t// Tope de seguridad por si alguna llamada muere antes de consumirse.\n\t\tif (this.previas.size > 256) this.previas.clear();\n\t\tthis.previas.set(idLlamada, { ruta, antes: await contenido(ruta) });\n\t}\n\n\t/**\n\t * Después de editar: devuelve el aviso (roto, o reparado — hay algo que\n\t * decir en los dos casos), o `null` si no hay nada que decir. Deja\n\t * constancia en el diario pase lo que pase.\n\t *\n\t * `null` en la inmensa mayoría de ediciones es lo correcto y lo que hace que\n\t * el aviso signifique algo cuando aparece.\n\t */\n\tasync despuesDe(idLlamada: string, huboError: boolean): Promise<string | null> {\n\t\tconst previa = this.previas.get(idLlamada);\n\t\tthis.previas.delete(idLlamada);\n\t\tif (!previa || huboError) return null;\n\n\t\tconst despues = await contenido(previa.ruta);\n\t\t// Para el libro de sesión: el fichero se tocó, pase lo que pase con el\n\t\t// parseo. Una edición que deja el fichero roto es MÁS auditable, no menos,\n\t\t// así que esto va antes de cualquier rama y no dentro de la de éxito.\n\t\t// Tope de seguridad, igual que en `previas`: si alguna llamada muriera sin\n\t\t// que nadie consumiera su cambio, el mapa no puede crecer sin fin.\n\t\tif (this.cambios.size > 256) this.cambios.clear();\n\t\tthis.cambios.set(idLlamada, { ruta: previa.ruta, antes: previa.antes, despues });\n\t\t// El orden es: sintaxis → reparación → tipos. No es arbitrario.\n\t\t//\n\t\t// Si el fichero no parsea, los errores de tipos son CONSECUENCIA de eso:\n\t\t// enseñarlos mandaría al modelo a perseguir síntomas en vez de la causa.\n\t\t// Y si la reparación funciona, los tipos hay que mirarlos sobre el\n\t\t// fichero YA REPARADO, no sobre el roto — mirarlos antes daría una lista\n\t\t// de errores que dejan de existir un instante después.\n\t\tif (!rompioElParseo({ ruta: previa.ruta, antes: previa.antes, despues })) {\n\t\t\tawait anotarEnDiario(this.agentDir(), { ruta: previa.ruta, antes: previa.antes, despues, resultado: \"ok\" });\n\t\t\tif (despues === null) return null;\n\t\t\t// Los tipos, que es lo que un comprobador de sintaxis nunca puede ver:\n\t\t\t// cambiar una firma y romper a quien la llama en OTRO fichero.\n\t\t\treturn avisoDeTipos(previa.ruta, this.tipos.introducidos(previa.ruta, previa.antes, despues));\n\t\t}\n\n\t\t// `rompioElParseo` solo devuelve `true` cuando `antes` y `despues` no son\n\t\t// `null` (así lo garantiza su propio contrato en parseo.ts) — el cast de\n\t\t// abajo es ese contrato leído, no una suposición nueva.\n\t\t//\n\t\t// Todo este bloque va protegido: un fallo aquí (disco lleno, permisos, el\n\t\t// fichero borrado por debajo entre la edición y este punto) no puede\n\t\t// tumbar el turno entero solo por intentar mejorar el aviso — se degrada\n\t\t// al aviso normal de parseo roto, igual que si la reparación se hubiera\n\t\t// rechazado.\n\t\tlet reparacion: ResultadoReparacion;\n\t\ttry {\n\t\t\treparacion = await intentarReparar(\n\t\t\t\t{ ruta: previa.ruta, antes: previa.antes as string, despues: despues as string },\n\t\t\t\tthis.completar,\n\t\t\t);\n\t\t\tif (reparacion.estado === \"reparado\") {\n\t\t\t\tawait writeFile(previa.ruta, reparacion.contenido, \"utf-8\");\n\t\t\t}\n\t\t} catch {\n\t\t\treparacion = { estado: \"rechazada\" };\n\t\t}\n\n\t\tif (reparacion.estado === \"reparado\") {\n\t\t\t// El libro tiene que llevar el hash de lo que QUEDÓ en disco, no el del\n\t\t\t// intermedio roto que la reparación acaba de sobrescribir: si no, el hash\n\t\t\t// del registro no coincidiría con el fichero y la auditoría acusaría una\n\t\t\t// manipulación donde solo hubo una reparación.\n\t\t\tthis.cambios.set(idLlamada, { ruta: previa.ruta, antes: previa.antes, despues: reparacion.contenido });\n\t\t\tawait anotarEnDiario(this.agentDir(), {\n\t\t\t\truta: previa.ruta,\n\t\t\t\tantes: previa.antes,\n\t\t\t\tdespues,\n\t\t\t\tresultado: \"reparada\",\n\t\t\t});\n\t\t\tconst intentos = reparacion.intentos > 1 ? ` (hicieron falta ${reparacion.intentos} intentos)` : \"\";\n\t\t\t// Sobre el fichero YA reparado: reparar la sintaxis no garantiza que\n\t\t\t// los tipos cuadren, y callarlo aquí convertiría un \"✓ reparado\" en una\n\t\t\t// media verdad.\n\t\t\tconst tipos = avisoDeTipos(\n\t\t\t\tprevia.ruta,\n\t\t\t\tthis.tipos.introducidos(previa.ruta, previa.antes, reparacion.contenido),\n\t\t\t);\n\t\t\tconst nota = `✓ Esta edición dejó \\`${previa.ruta}\\` sintácticamente roto, pero se ha reparado sola conservando el cambio pretendido${intentos}.`;\n\t\t\treturn tipos ? `${nota}\\n${tipos}` : nota;\n\t\t}\n\n\t\tvoid anotarEnDiario(this.agentDir(), {\n\t\t\truta: previa.ruta,\n\t\t\tantes: previa.antes,\n\t\t\tdespues,\n\t\t\tresultado: reparacion.estado === \"rechazada\" ? \"reparacion-rechazada\" : \"rota\",\n\t\t});\n\t\treturn avisoDeParseoRoto(previa.ruta, primerErrorDe(despues ?? \"\", previa.ruta));\n\t}\n}\n"]}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Casar un bloque que el modelo retecleó con una errata.
3
+ *
4
+ * EL CASO. El modelo quiere cambiar una línea y, para dar contexto, retipea las
5
+ * de alrededor. Al retipear se equivoca en una letra:
6
+ *
7
+ * for (const it of item) { ← el fichero dice `items`
8
+ * suma += it.precio;
9
+ * }
10
+ *
11
+ * Hoy eso se rechaza entero y cuesta un turno. Y es un error frecuente: cuanto
12
+ * más contexto pedimos, más superficie tiene el modelo para equivocarse en algo
13
+ * que no pretendía cambiar.
14
+ *
15
+ * LO QUE COPIAMOS DE oh-my-pi, Y LO QUE NO. Ellos localizan por parecido con
16
+ * Levenshtein (`edit/modes/replace.ts:449`), y eso está bien. Lo que hacen
17
+ * después NO: escriben el `newText` del modelo tal cual, erratas incluidas.
18
+ * Medido sobre este mismo caso, su motor produce un fichero con `item` — una
19
+ * variable que no existe — y no compila. Aplicar no es aplicar bien.
20
+ *
21
+ * LA IDEA QUE LO ARREGLA, y es la razón de este módulo: el modelo no está
22
+ * proponiendo el contexto, está CITÁNDOLO. Solo las líneas donde `oldText` y
23
+ * `newText` DIFIEREN entre sí son su propuesta; las que repite idénticas son
24
+ * una cita, y una cita con errata sigue señalando al original. Así que se casa
25
+ * por parecido, y luego se escribe la versión del FICHERO para todo lo que el
26
+ * modelo no pidió cambiar.
27
+ *
28
+ * TRES PUERTAS, porque sin ellas esta pasada compra una recuperación y paga
29
+ * varias corrupciones:
30
+ *
31
+ * 1. **Umbral alto.** 0,92 de similitud media por línea. Por debajo, no es
32
+ * una errata: es otro sitio.
33
+ * 2. **Dominancia.** El mejor candidato tiene que ganarle al segundo por un
34
+ * margen claro. Dos posiciones parecidas significa que no sabemos cuál
35
+ * quería, y elegir por el modelo es peor que rechazar.
36
+ * 3. **Las líneas citadas se leen del fichero, no del modelo.** Es la que
37
+ * convierte una recuperación arriesgada en una segura.
38
+ */
39
+ export interface CasadoPorParecido {
40
+ indice: number;
41
+ longitud: number;
42
+ /** Ya empalmado: propuesta del modelo donde la hubo, fichero donde no. */
43
+ textoNuevo: string;
44
+ }
45
+ /**
46
+ * Casa `oldText` contra `contenido` tolerando erratas, y construye el texto
47
+ * nuevo respetando las líneas que el modelo solo citaba.
48
+ *
49
+ * Devuelve `null` cuando no hay candidato claro. `null` significa «no puedo»,
50
+ * nunca «no hay»: quien llama debe seguir con su propio error.
51
+ */
52
+ export declare function casarPorParecido(contenido: string, oldText: string, newText: string): CasadoPorParecido | null;
53
+ //# sourceMappingURL=parecido.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parecido.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/parecido.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAwCH,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAoD9G","sourcesContent":["/**\n * Casar un bloque que el modelo retecleó con una errata.\n *\n * EL CASO. El modelo quiere cambiar una línea y, para dar contexto, retipea las\n * de alrededor. Al retipear se equivoca en una letra:\n *\n * for (const it of item) { ← el fichero dice `items`\n * suma += it.precio;\n * }\n *\n * Hoy eso se rechaza entero y cuesta un turno. Y es un error frecuente: cuanto\n * más contexto pedimos, más superficie tiene el modelo para equivocarse en algo\n * que no pretendía cambiar.\n *\n * LO QUE COPIAMOS DE oh-my-pi, Y LO QUE NO. Ellos localizan por parecido con\n * Levenshtein (`edit/modes/replace.ts:449`), y eso está bien. Lo que hacen\n * después NO: escriben el `newText` del modelo tal cual, erratas incluidas.\n * Medido sobre este mismo caso, su motor produce un fichero con `item` — una\n * variable que no existe — y no compila. Aplicar no es aplicar bien.\n *\n * LA IDEA QUE LO ARREGLA, y es la razón de este módulo: el modelo no está\n * proponiendo el contexto, está CITÁNDOLO. Solo las líneas donde `oldText` y\n * `newText` DIFIEREN entre sí son su propuesta; las que repite idénticas son\n * una cita, y una cita con errata sigue señalando al original. Así que se casa\n * por parecido, y luego se escribe la versión del FICHERO para todo lo que el\n * modelo no pidió cambiar.\n *\n * TRES PUERTAS, porque sin ellas esta pasada compra una recuperación y paga\n * varias corrupciones:\n *\n * 1. **Umbral alto.** 0,92 de similitud media por línea. Por debajo, no es\n * una errata: es otro sitio.\n * 2. **Dominancia.** El mejor candidato tiene que ganarle al segundo por un\n * margen claro. Dos posiciones parecidas significa que no sabemos cuál\n * quería, y elegir por el modelo es peor que rechazar.\n * 3. **Las líneas citadas se leen del fichero, no del modelo.** Es la que\n * convierte una recuperación arriesgada en una segura.\n */\n\n/** Distancia de edición, acotada: si supera `tope` se corta y devuelve `tope + 1`. */\nfunction distancia(a: string, b: string, tope: number): number {\n\tif (a === b) return 0;\n\tif (Math.abs(a.length - b.length) > tope) return tope + 1;\n\t// Una sola fila: no hace falta la matriz entera para una distancia acotada.\n\tlet anterior = Array.from({ length: b.length + 1 }, (_, i) => i);\n\tfor (let i = 1; i <= a.length; i++) {\n\t\tconst actual = [i];\n\t\tlet minimoDeLaFila = i;\n\t\tfor (let j = 1; j <= b.length; j++) {\n\t\t\tconst coste = a[i - 1] === b[j - 1] ? 0 : 1;\n\t\t\tconst v = Math.min(actual[j - 1] + 1, anterior[j] + 1, anterior[j - 1] + coste);\n\t\t\tactual.push(v);\n\t\t\tif (v < minimoDeLaFila) minimoDeLaFila = v;\n\t\t}\n\t\t// Toda la fila supera el tope: no hay forma de bajar de ahí.\n\t\tif (minimoDeLaFila > tope) return tope + 1;\n\t\tanterior = actual;\n\t}\n\treturn anterior[b.length];\n}\n\n/** 1 = idénticas, 0 = nada que ver. Sobre el texto recortado. */\nfunction similitud(a: string, b: string): number {\n\tconst x = a.trim();\n\tconst y = b.trim();\n\tif (x === y) return 1;\n\tif (x.length === 0 || y.length === 0) return 0;\n\tconst largo = Math.max(x.length, y.length);\n\tconst tope = Math.ceil(largo * 0.2); // más allá no interesa: ya está por debajo del umbral\n\tconst d = distancia(x, y, tope);\n\treturn d > tope ? 0 : 1 - d / largo;\n}\n\nconst UMBRAL = 0.92;\n/** Cuánto tiene que ganarle el mejor al segundo para que no sea ambiguo. */\nconst MARGEN = 0.05;\n\nexport interface CasadoPorParecido {\n\tindice: number;\n\tlongitud: number;\n\t/** Ya empalmado: propuesta del modelo donde la hubo, fichero donde no. */\n\ttextoNuevo: string;\n}\n\n/**\n * Casa `oldText` contra `contenido` tolerando erratas, y construye el texto\n * nuevo respetando las líneas que el modelo solo citaba.\n *\n * Devuelve `null` cuando no hay candidato claro. `null` significa «no puedo»,\n * nunca «no hay»: quien llama debe seguir con su propio error.\n */\nexport function casarPorParecido(contenido: string, oldText: string, newText: string): CasadoPorParecido | null {\n\tconst patron = oldText.split(\"\\n\");\n\tconst propuesta = newText.split(\"\\n\");\n\t// Con una sola línea no hay contexto que distinguir de la propuesta: todo\n\t// sería propuesta, y entonces esta pasada no aporta nada sobre las de arriba.\n\tif (patron.length < 2) return null;\n\tconst lineas = contenido.split(\"\\n\");\n\tif (patron.length > lineas.length) return null;\n\n\tlet mejor = -1;\n\tlet mejorPuntuacion = 0;\n\tlet segundaPuntuacion = 0;\n\tfor (let i = 0; i + patron.length <= lineas.length; i++) {\n\t\tlet suma = 0;\n\t\tfor (let j = 0; j < patron.length; j++) suma += similitud(lineas[i + j], patron[j]);\n\t\tconst puntuacion = suma / patron.length;\n\t\tif (puntuacion > mejorPuntuacion) {\n\t\t\tsegundaPuntuacion = mejorPuntuacion;\n\t\t\tmejorPuntuacion = puntuacion;\n\t\t\tmejor = i;\n\t\t} else if (puntuacion > segundaPuntuacion) {\n\t\t\tsegundaPuntuacion = puntuacion;\n\t\t}\n\t}\n\n\t// Puerta 1: por debajo del umbral no es una errata, es otro sitio.\n\tif (mejor < 0 || mejorPuntuacion < UMBRAL) return null;\n\t// Puerta 2: dos candidatos parecidos = no sabemos cuál quería.\n\tif (mejorPuntuacion - segundaPuntuacion < MARGEN) return null;\n\t// Y si casaba EXACTO, esta pasada no pinta nada: la de arriba ya lo cogió.\n\tif (mejorPuntuacion === 1) return null;\n\n\t// Puerta 3, la que hace segura la recuperación.\n\t//\n\t// Solo las líneas donde `oldText` y `newText` DIFIEREN son propuesta del\n\t// modelo. Las que repite idénticas son una CITA, y una cita con errata sigue\n\t// señalando al original: se escribe lo que el fichero dice, no lo que el\n\t// modelo tecleó. Sin esto, la errata entraría en el fichero — que es\n\t// exactamente lo que hace oh-my-pi y por lo que su motor produce código que\n\t// no compila.\n\t//\n\t// Solo se puede alinear línea a línea cuando el modelo mandó el mismo número\n\t// de líneas. Si añadió o quitó, no hay correspondencia y se rechaza: no se\n\t// adivina.\n\tif (propuesta.length !== patron.length) return null;\n\tconst bloque = lineas.slice(mejor, mejor + patron.length);\n\tconst resultado = propuesta.map((linea, j) => (linea === patron[j] ? bloque[j] : linea));\n\n\tlet indice = 0;\n\tfor (let i = 0; i < mejor; i++) indice += lineas[i].length + 1;\n\tconst longitud = bloque.reduce((n, l) => n + l.length + 1, 0) - 1;\n\treturn { indice, longitud, textoNuevo: resultado.join(\"\\n\") };\n}\n"]}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Casar un bloque que el modelo retecleó con una errata.
3
+ *
4
+ * EL CASO. El modelo quiere cambiar una línea y, para dar contexto, retipea las
5
+ * de alrededor. Al retipear se equivoca en una letra:
6
+ *
7
+ * for (const it of item) { ← el fichero dice `items`
8
+ * suma += it.precio;
9
+ * }
10
+ *
11
+ * Hoy eso se rechaza entero y cuesta un turno. Y es un error frecuente: cuanto
12
+ * más contexto pedimos, más superficie tiene el modelo para equivocarse en algo
13
+ * que no pretendía cambiar.
14
+ *
15
+ * LO QUE COPIAMOS DE oh-my-pi, Y LO QUE NO. Ellos localizan por parecido con
16
+ * Levenshtein (`edit/modes/replace.ts:449`), y eso está bien. Lo que hacen
17
+ * después NO: escriben el `newText` del modelo tal cual, erratas incluidas.
18
+ * Medido sobre este mismo caso, su motor produce un fichero con `item` — una
19
+ * variable que no existe — y no compila. Aplicar no es aplicar bien.
20
+ *
21
+ * LA IDEA QUE LO ARREGLA, y es la razón de este módulo: el modelo no está
22
+ * proponiendo el contexto, está CITÁNDOLO. Solo las líneas donde `oldText` y
23
+ * `newText` DIFIEREN entre sí son su propuesta; las que repite idénticas son
24
+ * una cita, y una cita con errata sigue señalando al original. Así que se casa
25
+ * por parecido, y luego se escribe la versión del FICHERO para todo lo que el
26
+ * modelo no pidió cambiar.
27
+ *
28
+ * TRES PUERTAS, porque sin ellas esta pasada compra una recuperación y paga
29
+ * varias corrupciones:
30
+ *
31
+ * 1. **Umbral alto.** 0,92 de similitud media por línea. Por debajo, no es
32
+ * una errata: es otro sitio.
33
+ * 2. **Dominancia.** El mejor candidato tiene que ganarle al segundo por un
34
+ * margen claro. Dos posiciones parecidas significa que no sabemos cuál
35
+ * quería, y elegir por el modelo es peor que rechazar.
36
+ * 3. **Las líneas citadas se leen del fichero, no del modelo.** Es la que
37
+ * convierte una recuperación arriesgada en una segura.
38
+ */
39
+ /** Distancia de edición, acotada: si supera `tope` se corta y devuelve `tope + 1`. */
40
+ function distancia(a, b, tope) {
41
+ if (a === b)
42
+ return 0;
43
+ if (Math.abs(a.length - b.length) > tope)
44
+ return tope + 1;
45
+ // Una sola fila: no hace falta la matriz entera para una distancia acotada.
46
+ let anterior = Array.from({ length: b.length + 1 }, (_, i) => i);
47
+ for (let i = 1; i <= a.length; i++) {
48
+ const actual = [i];
49
+ let minimoDeLaFila = i;
50
+ for (let j = 1; j <= b.length; j++) {
51
+ const coste = a[i - 1] === b[j - 1] ? 0 : 1;
52
+ const v = Math.min(actual[j - 1] + 1, anterior[j] + 1, anterior[j - 1] + coste);
53
+ actual.push(v);
54
+ if (v < minimoDeLaFila)
55
+ minimoDeLaFila = v;
56
+ }
57
+ // Toda la fila supera el tope: no hay forma de bajar de ahí.
58
+ if (minimoDeLaFila > tope)
59
+ return tope + 1;
60
+ anterior = actual;
61
+ }
62
+ return anterior[b.length];
63
+ }
64
+ /** 1 = idénticas, 0 = nada que ver. Sobre el texto recortado. */
65
+ function similitud(a, b) {
66
+ const x = a.trim();
67
+ const y = b.trim();
68
+ if (x === y)
69
+ return 1;
70
+ if (x.length === 0 || y.length === 0)
71
+ return 0;
72
+ const largo = Math.max(x.length, y.length);
73
+ const tope = Math.ceil(largo * 0.2); // más allá no interesa: ya está por debajo del umbral
74
+ const d = distancia(x, y, tope);
75
+ return d > tope ? 0 : 1 - d / largo;
76
+ }
77
+ const UMBRAL = 0.92;
78
+ /** Cuánto tiene que ganarle el mejor al segundo para que no sea ambiguo. */
79
+ const MARGEN = 0.05;
80
+ /**
81
+ * Casa `oldText` contra `contenido` tolerando erratas, y construye el texto
82
+ * nuevo respetando las líneas que el modelo solo citaba.
83
+ *
84
+ * Devuelve `null` cuando no hay candidato claro. `null` significa «no puedo»,
85
+ * nunca «no hay»: quien llama debe seguir con su propio error.
86
+ */
87
+ export function casarPorParecido(contenido, oldText, newText) {
88
+ const patron = oldText.split("\n");
89
+ const propuesta = newText.split("\n");
90
+ // Con una sola línea no hay contexto que distinguir de la propuesta: todo
91
+ // sería propuesta, y entonces esta pasada no aporta nada sobre las de arriba.
92
+ if (patron.length < 2)
93
+ return null;
94
+ const lineas = contenido.split("\n");
95
+ if (patron.length > lineas.length)
96
+ return null;
97
+ let mejor = -1;
98
+ let mejorPuntuacion = 0;
99
+ let segundaPuntuacion = 0;
100
+ for (let i = 0; i + patron.length <= lineas.length; i++) {
101
+ let suma = 0;
102
+ for (let j = 0; j < patron.length; j++)
103
+ suma += similitud(lineas[i + j], patron[j]);
104
+ const puntuacion = suma / patron.length;
105
+ if (puntuacion > mejorPuntuacion) {
106
+ segundaPuntuacion = mejorPuntuacion;
107
+ mejorPuntuacion = puntuacion;
108
+ mejor = i;
109
+ }
110
+ else if (puntuacion > segundaPuntuacion) {
111
+ segundaPuntuacion = puntuacion;
112
+ }
113
+ }
114
+ // Puerta 1: por debajo del umbral no es una errata, es otro sitio.
115
+ if (mejor < 0 || mejorPuntuacion < UMBRAL)
116
+ return null;
117
+ // Puerta 2: dos candidatos parecidos = no sabemos cuál quería.
118
+ if (mejorPuntuacion - segundaPuntuacion < MARGEN)
119
+ return null;
120
+ // Y si casaba EXACTO, esta pasada no pinta nada: la de arriba ya lo cogió.
121
+ if (mejorPuntuacion === 1)
122
+ return null;
123
+ // Puerta 3, la que hace segura la recuperación.
124
+ //
125
+ // Solo las líneas donde `oldText` y `newText` DIFIEREN son propuesta del
126
+ // modelo. Las que repite idénticas son una CITA, y una cita con errata sigue
127
+ // señalando al original: se escribe lo que el fichero dice, no lo que el
128
+ // modelo tecleó. Sin esto, la errata entraría en el fichero — que es
129
+ // exactamente lo que hace oh-my-pi y por lo que su motor produce código que
130
+ // no compila.
131
+ //
132
+ // Solo se puede alinear línea a línea cuando el modelo mandó el mismo número
133
+ // de líneas. Si añadió o quitó, no hay correspondencia y se rechaza: no se
134
+ // adivina.
135
+ if (propuesta.length !== patron.length)
136
+ return null;
137
+ const bloque = lineas.slice(mejor, mejor + patron.length);
138
+ const resultado = propuesta.map((linea, j) => (linea === patron[j] ? bloque[j] : linea));
139
+ let indice = 0;
140
+ for (let i = 0; i < mejor; i++)
141
+ indice += lineas[i].length + 1;
142
+ const longitud = bloque.reduce((n, l) => n + l.length + 1, 0) - 1;
143
+ return { indice, longitud, textoNuevo: resultado.join("\n") };
144
+ }
145
+ //# sourceMappingURL=parecido.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parecido.js","sourceRoot":"","sources":["../../../src/core/edicion/parecido.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Casar un bloque que el modelo retecleó con una errata.\n *\n * EL CASO. El modelo quiere cambiar una línea y, para dar contexto, retipea las\n * de alrededor. Al retipear se equivoca en una letra:\n *\n * for (const it of item) { ← el fichero dice `items`\n * suma += it.precio;\n * }\n *\n * Hoy eso se rechaza entero y cuesta un turno. Y es un error frecuente: cuanto\n * más contexto pedimos, más superficie tiene el modelo para equivocarse en algo\n * que no pretendía cambiar.\n *\n * LO QUE COPIAMOS DE oh-my-pi, Y LO QUE NO. Ellos localizan por parecido con\n * Levenshtein (`edit/modes/replace.ts:449`), y eso está bien. Lo que hacen\n * después NO: escriben el `newText` del modelo tal cual, erratas incluidas.\n * Medido sobre este mismo caso, su motor produce un fichero con `item` — una\n * variable que no existe — y no compila. Aplicar no es aplicar bien.\n *\n * LA IDEA QUE LO ARREGLA, y es la razón de este módulo: el modelo no está\n * proponiendo el contexto, está CITÁNDOLO. Solo las líneas donde `oldText` y\n * `newText` DIFIEREN entre sí son su propuesta; las que repite idénticas son\n * una cita, y una cita con errata sigue señalando al original. Así que se casa\n * por parecido, y luego se escribe la versión del FICHERO para todo lo que el\n * modelo no pidió cambiar.\n *\n * TRES PUERTAS, porque sin ellas esta pasada compra una recuperación y paga\n * varias corrupciones:\n *\n * 1. **Umbral alto.** 0,92 de similitud media por línea. Por debajo, no es\n * una errata: es otro sitio.\n * 2. **Dominancia.** El mejor candidato tiene que ganarle al segundo por un\n * margen claro. Dos posiciones parecidas significa que no sabemos cuál\n * quería, y elegir por el modelo es peor que rechazar.\n * 3. **Las líneas citadas se leen del fichero, no del modelo.** Es la que\n * convierte una recuperación arriesgada en una segura.\n */\n\n/** Distancia de edición, acotada: si supera `tope` se corta y devuelve `tope + 1`. */\nfunction distancia(a: string, b: string, tope: number): number {\n\tif (a === b) return 0;\n\tif (Math.abs(a.length - b.length) > tope) return tope + 1;\n\t// Una sola fila: no hace falta la matriz entera para una distancia acotada.\n\tlet anterior = Array.from({ length: b.length + 1 }, (_, i) => i);\n\tfor (let i = 1; i <= a.length; i++) {\n\t\tconst actual = [i];\n\t\tlet minimoDeLaFila = i;\n\t\tfor (let j = 1; j <= b.length; j++) {\n\t\t\tconst coste = a[i - 1] === b[j - 1] ? 0 : 1;\n\t\t\tconst v = Math.min(actual[j - 1] + 1, anterior[j] + 1, anterior[j - 1] + coste);\n\t\t\tactual.push(v);\n\t\t\tif (v < minimoDeLaFila) minimoDeLaFila = v;\n\t\t}\n\t\t// Toda la fila supera el tope: no hay forma de bajar de ahí.\n\t\tif (minimoDeLaFila > tope) return tope + 1;\n\t\tanterior = actual;\n\t}\n\treturn anterior[b.length];\n}\n\n/** 1 = idénticas, 0 = nada que ver. Sobre el texto recortado. */\nfunction similitud(a: string, b: string): number {\n\tconst x = a.trim();\n\tconst y = b.trim();\n\tif (x === y) return 1;\n\tif (x.length === 0 || y.length === 0) return 0;\n\tconst largo = Math.max(x.length, y.length);\n\tconst tope = Math.ceil(largo * 0.2); // más allá no interesa: ya está por debajo del umbral\n\tconst d = distancia(x, y, tope);\n\treturn d > tope ? 0 : 1 - d / largo;\n}\n\nconst UMBRAL = 0.92;\n/** Cuánto tiene que ganarle el mejor al segundo para que no sea ambiguo. */\nconst MARGEN = 0.05;\n\nexport interface CasadoPorParecido {\n\tindice: number;\n\tlongitud: number;\n\t/** Ya empalmado: propuesta del modelo donde la hubo, fichero donde no. */\n\ttextoNuevo: string;\n}\n\n/**\n * Casa `oldText` contra `contenido` tolerando erratas, y construye el texto\n * nuevo respetando las líneas que el modelo solo citaba.\n *\n * Devuelve `null` cuando no hay candidato claro. `null` significa «no puedo»,\n * nunca «no hay»: quien llama debe seguir con su propio error.\n */\nexport function casarPorParecido(contenido: string, oldText: string, newText: string): CasadoPorParecido | null {\n\tconst patron = oldText.split(\"\\n\");\n\tconst propuesta = newText.split(\"\\n\");\n\t// Con una sola línea no hay contexto que distinguir de la propuesta: todo\n\t// sería propuesta, y entonces esta pasada no aporta nada sobre las de arriba.\n\tif (patron.length < 2) return null;\n\tconst lineas = contenido.split(\"\\n\");\n\tif (patron.length > lineas.length) return null;\n\n\tlet mejor = -1;\n\tlet mejorPuntuacion = 0;\n\tlet segundaPuntuacion = 0;\n\tfor (let i = 0; i + patron.length <= lineas.length; i++) {\n\t\tlet suma = 0;\n\t\tfor (let j = 0; j < patron.length; j++) suma += similitud(lineas[i + j], patron[j]);\n\t\tconst puntuacion = suma / patron.length;\n\t\tif (puntuacion > mejorPuntuacion) {\n\t\t\tsegundaPuntuacion = mejorPuntuacion;\n\t\t\tmejorPuntuacion = puntuacion;\n\t\t\tmejor = i;\n\t\t} else if (puntuacion > segundaPuntuacion) {\n\t\t\tsegundaPuntuacion = puntuacion;\n\t\t}\n\t}\n\n\t// Puerta 1: por debajo del umbral no es una errata, es otro sitio.\n\tif (mejor < 0 || mejorPuntuacion < UMBRAL) return null;\n\t// Puerta 2: dos candidatos parecidos = no sabemos cuál quería.\n\tif (mejorPuntuacion - segundaPuntuacion < MARGEN) return null;\n\t// Y si casaba EXACTO, esta pasada no pinta nada: la de arriba ya lo cogió.\n\tif (mejorPuntuacion === 1) return null;\n\n\t// Puerta 3, la que hace segura la recuperación.\n\t//\n\t// Solo las líneas donde `oldText` y `newText` DIFIEREN son propuesta del\n\t// modelo. Las que repite idénticas son una CITA, y una cita con errata sigue\n\t// señalando al original: se escribe lo que el fichero dice, no lo que el\n\t// modelo tecleó. Sin esto, la errata entraría en el fichero — que es\n\t// exactamente lo que hace oh-my-pi y por lo que su motor produce código que\n\t// no compila.\n\t//\n\t// Solo se puede alinear línea a línea cuando el modelo mandó el mismo número\n\t// de líneas. Si añadió o quitó, no hay correspondencia y se rechaza: no se\n\t// adivina.\n\tif (propuesta.length !== patron.length) return null;\n\tconst bloque = lineas.slice(mejor, mejor + patron.length);\n\tconst resultado = propuesta.map((linea, j) => (linea === patron[j] ? bloque[j] : linea));\n\n\tlet indice = 0;\n\tfor (let i = 0; i < mejor; i++) indice += lineas[i].length + 1;\n\tconst longitud = bloque.reduce((n, l) => n + l.length + 1, 0) - 1;\n\treturn { indice, longitud, textoNuevo: resultado.join(\"\\n\") };\n}\n"]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * ¿Sigue parseando el fichero después de la edición?
3
+ *
4
+ * El fallo más caro de un agente que edita no es equivocarse de lógica: es
5
+ * dejar el fichero sintácticamente roto y seguir trabajando encima como si nada.
6
+ * Hasta ahora, saber si el proyecto compilaba exigía un `npm run check` que el
7
+ * modelo no lanza solo.
8
+ *
9
+ * Sin dependencias nuevas. Se usa el compilador de TypeScript que ya está
10
+ * instalado, que cubre `.ts/.tsx/.js/.jsx/.mts/.cts/.mjs/.cjs`, más `JSON.parse`
11
+ * para `.json`. Es el grueso de lo que edita nuestro usuario. Tree-sitter
12
+ * cubriría además Python, Go y Rust, pero trae binarios nativos por plataforma
13
+ * —el mismo problema que ya nos dio `srt` con `bun --compile`— y eso no tiene
14
+ * por qué estar en el camino crítico.
15
+ *
16
+ * La regla que hace esto seguro, copiada de oh-my-pi porque es la correcta:
17
+ * **solo se acusa a la edición si la preimagen parseaba**. Un lenguaje que no
18
+ * sabemos leer devuelve `null` en las dos, así que nunca produce un falso
19
+ * positivo; y un fichero que ya estaba roto tampoco se le atribuye a quien
20
+ * acaba de tocarlo.
21
+ */
22
+ /**
23
+ * `true` parsea · `false` no parsea · `null` no sabemos leer este lenguaje.
24
+ *
25
+ * Los tres valores importan. Colapsar `null` en `true` haría que un `.py` roto
26
+ * pareciera sano; colapsarlo en `false` acusaría a cada edición de Python.
27
+ */
28
+ export declare function parsea(codigo: string, ruta: string): boolean | null;
29
+ /** El primer error de sintaxis, con su línea. `null` si no hay o no se sabe leer. */
30
+ export declare function primerErrorDe(codigo: string, ruta: string): {
31
+ linea: number;
32
+ mensaje: string;
33
+ } | null;
34
+ export interface Edicion {
35
+ ruta: string;
36
+ /** Contenido antes. `null` si el fichero no existía. */
37
+ antes: string | null;
38
+ /** Contenido después. `null` si se borró. */
39
+ despues: string | null;
40
+ }
41
+ /**
42
+ * `true` solo si esta edición convirtió un fichero que parseaba en uno que no.
43
+ *
44
+ * Nunca es `true` cuando la preimagen no parseaba o no se sabía leer: esa
45
+ * precondición es la que evita acusar a quien no ha roto nada.
46
+ */
47
+ export declare function rompioElParseo({ ruta, antes, despues }: Edicion): boolean;
48
+ /**
49
+ * El aviso que se le devuelve al modelo, en su propio resultado de edición.
50
+ *
51
+ * Se le dice el qué y el siguiente paso. Un "syntax error" a secas invita a
52
+ * seguir editando a ciegas, que es como una edición rota se convierte en tres.
53
+ */
54
+ export declare function avisoDeParseoRoto(ruta: string, error?: {
55
+ linea: number;
56
+ mensaje: string;
57
+ } | null): string;
58
+ //# sourceMappingURL=parseo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseo.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/parseo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAYH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAoCnE;AAED,sFAAqF;AACrF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBrG;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAwD;IACxD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,+CAA6C;IAC7C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,OAAO,CAGzE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,MAAM,CASzG","sourcesContent":["/**\n * ¿Sigue parseando el fichero después de la edición?\n *\n * El fallo más caro de un agente que edita no es equivocarse de lógica: es\n * dejar el fichero sintácticamente roto y seguir trabajando encima como si nada.\n * Hasta ahora, saber si el proyecto compilaba exigía un `npm run check` que el\n * modelo no lanza solo.\n *\n * Sin dependencias nuevas. Se usa el compilador de TypeScript que ya está\n * instalado, que cubre `.ts/.tsx/.js/.jsx/.mts/.cts/.mjs/.cjs`, más `JSON.parse`\n * para `.json`. Es el grueso de lo que edita nuestro usuario. Tree-sitter\n * cubriría además Python, Go y Rust, pero trae binarios nativos por plataforma\n * —el mismo problema que ya nos dio `srt` con `bun --compile`— y eso no tiene\n * por qué estar en el camino crítico.\n *\n * La regla que hace esto seguro, copiada de oh-my-pi porque es la correcta:\n * **solo se acusa a la edición si la preimagen parseaba**. Un lenguaje que no\n * sabemos leer devuelve `null` en las dos, así que nunca produce un falso\n * positivo; y un fichero que ya estaba roto tampoco se le atribuye a quien\n * acaba de tocarlo.\n */\n\nimport ts from \"typescript\";\n\n/** Extensiones que sabe leer el compilador de TypeScript. */\nconst TS_LIKE = new Set([\".ts\", \".tsx\", \".mts\", \".cts\", \".js\", \".jsx\", \".mjs\", \".cjs\"]);\n\nfunction extensionDe(ruta: string): string {\n\tconst punto = ruta.lastIndexOf(\".\");\n\treturn punto === -1 ? \"\" : ruta.slice(punto).toLowerCase();\n}\n\n/**\n * `true` parsea · `false` no parsea · `null` no sabemos leer este lenguaje.\n *\n * Los tres valores importan. Colapsar `null` en `true` haría que un `.py` roto\n * pareciera sano; colapsarlo en `false` acusaría a cada edición de Python.\n */\nexport function parsea(codigo: string, ruta: string): boolean | null {\n\tconst ext = extensionDe(ruta);\n\n\tif (ext === \".json\") {\n\t\t// Un JSON vacío no es JSON válido, pero tampoco es un fichero roto por\n\t\t// una edición: es un fichero a medio escribir. Se trata como desconocido.\n\t\tif (codigo.trim() === \"\") return null;\n\t\ttry {\n\t\t\tJSON.parse(codigo);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (!TS_LIKE.has(ext)) return null;\n\n\t// El fichero vacío es válido en todos los lenguajes que miramos: devolver\n\t// `false` haría que crear un fichero contara como romperlo.\n\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\n\t// `parseDiagnostics` no está en el tipo público de `SourceFile`, y aun así es\n\t// lo correcto aquí. Medido contra 10 casos: la alternativa pública\n\t// (`transpileModule` con `reportDiagnostics`) falla 7 de 10 — da por rotos\n\t// una coma final, un decorador, `satisfies`, el fichero vacío y hasta\n\t// `export function a(x){return x+1}`, porque incluye diagnósticos de opciones\n\t// del compilador que no tienen nada que ver con la sintaxis. `parseDiagnostics`\n\t// acierta 10/10 e ignora los errores de TIPOS, que es justo lo que queremos:\n\t// un `const a: NoExiste = 1` compila mal pero no está roto.\n\t//\n\t// Si TypeScript se lo lleva algún día, se devuelve `null` —\"no sabemos\"— y no\n\t// `true`. Equivocarse hacia \"no sabemos\" cuesta un aviso que no sale;\n\t// equivocarse hacia \"parsea\" cuesta dar por bueno un fichero roto.\n\tconst diagnosticos = (fuente as ts.SourceFile & { parseDiagnostics?: unknown }).parseDiagnostics;\n\tif (!Array.isArray(diagnosticos)) return null;\n\treturn diagnosticos.length === 0;\n}\n\n/** El primer error de sintaxis, con su línea. `null` si no hay o no se sabe leer. */\nexport function primerErrorDe(codigo: string, ruta: string): { linea: number; mensaje: string } | null {\n\tconst ext = extensionDe(ruta);\n\tif (ext === \".json\") {\n\t\ttry {\n\t\t\tJSON.parse(codigo);\n\t\t\treturn null;\n\t\t} catch (e) {\n\t\t\t// El mensaje de `JSON.parse` ya trae posición (\"at position 42\"), que\n\t\t\t// para un fichero de datos es tan útil como el número de línea.\n\t\t\treturn { linea: 0, mensaje: e instanceof Error ? e.message : \"JSON inválido\" };\n\t\t}\n\t}\n\tif (!TS_LIKE.has(ext)) return null;\n\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\tconst diagnosticos = (fuente as ts.SourceFile & { parseDiagnostics?: unknown }).parseDiagnostics;\n\tif (!Array.isArray(diagnosticos) || diagnosticos.length === 0) return null;\n\tconst primero = diagnosticos[0] as ts.Diagnostic;\n\tconst posicion = primero.start !== undefined ? fuente.getLineAndCharacterOfPosition(primero.start) : null;\n\treturn {\n\t\tlinea: posicion ? posicion.line + 1 : 0,\n\t\tmensaje: ts.flattenDiagnosticMessageText(primero.messageText, \" \"),\n\t};\n}\n\nexport interface Edicion {\n\truta: string;\n\t/** Contenido antes. `null` si el fichero no existía. */\n\tantes: string | null;\n\t/** Contenido después. `null` si se borró. */\n\tdespues: string | null;\n}\n\n/**\n * `true` solo si esta edición convirtió un fichero que parseaba en uno que no.\n *\n * Nunca es `true` cuando la preimagen no parseaba o no se sabía leer: esa\n * precondición es la que evita acusar a quien no ha roto nada.\n */\nexport function rompioElParseo({ ruta, antes, despues }: Edicion): boolean {\n\tif (antes === null || despues === null) return false;\n\treturn parsea(antes, ruta) === true && parsea(despues, ruta) === false;\n}\n\n/**\n * El aviso que se le devuelve al modelo, en su propio resultado de edición.\n *\n * Se le dice el qué y el siguiente paso. Un \"syntax error\" a secas invita a\n * seguir editando a ciegas, que es como una edición rota se convierte en tres.\n */\nexport function avisoDeParseoRoto(ruta: string, error?: { linea: number; mensaje: string } | null): string {\n\t// Con la línea y el mensaje exactos, no con un \"está roto\" genérico. La\n\t// diferencia práctica es entre releer el fichero entero adivinando y saber\n\t// que en la 42 falta una llave. Sale gratis: el compilador ya lo tenía.\n\tconst donde = error ? (error.linea > 0 ? ` En la línea ${error.linea}: ${error.mensaje}` : ` ${error.mensaje}`) : \"\";\n\treturn (\n\t\t`⚠ Esta edición ha dejado \\`${ruta}\\` sintácticamente roto: antes parseaba y ahora no.${donde} ` +\n\t\t`Arréglalo antes de seguir con otra cosa.`\n\t);\n}\n"]}