@hoilab/ada-cli 0.84.22 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -1,8 +1,24 @@
1
- import { isInstallTelemetryEnabled } from "./telemetry.js";
2
- const OPENROUTER_HOST = "openrouter.ai";
3
- const NVIDIA_NIM_HOST = "integrate.api.nvidia.com";
4
- const CLOUDFLARE_API_HOST = "api.cloudflare.com";
5
- const CLOUDFLARE_AI_GATEWAY_HOST = "gateway.ai.cloudflare.com";
1
+ /**
2
+ * Cabeceras que se le anaden a la peticion del proveedor.
3
+ *
4
+ * LO QUE SE QUITO Y POR QUE. Habia unas cabeceras de ATRIBUCION por defecto:
5
+ * `HTTP-Referer: https://ada.dev` y `X-OpenRouter-Title: ada-cli` en OpenRouter,
6
+ * `X-BILLING-INVOKE-ORIGIN: Ada CLI` en NVIDIA NIM y `User-Agent: ada-cli` en
7
+ * Cloudflare. No hacian falta para que la peticion funcionara: le contaban al
8
+ * proveedor QUE HERRAMIENTA usa el usuario, y se enviaban por defecto.
9
+ *
10
+ * Un producto que se vende como cumplimiento europeo no revela por su cuenta el
11
+ * software del cliente a un tercero. Que la peticion ya fuera a ese destino no
12
+ * lo convierte en un dato que nos toque a nosotros aportar.
13
+ *
14
+ * Esto NO quita la posibilidad de atribuirse: quien la quiera pone sus propias
15
+ * cabeceras en la configuracion del modelo y siguen llegando por
16
+ * `headerSources`. Lo que desaparece es que salgan sin que nadie las pida.
17
+ *
18
+ * LO QUE SE QUEDA, que es distinto: `x-opencode-session`. Esa no es atribucion,
19
+ * es FUNCION — opencode correlaciona la peticion con la sesion por ese
20
+ * identificador, y sin ella deja de funcionar.
21
+ */
6
22
  const OPENCODE_HOST = "opencode.ai";
