@hoilab/ada-cli 0.84.22 → 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 (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  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/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -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"]}
@@ -0,0 +1,124 @@
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
+ import ts from "typescript";
23
+ /** Extensiones que sabe leer el compilador de TypeScript. */
24
+ const TS_LIKE = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
25
+ function extensionDe(ruta) {
26
+ const punto = ruta.lastIndexOf(".");
27
+ return punto === -1 ? "" : ruta.slice(punto).toLowerCase();
28
+ }
29
+ /**
30
+ * `true` parsea · `false` no parsea · `null` no sabemos leer este lenguaje.
31
+ *
32
+ * Los tres valores importan. Colapsar `null` en `true` haría que un `.py` roto
33
+ * pareciera sano; colapsarlo en `false` acusaría a cada edición de Python.
34
+ */
35
+ export function parsea(codigo, ruta) {
36
+ const ext = extensionDe(ruta);
37
+ if (ext === ".json") {
38
+ // Un JSON vacío no es JSON válido, pero tampoco es un fichero roto por
39
+ // una edición: es un fichero a medio escribir. Se trata como desconocido.
40
+ if (codigo.trim() === "")
41
+ return null;
42
+ try {
43
+ JSON.parse(codigo);
44
+ return true;
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ if (!TS_LIKE.has(ext))
51
+ return null;
52
+ // El fichero vacío es válido en todos los lenguajes que miramos: devolver
53
+ // `false` haría que crear un fichero contara como romperlo.
54
+ const fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);
55
+ // `parseDiagnostics` no está en el tipo público de `SourceFile`, y aun así es
56
+ // lo correcto aquí. Medido contra 10 casos: la alternativa pública
57
+ // (`transpileModule` con `reportDiagnostics`) falla 7 de 10 — da por rotos
58
+ // una coma final, un decorador, `satisfies`, el fichero vacío y hasta
59
+ // `export function a(x){return x+1}`, porque incluye diagnósticos de opciones
60
+ // del compilador que no tienen nada que ver con la sintaxis. `parseDiagnostics`
61
+ // acierta 10/10 e ignora los errores de TIPOS, que es justo lo que queremos:
62
+ // un `const a: NoExiste = 1` compila mal pero no está roto.
63
+ //
64
+ // Si TypeScript se lo lleva algún día, se devuelve `null` —"no sabemos"— y no
65
+ // `true`. Equivocarse hacia "no sabemos" cuesta un aviso que no sale;
66
+ // equivocarse hacia "parsea" cuesta dar por bueno un fichero roto.
67
+ const diagnosticos = fuente.parseDiagnostics;
68
+ if (!Array.isArray(diagnosticos))
69
+ return null;
70
+ return diagnosticos.length === 0;
71
+ }
72
+ /** El primer error de sintaxis, con su línea. `null` si no hay o no se sabe leer. */
73
+ export function primerErrorDe(codigo, ruta) {
74
+ const ext = extensionDe(ruta);
75
+ if (ext === ".json") {
76
+ try {
77
+ JSON.parse(codigo);
78
+ return null;
79
+ }
80
+ catch (e) {
81
+ // El mensaje de `JSON.parse` ya trae posición ("at position 42"), que
82
+ // para un fichero de datos es tan útil como el número de línea.
83
+ return { linea: 0, mensaje: e instanceof Error ? e.message : "JSON inválido" };
84
+ }
85
+ }
86
+ if (!TS_LIKE.has(ext))
87
+ return null;
88
+ const fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);
89
+ const diagnosticos = fuente.parseDiagnostics;
90
+ if (!Array.isArray(diagnosticos) || diagnosticos.length === 0)
91
+ return null;
92
+ const primero = diagnosticos[0];
93
+ const posicion = primero.start !== undefined ? fuente.getLineAndCharacterOfPosition(primero.start) : null;
94
+ return {
95
+ linea: posicion ? posicion.line + 1 : 0,
96
+ mensaje: ts.flattenDiagnosticMessageText(primero.messageText, " "),
97
+ };
98
+ }
99
+ /**
100
+ * `true` solo si esta edición convirtió un fichero que parseaba en uno que no.
101
+ *
102
+ * Nunca es `true` cuando la preimagen no parseaba o no se sabía leer: esa
103
+ * precondición es la que evita acusar a quien no ha roto nada.
104
+ */
105
+ export function rompioElParseo({ ruta, antes, despues }) {
106
+ if (antes === null || despues === null)
107
+ return false;
108
+ return parsea(antes, ruta) === true && parsea(despues, ruta) === false;
109
+ }
110
+ /**
111
+ * El aviso que se le devuelve al modelo, en su propio resultado de edición.
112
+ *
113
+ * Se le dice el qué y el siguiente paso. Un "syntax error" a secas invita a
114
+ * seguir editando a ciegas, que es como una edición rota se convierte en tres.
115
+ */
116
+ export function avisoDeParseoRoto(ruta, error) {
117
+ // Con la línea y el mensaje exactos, no con un "está roto" genérico. La
118
+ // diferencia práctica es entre releer el fichero entero adivinando y saber
119
+ // que en la 42 falta una llave. Sale gratis: el compilador ya lo tenía.
120
+ const donde = error ? (error.linea > 0 ? ` En la línea ${error.linea}: ${error.mensaje}` : ` ${error.mensaje}`) : "";
121
+ return (`⚠ Esta edición ha dejado \`${ruta}\` sintácticamente roto: antes parseaba y ahora no.${donde} ` +
122
+ `Arréglalo antes de seguir con otra cosa.`);
123
+ }
124
+ //# sourceMappingURL=parseo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseo.js","sourceRoot":"","sources":["../../../src/core/edicion/parseo.ts"],"names":[],"mappings":"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","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"]}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Auto-reparación de una edición que rompió el parseo.
3
+ *
4
+ * Cuando `parseo.ts` detecta que una edición convirtió un fichero que
5
+ * parseaba en uno que no, esto intenta arreglarlo solo: localiza el conjunto
6
+ * mínimo de hunks (líneas cambiadas) cuya reversión restaura el parseo, le
7
+ * pide al modelo que arregle SOLO esa región mostrándole la versión sin
8
+ * romper como referencia, y acepta el resultado únicamente si (a) el
9
+ * fichero entero vuelve a parsear Y (b) lo que devolvió el modelo no es,
10
+ * quitando espacios, un calco de la referencia — es decir, no es una simple
11
+ * reversión del cambio que el usuario pidió.
12
+ *
13
+ * La idea y el reparto de responsabilidades vienen de `oh-my-pi`
14
+ * (packages/coding-agent/src/edit/auto-repair.ts): localizar antes de
15
+ * preguntar, y rechazar la reversión aunque parsee. Lo que cambia aquí es la
16
+ * implementación: sin tree-sitter (usamos el mismo `parsea()` de
17
+ * `parseo.ts`, que ya cubre lo que este fork edita) y con el paquete `diff`
18
+ * que este proyecto ya trae en vez de un diff de líneas propio.
19
+ */
20
+ /** La región rota localizada, con su referencia (culpables revertidos) para enseñarle al modelo. */
21
+ export interface RegionDeReparacion {
22
+ /** Tramo de líneas sustituido en el fichero roto, `[bInicio, bFin)`. */
23
+ bInicio: number;
24
+ bFin: number;
25
+ /** La región tal cual está en el fichero roto. */
26
+ textoRoto: string;
27
+ /** La misma región con los hunks culpables revertidos: empalmarla restaura el parseo. */
28
+ textoReferencia: string;
29
+ }
30
+ /**
31
+ * Localiza la rotura de `antes → despues` a una región de líneas acotada.
32
+ * `undefined` cuando no se puede aislar o cuando la región supera
33
+ * {@link MAX_LINEAS_REGION} — quien llama se queda entonces con el aviso de
34
+ * parseo roto normal.
35
+ */
36
+ export declare function calcularRegionDeReparacion(instantanea: {
37
+ ruta: string;
38
+ antes: string;
39
+ despues: string;
40
+ }): RegionDeReparacion | undefined;
41
+ /** Qué pasó al intentar reparar. Nunca colapsa "no pude intentarlo" con "lo intenté y no valió". */
42
+ export type ResultadoReparacion = {
43
+ estado: "reparado";
44
+ contenido: string;
45
+ intentos: number;
46
+ }
47
+ /** No había con qué preguntar (sin modelo) o la rotura no se pudo aislar/acotar. */
48
+ | {
49
+ estado: "no-aplicable";
50
+ }
51
+ /** Se preguntó al modelo pero ningún intento cumplió las dos condiciones de aceptación. */
52
+ | {
53
+ estado: "rechazada";
54
+ };
55
+ /**
56
+ * Intenta reparar una edición que rompió el parseo, preguntándole a `completar`.
57
+ *
58
+ * `completar` devuelve `null` cuando no pudo completarse (sin modelo, sin
59
+ * red, error de la API…): eso es "no-aplicable", nunca "rechazada" — una
60
+ * reparación rechazada es una que SE INTENTÓ y no sirvió.
61
+ */
62
+ export declare function intentarReparar(instantanea: {
63
+ ruta: string;
64
+ antes: string;
65
+ despues: string;
66
+ }, completar?: (prompt: string) => Promise<string | null>): Promise<ResultadoReparacion>;
67
+ //# sourceMappingURL=reparacion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reparacion.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/reparacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAmGH,sGAAoG;AACpG,MAAM,WAAW,kBAAkB;IAClC,yEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,oDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,0FAAyF;IACzF,eAAe,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,kBAAkB,GAAG,SAAS,CA4BjC;AAkCD,wGAAoG;AACpG,MAAM,MAAM,mBAAmB,GAC5B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAC7D,sFAAoF;GAClF;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE;AAC5B,+FAA2F;GACzF;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAE3B;;;;;;GAMG;AACH,wBAAsB,eAAe,CACpC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACpD,OAAO,CAAC,mBAAmB,CAAC,CA2B9B","sourcesContent":["/**\n * Auto-reparación de una edición que rompió el parseo.\n *\n * Cuando `parseo.ts` detecta que una edición convirtió un fichero que\n * parseaba en uno que no, esto intenta arreglarlo solo: localiza el conjunto\n * mínimo de hunks (líneas cambiadas) cuya reversión restaura el parseo, le\n * pide al modelo que arregle SOLO esa región mostrándole la versión sin\n * romper como referencia, y acepta el resultado únicamente si (a) el\n * fichero entero vuelve a parsear Y (b) lo que devolvió el modelo no es,\n * quitando espacios, un calco de la referencia — es decir, no es una simple\n * reversión del cambio que el usuario pidió.\n *\n * La idea y el reparto de responsabilidades vienen de `oh-my-pi`\n * (packages/coding-agent/src/edit/auto-repair.ts): localizar antes de\n * preguntar, y rechazar la reversión aunque parsee. Lo que cambia aquí es la\n * implementación: sin tree-sitter (usamos el mismo `parsea()` de\n * `parseo.ts`, que ya cubre lo que este fork edita) y con el paquete `diff`\n * que este proyecto ya trae en vez de un diff de líneas propio.\n */\n\nimport * as Diff from \"diff\";\nimport { parsea } from \"./parseo.ts\";\n\n/** Cuántas líneas de contexto se enseñan alrededor de los hunks culpables. */\nconst LINEAS_DE_CONTEXTO = 6;\n/** Región más grande que merece la pena mandarle a un modelo. */\nconst MAX_LINEAS_REGION = 150;\n/** Un primer intento y un reintento con el rechazo anterior como pista. */\nconst MAX_INTENTOS = 2;\n\n/** Un tramo de líneas cambiado, en coordenadas de preimagen (`a`) y posimagen (`b`). */\ninterface Hunk {\n\taInicio: number;\n\taFin: number;\n\tbInicio: number;\n\tbFin: number;\n}\n\nfunction construirHunks(antes: string, despues: string): { hunks: Hunk[]; a: string[]; b: string[] } {\n\tconst a = antes.split(\"\\n\");\n\tconst b = despues.split(\"\\n\");\n\tconst partes = Diff.diffLines(antes, despues);\n\tconst hunks: Hunk[] = [];\n\tlet ai = 0;\n\tlet bi = 0;\n\tfor (const parte of partes) {\n\t\tconst lineas = parte.count ?? 0;\n\t\tif (!parte.added && !parte.removed) {\n\t\t\tai += lineas;\n\t\t\tbi += lineas;\n\t\t\tcontinue;\n\t\t}\n\t\tconst borradas = parte.removed ? lineas : 0;\n\t\tconst anadidas = parte.added ? lineas : 0;\n\t\t// Un borrado seguido de un añadido contiguos son la misma edición\n\t\t// (una sustitución), no dos hunks distintos que reventar por separado.\n\t\tconst ultimo = hunks.at(-1);\n\t\tif (ultimo && ultimo.aFin === ai && ultimo.bFin === bi) {\n\t\t\tultimo.aFin += borradas;\n\t\t\tultimo.bFin += anadidas;\n\t\t} else {\n\t\t\thunks.push({ aInicio: ai, aFin: ai + borradas, bInicio: bi, bFin: bi + anadidas });\n\t\t}\n\t\tai += borradas;\n\t\tbi += anadidas;\n\t}\n\treturn { hunks, a, b };\n}\n\n/** La posimagen con el conjunto `indices` de hunks revertidos a sus líneas de preimagen. */\nfunction revertirHunks(a: string[], b: string[], hunks: Hunk[], indices: readonly number[]): string {\n\tconst ordenados = [...indices].sort((x, y) => x - y);\n\tconst out: string[] = [];\n\tlet bi = 0;\n\tfor (const i of ordenados) {\n\t\tconst h = hunks[i];\n\t\tout.push(...b.slice(bi, h.bInicio), ...a.slice(h.aInicio, h.aFin));\n\t\tbi = h.bFin;\n\t}\n\tout.push(...b.slice(bi));\n\treturn out.join(\"\\n\");\n}\n\n/**\n * El conjunto de hunks cuya reversión conjunta restaura el parseo, o\n * `undefined` si no se puede aislar (incluye el caso \"revertirlos todos\n * tampoco parsea\", que solo pasaría si la preimagen ya estaba rota — y eso\n * ya lo descarta quien llama antes de invocar este módulo).\n */\nfunction aislarHunksCulpables(ruta: string, a: string[], b: string[], hunks: Hunk[]): number[] | undefined {\n\tconst n = hunks.length;\n\tif (n === 0) return undefined;\n\n\t// Camino rápido: la inmensa mayoría de roturas son un solo hunk.\n\tfor (let i = 0; i < n; i++) {\n\t\tif (parsea(revertirHunks(a, b, hunks, [i]), ruta) === true) return [i];\n\t}\n\n\t// ponytail: sin la búsqueda acotada de PARES de oh-my-pi antes de esto —\n\t// el pelado voraz de abajo ya encuentra un conjunto que funciona para\n\t// roturas de varios hunks, solo que no siempre es el par más pequeño\n\t// posible. Si algún caso real lo echa en falta, se añade aquí.\n\t//\n\t// Pelado voraz: se parte de \"revertir todos\" (que parsea, porque\n\t// reconstruye la preimagen) y se intenta, hunk a hunk, DEJARLO sin\n\t// revertir; si el resto sigue parseando, ese hunk no era culpable.\n\tconst conservar = new Set<number>(Array.from({ length: n }, (_, i) => i));\n\tfor (let i = 0; i < n; i++) {\n\t\tconst prueba = new Set(conservar);\n\t\tprueba.delete(i);\n\t\tif (parsea(revertirHunks(a, b, hunks, [...prueba]), ruta) === true) conservar.delete(i);\n\t}\n\tif (conservar.size === 0) return undefined;\n\tif (parsea(revertirHunks(a, b, hunks, [...conservar]), ruta) !== true) return undefined;\n\treturn [...conservar];\n}\n\n/** La región rota localizada, con su referencia (culpables revertidos) para enseñarle al modelo. */\nexport interface RegionDeReparacion {\n\t/** Tramo de líneas sustituido en el fichero roto, `[bInicio, bFin)`. */\n\tbInicio: number;\n\tbFin: number;\n\t/** La región tal cual está en el fichero roto. */\n\ttextoRoto: string;\n\t/** La misma región con los hunks culpables revertidos: empalmarla restaura el parseo. */\n\ttextoReferencia: string;\n}\n\n/**\n * Localiza la rotura de `antes → despues` a una región de líneas acotada.\n * `undefined` cuando no se puede aislar o cuando la región supera\n * {@link MAX_LINEAS_REGION} — quien llama se queda entonces con el aviso de\n * parseo roto normal.\n */\nexport function calcularRegionDeReparacion(instantanea: {\n\truta: string;\n\tantes: string;\n\tdespues: string;\n}): RegionDeReparacion | undefined {\n\tconst { ruta, antes, despues } = instantanea;\n\tconst { hunks, a, b } = construirHunks(antes, despues);\n\tconst culpables = aislarHunksCulpables(ruta, a, b, hunks);\n\tif (!culpables) return undefined;\n\n\tconst hs = culpables.map((i) => hunks[i]).sort((x, y) => x.bInicio - y.bInicio);\n\tconst bInicio = Math.max(0, hs[0].bInicio - LINEAS_DE_CONTEXTO);\n\tconst bFin = Math.min(b.length, (hs.at(-1) as Hunk).bFin + LINEAS_DE_CONTEXTO);\n\tif (bFin - bInicio > MAX_LINEAS_REGION) return undefined;\n\n\t// Referencia = la región rota con cada hunk culpable cambiado por sus\n\t// líneas de preimagen, así que empalmarla reproduce exactamente esa\n\t// reversión (que parsea por construcción).\n\tconst ref: string[] = [];\n\tlet bi = bInicio;\n\tfor (const h of hs) {\n\t\tref.push(...b.slice(bi, h.bInicio), ...a.slice(h.aInicio, h.aFin));\n\t\tbi = h.bFin;\n\t}\n\tref.push(...b.slice(bi, bFin));\n\n\treturn {\n\t\tbInicio,\n\t\tbFin,\n\t\ttextoRoto: b.slice(bInicio, bFin).join(\"\\n\"),\n\t\ttextoReferencia: ref.join(\"\\n\"),\n\t};\n}\n\nfunction empalmarRegion(b: string[], region: RegionDeReparacion, texto: string): string {\n\treturn [...b.slice(0, region.bInicio), ...texto.split(\"\\n\"), ...b.slice(region.bFin)].join(\"\\n\");\n}\n\n/** Quita una valla de código markdown envolvente, si la hay. */\nfunction quitarValla(texto: string): string {\n\tconst recortado = texto.trim();\n\tconst m = recortado.match(/^```[^\\n]*\\n([\\s\\S]*?)\\n?```$/);\n\treturn m ? m[1] : recortado;\n}\n\n/** Espacios colapsados para comparar sin que un reindentado cuente como cambio real. */\nfunction normalizarParaComparar(texto: string): string {\n\treturn texto.replace(/\\s+/g, \" \").trim();\n}\n\nfunction construirPrompt(region: RegionDeReparacion, ruta: string, intentoPrevio?: string): string {\n\tconst previo = intentoPrevio\n\t\t? `\\n\\nINTENTO ANTERIOR (rechazado — o seguía roto, o era un simple calco de la referencia):\\n\\`\\`\\`\\n${intentoPrevio}\\n\\`\\`\\`\\n`\n\t\t: \"\";\n\treturn (\n\t\t`El fichero ${ruta} quedó con un error de sintaxis tras una edición. Tu tarea es arreglar SOLO ` +\n\t\t`la sintaxis, sin deshacer el cambio que se pretendía.\\n\\n` +\n\t\t`REFERENCIA (parsea bien; es el cambio pretendido con la rotura revertida — NO la copies tal cual, ` +\n\t\t`solo es para que veas qué había antes):\\n\\`\\`\\`\\n${region.textoReferencia}\\n\\`\\`\\`\\n\\n` +\n\t\t`ROTO (esto es lo que hay que arreglar, conservando su intención):\\n\\`\\`\\`\\n${region.textoRoto}\\n\\`\\`\\`\\n` +\n\t\t`${previo}\\n` +\n\t\t`Devuelve SOLO el bloque de código que sustituye la sección ROTO, ya arreglado. Sin explicaciones, sin ` +\n\t\t`numerar líneas, sin nada fuera del bloque.`\n\t);\n}\n\n/** Qué pasó al intentar reparar. Nunca colapsa \"no pude intentarlo\" con \"lo intenté y no valió\". */\nexport type ResultadoReparacion =\n\t| { estado: \"reparado\"; contenido: string; intentos: number }\n\t/** No había con qué preguntar (sin modelo) o la rotura no se pudo aislar/acotar. */\n\t| { estado: \"no-aplicable\" }\n\t/** Se preguntó al modelo pero ningún intento cumplió las dos condiciones de aceptación. */\n\t| { estado: \"rechazada\" };\n\n/**\n * Intenta reparar una edición que rompió el parseo, preguntándole a `completar`.\n *\n * `completar` devuelve `null` cuando no pudo completarse (sin modelo, sin\n * red, error de la API…): eso es \"no-aplicable\", nunca \"rechazada\" — una\n * reparación rechazada es una que SE INTENTÓ y no sirvió.\n */\nexport async function intentarReparar(\n\tinstantanea: { ruta: string; antes: string; despues: string },\n\tcompletar?: (prompt: string) => Promise<string | null>,\n): Promise<ResultadoReparacion> {\n\tif (!completar) return { estado: \"no-aplicable\" };\n\tconst region = calcularRegionDeReparacion(instantanea);\n\tif (!region) return { estado: \"no-aplicable\" };\n\n\tconst b = instantanea.despues.split(\"\\n\");\n\tconst referenciaNormalizada = normalizarParaComparar(region.textoReferencia);\n\n\tlet intentoPrevio: string | undefined;\n\tfor (let intento = 1; intento <= MAX_INTENTOS; intento++) {\n\t\tconst respuesta = await completar(construirPrompt(region, instantanea.ruta, intentoPrevio));\n\t\tif (respuesta === null) return { estado: intento === 1 ? \"no-aplicable\" : \"rechazada\" };\n\n\t\tconst candidato = quitarValla(respuesta);\n\t\tintentoPrevio = candidato;\n\n\t\t// La regla que evita que la \"reparación\" deshaga el trabajo del\n\t\t// usuario: un candidato que, sin espacios, es un calco de la\n\t\t// referencia es una reversión pura y se descarta aunque parseara.\n\t\tif (normalizarParaComparar(candidato) === referenciaNormalizada) continue;\n\n\t\tconst contenido = empalmarRegion(b, region, candidato);\n\t\tif (parsea(contenido, instantanea.ruta) === true) {\n\t\t\treturn { estado: \"reparado\", contenido, intentos: intento };\n\t\t}\n\t}\n\treturn { estado: \"rechazada\" };\n}\n"]}