@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,71 @@
1
+ /**
2
+ * Hashline — formato de edición anclado por hash de línea.
3
+ *
4
+ * Nuestro único formato de edición hoy (`edit`, en `core/tools/edit.ts`) casa
5
+ * `oldText` contra el contenido actual del fichero: si el texto no está
6
+ * literal, la edición falla con un error de "no encontrado". No hay forma de
7
+ * decir "quiero cambiar las líneas 10-12 tal como las vi", así que un hunk
8
+ * calculado sobre una versión del fichero que ya cambió por debajo (otro
9
+ * proceso, otra pestaña del agente, el usuario a mano) se puede colar sobre
10
+ * líneas que ya no son las que el hunk cree que son, con la única defensa de
11
+ * que `oldText` deje de encontrarse — y si el nuevo contenido de esas líneas
12
+ * es distinto pero de la misma LONGITUD y forma que el viejo `oldText`
13
+ * (variable renombrada, número cambiado), ni eso lo detiene.
14
+ *
15
+ * Hashline cierra ese hueco por construcción: el hunk lleva un hash del
16
+ * contenido exacto del rango que dice tocar, calculado sobre lo que el
17
+ * llamante VIO. `aplicarHashline` recalcula ese mismo hash sobre el fichero
18
+ * tal como está AHORA y rechaza el hunk si no coincide — sin tocar el
19
+ * fichero — en vez de intentar adivinar dónde se movió el texto. La idea es
20
+ * la de `@oh-my-pi/hashline` (paquete de referencia en
21
+ * `/Users/31017423z/auditoria-omp/oh-my-pi/packages/hashline`): anclar cada
22
+ * hunk a un hash de contenido y rechazar el que ya no cuadra. Lo que cambia
23
+ * aquí es el alcance: ellos anclan el FICHERO ENTERO con una gramática de
24
+ * varias operaciones (PUT/CUT/MV…) pensada para sustituir su tool de edición
25
+ * completa; esto ancla cada RANGO de líneas por separado, como una quinta
26
+ * opción de formato de edición, no un reemplazo del `edit` que ya existe.
27
+ */
28
+ /** Etiqueta de 8 hex del contenido exacto de las líneas `desde..hasta` (1-indexado, inclusive). */
29
+ export declare function etiquetaDeRango(lineas: readonly string[], desde: number, hasta: number): string;
30
+ /** Construye la cabecera `[ruta#tag]` para el rango `desde..hasta` del contenido actual. */
31
+ export declare function construirCabecera(ruta: string, contenido: string, desde: number, hasta: number): string;
32
+ export interface HunkHashline {
33
+ ruta: string;
34
+ tag: string;
35
+ /** 1-indexado, inclusive. */
36
+ desde: number;
37
+ hasta: number;
38
+ /** Líneas de sustitución, ya sin el `+` de cabecera. */
39
+ cuerpo: string[];
40
+ }
41
+ /** `{hunk}` si parseó, `{error}` si no — dos formas distintas, nunca un `null` que mezcle los dos motivos. */
42
+ export type ResultadoParseo = {
43
+ hunk: HunkHashline;
44
+ } | {
45
+ error: string;
46
+ };
47
+ /**
48
+ * Parsea un hunk hashline de tres partes: cabecera `[ruta#tag]`, línea de
49
+ * rango `A` o `A-B`, y cuerpo con cada línea de sustitución prefijada por
50
+ * `+` (una línea `+` sola es una línea en blanco).
51
+ */
52
+ export declare function parsearHunk(texto: string): ResultadoParseo;
53
+ export type ResultadoAplicar = {
54
+ ok: true;
55
+ contenido: string;
56
+ }
57
+ /** El hunk parseó pero su tag no corresponde a las líneas actuales, o el rango cae fuera del fichero: nada se toca. */
58
+ | {
59
+ ok: false;
60
+ motivo: string;
61
+ };
62
+ /**
63
+ * Aplica un hunk ya parseado sobre `contenidoActual`. Rechaza sin tocar nada
64
+ * si el tag no coincide con lo que hay AHORA en ese rango — esa es toda la
65
+ * garantía del formato: un hunk calculado sobre una versión vieja del
66
+ * fichero nunca se aplica en silencio sobre líneas que ya cambiaron.
67
+ */
68
+ export declare function aplicarHunk(contenidoActual: string, hunk: HunkHashline): ResultadoAplicar;
69
+ /** Atajo: parsea y aplica en un paso, contra el contenido actual del fichero que nombra el hunk. */
70
+ export declare function aplicarHashline(contenidoActual: string, textoHunk: string): ResultadoAplicar;
71
+ //# sourceMappingURL=hashline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashline.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/hashline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,oGAAmG;AACnG,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/F;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvG;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,0DAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,iHAA8G;AAC9G,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAKzE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAgC1D;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AACjC,yHAAuH;GACrH;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAqBzF;AAED,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAI5F","sourcesContent":["/**\n * Hashline — formato de edición anclado por hash de línea.\n *\n * Nuestro único formato de edición hoy (`edit`, en `core/tools/edit.ts`) casa\n * `oldText` contra el contenido actual del fichero: si el texto no está\n * literal, la edición falla con un error de \"no encontrado\". No hay forma de\n * decir \"quiero cambiar las líneas 10-12 tal como las vi\", así que un hunk\n * calculado sobre una versión del fichero que ya cambió por debajo (otro\n * proceso, otra pestaña del agente, el usuario a mano) se puede colar sobre\n * líneas que ya no son las que el hunk cree que son, con la única defensa de\n * que `oldText` deje de encontrarse — y si el nuevo contenido de esas líneas\n * es distinto pero de la misma LONGITUD y forma que el viejo `oldText`\n * (variable renombrada, número cambiado), ni eso lo detiene.\n *\n * Hashline cierra ese hueco por construcción: el hunk lleva un hash del\n * contenido exacto del rango que dice tocar, calculado sobre lo que el\n * llamante VIO. `aplicarHashline` recalcula ese mismo hash sobre el fichero\n * tal como está AHORA y rechaza el hunk si no coincide — sin tocar el\n * fichero — en vez de intentar adivinar dónde se movió el texto. La idea es\n * la de `@oh-my-pi/hashline` (paquete de referencia en\n * `/Users/31017423z/auditoria-omp/oh-my-pi/packages/hashline`): anclar cada\n * hunk a un hash de contenido y rechazar el que ya no cuadra. Lo que cambia\n * aquí es el alcance: ellos anclan el FICHERO ENTERO con una gramática de\n * varias operaciones (PUT/CUT/MV…) pensada para sustituir su tool de edición\n * completa; esto ancla cada RANGO de líneas por separado, como una quinta\n * opción de formato de edición, no un reemplazo del `edit` que ya existe.\n */\n\nimport { createHash } from \"node:crypto\";\n\n/** Etiqueta de 8 hex del contenido exacto de las líneas `desde..hasta` (1-indexado, inclusive). */\nexport function etiquetaDeRango(lineas: readonly string[], desde: number, hasta: number): string {\n\tconst texto = lineas.slice(desde - 1, hasta).join(\"\\n\");\n\treturn createHash(\"sha256\").update(texto).digest(\"hex\").slice(0, 8);\n}\n\n/** Construye la cabecera `[ruta#tag]` para el rango `desde..hasta` del contenido actual. */\nexport function construirCabecera(ruta: string, contenido: string, desde: number, hasta: number): string {\n\treturn `[${ruta}#${etiquetaDeRango(contenido.split(\"\\n\"), desde, hasta)}]`;\n}\n\nexport interface HunkHashline {\n\truta: string;\n\ttag: string;\n\t/** 1-indexado, inclusive. */\n\tdesde: number;\n\thasta: number;\n\t/** Líneas de sustitución, ya sin el `+` de cabecera. */\n\tcuerpo: string[];\n}\n\n/** `{hunk}` si parseó, `{error}` si no — dos formas distintas, nunca un `null` que mezcle los dos motivos. */\nexport type ResultadoParseo = { hunk: HunkHashline } | { error: string };\n\nconst RE_CABECERA = /^\\[(.+)#([0-9a-f]{8})\\]\\s*$/;\nconst RE_RANGO = /^(\\d+)(?:-(\\d+))?\\s*$/;\n\n/**\n * Parsea un hunk hashline de tres partes: cabecera `[ruta#tag]`, línea de\n * rango `A` o `A-B`, y cuerpo con cada línea de sustitución prefijada por\n * `+` (una línea `+` sola es una línea en blanco).\n */\nexport function parsearHunk(texto: string): ResultadoParseo {\n\tconst lineas = texto.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\t// Ignora líneas en blanco iniciales/finales: son ruido de quien compone el\n\t// hunk a mano, no parte del formato.\n\twhile (lineas.length > 0 && lineas[0].trim() === \"\") lineas.shift();\n\twhile (lineas.length > 0 && lineas.at(-1)?.trim() === \"\") lineas.pop();\n\n\tif (lineas.length < 2) return { error: \"hunk vacío: hace falta cabecera y línea de rango\" };\n\n\tconst cabecera = lineas[0].match(RE_CABECERA);\n\tif (!cabecera) return { error: `cabecera inválida: \"${lineas[0]}\" (se esperaba \"[ruta#8hex]\")` };\n\n\tconst rango = lineas[1].match(RE_RANGO);\n\tif (!rango) return { error: `rango inválido: \"${lineas[1]}\" (se esperaba \"A\" o \"A-B\")` };\n\tconst desde = Number(rango[1]);\n\tconst hasta = rango[2] !== undefined ? Number(rango[2]) : desde;\n\tif (desde < 1 || hasta < desde) return { error: `rango sin sentido: ${desde}-${hasta}` };\n\n\tconst cuerpo: string[] = [];\n\tfor (let i = 2; i < lineas.length; i++) {\n\t\tconst linea = lineas[i];\n\t\tif (linea === \"+\") {\n\t\t\tcuerpo.push(\"\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (!linea.startsWith(\"+\")) {\n\t\t\treturn { error: `línea de cuerpo sin \"+\": \"${linea}\"` };\n\t\t}\n\t\tcuerpo.push(linea.slice(1));\n\t}\n\n\treturn { hunk: { ruta: cabecera[1], tag: cabecera[2], desde, hasta, cuerpo } };\n}\n\nexport type ResultadoAplicar =\n\t| { ok: true; contenido: string }\n\t/** El hunk parseó pero su tag no corresponde a las líneas actuales, o el rango cae fuera del fichero: nada se toca. */\n\t| { ok: false; motivo: string };\n\n/**\n * Aplica un hunk ya parseado sobre `contenidoActual`. Rechaza sin tocar nada\n * si el tag no coincide con lo que hay AHORA en ese rango — esa es toda la\n * garantía del formato: un hunk calculado sobre una versión vieja del\n * fichero nunca se aplica en silencio sobre líneas que ya cambiaron.\n */\nexport function aplicarHunk(contenidoActual: string, hunk: HunkHashline): ResultadoAplicar {\n\tconst lineas = contenidoActual.split(\"\\n\");\n\tif (hunk.hasta > lineas.length) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tmotivo: `el rango ${hunk.desde}-${hunk.hasta} cae fuera del fichero (tiene ${lineas.length} líneas)`,\n\t\t};\n\t}\n\n\tconst tagActual = etiquetaDeRango(lineas, hunk.desde, hunk.hasta);\n\tif (tagActual !== hunk.tag) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tmotivo:\n\t\t\t\t`tag obsoleto: el hunk trae #${hunk.tag} para las líneas ${hunk.desde}-${hunk.hasta} pero ahora mismo ` +\n\t\t\t\t`esas líneas etiquetan #${tagActual} — el fichero cambió por debajo desde que se calculó este hunk`,\n\t\t};\n\t}\n\n\tconst resultado = [...lineas.slice(0, hunk.desde - 1), ...hunk.cuerpo, ...lineas.slice(hunk.hasta)].join(\"\\n\");\n\treturn { ok: true, contenido: resultado };\n}\n\n/** Atajo: parsea y aplica en un paso, contra el contenido actual del fichero que nombra el hunk. */\nexport function aplicarHashline(contenidoActual: string, textoHunk: string): ResultadoAplicar {\n\tconst parseado = parsearHunk(textoHunk);\n\tif (\"error\" in parseado) return { ok: false, motivo: parseado.error };\n\treturn aplicarHunk(contenidoActual, parseado.hunk);\n}\n"]}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Hashline — formato de edición anclado por hash de línea.
3
+ *
4
+ * Nuestro único formato de edición hoy (`edit`, en `core/tools/edit.ts`) casa
5
+ * `oldText` contra el contenido actual del fichero: si el texto no está
6
+ * literal, la edición falla con un error de "no encontrado". No hay forma de
7
+ * decir "quiero cambiar las líneas 10-12 tal como las vi", así que un hunk
8
+ * calculado sobre una versión del fichero que ya cambió por debajo (otro
9
+ * proceso, otra pestaña del agente, el usuario a mano) se puede colar sobre
10
+ * líneas que ya no son las que el hunk cree que son, con la única defensa de
11
+ * que `oldText` deje de encontrarse — y si el nuevo contenido de esas líneas
12
+ * es distinto pero de la misma LONGITUD y forma que el viejo `oldText`
13
+ * (variable renombrada, número cambiado), ni eso lo detiene.
14
+ *
15
+ * Hashline cierra ese hueco por construcción: el hunk lleva un hash del
16
+ * contenido exacto del rango que dice tocar, calculado sobre lo que el
17
+ * llamante VIO. `aplicarHashline` recalcula ese mismo hash sobre el fichero
18
+ * tal como está AHORA y rechaza el hunk si no coincide — sin tocar el
19
+ * fichero — en vez de intentar adivinar dónde se movió el texto. La idea es
20
+ * la de `@oh-my-pi/hashline` (paquete de referencia en
21
+ * `/Users/31017423z/auditoria-omp/oh-my-pi/packages/hashline`): anclar cada
22
+ * hunk a un hash de contenido y rechazar el que ya no cuadra. Lo que cambia
23
+ * aquí es el alcance: ellos anclan el FICHERO ENTERO con una gramática de
24
+ * varias operaciones (PUT/CUT/MV…) pensada para sustituir su tool de edición
25
+ * completa; esto ancla cada RANGO de líneas por separado, como una quinta
26
+ * opción de formato de edición, no un reemplazo del `edit` que ya existe.
27
+ */
28
+ import { createHash } from "node:crypto";
29
+ /** Etiqueta de 8 hex del contenido exacto de las líneas `desde..hasta` (1-indexado, inclusive). */
30
+ export function etiquetaDeRango(lineas, desde, hasta) {
31
+ const texto = lineas.slice(desde - 1, hasta).join("\n");
32
+ return createHash("sha256").update(texto).digest("hex").slice(0, 8);
33
+ }
34
+ /** Construye la cabecera `[ruta#tag]` para el rango `desde..hasta` del contenido actual. */
35
+ export function construirCabecera(ruta, contenido, desde, hasta) {
36
+ return `[${ruta}#${etiquetaDeRango(contenido.split("\n"), desde, hasta)}]`;
37
+ }
38
+ const RE_CABECERA = /^\[(.+)#([0-9a-f]{8})\]\s*$/;
39
+ const RE_RANGO = /^(\d+)(?:-(\d+))?\s*$/;
40
+ /**
41
+ * Parsea un hunk hashline de tres partes: cabecera `[ruta#tag]`, línea de
42
+ * rango `A` o `A-B`, y cuerpo con cada línea de sustitución prefijada por
43
+ * `+` (una línea `+` sola es una línea en blanco).
44
+ */
45
+ export function parsearHunk(texto) {
46
+ const lineas = texto.replace(/\r\n/g, "\n").split("\n");
47
+ // Ignora líneas en blanco iniciales/finales: son ruido de quien compone el
48
+ // hunk a mano, no parte del formato.
49
+ while (lineas.length > 0 && lineas[0].trim() === "")
50
+ lineas.shift();
51
+ while (lineas.length > 0 && lineas.at(-1)?.trim() === "")
52
+ lineas.pop();
53
+ if (lineas.length < 2)
54
+ return { error: "hunk vacío: hace falta cabecera y línea de rango" };
55
+ const cabecera = lineas[0].match(RE_CABECERA);
56
+ if (!cabecera)
57
+ return { error: `cabecera inválida: "${lineas[0]}" (se esperaba "[ruta#8hex]")` };
58
+ const rango = lineas[1].match(RE_RANGO);
59
+ if (!rango)
60
+ return { error: `rango inválido: "${lineas[1]}" (se esperaba "A" o "A-B")` };
61
+ const desde = Number(rango[1]);
62
+ const hasta = rango[2] !== undefined ? Number(rango[2]) : desde;
63
+ if (desde < 1 || hasta < desde)
64
+ return { error: `rango sin sentido: ${desde}-${hasta}` };
65
+ const cuerpo = [];
66
+ for (let i = 2; i < lineas.length; i++) {
67
+ const linea = lineas[i];
68
+ if (linea === "+") {
69
+ cuerpo.push("");
70
+ continue;
71
+ }
72
+ if (!linea.startsWith("+")) {
73
+ return { error: `línea de cuerpo sin "+": "${linea}"` };
74
+ }
75
+ cuerpo.push(linea.slice(1));
76
+ }
77
+ return { hunk: { ruta: cabecera[1], tag: cabecera[2], desde, hasta, cuerpo } };
78
+ }
79
+ /**
80
+ * Aplica un hunk ya parseado sobre `contenidoActual`. Rechaza sin tocar nada
81
+ * si el tag no coincide con lo que hay AHORA en ese rango — esa es toda la
82
+ * garantía del formato: un hunk calculado sobre una versión vieja del
83
+ * fichero nunca se aplica en silencio sobre líneas que ya cambiaron.
84
+ */
85
+ export function aplicarHunk(contenidoActual, hunk) {
86
+ const lineas = contenidoActual.split("\n");
87
+ if (hunk.hasta > lineas.length) {
88
+ return {
89
+ ok: false,
90
+ motivo: `el rango ${hunk.desde}-${hunk.hasta} cae fuera del fichero (tiene ${lineas.length} líneas)`,
91
+ };
92
+ }
93
+ const tagActual = etiquetaDeRango(lineas, hunk.desde, hunk.hasta);
94
+ if (tagActual !== hunk.tag) {
95
+ return {
96
+ ok: false,
97
+ motivo: `tag obsoleto: el hunk trae #${hunk.tag} para las líneas ${hunk.desde}-${hunk.hasta} pero ahora mismo ` +
98
+ `esas líneas etiquetan #${tagActual} — el fichero cambió por debajo desde que se calculó este hunk`,
99
+ };
100
+ }
101
+ const resultado = [...lineas.slice(0, hunk.desde - 1), ...hunk.cuerpo, ...lineas.slice(hunk.hasta)].join("\n");
102
+ return { ok: true, contenido: resultado };
103
+ }
104
+ /** Atajo: parsea y aplica en un paso, contra el contenido actual del fichero que nombra el hunk. */
105
+ export function aplicarHashline(contenidoActual, textoHunk) {
106
+ const parseado = parsearHunk(textoHunk);
107
+ if ("error" in parseado)
108
+ return { ok: false, motivo: parseado.error };
109
+ return aplicarHunk(contenidoActual, parseado.hunk);
110
+ }
111
+ //# sourceMappingURL=hashline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashline.js","sourceRoot":"","sources":["../../../src/core/edicion/hashline.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hashline — formato de edición anclado por hash de línea.\n *\n * Nuestro único formato de edición hoy (`edit`, en `core/tools/edit.ts`) casa\n * `oldText` contra el contenido actual del fichero: si el texto no está\n * literal, la edición falla con un error de \"no encontrado\". No hay forma de\n * decir \"quiero cambiar las líneas 10-12 tal como las vi\", así que un hunk\n * calculado sobre una versión del fichero que ya cambió por debajo (otro\n * proceso, otra pestaña del agente, el usuario a mano) se puede colar sobre\n * líneas que ya no son las que el hunk cree que son, con la única defensa de\n * que `oldText` deje de encontrarse — y si el nuevo contenido de esas líneas\n * es distinto pero de la misma LONGITUD y forma que el viejo `oldText`\n * (variable renombrada, número cambiado), ni eso lo detiene.\n *\n * Hashline cierra ese hueco por construcción: el hunk lleva un hash del\n * contenido exacto del rango que dice tocar, calculado sobre lo que el\n * llamante VIO. `aplicarHashline` recalcula ese mismo hash sobre el fichero\n * tal como está AHORA y rechaza el hunk si no coincide — sin tocar el\n * fichero — en vez de intentar adivinar dónde se movió el texto. La idea es\n * la de `@oh-my-pi/hashline` (paquete de referencia en\n * `/Users/31017423z/auditoria-omp/oh-my-pi/packages/hashline`): anclar cada\n * hunk a un hash de contenido y rechazar el que ya no cuadra. Lo que cambia\n * aquí es el alcance: ellos anclan el FICHERO ENTERO con una gramática de\n * varias operaciones (PUT/CUT/MV…) pensada para sustituir su tool de edición\n * completa; esto ancla cada RANGO de líneas por separado, como una quinta\n * opción de formato de edición, no un reemplazo del `edit` que ya existe.\n */\n\nimport { createHash } from \"node:crypto\";\n\n/** Etiqueta de 8 hex del contenido exacto de las líneas `desde..hasta` (1-indexado, inclusive). */\nexport function etiquetaDeRango(lineas: readonly string[], desde: number, hasta: number): string {\n\tconst texto = lineas.slice(desde - 1, hasta).join(\"\\n\");\n\treturn createHash(\"sha256\").update(texto).digest(\"hex\").slice(0, 8);\n}\n\n/** Construye la cabecera `[ruta#tag]` para el rango `desde..hasta` del contenido actual. */\nexport function construirCabecera(ruta: string, contenido: string, desde: number, hasta: number): string {\n\treturn `[${ruta}#${etiquetaDeRango(contenido.split(\"\\n\"), desde, hasta)}]`;\n}\n\nexport interface HunkHashline {\n\truta: string;\n\ttag: string;\n\t/** 1-indexado, inclusive. */\n\tdesde: number;\n\thasta: number;\n\t/** Líneas de sustitución, ya sin el `+` de cabecera. */\n\tcuerpo: string[];\n}\n\n/** `{hunk}` si parseó, `{error}` si no — dos formas distintas, nunca un `null` que mezcle los dos motivos. */\nexport type ResultadoParseo = { hunk: HunkHashline } | { error: string };\n\nconst RE_CABECERA = /^\\[(.+)#([0-9a-f]{8})\\]\\s*$/;\nconst RE_RANGO = /^(\\d+)(?:-(\\d+))?\\s*$/;\n\n/**\n * Parsea un hunk hashline de tres partes: cabecera `[ruta#tag]`, línea de\n * rango `A` o `A-B`, y cuerpo con cada línea de sustitución prefijada por\n * `+` (una línea `+` sola es una línea en blanco).\n */\nexport function parsearHunk(texto: string): ResultadoParseo {\n\tconst lineas = texto.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\t// Ignora líneas en blanco iniciales/finales: son ruido de quien compone el\n\t// hunk a mano, no parte del formato.\n\twhile (lineas.length > 0 && lineas[0].trim() === \"\") lineas.shift();\n\twhile (lineas.length > 0 && lineas.at(-1)?.trim() === \"\") lineas.pop();\n\n\tif (lineas.length < 2) return { error: \"hunk vacío: hace falta cabecera y línea de rango\" };\n\n\tconst cabecera = lineas[0].match(RE_CABECERA);\n\tif (!cabecera) return { error: `cabecera inválida: \"${lineas[0]}\" (se esperaba \"[ruta#8hex]\")` };\n\n\tconst rango = lineas[1].match(RE_RANGO);\n\tif (!rango) return { error: `rango inválido: \"${lineas[1]}\" (se esperaba \"A\" o \"A-B\")` };\n\tconst desde = Number(rango[1]);\n\tconst hasta = rango[2] !== undefined ? Number(rango[2]) : desde;\n\tif (desde < 1 || hasta < desde) return { error: `rango sin sentido: ${desde}-${hasta}` };\n\n\tconst cuerpo: string[] = [];\n\tfor (let i = 2; i < lineas.length; i++) {\n\t\tconst linea = lineas[i];\n\t\tif (linea === \"+\") {\n\t\t\tcuerpo.push(\"\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (!linea.startsWith(\"+\")) {\n\t\t\treturn { error: `línea de cuerpo sin \"+\": \"${linea}\"` };\n\t\t}\n\t\tcuerpo.push(linea.slice(1));\n\t}\n\n\treturn { hunk: { ruta: cabecera[1], tag: cabecera[2], desde, hasta, cuerpo } };\n}\n\nexport type ResultadoAplicar =\n\t| { ok: true; contenido: string }\n\t/** El hunk parseó pero su tag no corresponde a las líneas actuales, o el rango cae fuera del fichero: nada se toca. */\n\t| { ok: false; motivo: string };\n\n/**\n * Aplica un hunk ya parseado sobre `contenidoActual`. Rechaza sin tocar nada\n * si el tag no coincide con lo que hay AHORA en ese rango — esa es toda la\n * garantía del formato: un hunk calculado sobre una versión vieja del\n * fichero nunca se aplica en silencio sobre líneas que ya cambiaron.\n */\nexport function aplicarHunk(contenidoActual: string, hunk: HunkHashline): ResultadoAplicar {\n\tconst lineas = contenidoActual.split(\"\\n\");\n\tif (hunk.hasta > lineas.length) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tmotivo: `el rango ${hunk.desde}-${hunk.hasta} cae fuera del fichero (tiene ${lineas.length} líneas)`,\n\t\t};\n\t}\n\n\tconst tagActual = etiquetaDeRango(lineas, hunk.desde, hunk.hasta);\n\tif (tagActual !== hunk.tag) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tmotivo:\n\t\t\t\t`tag obsoleto: el hunk trae #${hunk.tag} para las líneas ${hunk.desde}-${hunk.hasta} pero ahora mismo ` +\n\t\t\t\t`esas líneas etiquetan #${tagActual} — el fichero cambió por debajo desde que se calculó este hunk`,\n\t\t};\n\t}\n\n\tconst resultado = [...lineas.slice(0, hunk.desde - 1), ...hunk.cuerpo, ...lineas.slice(hunk.hasta)].join(\"\\n\");\n\treturn { ok: true, contenido: resultado };\n}\n\n/** Atajo: parsea y aplica en un paso, contra el contenido actual del fichero que nombra el hunk. */\nexport function aplicarHashline(contenidoActual: string, textoHunk: string): ResultadoAplicar {\n\tconst parseado = parsearHunk(textoHunk);\n\tif (\"error\" in parseado) return { ok: false, motivo: parseado.error };\n\treturn aplicarHunk(contenidoActual, parseado.hunk);\n}\n"]}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Casar una edición cuando el modelo ELIDE el medio con `...`.
3
+ *
4
+ * EL CASO. El modelo quiere reescribir una función de treinta líneas y cambia
5
+ * dos. Retipear las otras veintiocho es caro y, sobre todo, es donde se
6
+ * equivoca: cada línea retecleada es una oportunidad de meter un espacio de
7
+ * más. Así que hace lo natural y nombra los extremos:
8
+ *
9
+ * function total(items: Item[]) {
10
+ * ...
11
+ * }
12
+ *
13
+ * Hasta ahora eso era un rechazo seguro —«el texto no coincide exactamente»— y
14
+ * costaba un turno entero releyendo el fichero para volver a escribir a ciegas
15
+ * lo que ya estaba bien.
16
+ *
17
+ * POR QUÉ ESTO ES MÁS PELIGROSO QUE LOS DEMÁS CAMINOS, y por qué las anclas se
18
+ * comparan con IGUALDAD EXACTA de línea. Este camino se traga líneas que el
19
+ * modelo NO ha nombrado: todo lo que hay entre las dos anclas desaparece. Un
20
+ * fallo aquí no deja un espacio mal, borra código. Con esa apuesta encima de la
21
+ * mesa, la comparación laxa no se paga: `casarIgnorandoSangria` puede permitirse
22
+ * recortar la sangría porque el bloque que sustituye está enteramente escrito
23
+ * por el modelo; aquí no.
24
+ *
25
+ * Y hay una razón medida, no estética. Sobre el fichero de siete líneas del
26
+ * banco, el ancla de cierre es `}` y aparece DOS veces si se comparan las líneas
27
+ * recortadas: la del `for` interior (` }`) y la de la función (`}`). Con
28
+ * igualdad exacta hay una sola, y es la correcta. La comparación laxa habría
29
+ * convertido este caso en una moneda al aire — o en un rechazo, si se es
30
+ * honesto con la ambigüedad.
31
+ *
32
+ * ALCANCE MEDIDO, para que nadie se lleve una sorpresa. Con la regla de ancla
33
+ * única, sobre las 1173 funciones de nivel superior de `src/core/` y el patrón
34
+ * `cabecera` + `...` + `}`, casan 164 (14%): en la práctica solo la ÚLTIMA
35
+ * función de cada fichero, porque el `}` de la columna cero de cualquier función
36
+ * posterior vuelve ambigua el ancla de cierre. Es el lado seguro de la moneda
37
+ * —rechazar cuesta un turno y tragarse líneas que nadie nombró cuesta código—,
38
+ * pero conviene no confundir «recuperado» con «recuperado siempre»: el resto
39
+ * sigue costando el turno. La carga `hueco-cierre-no-unico` lo mide, para que
40
+ * quien lo cambie tenga que cambiar una cifra y no una intuición.
41
+ *
42
+ * TRES INVARIANTES:
43
+ *
44
+ * 1. **Anclas a los dos lados.** Un `...` al principio deja el hueco sin fondo:
45
+ * el reemplazo se comería el fichero desde su inicio. Cae por el invariante 2
46
+ * y no por una guarda propia — la guarda propia estaba escrita y no se podía
47
+ * poner roja, así que se quitó; el detalle está en el cuerpo.
48
+ * 2. **Cada ancla en un solo sitio.** La primera, única en todo el fichero; las
49
+ * siguientes, únicas en lo que queda por detrás de la anterior. Dos
50
+ * posiciones es una moneda al aire y se rechaza.
51
+ * 3. **El `newText` no puede llevar elisión.** Si el modelo elide también en el
52
+ * reemplazo, escribirlo dejaría un `...` literal dentro del código. Ese es el
53
+ * fallo que se lee como éxito: la edición «entra» y el fichero no compila.
54
+ */
55
+ import { type CasadoPorSangria } from "./sangria.ts";
56
+ /**
57
+ * Casa `oldText` contra `contenido` cuando el patrón elide el medio con `...`.
58
+ *
59
+ * Devuelve `null` cuando no hay elisión, cuando alguna ancla falta, cuando
60
+ * alguna casa en más de un sitio, o cuando el reemplazo también elide. `null`
61
+ * significa «no puedo», nunca «no hay»: quien llama sigue con su propio error.
62
+ */
63
+ export declare function casarHuecoElidido(contenido: string, oldText: string, newText: string): CasadoPorSangria | null;
64
+ //# sourceMappingURL=hueco.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hueco.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/hueco.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,EAAE,KAAK,gBAAgB,EAAmC,MAAM,cAAc,CAAC;AAiBtF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAiF9G","sourcesContent":["/**\n * Casar una edición cuando el modelo ELIDE el medio con `...`.\n *\n * EL CASO. El modelo quiere reescribir una función de treinta líneas y cambia\n * dos. Retipear las otras veintiocho es caro y, sobre todo, es donde se\n * equivoca: cada línea retecleada es una oportunidad de meter un espacio de\n * más. Así que hace lo natural y nombra los extremos:\n *\n * function total(items: Item[]) {\n * ...\n * }\n *\n * Hasta ahora eso era un rechazo seguro —«el texto no coincide exactamente»— y\n * costaba un turno entero releyendo el fichero para volver a escribir a ciegas\n * lo que ya estaba bien.\n *\n * POR QUÉ ESTO ES MÁS PELIGROSO QUE LOS DEMÁS CAMINOS, y por qué las anclas se\n * comparan con IGUALDAD EXACTA de línea. Este camino se traga líneas que el\n * modelo NO ha nombrado: todo lo que hay entre las dos anclas desaparece. Un\n * fallo aquí no deja un espacio mal, borra código. Con esa apuesta encima de la\n * mesa, la comparación laxa no se paga: `casarIgnorandoSangria` puede permitirse\n * recortar la sangría porque el bloque que sustituye está enteramente escrito\n * por el modelo; aquí no.\n *\n * Y hay una razón medida, no estética. Sobre el fichero de siete líneas del\n * banco, el ancla de cierre es `}` y aparece DOS veces si se comparan las líneas\n * recortadas: la del `for` interior (` }`) y la de la función (`}`). Con\n * igualdad exacta hay una sola, y es la correcta. La comparación laxa habría\n * convertido este caso en una moneda al aire — o en un rechazo, si se es\n * honesto con la ambigüedad.\n *\n * ALCANCE MEDIDO, para que nadie se lleve una sorpresa. Con la regla de ancla\n * única, sobre las 1173 funciones de nivel superior de `src/core/` y el patrón\n * `cabecera` + `...` + `}`, casan 164 (14%): en la práctica solo la ÚLTIMA\n * función de cada fichero, porque el `}` de la columna cero de cualquier función\n * posterior vuelve ambigua el ancla de cierre. Es el lado seguro de la moneda\n * —rechazar cuesta un turno y tragarse líneas que nadie nombró cuesta código—,\n * pero conviene no confundir «recuperado» con «recuperado siempre»: el resto\n * sigue costando el turno. La carga `hueco-cierre-no-unico` lo mide, para que\n * quien lo cambie tenga que cambiar una cifra y no una intuición.\n *\n * TRES INVARIANTES:\n *\n * 1. **Anclas a los dos lados.** Un `...` al principio deja el hueco sin fondo:\n * el reemplazo se comería el fichero desde su inicio. Cae por el invariante 2\n * y no por una guarda propia — la guarda propia estaba escrita y no se podía\n * poner roja, así que se quitó; el detalle está en el cuerpo.\n * 2. **Cada ancla en un solo sitio.** La primera, única en todo el fichero; las\n * siguientes, únicas en lo que queda por detrás de la anterior. Dos\n * posiciones es una moneda al aire y se rechaza.\n * 3. **El `newText` no puede llevar elisión.** Si el modelo elide también en el\n * reemplazo, escribirlo dejaría un `...` literal dentro del código. Ese es el\n * fallo que se lee como éxito: la edición «entra» y el fichero no compila.\n */\n\nimport { type CasadoPorSangria, reSangrarComoElBloque, unidadDe } from \"./sangria.ts\";\n\n/**\n * Una línea que es SOLO una elisión, con el comentario que los modelos le\n * cuelgan delante (`// ...`, `# ...`, `-- ...`, o abierto y cerrado de bloque) o\n * sin él.\n *\n * Tiene que ser la línea entera. `...props,` es código real y no casa, que es\n * justo lo que se quiere: la elisión es un gesto deliberado del modelo y ocupa\n * su propia línea.\n */\nconst ELISION = /^\\s*(?:\\/\\/|#|--|\\/\\*)?\\s*(?:\\.{3}|…)\\s*(?:\\*\\/)?\\s*$/;\n\nfunction esLineaDeElision(linea: string): boolean {\n\treturn ELISION.test(linea);\n}\n\n/**\n * Casa `oldText` contra `contenido` cuando el patrón elide el medio con `...`.\n *\n * Devuelve `null` cuando no hay elisión, cuando alguna ancla falta, cuando\n * alguna casa en más de un sitio, o cuando el reemplazo también elide. `null`\n * significa «no puedo», nunca «no hay»: quien llama sigue con su propio error.\n */\nexport function casarHuecoElidido(contenido: string, oldText: string, newText: string): CasadoPorSangria | null {\n\tconst patron = oldText.split(\"\\n\");\n\t// Líneas vacías de los extremos: ruido de copiado, igual que en la sangría.\n\twhile (patron.length > 0 && patron[0].trim() === \"\") patron.shift();\n\twhile (patron.length > 0 && patron[patron.length - 1].trim() === \"\") patron.pop();\n\tif (!patron.some(esLineaDeElision)) return null;\n\n\t// Invariante 3: si el reemplazo elide, no hay nada que escribir sin inventar.\n\tif (newText.split(\"\\n\").some(esLineaDeElision)) return null;\n\n\t// El patrón partido por sus elisiones. Un trozo vacío significa una elisión\n\t// pegada a un extremo o a otra elisión — el hueco sin fondo del invariante 1.\n\t//\n\t// Aquí había una guarda explícita contra los trozos vacíos y la QUITÉ, porque\n\t// no se podía poner roja: la rompí a propósito y la puerta siguió en verde.\n\t// La razón es que el invariante 2 ya la cubre, y se demuestra: un ancla vacía\n\t// casa en TODAS las posiciones desde `desde`, o sea `lineas.length - desde + 1`\n\t// de ellas. Para una elisión delantera `desde` es 0 y eso son al menos dos\n\t// posiciones en cualquier fichero, luego «una sola posición» la rechaza\n\t// siempre. Una guarda que no se puede poner roja es una invariante declarada y\n\t// no comprobada, que es peor que no declararla.\n\tconst anclas: string[][] = [[]];\n\tfor (const linea of patron) {\n\t\tif (esLineaDeElision(linea)) anclas.push([]);\n\t\telse anclas[anclas.length - 1].push(linea);\n\t}\n\n\tconst lineas = contenido.split(\"\\n\");\n\n\t// Invariante 2: cada ancla en un solo sitio, y por detrás de la anterior.\n\tlet desde = 0;\n\tlet primeraLinea = -1;\n\tlet ultimaLinea = -1;\n\tfor (const ancla of anclas) {\n\t\tconst posiciones: number[] = [];\n\t\tfor (let i = desde; i + ancla.length <= lineas.length; i++) {\n\t\t\tlet casa = true;\n\t\t\tfor (let j = 0; j < ancla.length; j++) {\n\t\t\t\tif (lineas[i + j] !== ancla[j]) {\n\t\t\t\t\tcasa = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (casa) posiciones.push(i);\n\t\t}\n\t\tif (posiciones.length !== 1) return null;\n\t\tif (primeraLinea === -1) primeraLinea = posiciones[0];\n\t\tultimaLinea = posiciones[0] + ancla.length - 1;\n\t\tdesde = ultimaLinea + 1;\n\t}\n\n\t// Desplazamientos en el contenido original: hay que contar los saltos.\n\tlet indice = 0;\n\tfor (let i = 0; i < primeraLinea; i++) indice += lineas[i].length + 1;\n\tlet longitud = 0;\n\tfor (let i = primeraLinea; i <= ultimaLinea; i++) longitud += lineas[i].length + 1;\n\tlongitud -= 1;\n\n\t// El CARÁCTER de sangría sale del fichero, igual que en `casarIgnorandoSangria`.\n\t//\n\t// Aquí se escribía el `newText` tal cual, y eso rompía en este camino el\n\t// invariante 2 del módulo de al lado. Medido con la carga `hueco-elidido`: el\n\t// fichero se sangra con cuatro espacios, el modelo elide y manda\n\t// `\\treturn 0;`, y entraba un TABULADOR en un fichero de espacios. Es una de\n\t// las dos formas exactas en las que corrompe oh-my-pi —«aplica y deja la\n\t// sangría mal»—, y el banco la daba por correcta. En TypeScript es cosmético;\n\t// en Python es un error de sintaxis, o peor, una línea que se sale del bloque\n\t// `if` sin romper nada.\n\t//\n\t// Se re-sangra SOLO si el carácter no coincide, y por qué: cuando el modelo ya\n\t// usa el del fichero, reescribir la sangría de todas sus líneas tocaría bytes\n\t// que nadie ha pedido tocar — el interior de una plantilla multilínea es\n\t// contenido, no estructura. Con el carácter equivocado no hay elección: esas\n\t// líneas ya están mal.\n\tconst bloque = lineas.slice(primeraLinea, ultimaLinea + 1);\n\tconst nuevas = newText.split(\"\\n\");\n\tconst textoNuevo =\n\t\tunidadDe(bloque).caracter === unidadDe(nuevas).caracter\n\t\t\t? newText\n\t\t\t: reSangrarComoElBloque(nuevas, bloque).join(\"\\n\");\n\treturn { indice, longitud, textoNuevo };\n}\n"]}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Casar una edición cuando el modelo ELIDE el medio con `...`.
3
+ *
4
+ * EL CASO. El modelo quiere reescribir una función de treinta líneas y cambia
5
+ * dos. Retipear las otras veintiocho es caro y, sobre todo, es donde se
6
+ * equivoca: cada línea retecleada es una oportunidad de meter un espacio de
7
+ * más. Así que hace lo natural y nombra los extremos:
8
+ *
9
+ * function total(items: Item[]) {
10
+ * ...
11
+ * }
12
+ *
13
+ * Hasta ahora eso era un rechazo seguro —«el texto no coincide exactamente»— y
14
+ * costaba un turno entero releyendo el fichero para volver a escribir a ciegas
15
+ * lo que ya estaba bien.
16
+ *
17
+ * POR QUÉ ESTO ES MÁS PELIGROSO QUE LOS DEMÁS CAMINOS, y por qué las anclas se
18
+ * comparan con IGUALDAD EXACTA de línea. Este camino se traga líneas que el
19
+ * modelo NO ha nombrado: todo lo que hay entre las dos anclas desaparece. Un
20
+ * fallo aquí no deja un espacio mal, borra código. Con esa apuesta encima de la
21
+ * mesa, la comparación laxa no se paga: `casarIgnorandoSangria` puede permitirse
22
+ * recortar la sangría porque el bloque que sustituye está enteramente escrito
23
+ * por el modelo; aquí no.
24
+ *
25
+ * Y hay una razón medida, no estética. Sobre el fichero de siete líneas del
26
+ * banco, el ancla de cierre es `}` y aparece DOS veces si se comparan las líneas
27
+ * recortadas: la del `for` interior (` }`) y la de la función (`}`). Con
28
+ * igualdad exacta hay una sola, y es la correcta. La comparación laxa habría
29
+ * convertido este caso en una moneda al aire — o en un rechazo, si se es
30
+ * honesto con la ambigüedad.
31
+ *
32
+ * ALCANCE MEDIDO, para que nadie se lleve una sorpresa. Con la regla de ancla
33
+ * única, sobre las 1173 funciones de nivel superior de `src/core/` y el patrón
34
+ * `cabecera` + `...` + `}`, casan 164 (14%): en la práctica solo la ÚLTIMA
35
+ * función de cada fichero, porque el `}` de la columna cero de cualquier función
36
+ * posterior vuelve ambigua el ancla de cierre. Es el lado seguro de la moneda
37
+ * —rechazar cuesta un turno y tragarse líneas que nadie nombró cuesta código—,
38
+ * pero conviene no confundir «recuperado» con «recuperado siempre»: el resto
39
+ * sigue costando el turno. La carga `hueco-cierre-no-unico` lo mide, para que
40
+ * quien lo cambie tenga que cambiar una cifra y no una intuición.
41
+ *
42
+ * TRES INVARIANTES:
43
+ *
44
+ * 1. **Anclas a los dos lados.** Un `...` al principio deja el hueco sin fondo:
45
+ * el reemplazo se comería el fichero desde su inicio. Cae por el invariante 2
46
+ * y no por una guarda propia — la guarda propia estaba escrita y no se podía
47
+ * poner roja, así que se quitó; el detalle está en el cuerpo.
48
+ * 2. **Cada ancla en un solo sitio.** La primera, única en todo el fichero; las
49
+ * siguientes, únicas en lo que queda por detrás de la anterior. Dos
50
+ * posiciones es una moneda al aire y se rechaza.
51
+ * 3. **El `newText` no puede llevar elisión.** Si el modelo elide también en el
52
+ * reemplazo, escribirlo dejaría un `...` literal dentro del código. Ese es el
53
+ * fallo que se lee como éxito: la edición «entra» y el fichero no compila.
54
+ */
55
+ import { reSangrarComoElBloque, unidadDe } from "./sangria.js";
56
+ /**
57
+ * Una línea que es SOLO una elisión, con el comentario que los modelos le
58
+ * cuelgan delante (`// ...`, `# ...`, `-- ...`, o abierto y cerrado de bloque) o
59
+ * sin él.
60
+ *
61
+ * Tiene que ser la línea entera. `...props,` es código real y no casa, que es
62
+ * justo lo que se quiere: la elisión es un gesto deliberado del modelo y ocupa
63
+ * su propia línea.
64
+ */
65
+ const ELISION = /^\s*(?:\/\/|#|--|\/\*)?\s*(?:\.{3}|…)\s*(?:\*\/)?\s*$/;
66
+ function esLineaDeElision(linea) {
67
+ return ELISION.test(linea);
68
+ }
69
+ /**
70
+ * Casa `oldText` contra `contenido` cuando el patrón elide el medio con `...`.
71
+ *
72
+ * Devuelve `null` cuando no hay elisión, cuando alguna ancla falta, cuando
73
+ * alguna casa en más de un sitio, o cuando el reemplazo también elide. `null`
74
+ * significa «no puedo», nunca «no hay»: quien llama sigue con su propio error.
75
+ */
76
+ export function casarHuecoElidido(contenido, oldText, newText) {
77
+ const patron = oldText.split("\n");
78
+ // Líneas vacías de los extremos: ruido de copiado, igual que en la sangría.
79
+ while (patron.length > 0 && patron[0].trim() === "")
80
+ patron.shift();
81
+ while (patron.length > 0 && patron[patron.length - 1].trim() === "")
82
+ patron.pop();
83
+ if (!patron.some(esLineaDeElision))
84
+ return null;
85
+ // Invariante 3: si el reemplazo elide, no hay nada que escribir sin inventar.
86
+ if (newText.split("\n").some(esLineaDeElision))
87
+ return null;
88
+ // El patrón partido por sus elisiones. Un trozo vacío significa una elisión
89
+ // pegada a un extremo o a otra elisión — el hueco sin fondo del invariante 1.
90
+ //
91
+ // Aquí había una guarda explícita contra los trozos vacíos y la QUITÉ, porque
92
+ // no se podía poner roja: la rompí a propósito y la puerta siguió en verde.
93
+ // La razón es que el invariante 2 ya la cubre, y se demuestra: un ancla vacía
94
+ // casa en TODAS las posiciones desde `desde`, o sea `lineas.length - desde + 1`
95
+ // de ellas. Para una elisión delantera `desde` es 0 y eso son al menos dos
96
+ // posiciones en cualquier fichero, luego «una sola posición» la rechaza
97
+ // siempre. Una guarda que no se puede poner roja es una invariante declarada y
98
+ // no comprobada, que es peor que no declararla.
99
+ const anclas = [[]];
100
+ for (const linea of patron) {
101
+ if (esLineaDeElision(linea))
102
+ anclas.push([]);
103
+ else
104
+ anclas[anclas.length - 1].push(linea);
105
+ }
106
+ const lineas = contenido.split("\n");
107
+ // Invariante 2: cada ancla en un solo sitio, y por detrás de la anterior.
108
+ let desde = 0;
109
+ let primeraLinea = -1;
110
+ let ultimaLinea = -1;
111
+ for (const ancla of anclas) {
112
+ const posiciones = [];
113
+ for (let i = desde; i + ancla.length <= lineas.length; i++) {
114
+ let casa = true;
115
+ for (let j = 0; j < ancla.length; j++) {
116
+ if (lineas[i + j] !== ancla[j]) {
117
+ casa = false;
118
+ break;
119
+ }
120
+ }
121
+ if (casa)
122
+ posiciones.push(i);
123
+ }
124
+ if (posiciones.length !== 1)
125
+ return null;
126
+ if (primeraLinea === -1)
127
+ primeraLinea = posiciones[0];
128
+ ultimaLinea = posiciones[0] + ancla.length - 1;
129
+ desde = ultimaLinea + 1;
130
+ }
131
+ // Desplazamientos en el contenido original: hay que contar los saltos.
132
+ let indice = 0;
133
+ for (let i = 0; i < primeraLinea; i++)
134
+ indice += lineas[i].length + 1;
135
+ let longitud = 0;
136
+ for (let i = primeraLinea; i <= ultimaLinea; i++)
137
+ longitud += lineas[i].length + 1;
138
+ longitud -= 1;
139
+ // El CARÁCTER de sangría sale del fichero, igual que en `casarIgnorandoSangria`.
140
+ //
141
+ // Aquí se escribía el `newText` tal cual, y eso rompía en este camino el
142
+ // invariante 2 del módulo de al lado. Medido con la carga `hueco-elidido`: el
143
+ // fichero se sangra con cuatro espacios, el modelo elide y manda
144
+ // `\treturn 0;`, y entraba un TABULADOR en un fichero de espacios. Es una de
145
+ // las dos formas exactas en las que corrompe oh-my-pi —«aplica y deja la
146
+ // sangría mal»—, y el banco la daba por correcta. En TypeScript es cosmético;
147
+ // en Python es un error de sintaxis, o peor, una línea que se sale del bloque
148
+ // `if` sin romper nada.
149
+ //
150
+ // Se re-sangra SOLO si el carácter no coincide, y por qué: cuando el modelo ya
151
+ // usa el del fichero, reescribir la sangría de todas sus líneas tocaría bytes
152
+ // que nadie ha pedido tocar — el interior de una plantilla multilínea es
153
+ // contenido, no estructura. Con el carácter equivocado no hay elección: esas
154
+ // líneas ya están mal.
155
+ const bloque = lineas.slice(primeraLinea, ultimaLinea + 1);
156
+ const nuevas = newText.split("\n");
157
+ const textoNuevo = unidadDe(bloque).caracter === unidadDe(nuevas).caracter
158
+ ? newText
159
+ : reSangrarComoElBloque(nuevas, bloque).join("\n");
160
+ return { indice, longitud, textoNuevo };
161
+ }
162
+ //# sourceMappingURL=hueco.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hueco.js","sourceRoot":"","sources":["../../../src/core/edicion/hueco.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Casar una edición cuando el modelo ELIDE el medio con `...`.\n *\n * EL CASO. El modelo quiere reescribir una función de treinta líneas y cambia\n * dos. Retipear las otras veintiocho es caro y, sobre todo, es donde se\n * equivoca: cada línea retecleada es una oportunidad de meter un espacio de\n * más. Así que hace lo natural y nombra los extremos:\n *\n * function total(items: Item[]) {\n * ...\n * }\n *\n * Hasta ahora eso era un rechazo seguro —«el texto no coincide exactamente»— y\n * costaba un turno entero releyendo el fichero para volver a escribir a ciegas\n * lo que ya estaba bien.\n *\n * POR QUÉ ESTO ES MÁS PELIGROSO QUE LOS DEMÁS CAMINOS, y por qué las anclas se\n * comparan con IGUALDAD EXACTA de línea. Este camino se traga líneas que el\n * modelo NO ha nombrado: todo lo que hay entre las dos anclas desaparece. Un\n * fallo aquí no deja un espacio mal, borra código. Con esa apuesta encima de la\n * mesa, la comparación laxa no se paga: `casarIgnorandoSangria` puede permitirse\n * recortar la sangría porque el bloque que sustituye está enteramente escrito\n * por el modelo; aquí no.\n *\n * Y hay una razón medida, no estética. Sobre el fichero de siete líneas del\n * banco, el ancla de cierre es `}` y aparece DOS veces si se comparan las líneas\n * recortadas: la del `for` interior (` }`) y la de la función (`}`). Con\n * igualdad exacta hay una sola, y es la correcta. La comparación laxa habría\n * convertido este caso en una moneda al aire — o en un rechazo, si se es\n * honesto con la ambigüedad.\n *\n * ALCANCE MEDIDO, para que nadie se lleve una sorpresa. Con la regla de ancla\n * única, sobre las 1173 funciones de nivel superior de `src/core/` y el patrón\n * `cabecera` + `...` + `}`, casan 164 (14%): en la práctica solo la ÚLTIMA\n * función de cada fichero, porque el `}` de la columna cero de cualquier función\n * posterior vuelve ambigua el ancla de cierre. Es el lado seguro de la moneda\n * —rechazar cuesta un turno y tragarse líneas que nadie nombró cuesta código—,\n * pero conviene no confundir «recuperado» con «recuperado siempre»: el resto\n * sigue costando el turno. La carga `hueco-cierre-no-unico` lo mide, para que\n * quien lo cambie tenga que cambiar una cifra y no una intuición.\n *\n * TRES INVARIANTES:\n *\n * 1. **Anclas a los dos lados.** Un `...` al principio deja el hueco sin fondo:\n * el reemplazo se comería el fichero desde su inicio. Cae por el invariante 2\n * y no por una guarda propia — la guarda propia estaba escrita y no se podía\n * poner roja, así que se quitó; el detalle está en el cuerpo.\n * 2. **Cada ancla en un solo sitio.** La primera, única en todo el fichero; las\n * siguientes, únicas en lo que queda por detrás de la anterior. Dos\n * posiciones es una moneda al aire y se rechaza.\n * 3. **El `newText` no puede llevar elisión.** Si el modelo elide también en el\n * reemplazo, escribirlo dejaría un `...` literal dentro del código. Ese es el\n * fallo que se lee como éxito: la edición «entra» y el fichero no compila.\n */\n\nimport { type CasadoPorSangria, reSangrarComoElBloque, unidadDe } from \"./sangria.ts\";\n\n/**\n * Una línea que es SOLO una elisión, con el comentario que los modelos le\n * cuelgan delante (`// ...`, `# ...`, `-- ...`, o abierto y cerrado de bloque) o\n * sin él.\n *\n * Tiene que ser la línea entera. `...props,` es código real y no casa, que es\n * justo lo que se quiere: la elisión es un gesto deliberado del modelo y ocupa\n * su propia línea.\n */\nconst ELISION = /^\\s*(?:\\/\\/|#|--|\\/\\*)?\\s*(?:\\.{3}|…)\\s*(?:\\*\\/)?\\s*$/;\n\nfunction esLineaDeElision(linea: string): boolean {\n\treturn ELISION.test(linea);\n}\n\n/**\n * Casa `oldText` contra `contenido` cuando el patrón elide el medio con `...`.\n *\n * Devuelve `null` cuando no hay elisión, cuando alguna ancla falta, cuando\n * alguna casa en más de un sitio, o cuando el reemplazo también elide. `null`\n * significa «no puedo», nunca «no hay»: quien llama sigue con su propio error.\n */\nexport function casarHuecoElidido(contenido: string, oldText: string, newText: string): CasadoPorSangria | null {\n\tconst patron = oldText.split(\"\\n\");\n\t// Líneas vacías de los extremos: ruido de copiado, igual que en la sangría.\n\twhile (patron.length > 0 && patron[0].trim() === \"\") patron.shift();\n\twhile (patron.length > 0 && patron[patron.length - 1].trim() === \"\") patron.pop();\n\tif (!patron.some(esLineaDeElision)) return null;\n\n\t// Invariante 3: si el reemplazo elide, no hay nada que escribir sin inventar.\n\tif (newText.split(\"\\n\").some(esLineaDeElision)) return null;\n\n\t// El patrón partido por sus elisiones. Un trozo vacío significa una elisión\n\t// pegada a un extremo o a otra elisión — el hueco sin fondo del invariante 1.\n\t//\n\t// Aquí había una guarda explícita contra los trozos vacíos y la QUITÉ, porque\n\t// no se podía poner roja: la rompí a propósito y la puerta siguió en verde.\n\t// La razón es que el invariante 2 ya la cubre, y se demuestra: un ancla vacía\n\t// casa en TODAS las posiciones desde `desde`, o sea `lineas.length - desde + 1`\n\t// de ellas. Para una elisión delantera `desde` es 0 y eso son al menos dos\n\t// posiciones en cualquier fichero, luego «una sola posición» la rechaza\n\t// siempre. Una guarda que no se puede poner roja es una invariante declarada y\n\t// no comprobada, que es peor que no declararla.\n\tconst anclas: string[][] = [[]];\n\tfor (const linea of patron) {\n\t\tif (esLineaDeElision(linea)) anclas.push([]);\n\t\telse anclas[anclas.length - 1].push(linea);\n\t}\n\n\tconst lineas = contenido.split(\"\\n\");\n\n\t// Invariante 2: cada ancla en un solo sitio, y por detrás de la anterior.\n\tlet desde = 0;\n\tlet primeraLinea = -1;\n\tlet ultimaLinea = -1;\n\tfor (const ancla of anclas) {\n\t\tconst posiciones: number[] = [];\n\t\tfor (let i = desde; i + ancla.length <= lineas.length; i++) {\n\t\t\tlet casa = true;\n\t\t\tfor (let j = 0; j < ancla.length; j++) {\n\t\t\t\tif (lineas[i + j] !== ancla[j]) {\n\t\t\t\t\tcasa = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (casa) posiciones.push(i);\n\t\t}\n\t\tif (posiciones.length !== 1) return null;\n\t\tif (primeraLinea === -1) primeraLinea = posiciones[0];\n\t\tultimaLinea = posiciones[0] + ancla.length - 1;\n\t\tdesde = ultimaLinea + 1;\n\t}\n\n\t// Desplazamientos en el contenido original: hay que contar los saltos.\n\tlet indice = 0;\n\tfor (let i = 0; i < primeraLinea; i++) indice += lineas[i].length + 1;\n\tlet longitud = 0;\n\tfor (let i = primeraLinea; i <= ultimaLinea; i++) longitud += lineas[i].length + 1;\n\tlongitud -= 1;\n\n\t// El CARÁCTER de sangría sale del fichero, igual que en `casarIgnorandoSangria`.\n\t//\n\t// Aquí se escribía el `newText` tal cual, y eso rompía en este camino el\n\t// invariante 2 del módulo de al lado. Medido con la carga `hueco-elidido`: el\n\t// fichero se sangra con cuatro espacios, el modelo elide y manda\n\t// `\\treturn 0;`, y entraba un TABULADOR en un fichero de espacios. Es una de\n\t// las dos formas exactas en las que corrompe oh-my-pi —«aplica y deja la\n\t// sangría mal»—, y el banco la daba por correcta. En TypeScript es cosmético;\n\t// en Python es un error de sintaxis, o peor, una línea que se sale del bloque\n\t// `if` sin romper nada.\n\t//\n\t// Se re-sangra SOLO si el carácter no coincide, y por qué: cuando el modelo ya\n\t// usa el del fichero, reescribir la sangría de todas sus líneas tocaría bytes\n\t// que nadie ha pedido tocar — el interior de una plantilla multilínea es\n\t// contenido, no estructura. Con el carácter equivocado no hay elección: esas\n\t// líneas ya están mal.\n\tconst bloque = lineas.slice(primeraLinea, ultimaLinea + 1);\n\tconst nuevas = newText.split(\"\\n\");\n\tconst textoNuevo =\n\t\tunidadDe(bloque).caracter === unidadDe(nuevas).caracter\n\t\t\t? newText\n\t\t\t: reSangrarComoElBloque(nuevas, bloque).join(\"\\n\");\n\treturn { indice, longitud, textoNuevo };\n}\n"]}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Quitarle a un `oldText` el ruido que no es código.
3
+ *
4
+ * EL CASO MÁS VERGONZOSO ES EL NUESTRO. Nuestro propio `read` añade al final de
5
+ * lo que devuelve una línea como:
6
+ *
7
+ * [Showing lines 1-5 of 5. Use offset=6 to continue.]
8
+ *
9
+ * El modelo lee un fichero, copia el bloque que quiere cambiar —cabecera
10
+ * incluida, porque venía pegada— y nosotros rechazamos la edición porque «el
11
+ * texto no coincide exactamente». Generamos la contaminación y luego la
12
+ * castigamos.
13
+ *
14
+ * Los otros tres son ruido que los modelos añaden solos y que ninguna de las
15
+ * dos partes discute que sea ruido: vallas de markdown, sentinelas de sobre de
16
+ * parche, y los números de línea de un `grep`.
17
+ *
18
+ * LA REGLA QUE EVITA HACER DAÑO: solo se quita lo que es INEQUÍVOCO. Un `3:` al
19
+ * principio de una línea podría ser una etiqueta de código real, así que solo se
20
+ * trata como número de línea cuando TODAS las líneas lo llevan y además los
21
+ * números van en orden. Preferimos dejar ruido que borrar código: quitar de más
22
+ * cambia el patrón y lo casa en el sitio equivocado, y eso es corrupción
23
+ * silenciosa — la clase de fallo que más cara nos ha salido.
24
+ */
25
+ /** Lo que se quitó, para poder explicarlo en un error. */
26
+ export interface CargaLimpia {
27
+ texto: string;
28
+ /** Qué se retiró, en orden. Vacío = no había ruido. */
29
+ quitado: readonly string[];
30
+ }
31
+ /**
32
+ * Limpia `oldText`. Devuelve el texto y qué se quitó.
33
+ *
34
+ * Si no había nada que quitar, `quitado` viene vacío y `texto` es idéntico al
35
+ * de entrada — quien llama puede así distinguir «lo he limpiado» de «no había
36
+ * nada», sin comparar cadenas.
37
+ */
38
+ export declare function limpiarCarga(oldText: string): CargaLimpia;
39
+ //# sourceMappingURL=limpiar-carga.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limpiar-carga.d.ts","sourceRoot":"","sources":["../../../src/core/edicion/limpiar-carga.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,2DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,2DAAuD;IACvD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAgFD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAUzD","sourcesContent":["/**\n * Quitarle a un `oldText` el ruido que no es código.\n *\n * EL CASO MÁS VERGONZOSO ES EL NUESTRO. Nuestro propio `read` añade al final de\n * lo que devuelve una línea como:\n *\n * [Showing lines 1-5 of 5. Use offset=6 to continue.]\n *\n * El modelo lee un fichero, copia el bloque que quiere cambiar —cabecera\n * incluida, porque venía pegada— y nosotros rechazamos la edición porque «el\n * texto no coincide exactamente». Generamos la contaminación y luego la\n * castigamos.\n *\n * Los otros tres son ruido que los modelos añaden solos y que ninguna de las\n * dos partes discute que sea ruido: vallas de markdown, sentinelas de sobre de\n * parche, y los números de línea de un `grep`.\n *\n * LA REGLA QUE EVITA HACER DAÑO: solo se quita lo que es INEQUÍVOCO. Un `3:` al\n * principio de una línea podría ser una etiqueta de código real, así que solo se\n * trata como número de línea cuando TODAS las líneas lo llevan y además los\n * números van en orden. Preferimos dejar ruido que borrar código: quitar de más\n * cambia el patrón y lo casa en el sitio equivocado, y eso es corrupción\n * silenciosa — la clase de fallo que más cara nos ha salido.\n */\n\n/** Lo que se quitó, para poder explicarlo en un error. */\nexport interface CargaLimpia {\n\ttexto: string;\n\t/** Qué se retiró, en orden. Vacío = no había ruido. */\n\tquitado: readonly string[];\n}\n\n/** ```ts … ``` envolviendo el bloque entero. */\nfunction quitarValla(lineas: string[]): string | undefined {\n\tif (lineas.length < 2) return undefined;\n\tconst primera = lineas[0].trim();\n\tconst ultima = lineas[lineas.length - 1].trim();\n\tif (!primera.startsWith(\"```\") || ultima !== \"```\") return undefined;\n\t// La apertura puede llevar el lenguaje (```ts); el cierre nunca lleva nada.\n\tlineas.splice(lineas.length - 1, 1);\n\tlineas.splice(0, 1);\n\treturn \"valla de markdown\";\n}\n\n/** `*** Begin Patch` / `*** End Patch` y sus variantes. */\nconst SOBRE = /^\\*{3}\\s*(begin|end)\\b|^(begin|end)(\\s+of)?\\s+(patch|edits?|file)\\b/i;\n\nfunction quitarSobre(lineas: string[]): string | undefined {\n\tlet quitadas = 0;\n\twhile (lineas.length > 0 && SOBRE.test(lineas[0].trim())) {\n\t\tlineas.shift();\n\t\tquitadas++;\n\t}\n\twhile (lineas.length > 0 && SOBRE.test(lineas[lineas.length - 1].trim())) {\n\t\tlineas.pop();\n\t\tquitadas++;\n\t}\n\treturn quitadas > 0 ? \"sentinelas de sobre de parche\" : undefined;\n}\n\n/**\n * La cabecera que añade NUESTRO `read`.\n *\n * Se reconoce por su forma exacta y solo al principio o al final, nunca en\n * medio: en medio sería contenido del fichero.\n */\nconst CABECERA_READ = /^\\[Showing lines \\d+-\\d+ of \\d+\\.( Use offset=\\d+ to continue\\.)?\\]$/;\n/** Y la de un fichero truncado, del mismo sitio. */\nconst CABECERA_TRUNCADO = /^\\[(File truncated|Truncated|Showing first) .*\\]$/i;\n\nfunction quitarCabeceraPropia(lineas: string[]): string | undefined {\n\tconst es = (l: string) => CABECERA_READ.test(l.trim()) || CABECERA_TRUNCADO.test(l.trim());\n\tlet quitadas = 0;\n\twhile (lineas.length > 0 && es(lineas[0])) {\n\t\tlineas.shift();\n\t\tquitadas++;\n\t}\n\twhile (lineas.length > 0 && es(lineas[lineas.length - 1])) {\n\t\tlineas.pop();\n\t\tquitadas++;\n\t}\n\treturn quitadas > 0 ? \"la cabecera que añade nuestro propio read\" : undefined;\n}\n\n/**\n * Números de línea de un `grep` o un `read` numerado: `12:` o `12-`.\n *\n * Solo si TODAS las líneas no vacías lo llevan Y los números son consecutivos.\n * Con una sola de las dos condiciones se dejaría de tocar código real: un\n * `case 3:` o un fragmento de YAML con `80:` cumplirían la primera.\n */\nfunction quitarNumerosDeLinea(lineas: string[]): string | undefined {\n\tconst noVacias = lineas.filter((l) => l.trim() !== \"\");\n\tif (noVacias.length === 0) return undefined;\n\tconst numeros: number[] = [];\n\tfor (const linea of noVacias) {\n\t\tconst m = linea.match(/^\\s*(\\d+)[:\\-\\t]/);\n\t\tif (!m) return undefined;\n\t\tnumeros.push(Number(m[1]));\n\t}\n\t// Consecutivos, y por tanto números de línea y no datos.\n\tfor (let i = 1; i < numeros.length; i++) {\n\t\tif (numeros[i] !== numeros[i - 1] + 1) return undefined;\n\t}\n\tfor (let i = 0; i < lineas.length; i++) {\n\t\tlineas[i] = lineas[i].replace(/^\\s*\\d+[:\\-\\t]/, \"\");\n\t}\n\treturn \"números de línea\";\n}\n\n/**\n * Limpia `oldText`. Devuelve el texto y qué se quitó.\n *\n * Si no había nada que quitar, `quitado` viene vacío y `texto` es idéntico al\n * de entrada — quien llama puede así distinguir «lo he limpiado» de «no había\n * nada», sin comparar cadenas.\n */\nexport function limpiarCarga(oldText: string): CargaLimpia {\n\tconst lineas = oldText.split(\"\\n\");\n\tconst quitado: string[] = [];\n\t// Orden: primero los envoltorios de fuera adentro, y los números al final\n\t// porque una valla o un sobre romperían la comprobación de consecutivos.\n\tfor (const paso of [quitarValla, quitarSobre, quitarCabeceraPropia, quitarNumerosDeLinea]) {\n\t\tconst que = paso(lineas);\n\t\tif (que) quitado.push(que);\n\t}\n\treturn { texto: lineas.join(\"\\n\"), quitado };\n}\n"]}