7
23
  function matchesHost(baseUrl, expectedHost) {
8
24
  try {
@@ -12,41 +28,6 @@ function matchesHost(baseUrl, expectedHost) {
12
28
  return false;
13
29
  }
14
30
  }
15
- function isOpenRouterModel(model) {
16
- return model.provider === "openrouter" || model.baseUrl.includes(OPENROUTER_HOST);
17
- }
18
- function isNvidiaNimModel(model) {
19
- return model.provider === "nvidia" || matchesHost(model.baseUrl, NVIDIA_NIM_HOST);
20
- }
21
- function isCloudflareModel(model) {
22
- return (model.provider === "cloudflare-workers-ai" ||
23
- model.provider === "cloudflare-ai-gateway" ||
24
- matchesHost(model.baseUrl, CLOUDFLARE_API_HOST) ||
25
- matchesHost(model.baseUrl, CLOUDFLARE_AI_GATEWAY_HOST));
26
- }
27
- function getDefaultAttributionHeaders(model, settingsManager) {
28
- if (!isInstallTelemetryEnabled(settingsManager)) {
29
- return undefined;
30
- }
31
- if (isOpenRouterModel(model)) {
32
- return {
33
- "HTTP-Referer": "https://ada.dev",
34
- "X-OpenRouter-Title": "ada-cli",
35
- "X-OpenRouter-Categories": "cli-agent",
36
- };
37
- }
38
- if (isNvidiaNimModel(model)) {
39
- return {
40
- "X-BILLING-INVOKE-ORIGIN": "Ada CLI",
41
- };
42
- }
43
- if (isCloudflareModel(model)) {
44
- return {
45
- "User-Agent": "ada-cli",
46
- };
47
- }
48
- return undefined;
49
- }
50
31
  function getSessionHeaders(model, sessionId) {
51
32
  if (!sessionId)
52
33
  return undefined;
@@ -57,10 +38,11 @@ function getSessionHeaders(model, sessionId) {
57
38
  }
58
39
  return { "x-opencode-session": sessionId, "x-opencode-client": "ada-cli" };
59
40
  }
60
- export function mergeProviderAttributionHeaders(model, settingsManager, sessionId, ...headerSources) {
41
+ export function mergeProviderAttributionHeaders(model,
42
+ /** Ya no se usa: se conserva para no tocar a los llamantes, que son de upstream. */
43
+ _settingsManager, sessionId, ...headerSources) {
61
44
  const merged = {
62
45
  ...getSessionHeaders(model, sessionId),
63
- ...getDefaultAttributionHeaders(model, settingsManager),
64
46
  };
65
47
  for (const headers of headerSources) {
66
48
  if (headers) {
@@ -1 +1 @@
1
- {"version":3,"file":"provider-attribution.js","sourceRoot":"","sources":["../../src/core/provider-attribution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, ProviderHeaders } from \"@earendil-works/pi-ai\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport { isInstallTelemetryEnabled } from \"./telemetry.ts\";\n\nconst OPENROUTER_HOST = \"openrouter.ai\";\nconst NVIDIA_NIM_HOST = \"integrate.api.nvidia.com\";\nconst CLOUDFLARE_API_HOST = \"api.cloudflare.com\";\nconst CLOUDFLARE_AI_GATEWAY_HOST = \"gateway.ai.cloudflare.com\";\nconst OPENCODE_HOST = \"opencode.ai\";\n\nfunction matchesHost(baseUrl: string, expectedHost: string): boolean {\n\ttry {\n\t\treturn new URL(baseUrl).hostname === expectedHost;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isOpenRouterModel(model: Model<Api>): boolean {\n\treturn model.provider === \"openrouter\" || model.baseUrl.includes(OPENROUTER_HOST);\n}\n\nfunction isNvidiaNimModel(model: Model<Api>): boolean {\n\treturn model.provider === \"nvidia\" || matchesHost(model.baseUrl, NVIDIA_NIM_HOST);\n}\n\nfunction isCloudflareModel(model: Model<Api>): boolean {\n\treturn (\n\t\tmodel.provider === \"cloudflare-workers-ai\" ||\n\t\tmodel.provider === \"cloudflare-ai-gateway\" ||\n\t\tmatchesHost(model.baseUrl, CLOUDFLARE_API_HOST) ||\n\t\tmatchesHost(model.baseUrl, CLOUDFLARE_AI_GATEWAY_HOST)\n\t);\n}\n\nfunction getDefaultAttributionHeaders(\n\tmodel: Model<Api>,\n\tsettingsManager: SettingsManager,\n): Record<string, string> | undefined {\n\tif (!isInstallTelemetryEnabled(settingsManager)) {\n\t\treturn undefined;\n\t}\n\n\tif (isOpenRouterModel(model)) {\n\t\treturn {\n\t\t\t\"HTTP-Referer\": \"https://ada.dev\",\n\t\t\t\"X-OpenRouter-Title\": \"ada-cli\",\n\t\t\t\"X-OpenRouter-Categories\": \"cli-agent\",\n\t\t};\n\t}\n\n\tif (isNvidiaNimModel(model)) {\n\t\treturn {\n\t\t\t\"X-BILLING-INVOKE-ORIGIN\": \"Ada CLI\",\n\t\t};\n\t}\n\n\tif (isCloudflareModel(model)) {\n\t\treturn {\n\t\t\t\"User-Agent\": \"ada-cli\",\n\t\t};\n\t}\n\n\treturn undefined;\n}\n\nfunction getSessionHeaders(model: Model<Api>, sessionId: string | undefined): Record<string, string> | undefined {\n\tif (!sessionId) return undefined;\n\tif (\n\t\tmodel.provider !== \"opencode\" &&\n\t\tmodel.provider !== \"opencode-go\" &&\n\t\t!matchesHost(model.baseUrl, OPENCODE_HOST)\n\t) {\n\t\treturn undefined;\n\t}\n\treturn { \"x-opencode-session\": sessionId, \"x-opencode-client\": \"ada-cli\" };\n}\n\nexport function mergeProviderAttributionHeaders(\n\tmodel: Model<Api>,\n\tsettingsManager: SettingsManager,\n\tsessionId: string | undefined,\n\t...headerSources: Array<ProviderHeaders | undefined>\n): ProviderHeaders | undefined {\n\tconst merged: ProviderHeaders = {\n\t\t...getSessionHeaders(model, sessionId),\n\t\t...getDefaultAttributionHeaders(model, settingsManager),\n\t};\n\n\tfor (const headers of headerSources) {\n\t\tif (headers) {\n\t\t\tObject.assign(merged, headers);\n\t\t}\n\t}\n\n\treturn Object.keys(merged).length > 0 ? merged : undefined;\n}\n"]}
1
+ {"version":3,"file":"provider-attribution.js","sourceRoot":"","sources":["../../src/core/provider-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,SAAS,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAW;IACpE,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAA6B,EAAsC;IAChH,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,IACC,KAAK,CAAC,QAAQ,KAAK,UAAU;QAC7B,KAAK,CAAC,QAAQ,KAAK,aAAa;QAChC,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,EACzC,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;AAAA,CAC3E;AAED,MAAM,UAAU,+BAA+B,CAC9C,KAAiB;AACjB,oFAAoF;AACpF,gBAAyB,EACzB,SAA6B,EAC7B,GAAG,aAAiD,EACtB;IAC9B,MAAM,MAAM,GAAoB;QAC/B,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;KACtC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC3D","sourcesContent":["/**\n * Cabeceras que se le anaden a la peticion del proveedor.\n *\n * LO QUE SE QUITO Y POR QUE. Habia unas cabeceras de ATRIBUCION por defecto:\n * `HTTP-Referer: https://ada.dev` y `X-OpenRouter-Title: ada-cli` en OpenRouter,\n * `X-BILLING-INVOKE-ORIGIN: Ada CLI` en NVIDIA NIM y `User-Agent: ada-cli` en\n * Cloudflare. No hacian falta para que la peticion funcionara: le contaban al\n * proveedor QUE HERRAMIENTA usa el usuario, y se enviaban por defecto.\n *\n * Un producto que se vende como cumplimiento europeo no revela por su cuenta el\n * software del cliente a un tercero. Que la peticion ya fuera a ese destino no\n * lo convierte en un dato que nos toque a nosotros aportar.\n *\n * Esto NO quita la posibilidad de atribuirse: quien la quiera pone sus propias\n * cabeceras en la configuracion del modelo y siguen llegando por\n * `headerSources`. Lo que desaparece es que salgan sin que nadie las pida.\n *\n * LO QUE SE QUEDA, que es distinto: `x-opencode-session`. Esa no es atribucion,\n * es FUNCION opencode correlaciona la peticion con la sesion por ese\n * identificador, y sin ella deja de funcionar.\n */\n\nimport type { Api, Model, ProviderHeaders } from \"@earendil-works/pi-ai\";\n\nconst OPENCODE_HOST = \"opencode.ai\";\n\nfunction matchesHost(baseUrl: string, expectedHost: string): boolean {\n\ttry {\n\t\treturn new URL(baseUrl).hostname === expectedHost;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getSessionHeaders(model: Model<Api>, sessionId: string | undefined): Record<string, string> | undefined {\n\tif (!sessionId) return undefined;\n\tif (\n\t\tmodel.provider !== \"opencode\" &&\n\t\tmodel.provider !== \"opencode-go\" &&\n\t\t!matchesHost(model.baseUrl, OPENCODE_HOST)\n\t) {\n\t\treturn undefined;\n\t}\n\treturn { \"x-opencode-session\": sessionId, \"x-opencode-client\": \"ada-cli\" };\n}\n\nexport function mergeProviderAttributionHeaders(\n\tmodel: Model<Api>,\n\t/** Ya no se usa: se conserva para no tocar a los llamantes, que son de upstream. */\n\t_settingsManager: unknown,\n\tsessionId: string | undefined,\n\t...headerSources: Array<ProviderHeaders | undefined>\n): ProviderHeaders | undefined {\n\tconst merged: ProviderHeaders = {\n\t\t...getSessionHeaders(model, sessionId),\n\t};\n\n\tfor (const headers of headerSources) {\n\t\tif (headers) {\n\t\t\tObject.assign(merged, headers);\n\t\t}\n\t}\n\n\treturn Object.keys(merged).length > 0 ? merged : undefined;\n}\n"]}
@@ -0,0 +1,38 @@
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
+ export interface DestinoSsh {
13
+ tipo: "ssh";
14
+ usuario?: string;
15
+ host: string;
16
+ puerto?: number;
17
+ ruta: string;
18
+ }
19
+ export interface DestinoWsl {
20
+ tipo: "wsl";
21
+ distro: string;
22
+ ruta: string;
23
+ }
24
+ export interface DestinoDocker {
25
+ tipo: "docker";
26
+ contenedor: string;
27
+ ruta: string;
28
+ }
29
+ export type Destino = DestinoSsh | DestinoWsl | DestinoDocker;
30
+ /**
31
+ * Parsea `ssh://…`, `wsl://…` o `docker://…`. Lanza con un mensaje claro si
32
+ * el esquema no es ninguno de los tres o si la parte que sigue no tiene lo
33
+ * mínimo (host, distro o contenedor).
34
+ */
35
+ export declare function parseaDestino(texto: string): Destino;
36
+ /** Representación legible para logs y mensajes de error, sin nada sensible. */
37
+ export declare function describeDestino(destino: Destino): string;
38
+ //# sourceMappingURL=destino.d.ts.map
@@ -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