@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destino.d.ts","sourceRoot":"","sources":["../../../src/core/remoto/destino.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AA6D9D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAyBpD;AAED,gFAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CASxD","sourcesContent":["/**\n * Parseo de `--remoto <destino>`.\n *\n * Tres esquemas, cada uno con su forma de nombrar \"dónde\": un host SSH, una\n * distro WSL, un contenedor Docker. `ruta` es siempre el directorio de\n * trabajo remoto — el mismo papel que `cwd` cumple en local, y por eso\n * `ejecutor.ts`/`ficheros.ts` lo usan tal cual para resolver rutas relativas.\n *\n * Los mensajes de error son deliberadamente largos: quien los lee es el\n * usuario tecleando el flag a mano, no el modelo.\n */\n\nexport interface DestinoSsh {\n\ttipo: \"ssh\";\n\tusuario?: string;\n\thost: string;\n\tpuerto?: number;\n\truta: string;\n}\n\nexport interface DestinoWsl {\n\ttipo: \"wsl\";\n\tdistro: string;\n\truta: string;\n}\n\nexport interface DestinoDocker {\n\ttipo: \"docker\";\n\tcontenedor: string;\n\truta: string;\n}\n\nexport type Destino = DestinoSsh | DestinoWsl | DestinoDocker;\n\n/** Ruta por defecto cuando el destino no trae una: la home del lado remoto. */\nconst RUTA_POR_DEFECTO = \".\";\n\nfunction separaRuta(resto: string): { cabecera: string; ruta: string } {\n\tconst barra = resto.indexOf(\"/\");\n\tif (barra === -1) return { cabecera: resto, ruta: RUTA_POR_DEFECTO };\n\tconst ruta = resto.slice(barra + 1);\n\treturn { cabecera: resto.slice(0, barra), ruta: ruta.length > 0 ? `/${ruta}` : RUTA_POR_DEFECTO };\n}\n\nfunction parseaSsh(resto: string): DestinoSsh {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"ssh:// necesita un host: ssh://usuario@host/ruta o ssh://host/ruta\");\n\t}\n\tconst { cabecera, ruta } = separaRuta(resto);\n\tconst arroba = cabecera.indexOf(\"@\");\n\tconst usuario = arroba === -1 ? undefined : cabecera.slice(0, arroba);\n\tif (arroba !== -1 && usuario!.length === 0) {\n\t\tthrow new Error(`ssh://: usuario vacío delante de \"@\" en \"${cabecera}\"`);\n\t}\n\tconst hostYPuerto = arroba === -1 ? cabecera : cabecera.slice(arroba + 1);\n\tconst dosPuntos = hostYPuerto.lastIndexOf(\":\");\n\tconst host = dosPuntos === -1 ? hostYPuerto : hostYPuerto.slice(0, dosPuntos);\n\tif (host.length === 0) {\n\t\tthrow new Error(`ssh://: falta el host en \"${resto}\"`);\n\t}\n\tlet puerto: number | undefined;\n\tif (dosPuntos !== -1) {\n\t\tconst texto = hostYPuerto.slice(dosPuntos + 1);\n\t\tpuerto = Number(texto);\n\t\tif (!Number.isInteger(puerto) || puerto <= 0 || puerto > 65535 || texto.length === 0) {\n\t\t\tthrow new Error(`ssh://: puerto inválido \"${texto}\" en \"${resto}\"`);\n\t\t}\n\t}\n\treturn { tipo: \"ssh\", usuario, host, puerto, ruta };\n}\n\nfunction parseaWsl(resto: string): DestinoWsl {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"wsl:// necesita una distro: wsl://distro/ruta (ver `wsl -l -v` en Windows)\");\n\t}\n\tconst { cabecera: distro, ruta } = separaRuta(resto);\n\tif (distro.length === 0) {\n\t\tthrow new Error(`wsl://: falta la distro en \"${resto}\"`);\n\t}\n\treturn { tipo: \"wsl\", distro, ruta };\n}\n\nfunction parseaDocker(resto: string): DestinoDocker {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"docker:// necesita un contenedor: docker://contenedor/ruta (ver `docker ps`)\");\n\t}\n\tconst { cabecera: contenedor, ruta } = separaRuta(resto);\n\tif (contenedor.length === 0) {\n\t\tthrow new Error(`docker://: falta el nombre o id del contenedor en \"${resto}\"`);\n\t}\n\treturn { tipo: \"docker\", contenedor, ruta };\n}\n\n/**\n * Parsea `ssh://…`, `wsl://…` o `docker://…`. Lanza con un mensaje claro si\n * el esquema no es ninguno de los tres o si la parte que sigue no tiene lo\n * mínimo (host, distro o contenedor).\n */\nexport function parseaDestino(texto: string): Destino {\n\tconst t = texto.trim();\n\tif (t.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"--remoto necesita un valor: ssh://usuario@host/ruta, wsl://distro/ruta o docker://contenedor/ruta\",\n\t\t);\n\t}\n\tconst separador = t.indexOf(\"://\");\n\tif (separador === -1) {\n\t\tthrow new Error(\n\t\t\t`--remoto \"${t}\" no tiene esquema. Usa ssh://, wsl:// o docker:// (ejemplo: ssh://usuario@host/ruta)`,\n\t\t);\n\t}\n\tconst esquema = t.slice(0, separador);\n\tconst resto = t.slice(separador + 3);\n\tswitch (esquema) {\n\t\tcase \"ssh\":\n\t\t\treturn parseaSsh(resto);\n\t\tcase \"wsl\":\n\t\t\treturn parseaWsl(resto);\n\t\tcase \"docker\":\n\t\t\treturn parseaDocker(resto);\n\t\tdefault:\n\t\t\tthrow new Error(`--remoto \"${t}\": esquema \"${esquema}\" desconocido. Usa ssh://, wsl:// o docker://`);\n\t}\n}\n\n/** Representación legible para logs y mensajes de error, sin nada sensible. */\nexport function describeDestino(destino: Destino): string {\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\":\n\t\t\treturn `ssh://${destino.usuario ? `${destino.usuario}@` : \"\"}${destino.host}${destino.puerto ? `:${destino.puerto}` : \"\"}${destino.ruta}`;\n\t\tcase \"wsl\":\n\t\t\treturn `wsl://${destino.distro}${destino.ruta}`;\n\t\tcase \"docker\":\n\t\t\treturn `docker://${destino.contenedor}${destino.ruta}`;\n\t}\n}\n"]}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Parseo de `--remoto <destino>`.
3
+ *
4
+ * Tres esquemas, cada uno con su forma de nombrar "dónde": un host SSH, una
5
+ * distro WSL, un contenedor Docker. `ruta` es siempre el directorio de
6
+ * trabajo remoto — el mismo papel que `cwd` cumple en local, y por eso
7
+ * `ejecutor.ts`/`ficheros.ts` lo usan tal cual para resolver rutas relativas.
8
+ *
9
+ * Los mensajes de error son deliberadamente largos: quien los lee es el
10
+ * usuario tecleando el flag a mano, no el modelo.
11
+ */
12
+ /** Ruta por defecto cuando el destino no trae una: la home del lado remoto. */
13
+ const RUTA_POR_DEFECTO = ".";
14
+ function separaRuta(resto) {
15
+ const barra = resto.indexOf("/");
16
+ if (barra === -1)
17
+ return { cabecera: resto, ruta: RUTA_POR_DEFECTO };
18
+ const ruta = resto.slice(barra + 1);
19
+ return { cabecera: resto.slice(0, barra), ruta: ruta.length > 0 ? `/${ruta}` : RUTA_POR_DEFECTO };
20
+ }
21
+ function parseaSsh(resto) {
22
+ if (resto.length === 0) {
23
+ throw new Error("ssh:// necesita un host: ssh://usuario@host/ruta o ssh://host/ruta");
24
+ }
25
+ const { cabecera, ruta } = separaRuta(resto);
26
+ const arroba = cabecera.indexOf("@");
27
+ const usuario = arroba === -1 ? undefined : cabecera.slice(0, arroba);
28
+ if (arroba !== -1 && usuario.length === 0) {
29
+ throw new Error(`ssh://: usuario vacío delante de "@" en "${cabecera}"`);
30
+ }
31
+ const hostYPuerto = arroba === -1 ? cabecera : cabecera.slice(arroba + 1);
32
+ const dosPuntos = hostYPuerto.lastIndexOf(":");
33
+ const host = dosPuntos === -1 ? hostYPuerto : hostYPuerto.slice(0, dosPuntos);
34
+ if (host.length === 0) {
35
+ throw new Error(`ssh://: falta el host en "${resto}"`);
36
+ }
37
+ let puerto;
38
+ if (dosPuntos !== -1) {
39
+ const texto = hostYPuerto.slice(dosPuntos + 1);
40
+ puerto = Number(texto);
41
+ if (!Number.isInteger(puerto) || puerto <= 0 || puerto > 65535 || texto.length === 0) {
42
+ throw new Error(`ssh://: puerto inválido "${texto}" en "${resto}"`);
43
+ }
44
+ }
45
+ return { tipo: "ssh", usuario, host, puerto, ruta };
46
+ }
47
+ function parseaWsl(resto) {
48
+ if (resto.length === 0) {
49
+ throw new Error("wsl:// necesita una distro: wsl://distro/ruta (ver `wsl -l -v` en Windows)");
50
+ }
51
+ const { cabecera: distro, ruta } = separaRuta(resto);
52
+ if (distro.length === 0) {
53
+ throw new Error(`wsl://: falta la distro en "${resto}"`);
54
+ }
55
+ return { tipo: "wsl", distro, ruta };
56
+ }
57
+ function parseaDocker(resto) {
58
+ if (resto.length === 0) {
59
+ throw new Error("docker:// necesita un contenedor: docker://contenedor/ruta (ver `docker ps`)");
60
+ }
61
+ const { cabecera: contenedor, ruta } = separaRuta(resto);
62
+ if (contenedor.length === 0) {
63
+ throw new Error(`docker://: falta el nombre o id del contenedor en "${resto}"`);
64
+ }
65
+ return { tipo: "docker", contenedor, ruta };
66
+ }
67
+ /**
68
+ * Parsea `ssh://…`, `wsl://…` o `docker://…`. Lanza con un mensaje claro si
69
+ * el esquema no es ninguno de los tres o si la parte que sigue no tiene lo
70
+ * mínimo (host, distro o contenedor).
71
+ */
72
+ export function parseaDestino(texto) {
73
+ const t = texto.trim();
74
+ if (t.length === 0) {
75
+ throw new Error("--remoto necesita un valor: ssh://usuario@host/ruta, wsl://distro/ruta o docker://contenedor/ruta");
76
+ }
77
+ const separador = t.indexOf("://");
78
+ if (separador === -1) {
79
+ throw new Error(`--remoto "${t}" no tiene esquema. Usa ssh://, wsl:// o docker:// (ejemplo: ssh://usuario@host/ruta)`);
80
+ }
81
+ const esquema = t.slice(0, separador);
82
+ const resto = t.slice(separador + 3);
83
+ switch (esquema) {
84
+ case "ssh":
85
+ return parseaSsh(resto);
86
+ case "wsl":
87
+ return parseaWsl(resto);
88
+ case "docker":
89
+ return parseaDocker(resto);
90
+ default:
91
+ throw new Error(`--remoto "${t}": esquema "${esquema}" desconocido. Usa ssh://, wsl:// o docker://`);
92
+ }
93
+ }
94
+ /** Representación legible para logs y mensajes de error, sin nada sensible. */
95
+ export function describeDestino(destino) {
96
+ switch (destino.tipo) {
97
+ case "ssh":
98
+ return `ssh://${destino.usuario ? `${destino.usuario}@` : ""}${destino.host}${destino.puerto ? `:${destino.puerto}` : ""}${destino.ruta}`;
99
+ case "wsl":
100
+ return `wsl://${destino.distro}${destino.ruta}`;
101
+ case "docker":
102
+ return `docker://${destino.contenedor}${destino.ruta}`;
103
+ }
104
+ }
105
+ //# sourceMappingURL=destino.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destino.js","sourceRoot":"","sources":["../../../src/core/remoto/destino.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Parseo de `--remoto <destino>`.\n *\n * Tres esquemas, cada uno con su forma de nombrar \"dónde\": un host SSH, una\n * distro WSL, un contenedor Docker. `ruta` es siempre el directorio de\n * trabajo remoto — el mismo papel que `cwd` cumple en local, y por eso\n * `ejecutor.ts`/`ficheros.ts` lo usan tal cual para resolver rutas relativas.\n *\n * Los mensajes de error son deliberadamente largos: quien los lee es el\n * usuario tecleando el flag a mano, no el modelo.\n */\n\nexport interface DestinoSsh {\n\ttipo: \"ssh\";\n\tusuario?: string;\n\thost: string;\n\tpuerto?: number;\n\truta: string;\n}\n\nexport interface DestinoWsl {\n\ttipo: \"wsl\";\n\tdistro: string;\n\truta: string;\n}\n\nexport interface DestinoDocker {\n\ttipo: \"docker\";\n\tcontenedor: string;\n\truta: string;\n}\n\nexport type Destino = DestinoSsh | DestinoWsl | DestinoDocker;\n\n/** Ruta por defecto cuando el destino no trae una: la home del lado remoto. */\nconst RUTA_POR_DEFECTO = \".\";\n\nfunction separaRuta(resto: string): { cabecera: string; ruta: string } {\n\tconst barra = resto.indexOf(\"/\");\n\tif (barra === -1) return { cabecera: resto, ruta: RUTA_POR_DEFECTO };\n\tconst ruta = resto.slice(barra + 1);\n\treturn { cabecera: resto.slice(0, barra), ruta: ruta.length > 0 ? `/${ruta}` : RUTA_POR_DEFECTO };\n}\n\nfunction parseaSsh(resto: string): DestinoSsh {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"ssh:// necesita un host: ssh://usuario@host/ruta o ssh://host/ruta\");\n\t}\n\tconst { cabecera, ruta } = separaRuta(resto);\n\tconst arroba = cabecera.indexOf(\"@\");\n\tconst usuario = arroba === -1 ? undefined : cabecera.slice(0, arroba);\n\tif (arroba !== -1 && usuario!.length === 0) {\n\t\tthrow new Error(`ssh://: usuario vacío delante de \"@\" en \"${cabecera}\"`);\n\t}\n\tconst hostYPuerto = arroba === -1 ? cabecera : cabecera.slice(arroba + 1);\n\tconst dosPuntos = hostYPuerto.lastIndexOf(\":\");\n\tconst host = dosPuntos === -1 ? hostYPuerto : hostYPuerto.slice(0, dosPuntos);\n\tif (host.length === 0) {\n\t\tthrow new Error(`ssh://: falta el host en \"${resto}\"`);\n\t}\n\tlet puerto: number | undefined;\n\tif (dosPuntos !== -1) {\n\t\tconst texto = hostYPuerto.slice(dosPuntos + 1);\n\t\tpuerto = Number(texto);\n\t\tif (!Number.isInteger(puerto) || puerto <= 0 || puerto > 65535 || texto.length === 0) {\n\t\t\tthrow new Error(`ssh://: puerto inválido \"${texto}\" en \"${resto}\"`);\n\t\t}\n\t}\n\treturn { tipo: \"ssh\", usuario, host, puerto, ruta };\n}\n\nfunction parseaWsl(resto: string): DestinoWsl {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"wsl:// necesita una distro: wsl://distro/ruta (ver `wsl -l -v` en Windows)\");\n\t}\n\tconst { cabecera: distro, ruta } = separaRuta(resto);\n\tif (distro.length === 0) {\n\t\tthrow new Error(`wsl://: falta la distro en \"${resto}\"`);\n\t}\n\treturn { tipo: \"wsl\", distro, ruta };\n}\n\nfunction parseaDocker(resto: string): DestinoDocker {\n\tif (resto.length === 0) {\n\t\tthrow new Error(\"docker:// necesita un contenedor: docker://contenedor/ruta (ver `docker ps`)\");\n\t}\n\tconst { cabecera: contenedor, ruta } = separaRuta(resto);\n\tif (contenedor.length === 0) {\n\t\tthrow new Error(`docker://: falta el nombre o id del contenedor en \"${resto}\"`);\n\t}\n\treturn { tipo: \"docker\", contenedor, ruta };\n}\n\n/**\n * Parsea `ssh://…`, `wsl://…` o `docker://…`. Lanza con un mensaje claro si\n * el esquema no es ninguno de los tres o si la parte que sigue no tiene lo\n * mínimo (host, distro o contenedor).\n */\nexport function parseaDestino(texto: string): Destino {\n\tconst t = texto.trim();\n\tif (t.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"--remoto necesita un valor: ssh://usuario@host/ruta, wsl://distro/ruta o docker://contenedor/ruta\",\n\t\t);\n\t}\n\tconst separador = t.indexOf(\"://\");\n\tif (separador === -1) {\n\t\tthrow new Error(\n\t\t\t`--remoto \"${t}\" no tiene esquema. Usa ssh://, wsl:// o docker:// (ejemplo: ssh://usuario@host/ruta)`,\n\t\t);\n\t}\n\tconst esquema = t.slice(0, separador);\n\tconst resto = t.slice(separador + 3);\n\tswitch (esquema) {\n\t\tcase \"ssh\":\n\t\t\treturn parseaSsh(resto);\n\t\tcase \"wsl\":\n\t\t\treturn parseaWsl(resto);\n\t\tcase \"docker\":\n\t\t\treturn parseaDocker(resto);\n\t\tdefault:\n\t\t\tthrow new Error(`--remoto \"${t}\": esquema \"${esquema}\" desconocido. Usa ssh://, wsl:// o docker://`);\n\t}\n}\n\n/** Representación legible para logs y mensajes de error, sin nada sensible. */\nexport function describeDestino(destino: Destino): string {\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\":\n\t\t\treturn `ssh://${destino.usuario ? `${destino.usuario}@` : \"\"}${destino.host}${destino.puerto ? `:${destino.puerto}` : \"\"}${destino.ruta}`;\n\t\tcase \"wsl\":\n\t\t\treturn `wsl://${destino.distro}${destino.ruta}`;\n\t\tcase \"docker\":\n\t\t\treturn `docker://${destino.contenedor}${destino.ruta}`;\n\t}\n}\n"]}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Ejecuta comandos EN el destino: SSH, Docker o WSL.
3
+ *
4
+ * Sin dependencias nuevas: cada transporte es el binario del sistema
5
+ * (`ssh`, `docker`, `wsl.exe`) invocado con `spawn`, igual que
6
+ * `createLocalBashOperations` hace con el shell local en `tools/bash.ts`.
7
+ *
8
+ * SSH reutiliza conexión con `ControlMaster`: todas las invocaciones pasan el
9
+ * mismo `ControlPath`, así que OpenSSH abre el túnel una vez y lo comparte.
10
+ * Docker y WSL no lo necesitan — `docker exec` y `wsl.exe` ya son ligeros por
11
+ * llamada, y no hay handshake que amortizar.
12
+ */
13
+ import type { ChildProcess } from "node:child_process";
14
+ import type { BashOperations } from "../tools/bash.ts";
15
+ import { type Destino } from "./destino.ts";
16
+ /**
17
+ * Comprueba que el binario del transporte existe ANTES de intentar usarlo.
18
+ *
19
+ * `spawnSync` con un binario ausente falla en la propia llamada al sistema
20
+ * (`ENOENT`), sin lanzar el proceso — los argumentos no importan para esta
21
+ * comprobación, solo si el spawn en sí pudo arrancar.
22
+ */
23
+ export declare function compruebaBinario(destino: Destino): void;
24
+ /** Comillas simples POSIX, válidas para sh/bash/dash en el lado remoto. */
25
+ export declare function comillaPosix(texto: string): string;
26
+ /** Lanza `comandoRemoto` en el destino y devuelve el proceso hijo crudo (stdio: pipe/pipe/pipe). */
27
+ export declare function lanza(destino: Destino, cwd: string, comandoRemoto: string, opciones?: {
28
+ stdin?: boolean;
29
+ env?: NodeJS.ProcessEnv;
30
+ }): ChildProcess;
31
+ /** Ejecuta y espera, acumulando stdout/stderr por separado. Para `ficheros.ts`: comandos cortos, salida completa en memoria. */
32
+ export declare function ejecutaCapturando(destino: Destino, cwd: string, comandoRemoto: string, opciones?: {
33
+ stdin?: Buffer | string;
34
+ }): Promise<{
35
+ exitCode: number | null;
36
+ stdout: Buffer;
37
+ stderr: Buffer;
38
+ }>;
39
+ /**
40
+ * `BashOperations` que delega en el destino en vez del shell local.
41
+ *
42
+ * Misma forma que `createLocalBashOperations` (señal de aborto, timeout,
43
+ * streaming por `onData`) para que la tool `bash` no note la diferencia más
44
+ * allá de dónde corre el comando.
45
+ */
46
+ export declare function creaBashOperations(destino: Destino): BashOperations;
47
+ /**
48
+ * Cierra el `ControlMaster` de SSH explícitamente, en vez de esperar los
49
+ * `ControlPersist` segundos de gracia. Para Docker y WSL no hay nada que
50
+ * cerrar: cada llamada es un proceso independiente que ya ha terminado.
51
+ *
52
+ * ponytail: si `-O exit` falla (el master ya murió, o nunca llegó a abrirse
53
+ * porque no se ejecutó ningún comando), no es un error — no había nada que
54
+ * cerrar. El techo real es `ControlPersist`: aunque esta llamada se pierda
55
+ * (proceso matado con -9), el socket se limpia solo a los
56
+ * `SSH_CONTROL_PERSIST_S` segundos.
57
+ */
58
+ export declare function cierraConexion(destino: Destino): Promise<void>;
59
+ //# sourceMappingURL=ejecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejecutor.d.ts","sourceRoot":"","sources":["../../../src/core/remoto/ejecutor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,OAAO,EAAmB,MAAM,cAAc,CAAC;AAgB7D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQvD;AAED,4EAA2E;AAC3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAmED,oGAAoG;AACpG,wBAAgB,KAAK,CACpB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACrD,YAAY,CASd;AAED,gIAAgI;AAChI,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACpC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAYtE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAoDnE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE","sourcesContent":["/**\n * Ejecuta comandos EN el destino: SSH, Docker o WSL.\n *\n * Sin dependencias nuevas: cada transporte es el binario del sistema\n * (`ssh`, `docker`, `wsl.exe`) invocado con `spawn`, igual que\n * `createLocalBashOperations` hace con el shell local en `tools/bash.ts`.\n *\n * SSH reutiliza conexión con `ControlMaster`: todas las invocaciones pasan el\n * mismo `ControlPath`, así que OpenSSH abre el túnel una vez y lo comparte.\n * Docker y WSL no lo necesitan — `docker exec` y `wsl.exe` ya son ligeros por\n * llamada, y no hay handshake que amortizar.\n */\n\nimport type { ChildProcess } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport { spawnProcess, spawnProcessSync, waitForChildProcess } from \"../../utils/child-process.ts\";\nimport { killProcessTree } from \"../../utils/shell.ts\";\nimport type { BashOperations } from \"../tools/bash.ts\";\nimport { type Destino, describeDestino } from \"./destino.ts\";\n\n/** Segundos que OpenSSH mantiene el `ControlMaster` vivo sin actividad. Ver `cierraConexion`. */\nconst SSH_CONTROL_PERSIST_S = 30;\n\nfunction binarioDe(destino: Destino): string {\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\":\n\t\t\treturn \"ssh\";\n\t\tcase \"docker\":\n\t\t\treturn \"docker\";\n\t\tcase \"wsl\":\n\t\t\treturn \"wsl.exe\";\n\t}\n}\n\n/**\n * Comprueba que el binario del transporte existe ANTES de intentar usarlo.\n *\n * `spawnSync` con un binario ausente falla en la propia llamada al sistema\n * (`ENOENT`), sin lanzar el proceso — los argumentos no importan para esta\n * comprobación, solo si el spawn en sí pudo arrancar.\n */\nexport function compruebaBinario(destino: Destino): void {\n\tconst bin = binarioDe(destino);\n\tconst r = spawnProcessSync(bin, [\"--version\"], { encoding: \"utf-8\" });\n\tif (r.error && (r.error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\tthrow new Error(\n\t\t\t`Falta el binario \\`${bin}\\` para --remoto ${describeDestino(destino)}. Instálalo y vuelve a intentarlo.`,\n\t\t);\n\t}\n}\n\n/** Comillas simples POSIX, válidas para sh/bash/dash en el lado remoto. */\nexport function comillaPosix(texto: string): string {\n\treturn `'${texto.replaceAll(\"'\", `'\\\\''`)}'`;\n}\n\nfunction socketControlMaster(destino: Extract<Destino, { tipo: \"ssh\" }>): string {\n\t// Un socket por usuario+host+puerto, no por proceso: es lo que permite\n\t// reutilizar conexión entre llamadas sucesivas de `bash`/`read`/`write`.\n\t//\n\t// `sockaddr_un.sun_path` tiene un límite de ~104 bytes (macOS) / ~108\n\t// (Linux), y OpenSSH añade un sufijo aleatorio de 17 caracteres a la ruta\n\t// ANTES del bind. `os.tmpdir()` en macOS ya es\n\t// `/var/folders/xx/xxxxxxxx/T/`, así que un `ControlPath` \"legible\" con el\n\t// host de por medio revienta ese límite (visto en producción: \"unix_listener:\n\t// path … too long\"). Un hash corto en `/tmp` (siempre corto en cualquier\n\t// POSIX) lo evita sin dejar de ser estable por destino.\n\tconst clave = `${destino.usuario ?? \"\"}@${destino.host}:${destino.puerto ?? 22}`;\n\tconst hash = createHash(\"sha256\").update(clave).digest(\"hex\").slice(0, 16);\n\treturn join(\"/tmp\", `ada-ssh-${hash}.sock`);\n}\n\n/**\n * Argv para ejecutar `comandoRemoto` (una línea de shell POSIX) en el\n * destino, con `cwd` (ruta remota) como directorio de trabajo.\n */\nfunction argvRemoto(destino: Destino, cwd: string, comandoRemoto: string): { bin: string; args: string[] } {\n\tconst conCd = cwd && cwd !== \".\" ? `cd -- ${comillaPosix(cwd)} && ${comandoRemoto}` : comandoRemoto;\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\": {\n\t\t\tconst objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;\n\t\t\tconst args = [\n\t\t\t\t\"-o\",\n\t\t\t\t\"BatchMode=yes\",\n\t\t\t\t\"-o\",\n\t\t\t\t\"ControlMaster=auto\",\n\t\t\t\t\"-o\",\n\t\t\t\t`ControlPersist=${SSH_CONTROL_PERSIST_S}`,\n\t\t\t\t\"-o\",\n\t\t\t\t`ControlPath=${socketControlMaster(destino)}`,\n\t\t\t];\n\t\t\tif (destino.puerto) args.push(\"-p\", String(destino.puerto));\n\t\t\targs.push(objetivo, conCd);\n\t\t\treturn { bin: \"ssh\", args };\n\t\t}\n\t\tcase \"docker\":\n\t\t\treturn {\n\t\t\t\tbin: \"docker\",\n\t\t\t\targs: [\"exec\", \"-w\", cwd && cwd !== \".\" ? cwd : \"/\", destino.contenedor, \"sh\", \"-c\", comandoRemoto],\n\t\t\t};\n\t\tcase \"wsl\":\n\t\t\treturn {\n\t\t\t\tbin: \"wsl.exe\",\n\t\t\t\targs: [\"-d\", destino.distro, \"--cd\", cwd && cwd !== \".\" ? cwd : \"~\", \"--\", \"sh\", \"-c\", comandoRemoto],\n\t\t\t};\n\t}\n}\n\n/**\n * Igual que `argvRemoto`, pero con el stdin del proceso remoto conectado.\n *\n * `ssh` y `wsl.exe` heredan el stdio que `spawn` les da sin flags extra;\n * `docker exec` no — sin `-i` el contenedor nunca ve lo que se le escribe,\n * y `ficheros.ts` necesita justo eso para `write`/`edit`.\n */\nfunction argvRemotoConStdin(destino: Destino, cwd: string, comandoRemoto: string): { bin: string; args: string[] } {\n\tconst { bin, args } = argvRemoto(destino, cwd, comandoRemoto);\n\tif (destino.tipo !== \"docker\") return { bin, args };\n\treturn { bin, args: [\"exec\", \"-i\", ...args.slice(1)] };\n}\n\n/** Lanza `comandoRemoto` en el destino y devuelve el proceso hijo crudo (stdio: pipe/pipe/pipe). */\nexport function lanza(\n\tdestino: Destino,\n\tcwd: string,\n\tcomandoRemoto: string,\n\topciones?: { stdin?: boolean; env?: NodeJS.ProcessEnv },\n): ChildProcess {\n\tconst { bin, args } = opciones?.stdin\n\t\t? argvRemotoConStdin(destino, cwd, comandoRemoto)\n\t\t: argvRemoto(destino, cwd, comandoRemoto);\n\treturn spawnProcess(bin, args, {\n\t\tstdio: [opciones?.stdin ? \"pipe\" : \"ignore\", \"pipe\", \"pipe\"],\n\t\tenv: opciones?.env ?? process.env,\n\t\twindowsHide: true,\n\t});\n}\n\n/** Ejecuta y espera, acumulando stdout/stderr por separado. Para `ficheros.ts`: comandos cortos, salida completa en memoria. */\nexport async function ejecutaCapturando(\n\tdestino: Destino,\n\tcwd: string,\n\tcomandoRemoto: string,\n\topciones?: { stdin?: Buffer | string },\n): Promise<{ exitCode: number | null; stdout: Buffer; stderr: Buffer }> {\n\tconst child = lanza(destino, cwd, comandoRemoto, { stdin: opciones?.stdin !== undefined });\n\tconst stdoutChunks: Buffer[] = [];\n\tconst stderrChunks: Buffer[] = [];\n\tchild.stdout?.on(\"data\", (d: Buffer) => stdoutChunks.push(d));\n\tchild.stderr?.on(\"data\", (d: Buffer) => stderrChunks.push(d));\n\tif (opciones?.stdin !== undefined) {\n\t\tchild.stdin?.on(\"error\", () => {}); // EPIPE si el remoto cierra antes de tiempo: el exitCode ya cuenta la historia\n\t\tchild.stdin?.end(opciones.stdin);\n\t}\n\tconst exitCode = await waitForChildProcess(child);\n\treturn { exitCode, stdout: Buffer.concat(stdoutChunks), stderr: Buffer.concat(stderrChunks) };\n}\n\n/**\n * `BashOperations` que delega en el destino en vez del shell local.\n *\n * Misma forma que `createLocalBashOperations` (señal de aborto, timeout,\n * streaming por `onData`) para que la tool `bash` no note la diferencia más\n * allá de dónde corre el comando.\n */\nexport function creaBashOperations(destino: Destino): BashOperations {\n\treturn {\n\t\texec: (command, cwd, { onData, signal, timeout, env }) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// `env` (las PI_* de la sesión) llega aquí pensado para un shell\n\t\t\t\t// LOCAL: se lo pasamos al cliente ssh/docker/wsl.exe (le hace falta\n\t\t\t\t// su propio PATH, SSH_AUTH_SOCK…), pero eso NO las mete en el shell\n\t\t\t\t// REMOTO — ssh no reenvía variables salvo que el sshd de destino\n\t\t\t\t// tenga AcceptEnv configurado, que no podemos asumir. Un comando que\n\t\t\t\t// dependa de PI_MODEL, etc. dentro de --remoto no las va a ver.\n\t\t\t\tconst child = lanza(destino, cwd, command, { env });\n\t\t\t\tlet timedOut = false;\n\t\t\t\tlet timeoutHandle: NodeJS.Timeout | undefined;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t\t\t};\n\t\t\t\tif (timeout !== undefined) {\n\t\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t\t\t\t}, timeout * 1000);\n\t\t\t\t}\n\t\t\t\tchild.stdout?.on(\"data\", onData);\n\t\t\t\tchild.stderr?.on(\"data\", onData);\n\t\t\t\tif (signal) {\n\t\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t}\n\t\t\t\twaitForChildProcess(child)\n\t\t\t\t\t.then((exitCode) => {\n\t\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\t\treject(new Error(\"aborted\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (timedOut) {\n\t\t\t\t\t\t\treject(new Error(`timeout:${timeout}`));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve({ exitCode });\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tif (timeoutHandle) clearTimeout(timeoutHandle);\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t});\n\t\t\t});\n\t\t},\n\t};\n}\n\n/**\n * Cierra el `ControlMaster` de SSH explícitamente, en vez de esperar los\n * `ControlPersist` segundos de gracia. Para Docker y WSL no hay nada que\n * cerrar: cada llamada es un proceso independiente que ya ha terminado.\n *\n * ponytail: si `-O exit` falla (el master ya murió, o nunca llegó a abrirse\n * porque no se ejecutó ningún comando), no es un error — no había nada que\n * cerrar. El techo real es `ControlPersist`: aunque esta llamada se pierda\n * (proceso matado con -9), el socket se limpia solo a los\n * `SSH_CONTROL_PERSIST_S` segundos.\n */\nexport async function cierraConexion(destino: Destino): Promise<void> {\n\tif (destino.tipo !== \"ssh\") return;\n\tconst objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;\n\tconst args = [\"-o\", `ControlPath=${socketControlMaster(destino)}`, \"-O\", \"exit\", objetivo];\n\tawait new Promise<void>((resolve) => {\n\t\tconst child = spawnProcess(\"ssh\", args, { stdio: \"ignore\" });\n\t\tchild.on(\"exit\", () => resolve());\n\t\tchild.on(\"error\", () => resolve());\n\t});\n}\n"]}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Ejecuta comandos EN el destino: SSH, Docker o WSL.
3
+ *
4
+ * Sin dependencias nuevas: cada transporte es el binario del sistema
5
+ * (`ssh`, `docker`, `wsl.exe`) invocado con `spawn`, igual que
6
+ * `createLocalBashOperations` hace con el shell local en `tools/bash.ts`.
7
+ *
8
+ * SSH reutiliza conexión con `ControlMaster`: todas las invocaciones pasan el
9
+ * mismo `ControlPath`, así que OpenSSH abre el túnel una vez y lo comparte.
10
+ * Docker y WSL no lo necesitan — `docker exec` y `wsl.exe` ya son ligeros por
11
+ * llamada, y no hay handshake que amortizar.
12
+ */
13
+ import { createHash } from "node:crypto";
14
+ import { join } from "node:path";
15
+ import { spawnProcess, spawnProcessSync, waitForChildProcess } from "../../utils/child-process.js";
16
+ import { killProcessTree } from "../../utils/shell.js";
17
+ import { describeDestino } from "./destino.js";
18
+ /** Segundos que OpenSSH mantiene el `ControlMaster` vivo sin actividad. Ver `cierraConexion`. */
19
+ const SSH_CONTROL_PERSIST_S = 30;
20
+ function binarioDe(destino) {
21
+ switch (destino.tipo) {
22
+ case "ssh":
23
+ return "ssh";
24
+ case "docker":
25
+ return "docker";
26
+ case "wsl":
27
+ return "wsl.exe";
28
+ }
29
+ }
30
+ /**
31
+ * Comprueba que el binario del transporte existe ANTES de intentar usarlo.
32
+ *
33
+ * `spawnSync` con un binario ausente falla en la propia llamada al sistema
34
+ * (`ENOENT`), sin lanzar el proceso — los argumentos no importan para esta
35
+ * comprobación, solo si el spawn en sí pudo arrancar.
36
+ */
37
+ export function compruebaBinario(destino) {
38
+ const bin = binarioDe(destino);
39
+ const r = spawnProcessSync(bin, ["--version"], { encoding: "utf-8" });
40
+ if (r.error && r.error.code === "ENOENT") {
41
+ throw new Error(`Falta el binario \`${bin}\` para --remoto ${describeDestino(destino)}. Instálalo y vuelve a intentarlo.`);
42
+ }
43
+ }
44
+ /** Comillas simples POSIX, válidas para sh/bash/dash en el lado remoto. */
45
+ export function comillaPosix(texto) {
46
+ return `'${texto.replaceAll("'", `'\\''`)}'`;
47
+ }
48
+ function socketControlMaster(destino) {
49
+ // Un socket por usuario+host+puerto, no por proceso: es lo que permite
50
+ // reutilizar conexión entre llamadas sucesivas de `bash`/`read`/`write`.
51
+ //
52
+ // `sockaddr_un.sun_path` tiene un límite de ~104 bytes (macOS) / ~108
53
+ // (Linux), y OpenSSH añade un sufijo aleatorio de 17 caracteres a la ruta
54
+ // ANTES del bind. `os.tmpdir()` en macOS ya es
55
+ // `/var/folders/xx/xxxxxxxx/T/`, así que un `ControlPath` "legible" con el
56
+ // host de por medio revienta ese límite (visto en producción: "unix_listener:
57
+ // path … too long"). Un hash corto en `/tmp` (siempre corto en cualquier
58
+ // POSIX) lo evita sin dejar de ser estable por destino.
59
+ const clave = `${destino.usuario ?? ""}@${destino.host}:${destino.puerto ?? 22}`;
60
+ const hash = createHash("sha256").update(clave).digest("hex").slice(0, 16);
61
+ return join("/tmp", `ada-ssh-${hash}.sock`);
62
+ }
63
+ /**
64
+ * Argv para ejecutar `comandoRemoto` (una línea de shell POSIX) en el
65
+ * destino, con `cwd` (ruta remota) como directorio de trabajo.
66
+ */
67
+ function argvRemoto(destino, cwd, comandoRemoto) {
68
+ const conCd = cwd && cwd !== "." ? `cd -- ${comillaPosix(cwd)} && ${comandoRemoto}` : comandoRemoto;
69
+ switch (destino.tipo) {
70
+ case "ssh": {
71
+ const objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;
72
+ const args = [
73
+ "-o",
74
+ "BatchMode=yes",
75
+ "-o",
76
+ "ControlMaster=auto",
77
+ "-o",
78
+ `ControlPersist=${SSH_CONTROL_PERSIST_S}`,
79
+ "-o",
80
+ `ControlPath=${socketControlMaster(destino)}`,
81
+ ];
82
+ if (destino.puerto)
83
+ args.push("-p", String(destino.puerto));
84
+ args.push(objetivo, conCd);
85
+ return { bin: "ssh", args };
86
+ }
87
+ case "docker":
88
+ return {
89
+ bin: "docker",
90
+ args: ["exec", "-w", cwd && cwd !== "." ? cwd : "/", destino.contenedor, "sh", "-c", comandoRemoto],
91
+ };
92
+ case "wsl":
93
+ return {
94
+ bin: "wsl.exe",
95
+ args: ["-d", destino.distro, "--cd", cwd && cwd !== "." ? cwd : "~", "--", "sh", "-c", comandoRemoto],
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * Igual que `argvRemoto`, pero con el stdin del proceso remoto conectado.
101
+ *
102
+ * `ssh` y `wsl.exe` heredan el stdio que `spawn` les da sin flags extra;
103
+ * `docker exec` no — sin `-i` el contenedor nunca ve lo que se le escribe,
104
+ * y `ficheros.ts` necesita justo eso para `write`/`edit`.
105
+ */
106
+ function argvRemotoConStdin(destino, cwd, comandoRemoto) {
107
+ const { bin, args } = argvRemoto(destino, cwd, comandoRemoto);
108
+ if (destino.tipo !== "docker")
109
+ return { bin, args };
110
+ return { bin, args: ["exec", "-i", ...args.slice(1)] };
111
+ }
112
+ /** Lanza `comandoRemoto` en el destino y devuelve el proceso hijo crudo (stdio: pipe/pipe/pipe). */
113
+ export function lanza(destino, cwd, comandoRemoto, opciones) {
114
+ const { bin, args } = opciones?.stdin
115
+ ? argvRemotoConStdin(destino, cwd, comandoRemoto)
116
+ : argvRemoto(destino, cwd, comandoRemoto);
117
+ return spawnProcess(bin, args, {
118
+ stdio: [opciones?.stdin ? "pipe" : "ignore", "pipe", "pipe"],
119
+ env: opciones?.env ?? process.env,
120
+ windowsHide: true,
121
+ });
122
+ }
123
+ /** Ejecuta y espera, acumulando stdout/stderr por separado. Para `ficheros.ts`: comandos cortos, salida completa en memoria. */
124
+ export async function ejecutaCapturando(destino, cwd, comandoRemoto, opciones) {
125
+ const child = lanza(destino, cwd, comandoRemoto, { stdin: opciones?.stdin !== undefined });
126
+ const stdoutChunks = [];
127
+ const stderrChunks = [];
128
+ child.stdout?.on("data", (d) => stdoutChunks.push(d));
129
+ child.stderr?.on("data", (d) => stderrChunks.push(d));
130
+ if (opciones?.stdin !== undefined) {
131
+ child.stdin?.on("error", () => { }); // EPIPE si el remoto cierra antes de tiempo: el exitCode ya cuenta la historia
132
+ child.stdin?.end(opciones.stdin);
133
+ }
134
+ const exitCode = await waitForChildProcess(child);
135
+ return { exitCode, stdout: Buffer.concat(stdoutChunks), stderr: Buffer.concat(stderrChunks) };
136
+ }
137
+ /**
138
+ * `BashOperations` que delega en el destino en vez del shell local.
139
+ *
140
+ * Misma forma que `createLocalBashOperations` (señal de aborto, timeout,
141
+ * streaming por `onData`) para que la tool `bash` no note la diferencia más
142
+ * allá de dónde corre el comando.
143
+ */
144
+ export function creaBashOperations(destino) {
145
+ return {
146
+ exec: (command, cwd, { onData, signal, timeout, env }) => {
147
+ return new Promise((resolve, reject) => {
148
+ if (signal?.aborted) {
149
+ reject(new Error("aborted"));
150
+ return;
151
+ }
152
+ // `env` (las PI_* de la sesión) llega aquí pensado para un shell
153
+ // LOCAL: se lo pasamos al cliente ssh/docker/wsl.exe (le hace falta
154
+ // su propio PATH, SSH_AUTH_SOCK…), pero eso NO las mete en el shell
155
+ // REMOTO — ssh no reenvía variables salvo que el sshd de destino
156
+ // tenga AcceptEnv configurado, que no podemos asumir. Un comando que
157
+ // dependa de PI_MODEL, etc. dentro de --remoto no las va a ver.
158
+ const child = lanza(destino, cwd, command, { env });
159
+ let timedOut = false;
160
+ let timeoutHandle;
161
+ const onAbort = () => {
162
+ if (child.pid)
163
+ killProcessTree(child.pid);
164
+ };
165
+ if (timeout !== undefined) {
166
+ timeoutHandle = setTimeout(() => {
167
+ timedOut = true;
168
+ if (child.pid)
169
+ killProcessTree(child.pid);
170
+ }, timeout * 1000);
171
+ }
172
+ child.stdout?.on("data", onData);
173
+ child.stderr?.on("data", onData);
174
+ if (signal) {
175
+ if (signal.aborted)
176
+ onAbort();
177
+ else
178
+ signal.addEventListener("abort", onAbort, { once: true });
179
+ }
180
+ waitForChildProcess(child)
181
+ .then((exitCode) => {
182
+ if (signal?.aborted) {
183
+ reject(new Error("aborted"));
184
+ return;
185
+ }
186
+ if (timedOut) {
187
+ reject(new Error(`timeout:${timeout}`));
188
+ return;
189
+ }
190
+ resolve({ exitCode });
191
+ })
192
+ .catch(reject)
193
+ .finally(() => {
194
+ if (timeoutHandle)
195
+ clearTimeout(timeoutHandle);
196
+ if (signal)
197
+ signal.removeEventListener("abort", onAbort);
198
+ });
199
+ });
200
+ },
201
+ };
202
+ }
203
+ /**
204
+ * Cierra el `ControlMaster` de SSH explícitamente, en vez de esperar los
205
+ * `ControlPersist` segundos de gracia. Para Docker y WSL no hay nada que
206
+ * cerrar: cada llamada es un proceso independiente que ya ha terminado.
207
+ *
208
+ * ponytail: si `-O exit` falla (el master ya murió, o nunca llegó a abrirse
209
+ * porque no se ejecutó ningún comando), no es un error — no había nada que
210
+ * cerrar. El techo real es `ControlPersist`: aunque esta llamada se pierda
211
+ * (proceso matado con -9), el socket se limpia solo a los
212
+ * `SSH_CONTROL_PERSIST_S` segundos.
213
+ */
214
+ export async function cierraConexion(destino) {
215
+ if (destino.tipo !== "ssh")
216
+ return;
217
+ const objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;
218
+ const args = ["-o", `ControlPath=${socketControlMaster(destino)}`, "-O", "exit", objetivo];
219
+ await new Promise((resolve) => {
220
+ const child = spawnProcess("ssh", args, { stdio: "ignore" });
221
+ child.on("exit", () => resolve());
222
+ child.on("error", () => resolve());
223
+ });
224
+ }
225
+ //# sourceMappingURL=ejecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejecutor.js","sourceRoot":"","sources":["../../../src/core/remoto/ejecutor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAgB,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7D,iGAAiG;AACjG,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,SAAS,SAAS,CAAC,OAAgB,EAAU;IAC5C,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,KAAK;YACT,OAAO,KAAK,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,KAAK;YACT,OAAO,SAAS,CAAC;IACnB,CAAC;AAAA,CACD;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAQ;IACxD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC,KAAK,IAAK,CAAC,CAAC,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACd,sBAAsB,GAAG,oBAAoB,eAAe,CAAC,OAAO,CAAC,qCAAoC,CACzG,CAAC;IACH,CAAC;AAAA,CACD;AAED,4EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,KAAa,EAAU;IACnD,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAAA,CAC7C;AAED,SAAS,mBAAmB,CAAC,OAA0C,EAAU;IAChF,uEAAuE;IACvE,0EAAyE;IACzE,EAAE;IACF,uEAAsE;IACtE,2EAA0E;IAC1E,+CAA+C;IAC/C,4EAA2E;IAC3E,gFAA8E;IAC9E,2EAAyE;IACzE,wDAAwD;IACxD,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,OAAO,CAAC,CAAC;AAAA,CAC5C;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,OAAgB,EAAE,GAAW,EAAE,aAAqB,EAAmC;IAC1G,MAAM,KAAK,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;IACpG,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,KAAK,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YACvF,MAAM,IAAI,GAAG;gBACZ,IAAI;gBACJ,eAAe;gBACf,IAAI;gBACJ,oBAAoB;gBACpB,IAAI;gBACJ,kBAAkB,qBAAqB,EAAE;gBACzC,IAAI;gBACJ,eAAe,mBAAmB,CAAC,OAAO,CAAC,EAAE;aAC7C,CAAC;YACF,IAAI,OAAO,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO;gBACN,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC;aACnG,CAAC;QACH,KAAK,KAAK;YACT,OAAO;gBACN,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC;aACrG,CAAC;IACJ,CAAC;AAAA,CACD;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,OAAgB,EAAE,GAAW,EAAE,aAAqB,EAAmC;IAClH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,CACvD;AAED,oGAAoG;AACpG,MAAM,UAAU,KAAK,CACpB,OAAgB,EAChB,GAAW,EACX,aAAqB,EACrB,QAAuD,EACxC;IACf,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,KAAK;QACpC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC;QACjD,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC3C,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;QAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAC5D,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;QACjC,WAAW,EAAE,IAAI;KACjB,CAAC,CAAC;AAAA,CACH;AAED,gIAAgI;AAChI,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,OAAgB,EAChB,GAAW,EACX,aAAqB,EACrB,QAAsC,EACiC;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,+EAA+E;QACnH,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AAAA,CAC9F;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAkB;IACpE,OAAO;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;gBACvC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC7B,OAAO;gBACR,CAAC;gBACD,mEAAiE;gBACjE,oEAAoE;gBACpE,sEAAoE;gBACpE,oEAAiE;gBACjE,qEAAqE;gBACrE,gEAAgE;gBAChE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,aAAyC,CAAC;gBAC9C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;oBACrB,IAAI,KAAK,CAAC,GAAG;wBAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAA,CAC1C,CAAC;gBACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;wBAChC,QAAQ,GAAG,IAAI,CAAC;wBAChB,IAAI,KAAK,CAAC,GAAG;4BAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAA,CAC1C,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;gBACpB,CAAC;gBACD,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjC,IAAI,MAAM,EAAE,CAAC;oBACZ,IAAI,MAAM,CAAC,OAAO;wBAAE,OAAO,EAAE,CAAC;;wBACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;gBACD,mBAAmB,CAAC,KAAK,CAAC;qBACxB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACnB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC7B,OAAO;oBACR,CAAC;oBACD,IAAI,QAAQ,EAAE,CAAC;wBACd,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC;wBACxC,OAAO;oBACR,CAAC;oBACD,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAAA,CACtB,CAAC;qBACD,KAAK,CAAC,MAAM,CAAC;qBACb,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,IAAI,aAAa;wBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAI,MAAM;wBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAAA,CACzD,CAAC,CAAC;YAAA,CACJ,CAAC,CAAC;QAAA,CACH;KACD,CAAC;AAAA,CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAiB;IACrE,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACvF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,eAAe,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3F,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAAA,CACnC,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * Ejecuta comandos EN el destino: SSH, Docker o WSL.\n *\n * Sin dependencias nuevas: cada transporte es el binario del sistema\n * (`ssh`, `docker`, `wsl.exe`) invocado con `spawn`, igual que\n * `createLocalBashOperations` hace con el shell local en `tools/bash.ts`.\n *\n * SSH reutiliza conexión con `ControlMaster`: todas las invocaciones pasan el\n * mismo `ControlPath`, así que OpenSSH abre el túnel una vez y lo comparte.\n * Docker y WSL no lo necesitan — `docker exec` y `wsl.exe` ya son ligeros por\n * llamada, y no hay handshake que amortizar.\n */\n\nimport type { ChildProcess } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport { spawnProcess, spawnProcessSync, waitForChildProcess } from \"../../utils/child-process.ts\";\nimport { killProcessTree } from \"../../utils/shell.ts\";\nimport type { BashOperations } from \"../tools/bash.ts\";\nimport { type Destino, describeDestino } from \"./destino.ts\";\n\n/** Segundos que OpenSSH mantiene el `ControlMaster` vivo sin actividad. Ver `cierraConexion`. */\nconst SSH_CONTROL_PERSIST_S = 30;\n\nfunction binarioDe(destino: Destino): string {\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\":\n\t\t\treturn \"ssh\";\n\t\tcase \"docker\":\n\t\t\treturn \"docker\";\n\t\tcase \"wsl\":\n\t\t\treturn \"wsl.exe\";\n\t}\n}\n\n/**\n * Comprueba que el binario del transporte existe ANTES de intentar usarlo.\n *\n * `spawnSync` con un binario ausente falla en la propia llamada al sistema\n * (`ENOENT`), sin lanzar el proceso — los argumentos no importan para esta\n * comprobación, solo si el spawn en sí pudo arrancar.\n */\nexport function compruebaBinario(destino: Destino): void {\n\tconst bin = binarioDe(destino);\n\tconst r = spawnProcessSync(bin, [\"--version\"], { encoding: \"utf-8\" });\n\tif (r.error && (r.error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\tthrow new Error(\n\t\t\t`Falta el binario \\`${bin}\\` para --remoto ${describeDestino(destino)}. Instálalo y vuelve a intentarlo.`,\n\t\t);\n\t}\n}\n\n/** Comillas simples POSIX, válidas para sh/bash/dash en el lado remoto. */\nexport function comillaPosix(texto: string): string {\n\treturn `'${texto.replaceAll(\"'\", `'\\\\''`)}'`;\n}\n\nfunction socketControlMaster(destino: Extract<Destino, { tipo: \"ssh\" }>): string {\n\t// Un socket por usuario+host+puerto, no por proceso: es lo que permite\n\t// reutilizar conexión entre llamadas sucesivas de `bash`/`read`/`write`.\n\t//\n\t// `sockaddr_un.sun_path` tiene un límite de ~104 bytes (macOS) / ~108\n\t// (Linux), y OpenSSH añade un sufijo aleatorio de 17 caracteres a la ruta\n\t// ANTES del bind. `os.tmpdir()` en macOS ya es\n\t// `/var/folders/xx/xxxxxxxx/T/`, así que un `ControlPath` \"legible\" con el\n\t// host de por medio revienta ese límite (visto en producción: \"unix_listener:\n\t// path … too long\"). Un hash corto en `/tmp` (siempre corto en cualquier\n\t// POSIX) lo evita sin dejar de ser estable por destino.\n\tconst clave = `${destino.usuario ?? \"\"}@${destino.host}:${destino.puerto ?? 22}`;\n\tconst hash = createHash(\"sha256\").update(clave).digest(\"hex\").slice(0, 16);\n\treturn join(\"/tmp\", `ada-ssh-${hash}.sock`);\n}\n\n/**\n * Argv para ejecutar `comandoRemoto` (una línea de shell POSIX) en el\n * destino, con `cwd` (ruta remota) como directorio de trabajo.\n */\nfunction argvRemoto(destino: Destino, cwd: string, comandoRemoto: string): { bin: string; args: string[] } {\n\tconst conCd = cwd && cwd !== \".\" ? `cd -- ${comillaPosix(cwd)} && ${comandoRemoto}` : comandoRemoto;\n\tswitch (destino.tipo) {\n\t\tcase \"ssh\": {\n\t\t\tconst objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;\n\t\t\tconst args = [\n\t\t\t\t\"-o\",\n\t\t\t\t\"BatchMode=yes\",\n\t\t\t\t\"-o\",\n\t\t\t\t\"ControlMaster=auto\",\n\t\t\t\t\"-o\",\n\t\t\t\t`ControlPersist=${SSH_CONTROL_PERSIST_S}`,\n\t\t\t\t\"-o\",\n\t\t\t\t`ControlPath=${socketControlMaster(destino)}`,\n\t\t\t];\n\t\t\tif (destino.puerto) args.push(\"-p\", String(destino.puerto));\n\t\t\targs.push(objetivo, conCd);\n\t\t\treturn { bin: \"ssh\", args };\n\t\t}\n\t\tcase \"docker\":\n\t\t\treturn {\n\t\t\t\tbin: \"docker\",\n\t\t\t\targs: [\"exec\", \"-w\", cwd && cwd !== \".\" ? cwd : \"/\", destino.contenedor, \"sh\", \"-c\", comandoRemoto],\n\t\t\t};\n\t\tcase \"wsl\":\n\t\t\treturn {\n\t\t\t\tbin: \"wsl.exe\",\n\t\t\t\targs: [\"-d\", destino.distro, \"--cd\", cwd && cwd !== \".\" ? cwd : \"~\", \"--\", \"sh\", \"-c\", comandoRemoto],\n\t\t\t};\n\t}\n}\n\n/**\n * Igual que `argvRemoto`, pero con el stdin del proceso remoto conectado.\n *\n * `ssh` y `wsl.exe` heredan el stdio que `spawn` les da sin flags extra;\n * `docker exec` no — sin `-i` el contenedor nunca ve lo que se le escribe,\n * y `ficheros.ts` necesita justo eso para `write`/`edit`.\n */\nfunction argvRemotoConStdin(destino: Destino, cwd: string, comandoRemoto: string): { bin: string; args: string[] } {\n\tconst { bin, args } = argvRemoto(destino, cwd, comandoRemoto);\n\tif (destino.tipo !== \"docker\") return { bin, args };\n\treturn { bin, args: [\"exec\", \"-i\", ...args.slice(1)] };\n}\n\n/** Lanza `comandoRemoto` en el destino y devuelve el proceso hijo crudo (stdio: pipe/pipe/pipe). */\nexport function lanza(\n\tdestino: Destino,\n\tcwd: string,\n\tcomandoRemoto: string,\n\topciones?: { stdin?: boolean; env?: NodeJS.ProcessEnv },\n): ChildProcess {\n\tconst { bin, args } = opciones?.stdin\n\t\t? argvRemotoConStdin(destino, cwd, comandoRemoto)\n\t\t: argvRemoto(destino, cwd, comandoRemoto);\n\treturn spawnProcess(bin, args, {\n\t\tstdio: [opciones?.stdin ? \"pipe\" : \"ignore\", \"pipe\", \"pipe\"],\n\t\tenv: opciones?.env ?? process.env,\n\t\twindowsHide: true,\n\t});\n}\n\n/** Ejecuta y espera, acumulando stdout/stderr por separado. Para `ficheros.ts`: comandos cortos, salida completa en memoria. */\nexport async function ejecutaCapturando(\n\tdestino: Destino,\n\tcwd: string,\n\tcomandoRemoto: string,\n\topciones?: { stdin?: Buffer | string },\n): Promise<{ exitCode: number | null; stdout: Buffer; stderr: Buffer }> {\n\tconst child = lanza(destino, cwd, comandoRemoto, { stdin: opciones?.stdin !== undefined });\n\tconst stdoutChunks: Buffer[] = [];\n\tconst stderrChunks: Buffer[] = [];\n\tchild.stdout?.on(\"data\", (d: Buffer) => stdoutChunks.push(d));\n\tchild.stderr?.on(\"data\", (d: Buffer) => stderrChunks.push(d));\n\tif (opciones?.stdin !== undefined) {\n\t\tchild.stdin?.on(\"error\", () => {}); // EPIPE si el remoto cierra antes de tiempo: el exitCode ya cuenta la historia\n\t\tchild.stdin?.end(opciones.stdin);\n\t}\n\tconst exitCode = await waitForChildProcess(child);\n\treturn { exitCode, stdout: Buffer.concat(stdoutChunks), stderr: Buffer.concat(stderrChunks) };\n}\n\n/**\n * `BashOperations` que delega en el destino en vez del shell local.\n *\n * Misma forma que `createLocalBashOperations` (señal de aborto, timeout,\n * streaming por `onData`) para que la tool `bash` no note la diferencia más\n * allá de dónde corre el comando.\n */\nexport function creaBashOperations(destino: Destino): BashOperations {\n\treturn {\n\t\texec: (command, cwd, { onData, signal, timeout, env }) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// `env` (las PI_* de la sesión) llega aquí pensado para un shell\n\t\t\t\t// LOCAL: se lo pasamos al cliente ssh/docker/wsl.exe (le hace falta\n\t\t\t\t// su propio PATH, SSH_AUTH_SOCK…), pero eso NO las mete en el shell\n\t\t\t\t// REMOTO — ssh no reenvía variables salvo que el sshd de destino\n\t\t\t\t// tenga AcceptEnv configurado, que no podemos asumir. Un comando que\n\t\t\t\t// dependa de PI_MODEL, etc. dentro de --remoto no las va a ver.\n\t\t\t\tconst child = lanza(destino, cwd, command, { env });\n\t\t\t\tlet timedOut = false;\n\t\t\t\tlet timeoutHandle: NodeJS.Timeout | undefined;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t\t\t};\n\t\t\t\tif (timeout !== undefined) {\n\t\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t\t\t\t}, timeout * 1000);\n\t\t\t\t}\n\t\t\t\tchild.stdout?.on(\"data\", onData);\n\t\t\t\tchild.stderr?.on(\"data\", onData);\n\t\t\t\tif (signal) {\n\t\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t}\n\t\t\t\twaitForChildProcess(child)\n\t\t\t\t\t.then((exitCode) => {\n\t\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\t\treject(new Error(\"aborted\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (timedOut) {\n\t\t\t\t\t\t\treject(new Error(`timeout:${timeout}`));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve({ exitCode });\n\t\t\t\t\t})\n\t\t\t\t\t.catch(reject)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tif (timeoutHandle) clearTimeout(timeoutHandle);\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t});\n\t\t\t});\n\t\t},\n\t};\n}\n\n/**\n * Cierra el `ControlMaster` de SSH explícitamente, en vez de esperar los\n * `ControlPersist` segundos de gracia. Para Docker y WSL no hay nada que\n * cerrar: cada llamada es un proceso independiente que ya ha terminado.\n *\n * ponytail: si `-O exit` falla (el master ya murió, o nunca llegó a abrirse\n * porque no se ejecutó ningún comando), no es un error — no había nada que\n * cerrar. El techo real es `ControlPersist`: aunque esta llamada se pierda\n * (proceso matado con -9), el socket se limpia solo a los\n * `SSH_CONTROL_PERSIST_S` segundos.\n */\nexport async function cierraConexion(destino: Destino): Promise<void> {\n\tif (destino.tipo !== \"ssh\") return;\n\tconst objetivo = destino.usuario ? `${destino.usuario}@${destino.host}` : destino.host;\n\tconst args = [\"-o\", `ControlPath=${socketControlMaster(destino)}`, \"-O\", \"exit\", objetivo];\n\tawait new Promise<void>((resolve) => {\n\t\tconst child = spawnProcess(\"ssh\", args, { stdio: \"ignore\" });\n\t\tchild.on(\"exit\", () => resolve());\n\t\tchild.on(\"error\", () => resolve());\n\t});\n}\n"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Lee y escribe ficheros EN el destino, montado sobre `ejecutor.ts`.
3
+ *
4
+ * No hay SFTP ni `sshfs`: son comandos POSIX cortos (`cat`, `test`, `mkdir`)
5
+ * a través del mismo transporte que ya usa `bash` — ni una dependencia más,
6
+ * y el mismo camino que `--remoto` ya tiene que dejar pasar por la política
7
+ * de aprobación (ver `core/aprobacion/politica.ts`).
8
+ *
9
+ * `cat` sobre stdout capturado como `Buffer` es binario-seguro: no hace falta
10
+ * base64 porque nunca pasa por un terminal ni por un parseo de texto, solo
11
+ * por la tubería del proceso hijo.
12
+ */
13
+ import type { EditOperations } from "../tools/edit.ts";
14
+ import type { ReadOperations } from "../tools/read.ts";
15
+ import type { WriteOperations } from "../tools/write.ts";
16
+ import type { Destino } from "./destino.ts";
17
+ /**
18
+ * `ReadOperations` remotas.
19
+ *
20
+ * `detectImageMimeType` se deja sin definir a propósito: es opcional en la
21
+ * interfaz, y detectarlo hoy exigiría traer los bytes completos al cliente
22
+ * solo para mirar la cabecera. `read` remoto trata todo como texto.
23
+ * ponytail: sin deteción de imágenes remotas; añadir si hace falta leer
24
+ * capturas de pantalla de un contenedor o servidor.
25
+ */
26
+ export declare function creaReadOperations(destino: Destino, cwd: string): ReadOperations;
27
+ export declare function creaWriteOperations(destino: Destino, cwd: string): WriteOperations;
28
+ export declare function creaEditOperations(destino: Destino, cwd: string): EditOperations;
29
+ //# sourceMappingURL=ficheros.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ficheros.d.ts","sourceRoot":"","sources":["../../../src/core/remoto/ficheros.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA4D5C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAKhF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAKlF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAMhF","sourcesContent":["/**\n * Lee y escribe ficheros EN el destino, montado sobre `ejecutor.ts`.\n *\n * No hay SFTP ni `sshfs`: son comandos POSIX cortos (`cat`, `test`, `mkdir`)\n * a través del mismo transporte que ya usa `bash` — ni una dependencia más,\n * y el mismo camino que `--remoto` ya tiene que dejar pasar por la política\n * de aprobación (ver `core/aprobacion/politica.ts`).\n *\n * `cat` sobre stdout capturado como `Buffer` es binario-seguro: no hace falta\n * base64 porque nunca pasa por un terminal ni por un parseo de texto, solo\n * por la tubería del proceso hijo.\n */\n\nimport type { EditOperations } from \"../tools/edit.ts\";\nimport type { ReadOperations } from \"../tools/read.ts\";\nimport type { WriteOperations } from \"../tools/write.ts\";\nimport type { Destino } from \"./destino.ts\";\nimport { comillaPosix, ejecutaCapturando } from \"./ejecutor.ts\";\n\nfunction errorRemoto(accion: string, ruta: string, resultado: { exitCode: number | null; stderr: Buffer }): Error {\n\tconst detalle = resultado.stderr.toString(\"utf-8\").trim();\n\treturn new Error(\n\t\t`${accion} \"${ruta}\" en el destino remoto falló (código ${resultado.exitCode ?? \"desconocido\"})${detalle ? `: ${detalle}` : \"\"}`,\n\t);\n}\n\nasync function leeRemoto(destino: Destino, cwd: string, rutaAbsoluta: string): Promise<Buffer> {\n\tconst r = await ejecutaCapturando(destino, cwd, `cat -- ${comillaPosix(rutaAbsoluta)}`);\n\tif (r.exitCode !== 0) throw errorRemoto(\"Leer\", rutaAbsoluta, r);\n\treturn r.stdout;\n}\n\nasync function accesoRemoto(destino: Destino, cwd: string, rutaAbsoluta: string, escritura: boolean): Promise<void> {\n\t// `test`/`[` (POSIX / busybox ash) no entiende `--` como fin de opciones —\n\t// eso es un busybox de bash, no de `test(1)`. `[ -r -- /f ]` falla con\n\t// \"unknown operand\" en Alpine. Sin `--` es seguro igualmente porque\n\t// `rutaAbsoluta` siempre empieza por `/` (la resuelve `resolveToCwd` antes\n\t// de llegar aquí), así que nunca puede confundirse con una opción `-x`.\n\t//\n\t// Un solo `[ ]` por motivo, no `test -r && test -w`: con eso, \"no se pudo\"\n\t// tenía un único mensaje (\"no existe o falta permiso\") para tres causas\n\t// distintas — no existe, no se puede leer, no se puede escribir — y quien\n\t// lo lee no puede saber cuál de las tres pasó. Un viaje de ida y vuelta\n\t// hace las tres preguntas en orden y el remoto dice cuál falló primero.\n\tconst p = comillaPosix(rutaAbsoluta);\n\tconst prueba = `if [ ! -e ${p} ]; then echo no-existe; elif [ ! -r ${p} ]; then echo sin-lectura; elif ${\n\t\tescritura ? `[ ! -w ${p} ]` : \"false\"\n\t}; then echo sin-escritura; else echo ok; fi`;\n\tconst r = await ejecutaCapturando(destino, cwd, prueba);\n\tconst motivo = r.stdout.toString(\"utf-8\").trim();\n\tif (motivo === \"ok\") return;\n\tconst detalle: Record<string, string> = {\n\t\t\"no-existe\": \"no existe\",\n\t\t\"sin-lectura\": \"no se puede leer (permiso denegado)\",\n\t\t\"sin-escritura\": \"no se puede escribir (permiso denegado)\",\n\t};\n\tthrow new Error(\n\t\t`No se puede leer${escritura ? \"/escribir\" : \"\"} \"${rutaAbsoluta}\" en el destino remoto: ${\n\t\t\tdetalle[motivo] ?? `fallo inesperado (código ${r.exitCode ?? \"desconocido\"})`\n\t\t}.`,\n\t);\n}\n\nasync function escribeRemoto(destino: Destino, cwd: string, rutaAbsoluta: string, contenido: string): Promise<void> {\n\t// El contenido va por stdin, nunca en la línea de comando: así un fichero\n\t// con comillas, `$(...)` o saltos de línea no puede inyectar nada en el\n\t// shell remoto — solo `cat` lo interpreta, y `cat` no ejecuta lo que lee.\n\tconst r = await ejecutaCapturando(destino, cwd, `cat > ${comillaPosix(rutaAbsoluta)}`, { stdin: contenido });\n\tif (r.exitCode !== 0) throw errorRemoto(\"Escribir\", rutaAbsoluta, r);\n}\n\nasync function creaDirectorioRemoto(destino: Destino, cwd: string, dir: string): Promise<void> {\n\tconst r = await ejecutaCapturando(destino, cwd, `mkdir -p -- ${comillaPosix(dir)}`);\n\tif (r.exitCode !== 0) throw errorRemoto(\"Crear el directorio\", dir, r);\n}\n\n/**\n * `ReadOperations` remotas.\n *\n * `detectImageMimeType` se deja sin definir a propósito: es opcional en la\n * interfaz, y detectarlo hoy exigiría traer los bytes completos al cliente\n * solo para mirar la cabecera. `read` remoto trata todo como texto.\n * ponytail: sin deteción de imágenes remotas; añadir si hace falta leer\n * capturas de pantalla de un contenedor o servidor.\n */\nexport function creaReadOperations(destino: Destino, cwd: string): ReadOperations {\n\treturn {\n\t\treadFile: (rutaAbsoluta) => leeRemoto(destino, cwd, rutaAbsoluta),\n\t\taccess: (rutaAbsoluta) => accesoRemoto(destino, cwd, rutaAbsoluta, false),\n\t};\n}\n\nexport function creaWriteOperations(destino: Destino, cwd: string): WriteOperations {\n\treturn {\n\t\twriteFile: (rutaAbsoluta, contenido) => escribeRemoto(destino, cwd, rutaAbsoluta, contenido),\n\t\tmkdir: (dir) => creaDirectorioRemoto(destino, cwd, dir),\n\t};\n}\n\nexport function creaEditOperations(destino: Destino, cwd: string): EditOperations {\n\treturn {\n\t\treadFile: (rutaAbsoluta) => leeRemoto(destino, cwd, rutaAbsoluta),\n\t\twriteFile: (rutaAbsoluta, contenido) => escribeRemoto(destino, cwd, rutaAbsoluta, contenido),\n\t\taccess: (rutaAbsoluta) => accesoRemoto(destino, cwd, rutaAbsoluta, true),\n\t};\n}\n"]}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Lee y escribe ficheros EN el destino, montado sobre `ejecutor.ts`.
3
+ *
4
+ * No hay SFTP ni `sshfs`: son comandos POSIX cortos (`cat`, `test`, `mkdir`)
5
+ * a través del mismo transporte que ya usa `bash` — ni una dependencia más,
6
+ * y el mismo camino que `--remoto` ya tiene que dejar pasar por la política
7
+ * de aprobación (ver `core/aprobacion/politica.ts`).
8
+ *
9
+ * `cat` sobre stdout capturado como `Buffer` es binario-seguro: no hace falta
10
+ * base64 porque nunca pasa por un terminal ni por un parseo de texto, solo
11
+ * por la tubería del proceso hijo.
12
+ */
13
+ import { comillaPosix, ejecutaCapturando } from "./ejecutor.js";
14
+ function errorRemoto(accion, ruta, resultado) {
15
+ const detalle = resultado.stderr.toString("utf-8").trim();
16
+ return new Error(`${accion} "${ruta}" en el destino remoto falló (código ${resultado.exitCode ?? "desconocido"})${detalle ? `: ${detalle}` : ""}`);
17
+ }
18
+ async function leeRemoto(destino, cwd, rutaAbsoluta) {
19
+ const r = await ejecutaCapturando(destino, cwd, `cat -- ${comillaPosix(rutaAbsoluta)}`);
20
+ if (r.exitCode !== 0)
21
+ throw errorRemoto("Leer", rutaAbsoluta, r);
22
+ return r.stdout;
23
+ }
24
+ async function accesoRemoto(destino, cwd, rutaAbsoluta, escritura) {
25
+ // `test`/`[` (POSIX / busybox ash) no entiende `--` como fin de opciones —
26
+ // eso es un busybox de bash, no de `test(1)`. `[ -r -- /f ]` falla con
27
+ // "unknown operand" en Alpine. Sin `--` es seguro igualmente porque
28
+ // `rutaAbsoluta` siempre empieza por `/` (la resuelve `resolveToCwd` antes
29
+ // de llegar aquí), así que nunca puede confundirse con una opción `-x`.
30
+ //
31
+ // Un solo `[ ]` por motivo, no `test -r && test -w`: con eso, "no se pudo"
32
+ // tenía un único mensaje ("no existe o falta permiso") para tres causas
33
+ // distintas — no existe, no se puede leer, no se puede escribir — y quien
34
+ // lo lee no puede saber cuál de las tres pasó. Un viaje de ida y vuelta
35
+ // hace las tres preguntas en orden y el remoto dice cuál falló primero.
36
+ const p = comillaPosix(rutaAbsoluta);
37
+ const prueba = `if [ ! -e ${p} ]; then echo no-existe; elif [ ! -r ${p} ]; then echo sin-lectura; elif ${escritura ? `[ ! -w ${p} ]` : "false"}; then echo sin-escritura; else echo ok; fi`;
38
+ const r = await ejecutaCapturando(destino, cwd, prueba);
39
+ const motivo = r.stdout.toString("utf-8").trim();
40
+ if (motivo === "ok")
41
+ return;
42
+ const detalle = {
43
+ "no-existe": "no existe",
44
+ "sin-lectura": "no se puede leer (permiso denegado)",
45
+ "sin-escritura": "no se puede escribir (permiso denegado)",
46
+ };
47
+ throw new Error(`No se puede leer${escritura ? "/escribir" : ""} "${rutaAbsoluta}" en el destino remoto: ${detalle[motivo] ?? `fallo inesperado (código ${r.exitCode ?? "desconocido"})`}.`);
48
+ }
49
+ async function escribeRemoto(destino, cwd, rutaAbsoluta, contenido) {
50
+ // El contenido va por stdin, nunca en la línea de comando: así un fichero
51
+ // con comillas, `$(...)` o saltos de línea no puede inyectar nada en el
52
+ // shell remoto — solo `cat` lo interpreta, y `cat` no ejecuta lo que lee.
53
+ const r = await ejecutaCapturando(destino, cwd, `cat > ${comillaPosix(rutaAbsoluta)}`, { stdin: contenido });
54
+ if (r.exitCode !== 0)
55
+ throw errorRemoto("Escribir", rutaAbsoluta, r);
56
+ }
57
+ async function creaDirectorioRemoto(destino, cwd, dir) {
58
+ const r = await ejecutaCapturando(destino, cwd, `mkdir -p -- ${comillaPosix(dir)}`);
59
+ if (r.exitCode !== 0)
60
+ throw errorRemoto("Crear el directorio", dir, r);
61
+ }
62
+ /**
63
+ * `ReadOperations` remotas.
64
+ *
65
+ * `detectImageMimeType` se deja sin definir a propósito: es opcional en la
66
+ * interfaz, y detectarlo hoy exigiría traer los bytes completos al cliente
67
+ * solo para mirar la cabecera. `read` remoto trata todo como texto.
68
+ * ponytail: sin deteción de imágenes remotas; añadir si hace falta leer
69
+ * capturas de pantalla de un contenedor o servidor.
70
+ */
71
+ export function creaReadOperations(destino, cwd) {
72
+ return {
73
+ readFile: (rutaAbsoluta) => leeRemoto(destino, cwd, rutaAbsoluta),
74
+ access: (rutaAbsoluta) => accesoRemoto(destino, cwd, rutaAbsoluta, false),
75
+ };
76
+ }
77
+ export function creaWriteOperations(destino, cwd) {
78
+ return {
79
+ writeFile: (rutaAbsoluta, contenido) => escribeRemoto(destino, cwd, rutaAbsoluta, contenido),
80
+ mkdir: (dir) => creaDirectorioRemoto(destino, cwd, dir),
81
+ };
82
+ }
83
+ export function creaEditOperations(destino, cwd) {
84
+ return {
85
+ readFile: (rutaAbsoluta) => leeRemoto(destino, cwd, rutaAbsoluta),
86
+ writeFile: (rutaAbsoluta, contenido) => escribeRemoto(destino, cwd, rutaAbsoluta, contenido),
87
+ access: (rutaAbsoluta) => accesoRemoto(destino, cwd, rutaAbsoluta, true),
88
+ };
89
+ }
90
+ //# sourceMappingURL=ficheros.js.map