@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatos.js","sourceRoot":"","sources":["../../../src/core/importar/formatos.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Importar sesiones de Claude Code y de Codex.\n *\n * Es coste de cambio. Quien lleva meses trabajando con otra herramienta tiene\n * ahí su historial: lo que decidió, por qué, y las conversaciones que busca\n * cuando vuelve a un proyecto. Pedirle que lo deje atrás es pedirle que empiece\n * de cero, y eso pesa más que cualquier comparativa de capacidades.\n *\n * QUÉ SE IMPORTA Y QUÉ NO, dicho antes de que alguien lo descubra por su\n * cuenta: se importa la CONVERSACIÓN —lo que se dijo, en orden y con su\n * estructura de padres— y no el ESTADO. Las llamadas a herramientas y sus\n * resultados se aplanan a texto legible, porque no se pueden reproducir: los\n * ficheros han cambiado, los procesos murieron y los identificadores de\n * herramienta no significan nada aquí. Una sesión importada sirve para leerla,\n * buscarla y continuarla con contexto; no para rebobinarla.\n *\n * Fingir lo contrario sería peor que no importar: el usuario haría `undo` sobre\n * una sesión importada y no pasaría nada.\n */\n\n/** Una entrada del fichero de sesión de Ada. */\nexport interface EntradaAda {\n\ttype: \"session\" | \"message\";\n\tid: string;\n\tparentId?: string;\n\ttimestamp: number;\n\tcwd?: string;\n\tversion?: number;\n\tmessage?: { role: string; content: Array<{ type: string; text: string }>; timestamp: number };\n}\n\nexport type Formato = \"claude-code\" | \"codex\";\n\n/** Resumen de una sesión importable, para poder elegir sin abrirla. */\nexport interface ResumenSesion {\n\tformato: Formato;\n\truta: string;\n\tcwd: string;\n\tmensajes: number;\n\tprimerPrompt: string;\n\tcuando: number;\n}\n\nfunction aMilisegundos(valor: unknown): number {\n\tif (typeof valor === \"number\") return valor;\n\tif (typeof valor === \"string\") {\n\t\tconst t = Date.parse(valor);\n\t\tif (!Number.isNaN(t)) return t;\n\t}\n\treturn 0;\n}\n\n/**\n * Aplana el contenido de un mensaje a bloques de texto.\n *\n * Las llamadas a herramienta se convierten en una línea legible en vez de\n * desaparecer: leer «⚙ bash: npm test» explica el hilo de la conversación,\n * mientras que quitarlo deja saltos que no se entienden.\n */\nfunction aTexto(contenido: unknown): Array<{ type: string; text: string }> {\n\tif (typeof contenido === \"string\") return contenido.trim() ? [{ type: \"text\", text: contenido }] : [];\n\tif (!Array.isArray(contenido)) return [];\n\tconst bloques: Array<{ type: string; text: string }> = [];\n\tfor (const bruto of contenido) {\n\t\tif (typeof bruto === \"string\") {\n\t\t\tif (bruto.trim()) bloques.push({ type: \"text\", text: bruto });\n\t\t\tcontinue;\n\t\t}\n\t\tif (!bruto || typeof bruto !== \"object\") continue;\n\t\tconst b = bruto as Record<string, unknown>;\n\t\tswitch (b.type) {\n\t\t\tcase \"text\":\n\t\t\tcase \"input_text\":\n\t\t\tcase \"output_text\":\n\t\t\t\tif (typeof b.text === \"string\" && b.text.trim()) bloques.push({ type: \"text\", text: b.text });\n\t\t\t\tbreak;\n\t\t\tcase \"thinking\":\n\t\t\tcase \"reasoning\":\n\t\t\t\tif (typeof b.thinking === \"string\" && b.thinking.trim()) bloques.push({ type: \"text\", text: b.thinking });\n\t\t\t\tbreak;\n\t\t\tcase \"tool_use\":\n\t\t\tcase \"function_call\":\n\t\t\t\tbloques.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `⚙ ${String(b.name ?? \"herramienta\")}: ${JSON.stringify(b.input ?? b.arguments ?? {}).slice(0, 400)}`,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"tool_result\":\n\t\t\tcase \"function_call_output\": {\n\t\t\t\tconst salida = aTexto(b.content ?? b.output)\n\t\t\t\t\t.map((x) => x.text)\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tif (salida.trim()) bloques.push({ type: \"text\", text: `↩ ${salida.slice(0, 800)}` });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn bloques;\n}\n\n/** La cabecera que abre un fichero de sesión de Ada. */\nfunction cabecera(id: string, cwd: string, cuando: number): EntradaAda {\n\treturn { type: \"session\", id, cwd, timestamp: cuando, version: 1 };\n}\n\n/**\n * Claude Code: un JSONL con entradas `user` y `assistant` encadenadas por\n * `parentUuid`. El resto de tipos (`attachment`, `queue-operation`, `mode`…) es\n * estado interno suyo y no tiene sentido aquí.\n */\nexport function convertirClaudeCode(lineas: string[], idSesion: string): EntradaAda[] {\n\tconst salida: EntradaAda[] = [];\n\tlet cwd = \"\";\n\tlet primero = 0;\n\tfor (const linea of lineas) {\n\t\tlet d: Record<string, unknown>;\n\t\ttry {\n\t\t\td = JSON.parse(linea) as Record<string, unknown>;\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (d.type !== \"user\" && d.type !== \"assistant\") continue;\n\t\tconst mensaje = d.message as { role?: string; content?: unknown } | undefined;\n\t\tif (!mensaje) continue;\n\t\tconst bloques = aTexto(mensaje.content);\n\t\tif (bloques.length === 0) continue;\n\t\tconst cuando = aMilisegundos(d.timestamp);\n\t\tif (!cwd && typeof d.cwd === \"string\") cwd = d.cwd;\n\t\tif (!primero) primero = cuando;\n\t\tsalida.push({\n\t\t\ttype: \"message\",\n\t\t\tid: String(d.uuid ?? `${salida.length}`),\n\t\t\t// Se conserva la cadena de padres del origen: es lo que permite que\n\t\t\t// las ramas de la conversación sigan siendo ramas al importarlas.\n\t\t\t...(typeof d.parentUuid === \"string\" ? { parentId: d.parentUuid } : {}),\n\t\t\ttimestamp: cuando,\n\t\t\tmessage: { role: String(mensaje.role ?? d.type), content: bloques, timestamp: cuando },\n\t\t});\n\t}\n\treturn salida.length === 0 ? [] : [cabecera(idSesion, cwd, primero), ...salida];\n}\n\n/**\n * Codex: un «rollout» con `session_meta` y `response_item`.\n *\n * No trae cadena de padres, así que se encadena por orden de aparición, que es\n * como se leyó la conversación. Los mensajes de rol `developer` son la\n * inyección de sistema de su harness y no forman parte de lo que dijo nadie.\n */\nexport function convertirCodex(lineas: string[], idSesion: string): EntradaAda[] {\n\tconst salida: EntradaAda[] = [];\n\tlet cwd = \"\";\n\tlet primero = 0;\n\tlet anterior: string | undefined;\n\tfor (const linea of lineas) {\n\t\tlet d: Record<string, unknown>;\n\t\ttry {\n\t\t\td = JSON.parse(linea) as Record<string, unknown>;\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tconst carga = d.payload as Record<string, unknown> | undefined;\n\t\tif (d.type === \"session_meta\" && carga && typeof carga.cwd === \"string\") {\n\t\t\tcwd = carga.cwd;\n\t\t\tcontinue;\n\t\t}\n\t\tif (d.type !== \"response_item\" || !carga || carga.type !== \"message\") continue;\n\t\tconst rol = String(carga.role ?? \"\");\n\t\tif (rol === \"developer\" || rol === \"system\") continue;\n\t\tconst bloques = aTexto(carga.content);\n\t\tif (bloques.length === 0) continue;\n\t\tconst cuando = aMilisegundos(d.timestamp);\n\t\tif (!primero) primero = cuando;\n\t\tconst id = String(carga.id ?? `${salida.length}`);\n\t\tsalida.push({\n\t\t\ttype: \"message\",\n\t\t\tid,\n\t\t\t...(anterior ? { parentId: anterior } : {}),\n\t\t\ttimestamp: cuando,\n\t\t\tmessage: { role: rol, content: bloques, timestamp: cuando },\n\t\t});\n\t\tanterior = id;\n\t}\n\treturn salida.length === 0 ? [] : [cabecera(idSesion, cwd, primero), ...salida];\n}\n\n/** Reconoce el formato por la forma de sus líneas, no por la extensión. */\nexport function detectarFormato(lineas: string[]): Formato | null {\n\tfor (const linea of lineas.slice(0, 40)) {\n\t\ttry {\n\t\t\tconst d = JSON.parse(linea) as Record<string, unknown>;\n\t\t\tif (d.type === \"session_meta\" || (d.type === \"response_item\" && d.payload)) return \"codex\";\n\t\t\tif ((d.type === \"user\" || d.type === \"assistant\") && d.message && d.sessionId) return \"claude-code\";\n\t\t} catch {\n\t\t\t// Una línea ilegible no dice nada del formato del fichero.\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function convertir(lineas: string[], idSesion: string): { formato: Formato; entradas: EntradaAda[] } | null {\n\tconst formato = detectarFormato(lineas);\n\tif (!formato) return null;\n\tconst entradas = formato === \"codex\" ? convertirCodex(lineas, idSesion) : convertirClaudeCode(lineas, idSesion);\n\treturn entradas.length === 0 ? null : { formato, entradas };\n}\n\n/**\n * ¿Este mensaje de usuario lo escribió una persona, o lo inyectó el harness?\n *\n * Codex mete su `<environment_context>` y el AGENTS.md del proyecto como\n * mensajes de rol `user`, así que el \"primer prompt\" de media sesión importada\n * salía siendo un volcado de configuración. Se importan igual —formaban parte\n * del contexto— pero no sirven para que alguien reconozca su sesión en una\n * lista, que es para lo que existe el resumen.\n *\n * Se descubrió convirtiendo ficheros reales, no las muestras.\n */\nfunction pareceInyeccion(texto: string): boolean {\n\tconst inicio = texto.trimStart().slice(0, 120);\n\treturn (\n\t\tinicio.startsWith(\"<environment_context>\") ||\n\t\tinicio.startsWith(\"<INSTRUCTIONS>\") ||\n\t\tinicio.startsWith(\"# AGENTS.md\") ||\n\t\tinicio.startsWith(\"<skills_instructions>\") ||\n\t\tinicio.startsWith(\"<system-reminder>\")\n\t);\n}\n\n/** Lo que hace falta para elegir una sesión de una lista. */\nexport function resumir(entradas: EntradaAda[], formato: Formato, ruta: string): ResumenSesion {\n\tconst mensajes = entradas.filter((e) => e.type === \"message\");\n\tconst primerUsuario = mensajes.find(\n\t\t(e) => e.message?.role === \"user\" && !pareceInyeccion(e.message.content[0]?.text ?? \"\"),\n\t);\n\treturn {\n\t\tformato,\n\t\truta,\n\t\tcwd: entradas[0]?.cwd ?? \"\",\n\t\tmensajes: mensajes.length,\n\t\tprimerPrompt: (primerUsuario?.message?.content[0]?.text ?? \"\").replace(/\\s+/g, \" \").slice(0, 80),\n\t\tcuando: entradas[0]?.timestamp ?? 0,\n\t};\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Detectar si un proceso vivo está ESPERANDO ENTRADA.
3
+ *
4
+ * Es la pieza difícil del hueco: `bash` normal lanza y espera a que el
5
+ * proceso termine solo, y un comando que pregunta "¿seguro? [s/n]" o pide una
6
+ * contraseña no termina nunca por su cuenta — se queda ahí, y `bash` lo lee
7
+ * como "no responde" hasta que salta el timeout.
8
+ *
9
+ * Dos señales, ninguna perfecta por sí sola:
10
+ *
11
+ * 1. PATRÓN EN LA SALIDA. La cola de lo escrito coincide con una pregunta
12
+ * conocida (confirmación s/n, contraseña, prompt de intérprete…). Es la
13
+ * señal fuerte: determinista y explicable.
14
+ * 2. INACTIVIDAD CON EL PROCESO VIVO. No ha llegado salida nueva en un
15
+ * rato Y lo último que se escribió no terminó en salto de línea — que es
16
+ * justo la forma de un `print("Password: ")` sin `\n` al final. Sola,
17
+ * esta señal confundiría "está esperando" con "está pensando"; por eso
18
+ * exige la falta de salto de línea, no solo el silencio.
19
+ *
20
+ * Lo que NO se hace: hilar todos los prompts posibles del universo. Un
21
+ * comando normal (`echo hola`) termina solo — el proceso deja de estar vivo
22
+ * antes de que esto se llegue a preguntar, así que ni siquiera hace falta que
23
+ * la lista de patrones sea exhaustiva para no dispararse con él.
24
+ */
25
+ /** Busca un patrón conocido en la cola de salida. `null` si ninguno coincide. */
26
+ export declare function detectarPromptEnSalida(salida: string): {
27
+ nombre: string;
28
+ } | null;
29
+ export interface EstadoDeEspera {
30
+ esperando: boolean;
31
+ /** Por qué se decidió. `null` cuando `esperando` es `false`: no hay nada que explicar. */
32
+ motivo: string | null;
33
+ }
34
+ export declare function detectarEsperaEntrada(opciones: {
35
+ /** Toda la salida acumulada desde la última consulta (o desde el arranque). */
36
+ salidaReciente: string;
37
+ /** Milisegundos desde el último byte recibido. */
38
+ msDesdeUltimaSalida: number;
39
+ /** Si el proceso sigue vivo. Un proceso muerto no puede estar esperando nada. */
40
+ vivo: boolean;
41
+ /** A partir de cuánta inactividad se considera la señal débil. Por defecto 1200ms. */
42
+ umbralInactividadMs?: number;
43
+ }): EstadoDeEspera;
44
+ //# sourceMappingURL=deteccion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deteccion.d.ts","sourceRoot":"","sources":["../../../src/core/interactivo/deteccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAyCH,kFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMhF;AAED,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,4FAA0F;IAC1F,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAKD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE;IAC/C,gFAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAkD;IAClD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,IAAI,EAAE,OAAO,CAAC;IACd,yFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,cAAc,CAejB","sourcesContent":["/**\n * Detectar si un proceso vivo está ESPERANDO ENTRADA.\n *\n * Es la pieza difícil del hueco: `bash` normal lanza y espera a que el\n * proceso termine solo, y un comando que pregunta \"¿seguro? [s/n]\" o pide una\n * contraseña no termina nunca por su cuenta — se queda ahí, y `bash` lo lee\n * como \"no responde\" hasta que salta el timeout.\n *\n * Dos señales, ninguna perfecta por sí sola:\n *\n * 1. PATRÓN EN LA SALIDA. La cola de lo escrito coincide con una pregunta\n * conocida (confirmación s/n, contraseña, prompt de intérprete…). Es la\n * señal fuerte: determinista y explicable.\n * 2. INACTIVIDAD CON EL PROCESO VIVO. No ha llegado salida nueva en un\n * rato Y lo último que se escribió no terminó en salto de línea — que es\n * justo la forma de un `print(\"Password: \")` sin `\\n` al final. Sola,\n * esta señal confundiría \"está esperando\" con \"está pensando\"; por eso\n * exige la falta de salto de línea, no solo el silencio.\n *\n * Lo que NO se hace: hilar todos los prompts posibles del universo. Un\n * comando normal (`echo hola`) termina solo — el proceso deja de estar vivo\n * antes de que esto se llegue a preguntar, así que ni siquiera hace falta que\n * la lista de patrones sea exhaustiva para no dispararse con él.\n */\n\n/** Un patrón de prompt reconocido, con nombre para explicar la decisión. */\ninterface PatronDePrompt {\n\tnombre: string;\n\tregex: RegExp;\n}\n\n// Todos anclados a `$` (fin del trozo de salida mirado): un prompt de verdad\n// es lo ÚLTIMO que se escribió, no una frase que aparezca de pasada en medio\n// de un log. Sin el anclaje, un script que simplemente IMPRIME la palabra\n// \"password\" en un mensaje informativo se marcaría como esperando entrada.\nconst PATRONES_DE_PROMPT: PatronDePrompt[] = [\n\t{\n\t\t// \"[s/n]\", \"(y/n)\", \"[Y/n]\", \"(yes/no)\"… Restringido a palabras de\n\t\t// confirmación conocidas y NO a dígitos, porque \"[3/10]\" de una barra de\n\t\t// progreso tiene la misma forma y no es una pregunta.\n\t\tnombre: \"confirmación s/n\",\n\t\tregex: /[[(]\\s*(?:s[ií]?|y(?:es)?|n[oó]?)\\s*\\/\\s*(?:s[ií]?|y(?:es)?|n[oó]?)\\s*[\\])]\\s*:?\\s*$/iu,\n\t},\n\t{\n\t\tnombre: \"contraseña\",\n\t\tregex: /\\b(?:password|contrase[nñ]a|passphrase)\\s*:?\\s*$/iu,\n\t},\n\t{\n\t\tnombre: \"pulsa una tecla\",\n\t\tregex: /press\\s+(?:any\\s+key|enter|return)\\b/iu,\n\t},\n\t{\n\t\tnombre: \"confirmación abierta\",\n\t\tregex: /\\b(?:continue|continuar|proceed|are you sure)\\?\\s*$/iu,\n\t},\n\t{\n\t\t// Prompts de intérpretes conocidos: Python, IPython, Node, Ruby, MySQL,\n\t\t// psql, gdb, sqlite3. Cada uno es la forma exacta con la que ese REPL deja\n\t\t// el cursor esperando la siguiente línea.\n\t\tnombre: \"prompt de intérprete\",\n\t\tregex: /(?:^|\\n)\\s*(?:>>>|\\.\\.\\.|In \\[\\d+\\]:|irb\\([^)]*\\):\\d+:\\d+[>*]|mysql>|psql[^\\n]*[=#-]>|\\(gdb\\)|sqlite>)\\s*$/iu,\n\t},\n];\n\n/** Busca un patrón conocido en la cola de salida. `null` si ninguno coincide. */\nexport function detectarPromptEnSalida(salida: string): { nombre: string } | null {\n\tfor (const { nombre, regex } of PATRONES_DE_PROMPT) {\n\t\tregex.lastIndex = 0;\n\t\tif (regex.test(salida)) return { nombre };\n\t}\n\treturn null;\n}\n\nexport interface EstadoDeEspera {\n\tesperando: boolean;\n\t/** Por qué se decidió. `null` cuando `esperando` es `false`: no hay nada que explicar. */\n\tmotivo: string | null;\n}\n\n/** Cuánta cola de salida se mira. Un prompt vive en las últimas líneas, no en todo el historial. */\nconst VENTANA_DE_COLA = 500;\n\nexport function detectarEsperaEntrada(opciones: {\n\t/** Toda la salida acumulada desde la última consulta (o desde el arranque). */\n\tsalidaReciente: string;\n\t/** Milisegundos desde el último byte recibido. */\n\tmsDesdeUltimaSalida: number;\n\t/** Si el proceso sigue vivo. Un proceso muerto no puede estar esperando nada. */\n\tvivo: boolean;\n\t/** A partir de cuánta inactividad se considera la señal débil. Por defecto 1200ms. */\n\tumbralInactividadMs?: number;\n}): EstadoDeEspera {\n\tif (!opciones.vivo) return { esperando: false, motivo: null };\n\n\tconst cola = opciones.salidaReciente.slice(-VENTANA_DE_COLA);\n\n\tconst patron = detectarPromptEnSalida(cola);\n\tif (patron) return { esperando: true, motivo: `patrón de \"${patron.nombre}\" en la salida` };\n\n\tconst umbral = opciones.umbralInactividadMs ?? 1200;\n\tconst terminaSinSaltoDeLinea = cola.length > 0 && !/[\\n\\r]\\s*$/u.test(cola);\n\tif (terminaSinSaltoDeLinea && opciones.msDesdeUltimaSalida >= umbral) {\n\t\treturn { esperando: true, motivo: \"sin salida nueva y la última línea quedó sin terminar\" };\n\t}\n\n\treturn { esperando: false, motivo: null };\n}\n"]}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Detectar si un proceso vivo está ESPERANDO ENTRADA.
3
+ *
4
+ * Es la pieza difícil del hueco: `bash` normal lanza y espera a que el
5
+ * proceso termine solo, y un comando que pregunta "¿seguro? [s/n]" o pide una
6
+ * contraseña no termina nunca por su cuenta — se queda ahí, y `bash` lo lee
7
+ * como "no responde" hasta que salta el timeout.
8
+ *
9
+ * Dos señales, ninguna perfecta por sí sola:
10
+ *
11
+ * 1. PATRÓN EN LA SALIDA. La cola de lo escrito coincide con una pregunta
12
+ * conocida (confirmación s/n, contraseña, prompt de intérprete…). Es la
13
+ * señal fuerte: determinista y explicable.
14
+ * 2. INACTIVIDAD CON EL PROCESO VIVO. No ha llegado salida nueva en un
15
+ * rato Y lo último que se escribió no terminó en salto de línea — que es
16
+ * justo la forma de un `print("Password: ")` sin `\n` al final. Sola,
17
+ * esta señal confundiría "está esperando" con "está pensando"; por eso
18
+ * exige la falta de salto de línea, no solo el silencio.
19
+ *
20
+ * Lo que NO se hace: hilar todos los prompts posibles del universo. Un
21
+ * comando normal (`echo hola`) termina solo — el proceso deja de estar vivo
22
+ * antes de que esto se llegue a preguntar, así que ni siquiera hace falta que
23
+ * la lista de patrones sea exhaustiva para no dispararse con él.
24
+ */
25
+ // Todos anclados a `$` (fin del trozo de salida mirado): un prompt de verdad
26
+ // es lo ÚLTIMO que se escribió, no una frase que aparezca de pasada en medio
27
+ // de un log. Sin el anclaje, un script que simplemente IMPRIME la palabra
28
+ // "password" en un mensaje informativo se marcaría como esperando entrada.
29
+ const PATRONES_DE_PROMPT = [
30
+ {
31
+ // "[s/n]", "(y/n)", "[Y/n]", "(yes/no)"… Restringido a palabras de
32
+ // confirmación conocidas y NO a dígitos, porque "[3/10]" de una barra de
33
+ // progreso tiene la misma forma y no es una pregunta.
34
+ nombre: "confirmación s/n",
35
+ regex: /[[(]\s*(?:s[ií]?|y(?:es)?|n[oó]?)\s*\/\s*(?:s[ií]?|y(?:es)?|n[oó]?)\s*[\])]\s*:?\s*$/iu,
36
+ },
37
+ {
38
+ nombre: "contraseña",
39
+ regex: /\b(?:password|contrase[nñ]a|passphrase)\s*:?\s*$/iu,
40
+ },
41
+ {
42
+ nombre: "pulsa una tecla",
43
+ regex: /press\s+(?:any\s+key|enter|return)\b/iu,
44
+ },
45
+ {
46
+ nombre: "confirmación abierta",
47
+ regex: /\b(?:continue|continuar|proceed|are you sure)\?\s*$/iu,
48
+ },
49
+ {
50
+ // Prompts de intérpretes conocidos: Python, IPython, Node, Ruby, MySQL,
51
+ // psql, gdb, sqlite3. Cada uno es la forma exacta con la que ese REPL deja
52
+ // el cursor esperando la siguiente línea.
53
+ nombre: "prompt de intérprete",
54
+ regex: /(?:^|\n)\s*(?:>>>|\.\.\.|In \[\d+\]:|irb\([^)]*\):\d+:\d+[>*]|mysql>|psql[^\n]*[=#-]>|\(gdb\)|sqlite>)\s*$/iu,
55
+ },
56
+ ];
57
+ /** Busca un patrón conocido en la cola de salida. `null` si ninguno coincide. */
58
+ export function detectarPromptEnSalida(salida) {
59
+ for (const { nombre, regex } of PATRONES_DE_PROMPT) {
60
+ regex.lastIndex = 0;
61
+ if (regex.test(salida))
62
+ return { nombre };
63
+ }
64
+ return null;
65
+ }
66
+ /** Cuánta cola de salida se mira. Un prompt vive en las últimas líneas, no en todo el historial. */
67
+ const VENTANA_DE_COLA = 500;
68
+ export function detectarEsperaEntrada(opciones) {
69
+ if (!opciones.vivo)
70
+ return { esperando: false, motivo: null };
71
+ const cola = opciones.salidaReciente.slice(-VENTANA_DE_COLA);
72
+ const patron = detectarPromptEnSalida(cola);
73
+ if (patron)
74
+ return { esperando: true, motivo: `patrón de "${patron.nombre}" en la salida` };
75
+ const umbral = opciones.umbralInactividadMs ?? 1200;
76
+ const terminaSinSaltoDeLinea = cola.length > 0 && !/[\n\r]\s*$/u.test(cola);
77
+ if (terminaSinSaltoDeLinea && opciones.msDesdeUltimaSalida >= umbral) {
78
+ return { esperando: true, motivo: "sin salida nueva y la última línea quedó sin terminar" };
79
+ }
80
+ return { esperando: false, motivo: null };
81
+ }
82
+ //# sourceMappingURL=deteccion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deteccion.js","sourceRoot":"","sources":["../../../src/core/interactivo/deteccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,6EAA6E;AAC7E,+EAA6E;AAC7E,0EAA0E;AAC1E,4EAA2E;AAC3E,MAAM,kBAAkB,GAAqB;IAC5C;QACC,qEAAmE;QACnE,2EAAyE;QACzE,sDAAsD;QACtD,MAAM,EAAE,mBAAkB;QAC1B,KAAK,EAAE,4FAAwF;KAC/F;IACD;QACC,MAAM,EAAE,aAAY;QACpB,KAAK,EAAE,qDAAoD;KAC3D;IACD;QACC,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,wCAAwC;KAC/C;IACD;QACC,MAAM,EAAE,uBAAsB;QAC9B,KAAK,EAAE,uDAAuD;KAC9D;IACD;QACC,yEAAwE;QACxE,2EAA2E;QAC3E,2CAA0C;QAC1C,MAAM,EAAE,uBAAsB;QAC9B,KAAK,EAAE,8GAA8G;KACrH;CACD,CAAC;AAEF,kFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAA6B;IACjF,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,CAAC;QACpD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAQD,uGAAoG;AACpG,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,UAAU,qBAAqB,CAAC,QASrC,EAAkB;IAClB,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAE9D,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,eAAc,MAAM,CAAC,MAAM,gBAAgB,EAAE,CAAC;IAE5F,MAAM,MAAM,GAAG,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC;IACpD,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,IAAI,sBAAsB,IAAI,QAAQ,CAAC,mBAAmB,IAAI,MAAM,EAAE,CAAC;QACtE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,0DAAuD,EAAE,CAAC;IAC7F,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAAA,CAC1C","sourcesContent":["/**\n * Detectar si un proceso vivo está ESPERANDO ENTRADA.\n *\n * Es la pieza difícil del hueco: `bash` normal lanza y espera a que el\n * proceso termine solo, y un comando que pregunta \"¿seguro? [s/n]\" o pide una\n * contraseña no termina nunca por su cuenta — se queda ahí, y `bash` lo lee\n * como \"no responde\" hasta que salta el timeout.\n *\n * Dos señales, ninguna perfecta por sí sola:\n *\n * 1. PATRÓN EN LA SALIDA. La cola de lo escrito coincide con una pregunta\n * conocida (confirmación s/n, contraseña, prompt de intérprete…). Es la\n * señal fuerte: determinista y explicable.\n * 2. INACTIVIDAD CON EL PROCESO VIVO. No ha llegado salida nueva en un\n * rato Y lo último que se escribió no terminó en salto de línea — que es\n * justo la forma de un `print(\"Password: \")` sin `\\n` al final. Sola,\n * esta señal confundiría \"está esperando\" con \"está pensando\"; por eso\n * exige la falta de salto de línea, no solo el silencio.\n *\n * Lo que NO se hace: hilar todos los prompts posibles del universo. Un\n * comando normal (`echo hola`) termina solo — el proceso deja de estar vivo\n * antes de que esto se llegue a preguntar, así que ni siquiera hace falta que\n * la lista de patrones sea exhaustiva para no dispararse con él.\n */\n\n/** Un patrón de prompt reconocido, con nombre para explicar la decisión. */\ninterface PatronDePrompt {\n\tnombre: string;\n\tregex: RegExp;\n}\n\n// Todos anclados a `$` (fin del trozo de salida mirado): un prompt de verdad\n// es lo ÚLTIMO que se escribió, no una frase que aparezca de pasada en medio\n// de un log. Sin el anclaje, un script que simplemente IMPRIME la palabra\n// \"password\" en un mensaje informativo se marcaría como esperando entrada.\nconst PATRONES_DE_PROMPT: PatronDePrompt[] = [\n\t{\n\t\t// \"[s/n]\", \"(y/n)\", \"[Y/n]\", \"(yes/no)\"… Restringido a palabras de\n\t\t// confirmación conocidas y NO a dígitos, porque \"[3/10]\" de una barra de\n\t\t// progreso tiene la misma forma y no es una pregunta.\n\t\tnombre: \"confirmación s/n\",\n\t\tregex: /[[(]\\s*(?:s[ií]?|y(?:es)?|n[oó]?)\\s*\\/\\s*(?:s[ií]?|y(?:es)?|n[oó]?)\\s*[\\])]\\s*:?\\s*$/iu,\n\t},\n\t{\n\t\tnombre: \"contraseña\",\n\t\tregex: /\\b(?:password|contrase[nñ]a|passphrase)\\s*:?\\s*$/iu,\n\t},\n\t{\n\t\tnombre: \"pulsa una tecla\",\n\t\tregex: /press\\s+(?:any\\s+key|enter|return)\\b/iu,\n\t},\n\t{\n\t\tnombre: \"confirmación abierta\",\n\t\tregex: /\\b(?:continue|continuar|proceed|are you sure)\\?\\s*$/iu,\n\t},\n\t{\n\t\t// Prompts de intérpretes conocidos: Python, IPython, Node, Ruby, MySQL,\n\t\t// psql, gdb, sqlite3. Cada uno es la forma exacta con la que ese REPL deja\n\t\t// el cursor esperando la siguiente línea.\n\t\tnombre: \"prompt de intérprete\",\n\t\tregex: /(?:^|\\n)\\s*(?:>>>|\\.\\.\\.|In \\[\\d+\\]:|irb\\([^)]*\\):\\d+:\\d+[>*]|mysql>|psql[^\\n]*[=#-]>|\\(gdb\\)|sqlite>)\\s*$/iu,\n\t},\n];\n\n/** Busca un patrón conocido en la cola de salida. `null` si ninguno coincide. */\nexport function detectarPromptEnSalida(salida: string): { nombre: string } | null {\n\tfor (const { nombre, regex } of PATRONES_DE_PROMPT) {\n\t\tregex.lastIndex = 0;\n\t\tif (regex.test(salida)) return { nombre };\n\t}\n\treturn null;\n}\n\nexport interface EstadoDeEspera {\n\tesperando: boolean;\n\t/** Por qué se decidió. `null` cuando `esperando` es `false`: no hay nada que explicar. */\n\tmotivo: string | null;\n}\n\n/** Cuánta cola de salida se mira. Un prompt vive en las últimas líneas, no en todo el historial. */\nconst VENTANA_DE_COLA = 500;\n\nexport function detectarEsperaEntrada(opciones: {\n\t/** Toda la salida acumulada desde la última consulta (o desde el arranque). */\n\tsalidaReciente: string;\n\t/** Milisegundos desde el último byte recibido. */\n\tmsDesdeUltimaSalida: number;\n\t/** Si el proceso sigue vivo. Un proceso muerto no puede estar esperando nada. */\n\tvivo: boolean;\n\t/** A partir de cuánta inactividad se considera la señal débil. Por defecto 1200ms. */\n\tumbralInactividadMs?: number;\n}): EstadoDeEspera {\n\tif (!opciones.vivo) return { esperando: false, motivo: null };\n\n\tconst cola = opciones.salidaReciente.slice(-VENTANA_DE_COLA);\n\n\tconst patron = detectarPromptEnSalida(cola);\n\tif (patron) return { esperando: true, motivo: `patrón de \"${patron.nombre}\" en la salida` };\n\n\tconst umbral = opciones.umbralInactividadMs ?? 1200;\n\tconst terminaSinSaltoDeLinea = cola.length > 0 && !/[\\n\\r]\\s*$/u.test(cola);\n\tif (terminaSinSaltoDeLinea && opciones.msDesdeUltimaSalida >= umbral) {\n\t\treturn { esperando: true, motivo: \"sin salida nueva y la última línea quedó sin terminar\" };\n\t}\n\n\treturn { esperando: false, motivo: null };\n}\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Un proceso interactivo vivo, entre llamadas a tool.
3
+ *
4
+ * `bash` normal lanza y espera a que termine: una sola llamada, un solo
5
+ * resultado. Aquí el proceso sobrevive a la llamada que lo lanzó, para que
6
+ * una segunda llamada (`bash_enviar`) pueda escribirle más entrada — el
7
+ * "sí" a la confirmación, la contraseña, el siguiente comando del REPL.
8
+ *
9
+ * Reutiliza el MISMO seguimiento de huérfanos que ya usa `bash` normal
10
+ * (`trackDetachedChildPid` / `killTrackedDetachedChildren` en
11
+ * `utils/shell.ts`), que los tres modos del CLI —print, interactive, rpc—
12
+ * ya llaman al apagarse. No hace falta cablear un gancho de cierre nuevo:
13
+ * una sesión viva entra en el mismo Set que un `bash` colgado, y muere con
14
+ * él. Verificado en `sesion.test.ts` y con `ps` en el informe de la tarea.
15
+ */
16
+ export interface ResultadoSesion {
17
+ id: string;
18
+ comando: string;
19
+ salida: string;
20
+ esperando: boolean;
21
+ motivo: string | null;
22
+ vivo: boolean;
23
+ codigoSalida: number | null;
24
+ }
25
+ export interface OpcionesLanzar {
26
+ cwd: string;
27
+ timeoutMs?: number;
28
+ umbralInactividadMs?: number;
29
+ shellPath?: string;
30
+ }
31
+ /** Lanza un proceso interactivo y espera hasta el primer prompt (o a que termine, o al timeout). */
32
+ export declare function lanzarSesionInteractiva(comando: string, opciones: OpcionesLanzar): Promise<ResultadoSesion>;
33
+ export interface OpcionesEnviar {
34
+ timeoutMs?: number;
35
+ umbralInactividadMs?: number;
36
+ }
37
+ /**
38
+ * Manda una línea a una sesión viva y espera la siguiente señal.
39
+ *
40
+ * `null` cuando la sesión no existe: NO es lo mismo que una sesión que
41
+ * existe pero no tiene nada nuevo que decir (eso es `salida: ""`).
42
+ */
43
+ export declare function enviarASesion(id: string, texto: string, opciones?: OpcionesEnviar): Promise<ResultadoSesion | null>;
44
+ /** `null` si la sesión no existe; `true`/`false` según si había algo vivo que matar. */
45
+ export declare function cerrarSesion(id: string): boolean | null;
46
+ /** Para pruebas y para el apagado del CLI: no debe sobrevivir ninguna. */
47
+ export declare function cerrarTodasLasSesiones(): void;
48
+ /** Solo para pruebas: cuántas sesiones quedan registradas. */
49
+ export declare function contarSesiones(): number;
50
+ //# sourceMappingURL=sesion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sesion.d.ts","sourceRoot":"","sources":["../../../src/core/interactivo/sesion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA6BH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA6DD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oGAAoG;AACpG,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA8CjH;AAED,MAAM,WAAW,cAAc;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAClC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,cAAmB,GAC3B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED,2FAAwF;AACxF,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CASvD;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,+DAA8D;AAC9D,wBAAgB,cAAc,IAAI,MAAM,CAEvC","sourcesContent":["/**\n * Un proceso interactivo vivo, entre llamadas a tool.\n *\n * `bash` normal lanza y espera a que termine: una sola llamada, un solo\n * resultado. Aquí el proceso sobrevive a la llamada que lo lanzó, para que\n * una segunda llamada (`bash_enviar`) pueda escribirle más entrada — el\n * \"sí\" a la confirmación, la contraseña, el siguiente comando del REPL.\n *\n * Reutiliza el MISMO seguimiento de huérfanos que ya usa `bash` normal\n * (`trackDetachedChildPid` / `killTrackedDetachedChildren` en\n * `utils/shell.ts`), que los tres modos del CLI —print, interactive, rpc—\n * ya llaman al apagarse. No hace falta cablear un gancho de cierre nuevo:\n * una sesión viva entra en el mismo Set que un `bash` colgado, y muere con\n * él. Verificado en `sesion.test.ts` y con `ps` en el informe de la tarea.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n\tgetShellConfig,\n\tgetShellEnv,\n\tkillProcessTree,\n\ttrackDetachedChildPid,\n\tuntrackDetachedChildPid,\n} from \"../../utils/shell.ts\";\nimport { detectarEsperaEntrada } from \"./deteccion.ts\";\n\n/** Cuánta salida sin consumir se retiene por sesión. Un REPL ruidoso no debe reventar memoria. */\nconst MAX_PENDIENTE_BYTES = 200_000;\nconst AVISO_RECORTE = \"[…salida antigua descartada, sesión demasiado ruidosa…]\\n\";\n\ninterface SesionInteractiva {\n\tid: string;\n\tcomando: string;\n\tpid: number | undefined;\n\tproceso: import(\"node:child_process\").ChildProcessWithoutNullStreams;\n\t/** Lo que no se le ha devuelto todavía al agente. */\n\tpendiente: string;\n\tultimaActividad: number;\n\tvivo: boolean;\n\tcodigoSalida: number | null;\n}\n\nexport interface ResultadoSesion {\n\tid: string;\n\tcomando: string;\n\tsalida: string;\n\tesperando: boolean;\n\tmotivo: string | null;\n\tvivo: boolean;\n\tcodigoSalida: number | null;\n}\n\nconst sesiones = new Map<string, SesionInteractiva>();\n\nfunction normalizarChunk(buf: Buffer): string {\n\treturn buf.toString(\"utf8\").replace(/\\r\\n/gu, \"\\n\");\n}\n\nfunction acumular(s: SesionInteractiva, texto: string): void {\n\ts.pendiente += texto;\n\ts.ultimaActividad = Date.now();\n\tif (s.pendiente.length > MAX_PENDIENTE_BYTES) {\n\t\ts.pendiente = AVISO_RECORTE + s.pendiente.slice(-MAX_PENDIENTE_BYTES);\n\t}\n}\n\nfunction limpiar(s: SesionInteractiva): void {\n\tif (s.pid !== undefined) untrackDetachedChildPid(s.pid);\n}\n\n/**\n * Espera a que la sesión dé una señal (prompt detectado o proceso muerto) o\n * agote el tiempo. Sondea cada 80ms: es rápido de sobra frente a lo que\n * tarda un humano en leer un prompt, y no quema CPU con un intervalo menor.\n */\nasync function esperarSenal(\n\ts: SesionInteractiva,\n\ttimeoutMs: number,\n\tumbralInactividadMs: number,\n): Promise<ReturnType<typeof detectarEsperaEntrada>> {\n\tconst limite = Date.now() + timeoutMs;\n\tfor (;;) {\n\t\tconst estado = detectarEsperaEntrada({\n\t\t\tsalidaReciente: s.pendiente,\n\t\t\tmsDesdeUltimaSalida: Date.now() - s.ultimaActividad,\n\t\t\tvivo: s.vivo,\n\t\t\tumbralInactividadMs,\n\t\t});\n\t\tif (estado.esperando || !s.vivo || Date.now() >= limite) return estado;\n\t\tawait new Promise((resolve) => setTimeout(resolve, 80));\n\t}\n}\n\nfunction consumir(s: SesionInteractiva): string {\n\tconst salida = s.pendiente;\n\ts.pendiente = \"\";\n\treturn salida;\n}\n\nfunction aResultado(s: SesionInteractiva, estado: ReturnType<typeof detectarEsperaEntrada>): ResultadoSesion {\n\treturn {\n\t\tid: s.id,\n\t\tcomando: s.comando,\n\t\tsalida: consumir(s),\n\t\tesperando: estado.esperando,\n\t\tmotivo: estado.motivo,\n\t\tvivo: s.vivo,\n\t\tcodigoSalida: s.codigoSalida,\n\t};\n}\n\nexport interface OpcionesLanzar {\n\tcwd: string;\n\ttimeoutMs?: number;\n\tumbralInactividadMs?: number;\n\tshellPath?: string;\n}\n\n/** Lanza un proceso interactivo y espera hasta el primer prompt (o a que termine, o al timeout). */\nexport async function lanzarSesionInteractiva(comando: string, opciones: OpcionesLanzar): Promise<ResultadoSesion> {\n\tconst shellConfig = getShellConfig(opciones.shellPath);\n\tconst comandoDesdeStdin = shellConfig.commandTransport === \"stdin\";\n\tconst proceso = spawn(shellConfig.shell, comandoDesdeStdin ? shellConfig.args : [...shellConfig.args, comando], {\n\t\tcwd: opciones.cwd,\n\t\tdetached: process.platform !== \"win32\",\n\t\tenv: getShellEnv(),\n\t\tstdio: \"pipe\",\n\t\twindowsHide: true,\n\t});\n\n\tconst s: SesionInteractiva = {\n\t\tid: randomUUID(),\n\t\tcomando,\n\t\tpid: proceso.pid,\n\t\tproceso,\n\t\tpendiente: \"\",\n\t\tultimaActividad: Date.now(),\n\t\tvivo: true,\n\t\tcodigoSalida: null,\n\t};\n\tsesiones.set(s.id, s);\n\tif (proceso.pid) trackDetachedChildPid(proceso.pid);\n\n\tproceso.stdout.on(\"data\", (chunk: Buffer) => acumular(s, normalizarChunk(chunk)));\n\tproceso.stderr.on(\"data\", (chunk: Buffer) => acumular(s, normalizarChunk(chunk)));\n\tproceso.stdin.on(\"error\", () => {\n\t\t// Escribir tras la muerte del proceso no debe tirar la sesión abajo:\n\t\t// `bash_enviar` ya distingue \"sesión muerta\" por `vivo`.\n\t});\n\tproceso.on(\"exit\", (code) => {\n\t\ts.vivo = false;\n\t\ts.codigoSalida = code;\n\t\tlimpiar(s);\n\t});\n\n\t// El comando en sí es la primera \"entrada\": en modo `-s` (bash de WSL legacy)\n\t// se escribe por stdin en vez de pasar por argv, y el fd es el mismo tanto\n\t// para el resto del script como para lo que el propio comando pida leer\n\t// luego — es idéntico a teclearlo a mano.\n\tif (comandoDesdeStdin) {\n\t\tproceso.stdin.write(`${comando}\\n`);\n\t}\n\n\tconst estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);\n\treturn aResultado(s, estado);\n}\n\nexport interface OpcionesEnviar {\n\ttimeoutMs?: number;\n\tumbralInactividadMs?: number;\n}\n\n/**\n * Manda una línea a una sesión viva y espera la siguiente señal.\n *\n * `null` cuando la sesión no existe: NO es lo mismo que una sesión que\n * existe pero no tiene nada nuevo que decir (eso es `salida: \"\"`).\n */\nexport async function enviarASesion(\n\tid: string,\n\ttexto: string,\n\topciones: OpcionesEnviar = {},\n): Promise<ResultadoSesion | null> {\n\tconst s = sesiones.get(id);\n\tif (!s) return null;\n\tif (!s.vivo) return aResultado(s, { esperando: false, motivo: null });\n\n\ts.proceso.stdin.write(`${texto}\\n`);\n\tconst estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);\n\treturn aResultado(s, estado);\n}\n\n/** `null` si la sesión no existe; `true`/`false` según si había algo vivo que matar. */\nexport function cerrarSesion(id: string): boolean | null {\n\tconst s = sesiones.get(id);\n\tif (!s) return null;\n\tconst estabaViva = s.vivo;\n\tif (s.pid !== undefined) killProcessTree(s.pid);\n\ts.vivo = false;\n\tlimpiar(s);\n\tsesiones.delete(id);\n\treturn estabaViva;\n}\n\n/** Para pruebas y para el apagado del CLI: no debe sobrevivir ninguna. */\nexport function cerrarTodasLasSesiones(): void {\n\tfor (const id of [...sesiones.keys()]) cerrarSesion(id);\n}\n\n/** Solo para pruebas: cuántas sesiones quedan registradas. */\nexport function contarSesiones(): number {\n\treturn sesiones.size;\n}\n"]}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Un proceso interactivo vivo, entre llamadas a tool.
3
+ *
4
+ * `bash` normal lanza y espera a que termine: una sola llamada, un solo
5
+ * resultado. Aquí el proceso sobrevive a la llamada que lo lanzó, para que
6
+ * una segunda llamada (`bash_enviar`) pueda escribirle más entrada — el
7
+ * "sí" a la confirmación, la contraseña, el siguiente comando del REPL.
8
+ *
9
+ * Reutiliza el MISMO seguimiento de huérfanos que ya usa `bash` normal
10
+ * (`trackDetachedChildPid` / `killTrackedDetachedChildren` en
11
+ * `utils/shell.ts`), que los tres modos del CLI —print, interactive, rpc—
12
+ * ya llaman al apagarse. No hace falta cablear un gancho de cierre nuevo:
13
+ * una sesión viva entra en el mismo Set que un `bash` colgado, y muere con
14
+ * él. Verificado en `sesion.test.ts` y con `ps` en el informe de la tarea.
15
+ */
16
+ import { spawn } from "node:child_process";
17
+ import { randomUUID } from "node:crypto";
18
+ import { getShellConfig, getShellEnv, killProcessTree, trackDetachedChildPid, untrackDetachedChildPid, } from "../../utils/shell.js";
19
+ import { detectarEsperaEntrada } from "./deteccion.js";
20
+ /** Cuánta salida sin consumir se retiene por sesión. Un REPL ruidoso no debe reventar memoria. */
21
+ const MAX_PENDIENTE_BYTES = 200_000;
22
+ const AVISO_RECORTE = "[…salida antigua descartada, sesión demasiado ruidosa…]\n";
23
+ const sesiones = new Map();
24
+ function normalizarChunk(buf) {
25
+ return buf.toString("utf8").replace(/\r\n/gu, "\n");
26
+ }
27
+ function acumular(s, texto) {
28
+ s.pendiente += texto;
29
+ s.ultimaActividad = Date.now();
30
+ if (s.pendiente.length > MAX_PENDIENTE_BYTES) {
31
+ s.pendiente = AVISO_RECORTE + s.pendiente.slice(-MAX_PENDIENTE_BYTES);
32
+ }
33
+ }
34
+ function limpiar(s) {
35
+ if (s.pid !== undefined)
36
+ untrackDetachedChildPid(s.pid);
37
+ }
38
+ /**
39
+ * Espera a que la sesión dé una señal (prompt detectado o proceso muerto) o
40
+ * agote el tiempo. Sondea cada 80ms: es rápido de sobra frente a lo que
41
+ * tarda un humano en leer un prompt, y no quema CPU con un intervalo menor.
42
+ */
43
+ async function esperarSenal(s, timeoutMs, umbralInactividadMs) {
44
+ const limite = Date.now() + timeoutMs;
45
+ for (;;) {
46
+ const estado = detectarEsperaEntrada({
47
+ salidaReciente: s.pendiente,
48
+ msDesdeUltimaSalida: Date.now() - s.ultimaActividad,
49
+ vivo: s.vivo,
50
+ umbralInactividadMs,
51
+ });
52
+ if (estado.esperando || !s.vivo || Date.now() >= limite)
53
+ return estado;
54
+ await new Promise((resolve) => setTimeout(resolve, 80));
55
+ }
56
+ }
57
+ function consumir(s) {
58
+ const salida = s.pendiente;
59
+ s.pendiente = "";
60
+ return salida;
61
+ }
62
+ function aResultado(s, estado) {
63
+ return {
64
+ id: s.id,
65
+ comando: s.comando,
66
+ salida: consumir(s),
67
+ esperando: estado.esperando,
68
+ motivo: estado.motivo,
69
+ vivo: s.vivo,
70
+ codigoSalida: s.codigoSalida,
71
+ };
72
+ }
73
+ /** Lanza un proceso interactivo y espera hasta el primer prompt (o a que termine, o al timeout). */
74
+ export async function lanzarSesionInteractiva(comando, opciones) {
75
+ const shellConfig = getShellConfig(opciones.shellPath);
76
+ const comandoDesdeStdin = shellConfig.commandTransport === "stdin";
77
+ const proceso = spawn(shellConfig.shell, comandoDesdeStdin ? shellConfig.args : [...shellConfig.args, comando], {
78
+ cwd: opciones.cwd,
79
+ detached: process.platform !== "win32",
80
+ env: getShellEnv(),
81
+ stdio: "pipe",
82
+ windowsHide: true,
83
+ });
84
+ const s = {
85
+ id: randomUUID(),
86
+ comando,
87
+ pid: proceso.pid,
88
+ proceso,
89
+ pendiente: "",
90
+ ultimaActividad: Date.now(),
91
+ vivo: true,
92
+ codigoSalida: null,
93
+ };
94
+ sesiones.set(s.id, s);
95
+ if (proceso.pid)
96
+ trackDetachedChildPid(proceso.pid);
97
+ proceso.stdout.on("data", (chunk) => acumular(s, normalizarChunk(chunk)));
98
+ proceso.stderr.on("data", (chunk) => acumular(s, normalizarChunk(chunk)));
99
+ proceso.stdin.on("error", () => {
100
+ // Escribir tras la muerte del proceso no debe tirar la sesión abajo:
101
+ // `bash_enviar` ya distingue "sesión muerta" por `vivo`.
102
+ });
103
+ proceso.on("exit", (code) => {
104
+ s.vivo = false;
105
+ s.codigoSalida = code;
106
+ limpiar(s);
107
+ });
108
+ // El comando en sí es la primera "entrada": en modo `-s` (bash de WSL legacy)
109
+ // se escribe por stdin en vez de pasar por argv, y el fd es el mismo tanto
110
+ // para el resto del script como para lo que el propio comando pida leer
111
+ // luego — es idéntico a teclearlo a mano.
112
+ if (comandoDesdeStdin) {
113
+ proceso.stdin.write(`${comando}\n`);
114
+ }
115
+ const estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);
116
+ return aResultado(s, estado);
117
+ }
118
+ /**
119
+ * Manda una línea a una sesión viva y espera la siguiente señal.
120
+ *
121
+ * `null` cuando la sesión no existe: NO es lo mismo que una sesión que
122
+ * existe pero no tiene nada nuevo que decir (eso es `salida: ""`).
123
+ */
124
+ export async function enviarASesion(id, texto, opciones = {}) {
125
+ const s = sesiones.get(id);
126
+ if (!s)
127
+ return null;
128
+ if (!s.vivo)
129
+ return aResultado(s, { esperando: false, motivo: null });
130
+ s.proceso.stdin.write(`${texto}\n`);
131
+ const estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);
132
+ return aResultado(s, estado);
133
+ }
134
+ /** `null` si la sesión no existe; `true`/`false` según si había algo vivo que matar. */
135
+ export function cerrarSesion(id) {
136
+ const s = sesiones.get(id);
137
+ if (!s)
138
+ return null;
139
+ const estabaViva = s.vivo;
140
+ if (s.pid !== undefined)
141
+ killProcessTree(s.pid);
142
+ s.vivo = false;
143
+ limpiar(s);
144
+ sesiones.delete(id);
145
+ return estabaViva;
146
+ }
147
+ /** Para pruebas y para el apagado del CLI: no debe sobrevivir ninguna. */
148
+ export function cerrarTodasLasSesiones() {
149
+ for (const id of [...sesiones.keys()])
150
+ cerrarSesion(id);
151
+ }
152
+ /** Solo para pruebas: cuántas sesiones quedan registradas. */
153
+ export function contarSesiones() {
154
+ return sesiones.size;
155
+ }
156
+ //# sourceMappingURL=sesion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sesion.js","sourceRoot":"","sources":["../../../src/core/interactivo/sesion.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Un proceso interactivo vivo, entre llamadas a tool.\n *\n * `bash` normal lanza y espera a que termine: una sola llamada, un solo\n * resultado. Aquí el proceso sobrevive a la llamada que lo lanzó, para que\n * una segunda llamada (`bash_enviar`) pueda escribirle más entrada — el\n * \"sí\" a la confirmación, la contraseña, el siguiente comando del REPL.\n *\n * Reutiliza el MISMO seguimiento de huérfanos que ya usa `bash` normal\n * (`trackDetachedChildPid` / `killTrackedDetachedChildren` en\n * `utils/shell.ts`), que los tres modos del CLI —print, interactive, rpc—\n * ya llaman al apagarse. No hace falta cablear un gancho de cierre nuevo:\n * una sesión viva entra en el mismo Set que un `bash` colgado, y muere con\n * él. Verificado en `sesion.test.ts` y con `ps` en el informe de la tarea.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n\tgetShellConfig,\n\tgetShellEnv,\n\tkillProcessTree,\n\ttrackDetachedChildPid,\n\tuntrackDetachedChildPid,\n} from \"../../utils/shell.ts\";\nimport { detectarEsperaEntrada } from \"./deteccion.ts\";\n\n/** Cuánta salida sin consumir se retiene por sesión. Un REPL ruidoso no debe reventar memoria. */\nconst MAX_PENDIENTE_BYTES = 200_000;\nconst AVISO_RECORTE = \"[…salida antigua descartada, sesión demasiado ruidosa…]\\n\";\n\ninterface SesionInteractiva {\n\tid: string;\n\tcomando: string;\n\tpid: number | undefined;\n\tproceso: import(\"node:child_process\").ChildProcessWithoutNullStreams;\n\t/** Lo que no se le ha devuelto todavía al agente. */\n\tpendiente: string;\n\tultimaActividad: number;\n\tvivo: boolean;\n\tcodigoSalida: number | null;\n}\n\nexport interface ResultadoSesion {\n\tid: string;\n\tcomando: string;\n\tsalida: string;\n\tesperando: boolean;\n\tmotivo: string | null;\n\tvivo: boolean;\n\tcodigoSalida: number | null;\n}\n\nconst sesiones = new Map<string, SesionInteractiva>();\n\nfunction normalizarChunk(buf: Buffer): string {\n\treturn buf.toString(\"utf8\").replace(/\\r\\n/gu, \"\\n\");\n}\n\nfunction acumular(s: SesionInteractiva, texto: string): void {\n\ts.pendiente += texto;\n\ts.ultimaActividad = Date.now();\n\tif (s.pendiente.length > MAX_PENDIENTE_BYTES) {\n\t\ts.pendiente = AVISO_RECORTE + s.pendiente.slice(-MAX_PENDIENTE_BYTES);\n\t}\n}\n\nfunction limpiar(s: SesionInteractiva): void {\n\tif (s.pid !== undefined) untrackDetachedChildPid(s.pid);\n}\n\n/**\n * Espera a que la sesión dé una señal (prompt detectado o proceso muerto) o\n * agote el tiempo. Sondea cada 80ms: es rápido de sobra frente a lo que\n * tarda un humano en leer un prompt, y no quema CPU con un intervalo menor.\n */\nasync function esperarSenal(\n\ts: SesionInteractiva,\n\ttimeoutMs: number,\n\tumbralInactividadMs: number,\n): Promise<ReturnType<typeof detectarEsperaEntrada>> {\n\tconst limite = Date.now() + timeoutMs;\n\tfor (;;) {\n\t\tconst estado = detectarEsperaEntrada({\n\t\t\tsalidaReciente: s.pendiente,\n\t\t\tmsDesdeUltimaSalida: Date.now() - s.ultimaActividad,\n\t\t\tvivo: s.vivo,\n\t\t\tumbralInactividadMs,\n\t\t});\n\t\tif (estado.esperando || !s.vivo || Date.now() >= limite) return estado;\n\t\tawait new Promise((resolve) => setTimeout(resolve, 80));\n\t}\n}\n\nfunction consumir(s: SesionInteractiva): string {\n\tconst salida = s.pendiente;\n\ts.pendiente = \"\";\n\treturn salida;\n}\n\nfunction aResultado(s: SesionInteractiva, estado: ReturnType<typeof detectarEsperaEntrada>): ResultadoSesion {\n\treturn {\n\t\tid: s.id,\n\t\tcomando: s.comando,\n\t\tsalida: consumir(s),\n\t\tesperando: estado.esperando,\n\t\tmotivo: estado.motivo,\n\t\tvivo: s.vivo,\n\t\tcodigoSalida: s.codigoSalida,\n\t};\n}\n\nexport interface OpcionesLanzar {\n\tcwd: string;\n\ttimeoutMs?: number;\n\tumbralInactividadMs?: number;\n\tshellPath?: string;\n}\n\n/** Lanza un proceso interactivo y espera hasta el primer prompt (o a que termine, o al timeout). */\nexport async function lanzarSesionInteractiva(comando: string, opciones: OpcionesLanzar): Promise<ResultadoSesion> {\n\tconst shellConfig = getShellConfig(opciones.shellPath);\n\tconst comandoDesdeStdin = shellConfig.commandTransport === \"stdin\";\n\tconst proceso = spawn(shellConfig.shell, comandoDesdeStdin ? shellConfig.args : [...shellConfig.args, comando], {\n\t\tcwd: opciones.cwd,\n\t\tdetached: process.platform !== \"win32\",\n\t\tenv: getShellEnv(),\n\t\tstdio: \"pipe\",\n\t\twindowsHide: true,\n\t});\n\n\tconst s: SesionInteractiva = {\n\t\tid: randomUUID(),\n\t\tcomando,\n\t\tpid: proceso.pid,\n\t\tproceso,\n\t\tpendiente: \"\",\n\t\tultimaActividad: Date.now(),\n\t\tvivo: true,\n\t\tcodigoSalida: null,\n\t};\n\tsesiones.set(s.id, s);\n\tif (proceso.pid) trackDetachedChildPid(proceso.pid);\n\n\tproceso.stdout.on(\"data\", (chunk: Buffer) => acumular(s, normalizarChunk(chunk)));\n\tproceso.stderr.on(\"data\", (chunk: Buffer) => acumular(s, normalizarChunk(chunk)));\n\tproceso.stdin.on(\"error\", () => {\n\t\t// Escribir tras la muerte del proceso no debe tirar la sesión abajo:\n\t\t// `bash_enviar` ya distingue \"sesión muerta\" por `vivo`.\n\t});\n\tproceso.on(\"exit\", (code) => {\n\t\ts.vivo = false;\n\t\ts.codigoSalida = code;\n\t\tlimpiar(s);\n\t});\n\n\t// El comando en sí es la primera \"entrada\": en modo `-s` (bash de WSL legacy)\n\t// se escribe por stdin en vez de pasar por argv, y el fd es el mismo tanto\n\t// para el resto del script como para lo que el propio comando pida leer\n\t// luego — es idéntico a teclearlo a mano.\n\tif (comandoDesdeStdin) {\n\t\tproceso.stdin.write(`${comando}\\n`);\n\t}\n\n\tconst estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);\n\treturn aResultado(s, estado);\n}\n\nexport interface OpcionesEnviar {\n\ttimeoutMs?: number;\n\tumbralInactividadMs?: number;\n}\n\n/**\n * Manda una línea a una sesión viva y espera la siguiente señal.\n *\n * `null` cuando la sesión no existe: NO es lo mismo que una sesión que\n * existe pero no tiene nada nuevo que decir (eso es `salida: \"\"`).\n */\nexport async function enviarASesion(\n\tid: string,\n\ttexto: string,\n\topciones: OpcionesEnviar = {},\n): Promise<ResultadoSesion | null> {\n\tconst s = sesiones.get(id);\n\tif (!s) return null;\n\tif (!s.vivo) return aResultado(s, { esperando: false, motivo: null });\n\n\ts.proceso.stdin.write(`${texto}\\n`);\n\tconst estado = await esperarSenal(s, opciones.timeoutMs ?? 10_000, opciones.umbralInactividadMs ?? 1200);\n\treturn aResultado(s, estado);\n}\n\n/** `null` si la sesión no existe; `true`/`false` según si había algo vivo que matar. */\nexport function cerrarSesion(id: string): boolean | null {\n\tconst s = sesiones.get(id);\n\tif (!s) return null;\n\tconst estabaViva = s.vivo;\n\tif (s.pid !== undefined) killProcessTree(s.pid);\n\ts.vivo = false;\n\tlimpiar(s);\n\tsesiones.delete(id);\n\treturn estabaViva;\n}\n\n/** Para pruebas y para el apagado del CLI: no debe sobrevivir ninguna. */\nexport function cerrarTodasLasSesiones(): void {\n\tfor (const id of [...sesiones.keys()]) cerrarSesion(id);\n}\n\n/** Solo para pruebas: cuántas sesiones quedan registradas. */\nexport function contarSesiones(): number {\n\treturn sesiones.size;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tools de bash interactivo: `bash_interactivo`, `bash_enviar`, `bash_cerrar`.
3
+ *
4
+ * `bash` normal se queda colgado ante un comando que pregunta algo — una
5
+ * confirmación, una contraseña, un REPL— hasta que salta el timeout, y el
6
+ * agente lo lee como "el comando no responde". Estas tres tools abren un
7
+ * proceso que sobrevive entre llamadas: `bash_interactivo` lo lanza y
8
+ * devuelve lo que haya hasta el primer prompt (o hasta que termine, o hasta
9
+ * el timeout); `bash_enviar` le manda una línea más; `bash_cerrar` lo mata.
10
+ *
11
+ * Ninguna de las tres está en `LECTURA` ni `ESCRITURA` en
12
+ * `aprobacion/politica.ts`, así que `nivelDe()` las clasifica como
13
+ * `ejecucion` por su regla de "lo desconocido cuenta como ejecución" — la
14
+ * misma puerta que ya pasa `bash`, sin tocar ese fichero.
15
+ */
16
+ import type { ToolDefinition } from "../extensions/types.ts";
17
+ export declare const NOMBRES_INTERACTIVO_TOOLS: readonly ["bash_interactivo", "bash_enviar", "bash_cerrar"];
18
+ export declare function crearInteractivoTools(opciones: {
19
+ cwd: string;
20
+ }): Record<string, ToolDefinition>;
21
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/core/interactivo/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAkC9E,eAAO,MAAM,yBAAyB,6DAA8D,CAAC;AAErG,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CA8E/F","sourcesContent":["/**\n * Tools de bash interactivo: `bash_interactivo`, `bash_enviar`, `bash_cerrar`.\n *\n * `bash` normal se queda colgado ante un comando que pregunta algo — una\n * confirmación, una contraseña, un REPL— hasta que salta el timeout, y el\n * agente lo lee como \"el comando no responde\". Estas tres tools abren un\n * proceso que sobrevive entre llamadas: `bash_interactivo` lo lanza y\n * devuelve lo que haya hasta el primer prompt (o hasta que termine, o hasta\n * el timeout); `bash_enviar` le manda una línea más; `bash_cerrar` lo mata.\n *\n * Ninguna de las tres está en `LECTURA` ni `ESCRITURA` en\n * `aprobacion/politica.ts`, así que `nivelDe()` las clasifica como\n * `ejecucion` por su regla de \"lo desconocido cuenta como ejecución\" — la\n * misma puerta que ya pasa `bash`, sin tocar ese fichero.\n */\n\nimport { Type } from \"typebox\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport { cerrarSesion, enviarASesion, lanzarSesionInteractiva, type ResultadoSesion } from \"./sesion.ts\";\n\nconst GUIA = [\n\t\"Para un comando normal que termina solo, usa bash. Usa bash_interactivo solo cuando esperes que el comando pregunte algo: una confirmación, una contraseña, un REPL.\",\n\t\"bash_interactivo devuelve un id de sesión. Si sigue vivo, respóndele con bash_enviar pasando ese id y una línea de texto (puede ser vacía, para solo esperar más).\",\n\t\"Cierra la sesión con bash_cerrar en cuanto termines con ella: una sesión olvidada sigue consumiendo un proceso real.\",\n];\n\nfunction texto(t: string): AgentToolResult<unknown> {\n\treturn { content: [{ type: \"text\" as const, text: t }], details: undefined };\n}\n\nfunction fallo(error: unknown): AgentToolResult<unknown> {\n\treturn texto(`Error: ${error instanceof Error ? error.message : String(error)}`);\n}\n\n/** Frase de estado + qué hacer a continuación, para que el modelo no tenga que adivinar. */\nfunction narrarEstado(r: ResultadoSesion): string {\n\tif (!r.vivo) return `[sesión ${r.id}] terminó con código ${r.codigoSalida ?? \"desconocido\"}.`;\n\tif (r.esperando) {\n\t\treturn `[sesión ${r.id}] esperando entrada (${r.motivo}). Responde con bash_enviar (session=\"${r.id}\") o mátala con bash_cerrar.`;\n\t}\n\treturn `[sesión ${r.id}] sigue en marcha, sin señal reconocible de que esté esperando algo todavía. Puedes esperar más con bash_enviar (session=\"${r.id}\", texto=\"\") o cerrarla con bash_cerrar.`;\n}\n\nfunction conSalida(r: ResultadoSesion): string {\n\treturn `${narrarEstado(r)}\\n\\n${r.salida || \"(sin salida nueva)\"}`;\n}\n\nfunction segundosAMs(segundos: number | undefined): number | undefined {\n\treturn segundos === undefined ? undefined : segundos * 1000;\n}\n\nexport const NOMBRES_INTERACTIVO_TOOLS = [\"bash_interactivo\", \"bash_enviar\", \"bash_cerrar\"] as const;\n\nexport function crearInteractivoTools(opciones: { cwd: string }): Record<string, ToolDefinition> {\n\tconst lanzar: ToolDefinition<ReturnType<typeof Type.Object>> = {\n\t\tname: \"bash_interactivo\",\n\t\tlabel: \"Bash interactivo\",\n\t\tdescription:\n\t\t\t\"Lanza un comando de shell que puede pedir entrada (confirmación, contraseña, REPL) y devuelve \" +\n\t\t\t\"lo que haya escrito hasta el primer prompt reconocido, hasta que termine, o hasta el timeout. \" +\n\t\t\t\"El proceso queda vivo entre llamadas: sigue con bash_enviar.\",\n\t\tpromptSnippet: \"ejecutar un comando que puede preguntar algo y seguir hablando con él\",\n\t\tpromptGuidelines: GUIA,\n\t\tparameters: Type.Object({\n\t\t\tcommand: Type.String({ description: \"Comando de shell a ejecutar\" }),\n\t\t\ttimeout: Type.Optional(\n\t\t\t\tType.Number({\n\t\t\t\t\tdescription: \"Segundos a esperar por un prompt antes de devolver el control (por defecto 10)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tasync execute(_id, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst comando = String(input.command ?? \"\").trim();\n\t\t\tif (!comando) return texto(\"Falta el comando.\");\n\t\t\ttry {\n\t\t\t\tconst r = await lanzarSesionInteractiva(comando, {\n\t\t\t\t\tcwd: opciones.cwd,\n\t\t\t\t\ttimeoutMs: segundosAMs(input.timeout as number | undefined),\n\t\t\t\t});\n\t\t\t\treturn texto(conSalida(r));\n\t\t\t} catch (error) {\n\t\t\t\treturn fallo(error);\n\t\t\t}\n\t\t},\n\t};\n\n\tconst enviar: ToolDefinition<ReturnType<typeof Type.Object>> = {\n\t\tname: \"bash_enviar\",\n\t\tlabel: \"Enviar a sesión interactiva\",\n\t\tdescription:\n\t\t\t\"Manda una línea de texto a una sesión abierta con bash_interactivo (por ejemplo la respuesta a una \" +\n\t\t\t\"confirmación o una contraseña) y espera la siguiente señal: otro prompt, más salida, o que termine.\",\n\t\tpromptSnippet: \"responder a una sesión de bash interactivo abierta\",\n\t\tpromptGuidelines: GUIA,\n\t\tparameters: Type.Object({\n\t\t\tsession: Type.String({ description: \"El id de sesión que devolvió bash_interactivo\" }),\n\t\t\ttexto: Type.String({ description: \"Línea a enviar (se añade un salto de línea). Puede ser vacía.\" }),\n\t\t\ttimeout: Type.Optional(Type.Number({ description: \"Segundos a esperar la siguiente señal (por defecto 10)\" })),\n\t\t}),\n\t\tasync execute(_id, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst id = String(input.session ?? \"\");\n\t\t\ttry {\n\t\t\t\tconst r = await enviarASesion(id, String(input.texto ?? \"\"), {\n\t\t\t\t\ttimeoutMs: segundosAMs(input.timeout as number | undefined),\n\t\t\t\t});\n\t\t\t\tif (r === null) return texto(`No hay ninguna sesión interactiva abierta con id \"${id}\".`);\n\t\t\t\treturn texto(conSalida(r));\n\t\t\t} catch (error) {\n\t\t\t\treturn fallo(error);\n\t\t\t}\n\t\t},\n\t};\n\n\tconst cerrar: ToolDefinition<ReturnType<typeof Type.Object>> = {\n\t\tname: \"bash_cerrar\",\n\t\tlabel: \"Cerrar sesión interactiva\",\n\t\tdescription: \"Mata una sesión abierta con bash_interactivo y libera el proceso.\",\n\t\tpromptSnippet: \"cerrar una sesión de bash interactivo abierta\",\n\t\tpromptGuidelines: GUIA,\n\t\tparameters: Type.Object({\n\t\t\tsession: Type.String({ description: \"El id de sesión a cerrar\" }),\n\t\t}),\n\t\tasync execute(_id, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst id = String(input.session ?? \"\");\n\t\t\tconst habiaAlgoVivo = cerrarSesion(id);\n\t\t\tif (habiaAlgoVivo === null) return texto(`No hay ninguna sesión interactiva abierta con id \"${id}\".`);\n\t\t\treturn texto(habiaAlgoVivo ? `Sesión ${id} cerrada.` : `La sesión ${id} ya había terminado; limpiada.`);\n\t\t},\n\t};\n\n\treturn { bash_interactivo: lanzar, bash_enviar: enviar, bash_cerrar: cerrar };\n}\n"]}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Tools de bash interactivo: `bash_interactivo`, `bash_enviar`, `bash_cerrar`.
3
+ *
4
+ * `bash` normal se queda colgado ante un comando que pregunta algo — una
5
+ * confirmación, una contraseña, un REPL— hasta que salta el timeout, y el
6
+ * agente lo lee como "el comando no responde". Estas tres tools abren un
7
+ * proceso que sobrevive entre llamadas: `bash_interactivo` lo lanza y
8
+ * devuelve lo que haya hasta el primer prompt (o hasta que termine, o hasta
9
+ * el timeout); `bash_enviar` le manda una línea más; `bash_cerrar` lo mata.
10
+ *
11
+ * Ninguna de las tres está en `LECTURA` ni `ESCRITURA` en
12
+ * `aprobacion/politica.ts`, así que `nivelDe()` las clasifica como
13
+ * `ejecucion` por su regla de "lo desconocido cuenta como ejecución" — la
14
+ * misma puerta que ya pasa `bash`, sin tocar ese fichero.
15
+ */
16
+ import { Type } from "typebox";
17
+ import { cerrarSesion, enviarASesion, lanzarSesionInteractiva } from "./sesion.js";
18
+ const GUIA = [
19
+ "Para un comando normal que termina solo, usa bash. Usa bash_interactivo solo cuando esperes que el comando pregunte algo: una confirmación, una contraseña, un REPL.",
20
+ "bash_interactivo devuelve un id de sesión. Si sigue vivo, respóndele con bash_enviar pasando ese id y una línea de texto (puede ser vacía, para solo esperar más).",
21
+ "Cierra la sesión con bash_cerrar en cuanto termines con ella: una sesión olvidada sigue consumiendo un proceso real.",
22
+ ];
23
+ function texto(t) {
24
+ return { content: [{ type: "text", text: t }], details: undefined };
25
+ }
26
+ function fallo(error) {
27
+ return texto(`Error: ${error instanceof Error ? error.message : String(error)}`);
28
+ }
29
+ /** Frase de estado + qué hacer a continuación, para que el modelo no tenga que adivinar. */
30
+ function narrarEstado(r) {
31
+ if (!r.vivo)
32
+ return `[sesión ${r.id}] terminó con código ${r.codigoSalida ?? "desconocido"}.`;
33
+ if (r.esperando) {
34
+ return `[sesión ${r.id}] esperando entrada (${r.motivo}). Responde con bash_enviar (session="${r.id}") o mátala con bash_cerrar.`;
35
+ }
36
+ return `[sesión ${r.id}] sigue en marcha, sin señal reconocible de que esté esperando algo todavía. Puedes esperar más con bash_enviar (session="${r.id}", texto="") o cerrarla con bash_cerrar.`;
37
+ }
38
+ function conSalida(r) {
39
+ return `${narrarEstado(r)}\n\n${r.salida || "(sin salida nueva)"}`;
40
+ }
41
+ function segundosAMs(segundos) {
42
+ return segundos === undefined ? undefined : segundos * 1000;
43
+ }
44
+ export const NOMBRES_INTERACTIVO_TOOLS = ["bash_interactivo", "bash_enviar", "bash_cerrar"];
45
+ export function crearInteractivoTools(opciones) {
46
+ const lanzar = {
47
+ name: "bash_interactivo",
48
+ label: "Bash interactivo",
49
+ description: "Lanza un comando de shell que puede pedir entrada (confirmación, contraseña, REPL) y devuelve " +
50
+ "lo que haya escrito hasta el primer prompt reconocido, hasta que termine, o hasta el timeout. " +
51
+ "El proceso queda vivo entre llamadas: sigue con bash_enviar.",
52
+ promptSnippet: "ejecutar un comando que puede preguntar algo y seguir hablando con él",
53
+ promptGuidelines: GUIA,
54
+ parameters: Type.Object({
55
+ command: Type.String({ description: "Comando de shell a ejecutar" }),
56
+ timeout: Type.Optional(Type.Number({
57
+ description: "Segundos a esperar por un prompt antes de devolver el control (por defecto 10)",
58
+ })),
59
+ }),
60
+ async execute(_id, input) {
61
+ const comando = String(input.command ?? "").trim();
62
+ if (!comando)
63
+ return texto("Falta el comando.");
64
+ try {
65
+ const r = await lanzarSesionInteractiva(comando, {
66
+ cwd: opciones.cwd,
67
+ timeoutMs: segundosAMs(input.timeout),
68
+ });
69
+ return texto(conSalida(r));
70
+ }
71
+ catch (error) {
72
+ return fallo(error);
73
+ }
74
+ },
75
+ };
76
+ const enviar = {
77
+ name: "bash_enviar",
78
+ label: "Enviar a sesión interactiva",
79
+ description: "Manda una línea de texto a una sesión abierta con bash_interactivo (por ejemplo la respuesta a una " +
80
+ "confirmación o una contraseña) y espera la siguiente señal: otro prompt, más salida, o que termine.",
81
+ promptSnippet: "responder a una sesión de bash interactivo abierta",
82
+ promptGuidelines: GUIA,
83
+ parameters: Type.Object({
84
+ session: Type.String({ description: "El id de sesión que devolvió bash_interactivo" }),
85
+ texto: Type.String({ description: "Línea a enviar (se añade un salto de línea). Puede ser vacía." }),
86
+ timeout: Type.Optional(Type.Number({ description: "Segundos a esperar la siguiente señal (por defecto 10)" })),
87
+ }),
88
+ async execute(_id, input) {
89
+ const id = String(input.session ?? "");
90
+ try {
91
+ const r = await enviarASesion(id, String(input.texto ?? ""), {
92
+ timeoutMs: segundosAMs(input.timeout),
93
+ });
94
+ if (r === null)
95
+ return texto(`No hay ninguna sesión interactiva abierta con id "${id}".`);
96
+ return texto(conSalida(r));
97
+ }
98
+ catch (error) {
99
+ return fallo(error);
100
+ }
101
+ },
102
+ };
103
+ const cerrar = {
104
+ name: "bash_cerrar",
105
+ label: "Cerrar sesión interactiva",
106
+ description: "Mata una sesión abierta con bash_interactivo y libera el proceso.",
107
+ promptSnippet: "cerrar una sesión de bash interactivo abierta",
108
+ promptGuidelines: GUIA,
109
+ parameters: Type.Object({
110
+ session: Type.String({ description: "El id de sesión a cerrar" }),
111
+ }),
112
+ async execute(_id, input) {
113
+ const id = String(input.session ?? "");
114
+ const habiaAlgoVivo = cerrarSesion(id);
115
+ if (habiaAlgoVivo === null)
116
+ return texto(`No hay ninguna sesión interactiva abierta con id "${id}".`);
117
+ return texto(habiaAlgoVivo ? `Sesión ${id} cerrada.` : `La sesión ${id} ya había terminado; limpiada.`);
118
+ },
119
+ };
120
+ return { bash_interactivo: lanzar, bash_enviar: enviar, bash_cerrar: cerrar };
121
+ }
122
+ //# sourceMappingURL=tools.js.map