xonecode 0.38.41 → 0.39.2

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 (334) hide show
  1. package/apps/web/dist/assets/{EditorDeFichero-B5qtmfKO.js → EditorDeFichero-BeWDctgN.js} +1 -1
  2. package/apps/web/dist/assets/{index-C6XoIOQg.js → index-B-6cDRAV.js} +20 -20
  3. package/apps/web/dist/assets/{php-I6JfbNBQ.js → php-D3QdOnb8.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-DlqXDLOX.js → ruby-DDAcW-Z2.js} +1 -1
  5. package/apps/web/dist/index.html +1 -1
  6. package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
  7. package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
  8. package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
  9. package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
  10. package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
  11. package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
  12. package/dist/agent/cloudstudio/crearRama.js +16 -0
  13. package/dist/agent/cloudstudio/crearRama.js.map +1 -0
  14. package/dist/agent/cloudstudio/descarga.d.ts +44 -0
  15. package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
  16. package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
  17. package/dist/agent/cloudstudio/subida.d.ts +61 -0
  18. package/dist/agent/cloudstudio/subida.js +7 -1
  19. package/dist/agent/cloudstudio/subida.js.map +1 -1
  20. package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
  21. package/dist/agent/cloudstudio/zip.d.ts +13 -0
  22. package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
  23. package/dist/agent/conectores/gestorJira.d.ts +50 -0
  24. package/dist/agent/conectores/gestorNotion.d.ts +45 -0
  25. package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
  26. package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
  27. package/dist/agent/config/authEnDisco.d.ts +43 -0
  28. package/dist/agent/config/catalogoModelos.d.ts +79 -0
  29. package/dist/agent/config/configEnDisco.d.ts +235 -0
  30. package/dist/agent/config/crearProyecto.d.ts +20 -0
  31. package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
  32. package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
  33. package/dist/agent/config/entorno.d.ts +83 -0
  34. package/dist/agent/config/fuentesEnRed.d.ts +12 -0
  35. package/dist/agent/config/gemini.d.ts +5 -0
  36. package/dist/agent/config/iconosEnRed.d.ts +10 -0
  37. package/dist/agent/config/identidadEnDisco.d.ts +27 -0
  38. package/dist/agent/config/modelos.d.ts +77 -0
  39. package/dist/agent/config/modelosDeMotor.d.ts +52 -0
  40. package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
  41. package/dist/agent/config/persona.d.ts +1 -0
  42. package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
  43. package/dist/agent/config/settingsEnDisco.d.ts +206 -0
  44. package/dist/agent/config/versionEnDisco.d.ts +17 -0
  45. package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
  46. package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
  47. package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
  48. package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
  49. package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
  50. package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
  51. package/dist/agent/dispositivos/hotswap.d.ts +194 -0
  52. package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
  53. package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
  54. package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
  55. package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
  56. package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
  57. package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
  58. package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
  59. package/dist/agent/exportarPdf.d.ts +72 -0
  60. package/dist/agent/grafo/aprendido.d.ts +28 -0
  61. package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
  62. package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
  63. package/dist/agent/grafo/atributosXone.d.ts +31 -0
  64. package/dist/agent/grafo/buscarIcono.d.ts +32 -0
  65. package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
  66. package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
  67. package/dist/agent/grafo/compararCapturas.d.ts +22 -0
  68. package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
  69. package/dist/agent/grafo/criticaVisual.d.ts +60 -0
  70. package/dist/agent/grafo/describirImagen.d.ts +79 -0
  71. package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
  72. package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
  73. package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
  74. package/dist/agent/grafo/excluirTools.d.ts +37 -0
  75. package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
  76. package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
  77. package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
  78. package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
  79. package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
  80. package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
  81. package/dist/agent/grafo/navegacionXone.d.ts +60 -0
  82. package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
  83. package/dist/agent/grafo/perfiles.d.ts +225 -0
  84. package/dist/agent/grafo/proyecto.d.ts +450 -0
  85. package/dist/agent/grafo/skills.d.ts +181 -0
  86. package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
  87. package/dist/agent/grafo/unirSecciones.d.ts +20 -0
  88. package/dist/agent/grafo/validacionXone.d.ts +35 -0
  89. package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
  90. package/dist/agent/grafo/xoneAgent.d.ts +166 -0
  91. package/dist/agent/motores/motoresLocales.d.ts +87 -0
  92. package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
  93. package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
  94. package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
  95. package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
  96. package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
  97. package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
  98. package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
  99. package/dist/agent/motores/trueforge/medidaAutomatica.js +4 -2
  100. package/dist/agent/motores/trueforge/medidaAutomatica.js.map +1 -1
  101. package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
  102. package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
  103. package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
  104. package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
  105. package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
  106. package/dist/agent/motores/trueforge/notas.d.ts +48 -0
  107. package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
  108. package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
  109. package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
  110. package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
  111. package/dist/agent/motores/trueforge/sesionTrueforge.js +32 -15
  112. package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
  113. package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
  114. package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
  115. package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
  116. package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
  117. package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
  118. package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
  119. package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
  120. package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
  121. package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
  122. package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
  123. package/dist/agent/planesEnDisco.d.ts +18 -0
  124. package/dist/agent/publicarPlan.d.ts +20 -0
  125. package/dist/agent/raizDelPaquete.d.ts +9 -0
  126. package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
  127. package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
  128. package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
  129. package/dist/agent/renombrarSobre.d.ts +14 -0
  130. package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
  131. package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
  132. package/dist/agent/sesiones/checkpointer.d.ts +146 -0
  133. package/dist/agent/sesiones/git.d.ts +66 -0
  134. package/dist/agent/sesiones/gitSync.d.ts +264 -0
  135. package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
  136. package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
  137. package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
  138. package/dist/agent/sesiones/sesionGit.d.ts +155 -0
  139. package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
  140. package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
  141. package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
  142. package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
  143. package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
  144. package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
  145. package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
  146. package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
  147. package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
  148. package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
  149. package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
  150. package/dist/agent/tareas/aumentador.d.ts +99 -0
  151. package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
  152. package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
  153. package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
  154. package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
  155. package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
  156. package/dist/agent/turno/depuracion.d.ts +1 -0
  157. package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
  158. package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
  159. package/dist/agent/turno/guionizado.d.ts +18 -0
  160. package/dist/agent/turno/informeDeTraza.d.ts +220 -0
  161. package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
  162. package/dist/agent/turno/instantanea.d.ts +16 -0
  163. package/dist/agent/turno/interrupts.d.ts +54 -0
  164. package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
  165. package/dist/agent/turno/mensajes.d.ts +23 -0
  166. package/dist/agent/turno/normalizar.d.ts +15 -0
  167. package/dist/agent/turno/puente.d.ts +196 -0
  168. package/dist/agent/turno/registroDeFallos.d.ts +39 -0
  169. package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
  170. package/dist/agent/turno/resumenDeTool.d.ts +33 -0
  171. package/dist/agent/turno/rubrica.d.ts +35 -0
  172. package/dist/agent/turno/sesionReal.d.ts +89 -0
  173. package/dist/agent/turno/textoDeTool.d.ts +19 -0
  174. package/dist/agent/turno/turnoReal.d.ts +210 -0
  175. package/dist/agent/turno/verificacion.d.ts +85 -0
  176. package/dist/agent/turno/verificador.d.ts +66 -0
  177. package/dist/bin.d.ts +2 -0
  178. package/dist/cli/acuseDeModelo.d.ts +18 -0
  179. package/dist/cli/aprobar.d.ts +162 -0
  180. package/dist/cli/config.d.ts +17 -0
  181. package/dist/cli/consola.d.ts +473 -0
  182. package/dist/cli/describe.d.ts +7 -0
  183. package/dist/cli/doctor.d.ts +8 -0
  184. package/dist/cli/fuentesDeDisco.d.ts +25 -0
  185. package/dist/cli/main.d.ts +291 -0
  186. package/dist/cli/markdown.d.ts +126 -0
  187. package/dist/cli/panel.d.ts +38 -0
  188. package/dist/cli/podar.d.ts +38 -0
  189. package/dist/cli/run.d.ts +30 -0
  190. package/dist/cli/spinner.d.ts +37 -0
  191. package/dist/cli/stdio.d.ts +94 -0
  192. package/dist/cli/tema.d.ts +68 -0
  193. package/dist/cli/tokens.d.ts +16 -0
  194. package/dist/cli/traza.d.ts +19 -0
  195. package/dist/cli/tui/app.d.ts +23 -0
  196. package/dist/cli/tui/aprobarTui.d.ts +46 -0
  197. package/dist/cli/tui/barra.d.ts +43 -0
  198. package/dist/cli/tui/correrTui.d.ts +119 -0
  199. package/dist/cli/tui/entrada.d.ts +14 -0
  200. package/dist/cli/tui/filas.d.ts +13 -0
  201. package/dist/cli/tui/logo.d.ts +20 -0
  202. package/dist/cli/tui/pielTui.d.ts +15 -0
  203. package/dist/cli/tui/raton.d.ts +68 -0
  204. package/dist/cli/tui/sidebar.d.ts +63 -0
  205. package/dist/cli/tui/store.d.ts +102 -0
  206. package/dist/cli/tui/tarjeta.d.ts +8 -0
  207. package/dist/cli/tui/temaInk.d.ts +67 -0
  208. package/dist/cli/tui/transcript.d.ts +32 -0
  209. package/dist/cli/verify.d.ts +9 -0
  210. package/dist/cli/wizardInicial.d.ts +59 -0
  211. package/dist/core/actos.d.ts +437 -0
  212. package/dist/core/adjuntos.d.ts +77 -0
  213. package/dist/core/agentes.d.ts +353 -0
  214. package/dist/core/analisisDeSesion.d.ts +63 -0
  215. package/dist/core/aprendido.d.ts +41 -0
  216. package/dist/core/artefactos.d.ts +74 -0
  217. package/dist/core/atributosXone.d.ts +53 -0
  218. package/dist/core/bitacora.d.ts +21 -0
  219. package/dist/core/cloudstudio.d.ts +168 -0
  220. package/dist/core/codificacion.d.ts +81 -0
  221. package/dist/core/comandoExterno.d.ts +49 -0
  222. package/dist/core/compararCapturas.d.ts +136 -0
  223. package/dist/core/conectores.d.ts +296 -0
  224. package/dist/core/config.d.ts +148 -0
  225. package/dist/core/contextos.d.ts +54 -0
  226. package/dist/core/convertirAP.d.ts +56 -0
  227. package/dist/core/copiaDeAvd.d.ts +44 -0
  228. package/dist/core/cssBienFormado.d.ts +22 -0
  229. package/dist/core/deps.d.ts +28 -0
  230. package/dist/core/descargas.d.ts +61 -0
  231. package/dist/core/descripcionDePantalla.d.ts +121 -0
  232. package/dist/core/descriptoresDeApp.d.ts +108 -0
  233. package/dist/core/diagnosticoDeNode.d.ts +51 -0
  234. package/dist/core/diff.d.ts +26 -0
  235. package/dist/core/diffDeColecciones.d.ts +54 -0
  236. package/dist/core/disenoVinculado.d.ts +17 -0
  237. package/dist/core/dispositivoDeSesion.d.ts +22 -0
  238. package/dist/core/dispositivoElegido.d.ts +17 -0
  239. package/dist/core/dispositivos.d.ts +469 -0
  240. package/dist/core/entrega.d.ts +341 -0
  241. package/dist/core/entrelazar.d.ts +48 -0
  242. package/dist/core/esfuerzo.d.ts +120 -0
  243. package/dist/core/esqueleto.d.ts +38 -0
  244. package/dist/core/estiloMedido.d.ts +70 -0
  245. package/dist/core/estilos.d.ts +76 -0
  246. package/dist/core/events.d.ts +218 -0
  247. package/dist/core/exportacion.d.ts +88 -0
  248. package/dist/core/fallos.d.ts +79 -0
  249. package/dist/core/fondosSvg.d.ts +115 -0
  250. package/dist/core/fotoDeColecciones.d.ts +45 -0
  251. package/dist/core/fuentes.d.ts +96 -0
  252. package/dist/core/geometriaDePantalla.d.ts +171 -0
  253. package/dist/core/gestorDeTareas.d.ts +295 -0
  254. package/dist/core/hechosDelProyecto.d.ts +70 -0
  255. package/dist/core/hotswap.d.ts +30 -0
  256. package/dist/core/iconos.d.ts +86 -0
  257. package/dist/core/identidadDeProveedor.d.ts +20 -0
  258. package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
  259. package/dist/core/imagenesDeDocumento.d.ts +40 -0
  260. package/dist/core/jsParaRhino.d.ts +3 -0
  261. package/dist/core/juezDelTurno.d.ts +95 -0
  262. package/dist/core/logDeDispositivo.d.ts +67 -0
  263. package/dist/core/memoria.d.ts +18 -0
  264. package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
  265. package/dist/core/modelos.d.ts +198 -0
  266. package/dist/core/modoDeEscritura.d.ts +155 -0
  267. package/dist/core/motor.d.ts +43 -0
  268. package/dist/core/motoresLocales.d.ts +113 -0
  269. package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
  270. package/dist/core/navegacion.d.ts +172 -0
  271. package/dist/core/notify.d.ts +77 -0
  272. package/dist/core/nucleoXone.d.ts +28 -0
  273. package/dist/core/panorama.d.ts +68 -0
  274. package/dist/core/paqueteDeSoporte.d.ts +100 -0
  275. package/dist/core/planDeSubida.d.ts +56 -0
  276. package/dist/core/planes.d.ts +53 -0
  277. package/dist/core/podaDeCheckpoint.d.ts +75 -0
  278. package/dist/core/ports.d.ts +1034 -0
  279. package/dist/core/puedeLanzarse.d.ts +181 -0
  280. package/dist/core/puertosDeAvd.d.ts +59 -0
  281. package/dist/core/recargaEnCaliente.d.ts +52 -0
  282. package/dist/core/referenciasDeImagen.d.ts +36 -0
  283. package/dist/core/remoto.d.ts +76 -0
  284. package/dist/core/repartoDeEncargo.d.ts +80 -0
  285. package/dist/core/rubrica.d.ts +78 -0
  286. package/dist/core/rutaVirtual.d.ts +29 -0
  287. package/dist/core/selectorDeCarpeta.d.ts +59 -0
  288. package/dist/core/serieDeEscrituras.d.ts +58 -0
  289. package/dist/core/settings.d.ts +421 -0
  290. package/dist/core/shellDeAgente.d.ts +177 -0
  291. package/dist/core/skills.d.ts +129 -0
  292. package/dist/core/stitch.d.ts +114 -0
  293. package/dist/core/tareas.d.ts +412 -0
  294. package/dist/core/tareasDelPlan.d.ts +123 -0
  295. package/dist/core/tareasEnElGestor.d.ts +117 -0
  296. package/dist/core/textos.d.ts +8 -0
  297. package/dist/core/topeAgotado.d.ts +55 -0
  298. package/dist/core/traerDeLaMaquina.d.ts +33 -0
  299. package/dist/core/trazaDeErrores.d.ts +83 -0
  300. package/dist/core/tunel.d.ts +45 -0
  301. package/dist/core/turno.d.ts +154 -0
  302. package/dist/core/validacionDeEscritura.d.ts +95 -0
  303. package/dist/core/verificacionDeSubida.d.ts +14 -0
  304. package/dist/core/version.d.ts +35 -0
  305. package/dist/core/xmlBienFormado.d.ts +23 -0
  306. package/dist/core/zipDeAdjunto.d.ts +28 -0
  307. package/dist/core/zipDeSkill.d.ts +74 -0
  308. package/dist/lib/tareaAutonoma.d.ts +36 -0
  309. package/dist/lib/tareaAutonoma.js +259 -0
  310. package/dist/lib/tareaAutonoma.js.map +1 -0
  311. package/dist/lib.d.ts +31 -0
  312. package/dist/lib.js +28 -0
  313. package/dist/lib.js.map +1 -0
  314. package/dist/vendor/hitl.d.ts +69 -0
  315. package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
  316. package/dist/vendor/sqliteSaver.d.ts +22 -0
  317. package/dist/vendor/tokenTracking.d.ts +22 -0
  318. package/dist/web/servidor/arranque.d.ts +1372 -0
  319. package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
  320. package/dist/web/servidor/consolaWeb.d.ts +142 -0
  321. package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
  322. package/dist/web/servidor/datosDeCierre.d.ts +4 -0
  323. package/dist/web/servidor/interrupcion.d.ts +39 -0
  324. package/dist/web/servidor/pielWeb.d.ts +32 -0
  325. package/dist/web/servidor/puenteRemoto.d.ts +80 -0
  326. package/dist/web/servidor/servidor.d.ts +53 -0
  327. package/dist/web/servidor/sesiones.d.ts +342 -0
  328. package/dist/web/servidor/soporte.d.ts +65 -0
  329. package/dist/web/servidor/soporte.js +2 -0
  330. package/dist/web/servidor/soporte.js.map +1 -1
  331. package/dist/web/servidor/transporte.d.ts +2751 -0
  332. package/dist/web/servidor/vestibulo.d.ts +952 -0
  333. package/dist/web/servidor/visorOpenui.d.ts +33 -0
  334. package/package.json +9 -1
@@ -0,0 +1,161 @@
1
+ /**
2
+ * El PATH de un proceso hijo con carpetas AÑADIDAS al final, con las reglas de la plataforma.
3
+ *
4
+ * Dos cosas que en Windows no son como en macOS, y las dos se rompían en silencio: el
5
+ * separador es `;` y no `:` (que además vive DENTRO de `C:\…`), y la variable suele llamarse
6
+ * `Path`. Se devuelve con el MISMO nombre con que llegó: en Windows el entorno no distingue
7
+ * mayúsculas, y un hijo con `PATH` y `Path` a la vez recibiría uno de los dos sin que nadie
8
+ * diga cuál. Sin ninguno puesto, `PATH`.
9
+ */
10
+ export declare function pathConCarpetas(entorno: Record<string, string | undefined>, carpetas: readonly string[], plataforma: string): {
11
+ nombre: string;
12
+ valor: string;
13
+ };
14
+ /** Componer una ruta con las reglas de la plataforma medida (ver `rutasDe`). */
15
+ export declare function unirRuta(plataforma: string, ...partes: string[]): string;
16
+ import { type AjustesDeDispositivos } from "../../core/settings.js";
17
+ import { type Dispositivo, type NombreDeHerramienta, type InformeDeDispositivos } from "../../core/dispositivos.js";
18
+ export interface Ejecucion {
19
+ stdout: string;
20
+ stderr: string;
21
+ }
22
+ export interface DependenciasDeDeteccion {
23
+ /** `process.platform`. */
24
+ plataforma?: string;
25
+ /** `process.env`. */
26
+ entorno?: Record<string, string | undefined>;
27
+ /** El home del usuario, para las carpetas de SDK por omisión. */
28
+ home?: string;
29
+ existe?: (ruta: string) => boolean;
30
+ ejecutar?: (binario: string, args: string[], opciones: {
31
+ timeout: number;
32
+ }) => Promise<Ejecucion>;
33
+ /** Lee el fichero que `devicectl` escribió. */
34
+ leer?: (ruta: string) => Promise<string>;
35
+ /** Lo borra: SIEMPRE, también si `xcrun` falló a medias y lo dejó escrito. */
36
+ borrar?: (ruta: string) => Promise<void>;
37
+ /** Dónde escribir el JSON de `devicectl`. */
38
+ ficheroTemporal?: () => string;
39
+ ahora?: () => Date;
40
+ }
41
+ /** Cuánto se espera a cada herramienta antes de darla por colgada. */
42
+ export declare const TOPES_MS: {
43
+ /** `adb devices` arranca el demonio si hace falta y eso tarda segundos en frío. */
44
+ readonly adb: 15000;
45
+ readonly emulator: 10000;
46
+ readonly xcrun: 20000;
47
+ };
48
+ export declare function localizadorDeAndroid(deps: {
49
+ plataforma: string;
50
+ entorno: Record<string, string | undefined>;
51
+ home: string;
52
+ existe: (ruta: string) => boolean;
53
+ }): {
54
+ raicesDeSdk: string[];
55
+ enPath: (nombre: string) => string | undefined;
56
+ /** En el PATH y, si no, dentro del SDK bajo `subcarpeta`. */
57
+ enSdk: (nombre: string, subcarpeta: string) => string | undefined;
58
+ };
59
+ /**
60
+ * El JDK con el que corre `sdkmanager`, que es un programa Java.
61
+ *
62
+ * `JAVA_HOME` si el usuario la puso; si no, por sistema: en macOS el `openjdk@17` de
63
+ * Homebrew en los dos prefijos —preguntárselo a `brew --prefix` costaría un proceso en cada
64
+ * medida—; en Windows la ruta FIJA donde cae el paso 2 de la receta,
65
+ * `%LOCALAPPDATA%\Android\jdk17` (`descargaDeHerramientas.ts` renombra ahí la carpeta
66
+ * versionada que trae el zip de Adoptium). Lo usan el detector, para decir si los últimos
67
+ * pasos se pueden lanzar, y el ejecutor, para ponérselo al hijo: una segunda copia habría
68
+ * divergido con el síntoma peor, que el botón se ofreciera y luego no encontrara el JDK.
69
+ */
70
+ export declare function jdkDeLaMaquina(entorno: Record<string, string | undefined>, existe: (ruta: string) => boolean, plataforma: string): string | undefined;
71
+ export declare function detectarDispositivos(deps?: DependenciasDeDeteccion,
72
+ /** Qué destinos se miran. Ausente = todos (`core/settings.ts#seMira`). */
73
+ ajustes?: AjustesDeDispositivos): Promise<InformeDeDispositivos>;
74
+ /** Cuánto se espera al instalador antes de darlo por colgado. */
75
+ export declare const TOPE_DE_INSTALACION_MS = 60000;
76
+ /**
77
+ * Lanza el instalador de una herramienta, si hay uno para ella en esta plataforma.
78
+ *
79
+ * **Un código de salida distinto de cero NO siempre es un fallo aquí**: `xcode-select
80
+ * --install` sale con error cuando las herramientas YA están instaladas, y eso no es nada
81
+ * que contar. Lo que se propaga es lo que impide seguir —que no exista el binario, o que se
82
+ * cuelgue—; del resto se encarga la medida de después, que es la que dice la verdad sobre si
83
+ * la herramienta está.
84
+ */
85
+ export declare function instalarHerramientaDeDispositivos(herramienta: NombreDeHerramienta, deps?: Pick<DependenciasDeDeteccion, "plataforma" | "ejecutar">): Promise<void>;
86
+ /**
87
+ * VERIFICAR la conexión con un dispositivo: hablarle y esperar respuesta.
88
+ *
89
+ * Es otra pregunta que la de `detectarDispositivos`, y por eso es otra función. Listar
90
+ * (`adb devices`, `simctl list`) dice lo que el intermediario CREE: adb contesta «device»
91
+ * de un teléfono cuyo `adb shell` se ha quedado colgado, y `simctl list` describe carpetas
92
+ * en disco —medido: `simctl getenv` contesta la ruta de datos de un simulador APAGADO, así
93
+ * que no vale como comprobación de nada—. Esto ejecuta algo AL OTRO LADO:
94
+ *
95
+ * - **Android** (físico o emulador): `adb -s <serial> shell getprop ro.product.model`. Si
96
+ * contesta, hay una shell viva dentro y de paso se sabe qué aparato es. Un teléfono sin
97
+ * autorizar falla aquí con su propio motivo, que es lo que hay que leer.
98
+ * - **Simulador iOS**: `xcrun simctl spawn <udid> /usr/bin/uname -r`, medido contra un
99
+ * simulador arrancado (contesta) y uno apagado (código 149 y «device is not booted»). Se
100
+ * eligió `spawn` justamente porque exige que el simulador esté vivo.
101
+ * - **iPhone o iPad físico**: `xcrun devicectl device info details --device <id>`, la misma
102
+ * herramienta que los lista. **No está medido**: en esta máquina no hay ninguno conectado,
103
+ * igual que `parsearDevicectl`, y la forma sale de su documentación.
104
+ *
105
+ * **El identificador NO viene del cliente.** Quien llama pasa el `Dispositivo` de la última
106
+ * medida, que es la única fuente sobre la máquina: un id que llegara del navegador sería una
107
+ * cadena de fuera dentro de los argumentos de un proceso.
108
+ *
109
+ * Nunca lanza: todo vuelve como `{ok, detalle}` de UNA línea. Quien la llama está atendiendo
110
+ * una petición del navegador, y esto es una respuesta, no una excepción.
111
+ */
112
+ export interface VerificacionDeDispositivo {
113
+ ok: boolean;
114
+ /** Una línea: lo que contestó, o por qué no. Nunca la salida entera. */
115
+ detalle: string;
116
+ }
117
+ export declare function verificarDispositivo(dispositivo: Dispositivo, deps?: Pick<DependenciasDeDeteccion, "plataforma" | "entorno" | "home" | "existe" | "ejecutar" | "leer" | "borrar" | "ficheroTemporal">): Promise<VerificacionDeDispositivo>;
118
+ /**
119
+ * Si un dispositivo Android tiene instalado el framework de XOne.
120
+ *
121
+ * **Se pregunta por el PAQUETE, no por el servidor.** `getLog` contesta con `deviceInfo` y
122
+ * `isXOneFramework: true`, y es la confirmación buena… **después** de conectar, cuando ya hay
123
+ * túnel y la app está viva. Antes de eso no hay a quién preguntar: el servidor vive dentro del
124
+ * proceso de la app, y sin app no hay proceso. Así que son dos momentos y dos medidas: el
125
+ * paquete decide si se puede EMPEZAR; `isXOneFramework` confirma, al final, que con quien se
126
+ * habló era el framework.
127
+ *
128
+ * Un solo viaje: `adb -s <serial> shell pm list packages com.xone.android`, que filtra por
129
+ * subcadena y trae de una vez los dos flavors. Y se busca por nombre EXACTO entre lo que
130
+ * contestó: el filtro es por subcadena, así que la lista puede traer parecidos, y dar por
131
+ * instalado algo que solo se le parece es afirmar de más.
132
+ *
133
+ * **No se lee `versionName` ni `versionCode`**: eso es de la INSTALACIÓN, que es otra pasada.
134
+ * Aquí la pregunta es de sí o no.
135
+ *
136
+ * **El `paquete` viaja en el resultado y no se guarda en ningún módulo**: es lo que necesita
137
+ * el reinicio posterior, porque el comando depende del flavor que este aparato tenga
138
+ * (`am start -n <paquete>/com.xone.android.hotswap.activities.SetupActivity`).
139
+ *
140
+ * Como `verificarDispositivo`, nunca lanza: todo vuelve como `{instalado, detalle}` de UNA
141
+ * línea. Y un dispositivo que no sea Android contesta sin lanzar NADA —no hay `adb` que
142
+ * preguntarle a un iPhone, y buscarlo sería un proceso gastado para nada.
143
+ */
144
+ export interface FrameworkEnDispositivo {
145
+ instalado: boolean;
146
+ /**
147
+ * El nombre EXACTO del paquete que se encontró. **Ausente es «no se encontró»**, nunca un
148
+ * paquete por omisión: quien vaya a reiniciar con esto tiene que poder distinguir «no hay
149
+ * framework» de «hay este».
150
+ */
151
+ paquete?: string;
152
+ /** Una línea: qué se encontró, o por qué no. Nunca la salida entera. */
153
+ detalle: string;
154
+ }
155
+ export declare function frameworkEnDispositivo(dispositivo: Dispositivo, deps?: Pick<DependenciasDeDeteccion, "plataforma" | "entorno" | "home" | "existe" | "ejecutar">): Promise<FrameworkEnDispositivo>;
156
+ /**
157
+ * Una línea sobre por qué falló, sin la salida entera. Un proceso que `execFile` mató por
158
+ * el timeout llega con `killed: true`; lo demás es la primera línea útil de stderr o del
159
+ * mensaje, recortada.
160
+ */
161
+ export declare function describirFallo(error: unknown, topeMs: number): string;
@@ -0,0 +1,17 @@
1
+ import type { ImagenRgba } from "../../core/compararCapturas.js";
2
+ /** El nombre del fichero de geometría de una captura. La MISMA regla que `nombreDeGeometria` del script. */
3
+ export declare function nombreDeGeometria(nombreDeCaptura: string): string;
4
+ /** Cuántas geometrías, de las más recientes, se miran al buscar por contenido. */
5
+ export declare const GEOMETRIAS_A_MIRAR = 12;
6
+ /** Cuántos píxeles distintos hay, en fracción; `Infinity` si no tienen el mismo tamaño. Recorre la imagen ENTERA. Pura. */
7
+ export declare function fraccionDistinta(a: ImagenRgba, b: ImagenRgba): number;
8
+ /** ¿Son la MISMA imagen (la misma captura, quizá reconvertida)? Pura. */
9
+ export declare function mismaImagen(a: ImagenRgba, b: ImagenRgba): boolean;
10
+ export interface BusquedaPorContenido {
11
+ /** La carpeta REAL de artefactos, donde están la captura que se juzga y las originales. */
12
+ carpetaDeArtefactos: string;
13
+ decodificar: (bytes: Buffer) => ImagenRgba;
14
+ }
15
+ /** La geometría de otra captura con los mismos píxeles que ésta, o `undefined`. Nunca lanza. */
16
+ export declare function geometriaPorContenido(carpetaDeHotswap: string, nombreDeCaptura: string, busqueda: BusquedaPorContenido): unknown;
17
+ export declare function geometriaDeCaptura(carpetaDeHotswap: string, nombreDeCaptura: string, busqueda?: BusquedaPorContenido): Promise<unknown>;
@@ -0,0 +1,194 @@
1
+ /** La URL por omisión: el puerto de fábrica, con el `adb forward` hecho. */
2
+ export declare const DESTINO_POR_OMISION = "wss://127.0.0.1:8443/hotswap";
3
+ /**
4
+ * Cuánto se espera al saludo antes de dar el canal por muerto.
5
+ *
6
+ * No es un plazo para la app: es para el SERVIDOR, que está dentro del proceso host y saluda en
7
+ * cuanto acepta el socket. Quince segundos es de sobra para un túnel de `adb` en loopback, y
8
+ * seguir esperando deja el turno parado sin nada que lo explique.
9
+ */
10
+ export declare const TOPE_DE_SALUDO_MS = 15000;
11
+ /**
12
+ * Y hasta cuándo se sigue INTENTANDO abrir el canal, contando desde el primer intento.
13
+ *
14
+ * **No es lo mismo que `TOPE_DE_SALUDO_MS`, y por eso hay dos.** Aquél mide un socket ABIERTO que
15
+ * no saluda; éste, un socket que no llega a abrirse — que es lo que se mide tras reiniciar el
16
+ * framework (ver la cabecera del módulo). Confundirlos deja el lanzamiento muriendo con la línea
17
+ * de TLS mientras el framework arranca detrás.
18
+ *
19
+ * El mismo minuto que la espera de la app: las dos preguntan lo mismo —cuánto tarda el aparato en
20
+ * llegar— sobre dos momentos distintos, y sesenta segundos son de sobra para una pantalla que
21
+ * arranca. El tope es del BUCLE y no de cada intento, así que uno que se quede esperando el saludo
22
+ * puede añadir su `TOPE_DE_SALUDO_MS` por encima.
23
+ */
24
+ export declare const TOPE_DE_APERTURA_MS = 60000;
25
+ /**
26
+ * Cada cuánto se vuelve a preguntar: por el canal que aún no abre, y por la app que aún no está
27
+ * en pie.
28
+ *
29
+ * Un solo número para las dos esperas porque son la misma idea —volver a preguntar en vez de
30
+ * dormir un rato fijo— y porque miden lo mismo: unos segundos de un aparato arrancando.
31
+ */
32
+ export declare const INTERVALO_DE_SONDEO_MS = 1000;
33
+ /**
34
+ * Y hasta cuándo, después de lanzarla.
35
+ *
36
+ * Se sondea con intervalo en vez de dormir un rato fijo por dos motivos, y son las dos caras
37
+ * del mismo error: un temporizador fijo o MIENTE por corto —diciendo que no arrancó algo que
38
+ * estaba arrancando— o hace perder un minuto entero en cada despliegue que va bien. Lo que
39
+ * decide es la medida, y en cuanto llega se para.
40
+ */
41
+ export declare const TOPE_DE_ARRANQUE_MS = 60000;
42
+ /**
43
+ * Cada cuánto se le VUELVE A PEDIR el lanzamiento mientras la lectura diga que la app no está.
44
+ *
45
+ * Existe por una medida, y es la que hacía fallar la pestaña entera: **el primer
46
+ * `launchApplication` que llega con el framework recién reiniciado se acepta con
47
+ * `{"result":true}` y no arranca nada.** Medido con los MISMOS bytes de ZIP en las dos
48
+ * direcciones: mandándolo una sola vez, doce lecturas seguidas dicen `App is not running` durante
49
+ * los 60 s del tope; volviéndolo a pedir cada 5 s, hay árbol a los dos o tres segundos del
50
+ * segundo o tercer envío. Las cuatro tiradas buenas de esa sesión se pusieron vivas **justo
51
+ * detrás de un reenvío**, y ninguna se puso viva sin él.
52
+ *
53
+ * **Solo se reenvía con la lectura DICIENDO que no está**, y eso no es prudencia: reenviar sobre
54
+ * una app viva la TUMBA —`MainEntry.finishApp()` → `closeApplication` → `Terminating and
55
+ * disposing appData`—, medido como un ciclo de viva/muerta cada 5 s. El bucle de abajo solo llega
56
+ * a esta línea cuando la lectura acaba de decir que no hay app, así que la propiedad se sostiene
57
+ * por construcción y no por un `if` que alguien pueda quitar.
58
+ *
59
+ * Cinco segundos y no uno: es el intervalo con el que se midió, y preguntar más a menudo no
60
+ * adelanta nada —lo que arranca la app es un envío POSTERIOR, no la prisa—.
61
+ */
62
+ export declare const INTERVALO_DE_REENVIO_MS = 5000;
63
+ /**
64
+ * La respuesta del framework, tal cual llegó. Sin interpretar: `result` es suyo y `status` es
65
+ * donde viene el motivo —y, en `getAllElements`, el árbol entero como JSON—.
66
+ */
67
+ export interface RespuestaHotswap {
68
+ /** El `result` del framework. `false` es un NO suyo, no un fallo de transporte. */
69
+ result?: unknown;
70
+ /**
71
+ * El `status`. Es SIEMPRE una cadena, también cuando lleva dentro un JSON: es el
72
+ * `ResultMessage(string)` documentado, el mismo molde que usan `getCurrentScreen` y `getRows`.
73
+ */
74
+ status?: string;
75
+ [clave: string]: unknown;
76
+ }
77
+ /**
78
+ * El trozo del socket que este módulo usa, y nada más.
79
+ *
80
+ * Es estructural a propósito: así el doble de un test no tiene que parecerse a `ws` en nada que
81
+ * no se use, y una versión mayor de `ws` que mueva lo demás no toca aquí.
82
+ */
83
+ export interface SocketHotswap {
84
+ on: (evento: "message" | "error" | "close", cb: (valor: never) => void) => void;
85
+ send: (texto: string) => void;
86
+ close: () => void;
87
+ }
88
+ /** Cómo se abre el socket. Entra por parámetro: `npm test` no abre ninguno. */
89
+ export type AbrirSocketHotswap = (url: string) => SocketHotswap;
90
+ export interface DependenciasDeHotswap {
91
+ /** El constructor del socket de verdad. Sin él se usa `ws`. */
92
+ abrirSocket?: AbrirSocketHotswap;
93
+ /**
94
+ * La URL del canal. Gana la posicional de `abrirHotswap`; esto existe porque
95
+ * `lanzarYComprobar` no tiene dónde ponerla —su segundo parámetro son las dependencias— y es
96
+ * quien conoce el puerto, que no siempre es el 8443 de fábrica.
97
+ */
98
+ destino?: string;
99
+ /** Cada línea, tal cual. Es lo que permite decir «el framework contestó esto» sin adivinar. */
100
+ alLinea?: (linea: string) => void;
101
+ }
102
+ export interface ClienteHotswap {
103
+ /**
104
+ * Manda un comando y espera SU respuesta. Antes espera el saludo: no sale nada por el socket
105
+ * hasta que el servidor ha hablado.
106
+ */
107
+ comando(nombre: string, extra?: Record<string, unknown>): Promise<RespuestaHotswap>;
108
+ /** Cierra el canal. Idempotente: se llama en un `finally`, y también desde el propio fallo. */
109
+ cerrar(): void;
110
+ /**
111
+ * Espera el saludo del servidor. Se resuelve con el `server_hello`, y falla con UNA línea si el
112
+ * canal se cerró antes o si no llegó en `TOPE_DE_SALUDO_MS`.
113
+ *
114
+ * Es un MÉTODO y no un campo a propósito: `comando` ya espera el saludo por dentro, así que
115
+ * quien no necesite esperarlo aparte no toca esta promesa — y una promesa que rechaza sin nadie
116
+ * mirándola tumba el proceso. Quien la pida, que la pida en el acto: es lo que hace
117
+ * `abrirConReintento`, que la pide antes de soltar el hilo.
118
+ */
119
+ esperarSaludo(): Promise<void>;
120
+ /** Cada línea, tal cual llegue. Se registra al abrir y antes de mandar nada. */
121
+ alLinea(escucha: (linea: string) => void): void;
122
+ }
123
+ /**
124
+ * Abre el canal y devuelve el cliente.
125
+ *
126
+ * No es `async` a propósito: quien la llama quiere el cliente para poder REGISTRAR su log
127
+ * antes de que llegue nada, y el saludo —que sí es asíncrono— se espera dentro de `comando`.
128
+ */
129
+ export declare function abrirHotswap(destino: string, deps?: DependenciasDeHotswap): ClienteHotswap;
130
+ /**
131
+ * ¿Saluda el servidor del framework? `undefined` si sí; si no, UNA línea con el motivo. Nunca lanza.
132
+ *
133
+ * Existe porque **la subida del despliegue va por el servidor del FRAMEWORK**, y antes del reinicio:
134
+ * medido, con el framework parado (`am force-stop`) Ejecutar moría en «subiendo» con «Client network
135
+ * socket disconnected before secure TLS…», porque el túnel acepta y no hay nadie detrás. Con
136
+ * `reintentar` se espera a que arranque (`abrirConReintento`, el MISMO tope que tras el reinicio);
137
+ * sin él, se pregunta una vez, que es lo que hace falta para decidir si hay que arrancarlo.
138
+ */
139
+ export declare function esperarAlServidor(destino: string, deps: DependenciasDeHotswap | undefined, { reintentar }: {
140
+ reintentar: boolean;
141
+ }): Promise<string | undefined>;
142
+ /**
143
+ * Lanza la app y COMPRUEBA que está viva.
144
+ *
145
+ * Las dos partes están separadas a propósito porque son dos hechos distintos: el acuse de
146
+ * `launchApplication` dice que el framework aceptó el encargo, y el árbol de `getAllElements`
147
+ * dice que hay una app delante. Medido: lo primero es `true` aunque lo segundo no llegue nunca.
148
+ *
149
+ * **La conexión se reintenta** (`abrirConReintento`) porque un socket que no abre no es un
150
+ * veredicto sobre la app: recién reiniciado el framework, el canal tarda unos segundos en
151
+ * existir.
152
+ *
153
+ * **Y el lanzamiento se VUELVE A PEDIR** mientras la lectura diga que no está
154
+ * (`INTERVALO_DE_REENVIO_MS`): el primer envío tras un reinicio en frío se acepta y no arranca
155
+ * nada, así que mandarlo una sola vez y esperar sesenta segundos es esperar a un encargo que el
156
+ * framework ya tiró. La regla que lo hace seguro es que solo se reenvía detrás de una lectura que
157
+ * dice «no está»: sobre una app viva, un segundo `launchApplication` la tumba.
158
+ *
159
+ * **Nunca lanza**: todo —el saludo que no llega, el socket que revienta, un `Unknown command`—
160
+ * vuelve como `{viva, motivo}` de una línea. Quien la llama está atendiendo algo que puede
161
+ * contar en una pantalla, y un fallo del dispositivo no es una excepción del programa.
162
+ *
163
+ * Y `cerrar()` va en un `finally`, también en el camino de fallo: un socket vivo contra un
164
+ * emulador que se queda abierto en cada intento es una fuga que no da ningún síntoma hasta que
165
+ * se acumula.
166
+ */
167
+ export declare function lanzarYComprobar(app: string, deps?: DependenciasDeHotswap): Promise<ArranqueDeApp>;
168
+ export interface ArranqueDeApp {
169
+ viva: boolean;
170
+ /**
171
+ * UNA línea: la respuesta literal del framework, sin traducir. **Ausente si está viva** — el
172
+ * mismo molde que `ResultadoDeTrabajo`: `motivo` es para lo que falló, y una app viva no
173
+ * falló. Lo que prueba que está viva viaja en `respuesta`, no aquí.
174
+ */
175
+ motivo?: string;
176
+ /** La última respuesta leída, entera. Es la MEDIDA: un `result:true` no lo es. */
177
+ respuesta?: RespuestaHotswap;
178
+ }
179
+ /**
180
+ * El veredicto de vida, en UN sitio.
181
+ *
182
+ * Vale si el framework no ha dicho que no, si no ha dicho ninguna de las dos frases con las que
183
+ * dice que todavía no hay app delante, y si lo que trae es de verdad un ÁRBOL.
184
+ *
185
+ * Lo del árbol no es un adorno, es la parte que impide el falso positivo: `getAllElements` mete
186
+ * su payload —el array de descriptores— como JSON dentro de `status`, así que cualquier otra
187
+ * cosa que llegue por ahí (otro error, una cadena vacía, un objeto suelto) NO es una app viva.
188
+ * Conformarse con «hay algo en `status`» convertiría un error desconocido en un visto bueno,
189
+ * que es el diagnóstico falso más caro de todos porque no da ningún síntoma.
190
+ *
191
+ * Y un árbol VACÍO sí está vivo: el `[]` lo contesta una pantalla con un diálogo modal delante
192
+ * —lo de debajo está tapado y no se publica—, que es una app en pie, no una app muerta.
193
+ */
194
+ export declare function estaViva(respuesta: RespuestaHotswap): boolean;
@@ -0,0 +1,156 @@
1
+ import { lanzarReal, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS, type Lanzar, type ProcesoHijo } from "./procesosEnMaquina.js";
2
+ /**
3
+ * Y esto se REEXPORTA: lo que este módulo exportaba antes de que existiera el ejecutor
4
+ * compartido lo sigue exportando, pero ahora hay UNA sola copia —el `spawn` con `detached`, los
5
+ * dos topes y el hijo—, y la comparten la receta y el lanzamiento en el dispositivo
6
+ * (`procesosEnMaquina.ts`). Un segundo `spawn` allí era un segundo sitio donde el `detached`
7
+ * podía dejar de estar.
8
+ */
9
+ export { lanzarReal, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS, type Lanzar, type ProcesoHijo };
10
+ /** Una llamada a un proceso dentro de un paso. Un paso puede ser varias, en orden. */
11
+ interface Invocacion {
12
+ args: string[];
13
+ /** Lo que se le escribe por `stdin`; sin TTY, un prompt sin respuesta cuelga el proceso. */
14
+ teclear: string[];
15
+ /** Cuántas veces se repite el tecleo. Las licencias del SDK son una pregunta por licencia. */
16
+ repetir?: number;
17
+ /**
18
+ * Un fallo aquí NO corta el paso. Hoy solo las licencias: si ya estaban aceptadas,
19
+ * `--licenses` puede salir con código distinto de cero y la instalación funciona igual.
20
+ */
21
+ opcional?: boolean;
22
+ /** Lo que se dice en el log antes de lanzarla, si hay algo que declarar. */
23
+ anuncio?: string;
24
+ }
25
+ /**
26
+ * Lo que hace falta para lanzar un paso: o un PROCESO (lo que ya había: un binario, con qué
27
+ * llamadas y qué se le teclea) o una DESCARGA (nueva, para Windows: adb/JDK/cmdline-tools no
28
+ * tienen un Homebrew equivalente que los instale de un tirón, así que se bajan de una URL
29
+ * fijada y se descomprimen). Las dos comparten el mismo resultado final
30
+ * (`"ok"|"fallo"|"cancelada"|"colgada"`), así que `correrPasoDeReceta` las trata como la
31
+ * MISMA cosa de cara a quien pregunta por el cable.
32
+ */
33
+ type PasoEjecutable = PasoDeProceso | PasoDeDescarga;
34
+ interface PasoDeProceso {
35
+ tipo: "proceso";
36
+ /** El binario, por nombre. Tabla cerrada: del cliente llega un NÚMERO, nunca un comando. */
37
+ binario: "sdkmanager" | "avdmanager" | "brew";
38
+ /**
39
+ * ¿Necesita el SDK de Android y un JDK?
40
+ *
41
+ * El paso que los INSTALA no puede exigirlos —era el `if` que dejaba al paso 1 sin poder
42
+ * existir— así que esto es lo que separa «lánzalo dentro del SDK, con su entorno» de
43
+ * «búscalo en el PATH y lánzalo a secas».
44
+ */
45
+ conSdk: boolean;
46
+ /** Dentro del SDK, si no está en el PATH. Solo con `conSdk`. */
47
+ subcarpeta?: string;
48
+ invocaciones: Invocacion[];
49
+ /** Variables extra para el hijo, encima de las del entorno. */
50
+ entornoExtra?: Record<string, string>;
51
+ /** Qué se enseña como título del trabajo. */
52
+ titulo: string;
53
+ }
54
+ interface PasoDeDescarga {
55
+ tipo: "descarga";
56
+ url: string;
57
+ /** Dónde cae, relativo a `%LOCALAPPDATA%` — la única raíz que Windows garantiza y que
58
+ * `RAICES_DE_SDK_POR_OMISION.win32` ya usa para el SDK. */
59
+ destinoBajoLocalAppData: string[];
60
+ /** Ver `descargaDeHerramientas.ts#OpcionesDeDescarga`. */
61
+ renombrarCarpetaUnicaA?: string;
62
+ titulo: string;
63
+ }
64
+ /**
65
+ * Los pasos que xonecode lanza él. Tabla CERRADA y por `receta:plataforma:paso`: lo que
66
+ * llega del cliente es un número, y un número que no esté aquí no lanza nada.
67
+ *
68
+ * **La PLATAFORMA es parte de la clave**, y no un detalle: los pasos 1-3 de Windows
69
+ * (descargas) y los 1-3 de macOS (Homebrew) son acciones completamente distintas bajo el
70
+ * MISMO número — sin la plataforma en la clave, la entrada de una pisaría a la otra en este
71
+ * mapa, o habría que inventar números que no significan nada en la receta que se enseña.
72
+ *
73
+ * Tiene que coincidir con lo que `core/dispositivos.ts` marca `ejecutable` — un paso con
74
+ * botón que no esté aquí es un botón muerto, y uno lanzable sin botón es una capacidad que
75
+ * nadie puede usar. Lo ata un test que compara las dos listas.
76
+ */
77
+ export declare const PASOS_EJECUTABLES: Map<string, PasoEjecutable>;
78
+ /**
79
+ * Los dos topes —el del silencio, 5 min, y el total, 60— viven con el ejecutor
80
+ * (`procesosEnMaquina.ts`), que es quien los arma: son la misma regla sobre el mismo tipo de
81
+ * proceso, y aquí se reexportan. **El silencio es el síntoma, no la lentitud**: mientras el
82
+ * hijo diga algo se le espera lo que haga falta; lo que no es normal es que se calle, y eso es
83
+ * un prompt esperando a alguien que no está.
84
+ */
85
+ export interface ResultadoDeTrabajo {
86
+ estado: "ok" | "fallo" | "cancelada" | "colgada";
87
+ /** Una línea, nunca la salida entera. Ausente si fue bien. */
88
+ motivo?: string;
89
+ ms: number;
90
+ }
91
+ export interface Trabajo {
92
+ titulo: string;
93
+ cancelar: () => void;
94
+ terminado: Promise<ResultadoDeTrabajo>;
95
+ }
96
+ export interface DependenciasDeInstalacion {
97
+ plataforma?: string;
98
+ entorno?: Record<string, string | undefined>;
99
+ home?: string;
100
+ existe?: (ruta: string) => boolean;
101
+ lanzar?: Lanzar;
102
+ /** Cada línea de salida, en cuanto sale. Es lo único que hace usable un paso de 3 GB. */
103
+ alSalirLinea?: (linea: string) => void;
104
+ ahora?: () => number;
105
+ /**
106
+ * Matar un GRUPO de procesos. Entra por parámetro porque el real es `process.kill(-pid)`,
107
+ * y un test que lo llamara de verdad mataría el grupo de quien corre `npm test`.
108
+ */
109
+ matarGrupo?: (pid: number, senal: string) => void;
110
+ /** Solo para los pasos `tipo: "descarga"` — ver `descargaDeHerramientas.ts`. `npm test`
111
+ * nunca toca la red real: sin esto un test de un paso de Windows la tocaría. */
112
+ fetch?: typeof fetch;
113
+ crearCarpeta?: (ruta: string) => void;
114
+ escribir?: (ruta: string, datos: Uint8Array) => void;
115
+ /**
116
+ * Copiar una carpeta entera filtrando por ruta ABSOLUTA de origen (`clonarAvd`). Entra por
117
+ * parámetro para que un test vea la cancelación sin una carpeta de gigas de por medio.
118
+ */
119
+ copiarCarpeta?: (origen: string, destino: string, filtro: (ruta: string) => boolean) => Promise<void>;
120
+ }
121
+ /**
122
+ * Lanza el paso `numero` de la receta `receta`, y devuelve el trabajo en curso.
123
+ *
124
+ * Nunca lanza: todo lo que puede ir mal —el paso no es ejecutable, falta el SDK, el proceso
125
+ * no arranca— vuelve como un `ResultadoDeTrabajo` con su motivo de UNA línea. Quien lo llama
126
+ * está atendiendo una petición del navegador y no puede recibir una excepción por algo que
127
+ * es una respuesta.
128
+ */
129
+ export declare function correrPasoDeReceta(receta: string, numero: number, deps?: DependenciasDeInstalacion): Trabajo;
130
+ /**
131
+ * Crear un AVD con nombre, por el mismo corredor que la receta (topes, stdin, SDK). Nunca lanza.
132
+ *
133
+ * Con `base` es el modo CONFIGURACIÓN: la imagen y el perfil salen del `config.ini` de la base
134
+ * (`avdmanager` los pide), y al acabar BIEN se le pone encima ese mismo `config.ini` para que
135
+ * herede RAM, disco y el resto. El AVD nuevo arranca vacío; vale con la base encendida.
136
+ */
137
+ export declare function crearAvd(nombre: string, deps?: DependenciasDeInstalacion, opciones?: {
138
+ base?: string;
139
+ }): Trabajo;
140
+ /**
141
+ * Eliminar un AVD por su nombre, por el MISMO corredor que crear (topes, SDK, `JAVA_HOME`):
142
+ * `avdmanager delete avd -n <nombre>` borra la carpeta y el `.ini`, y no toca la imagen del sistema
143
+ * ni los demás. El nombre acaba en un argumento, así que pasa por la regla de forma de siempre
144
+ * (sin `..` ni barras). Nunca lanza. Que sea el último, o que esté en marcha, lo decide quien llama
145
+ * (la última medida): aquí solo se ve el disco.
146
+ */
147
+ export declare function borrarAvd(nombre: string, deps?: DependenciasDeInstalacion): Trabajo;
148
+ /**
149
+ * Modo CLON: copia la carpeta del AVD `base` a `nombre` (lo instalado incluido), sin lo que
150
+ * `seCopiaEnClon` excluye, y SOLO al acabar bien escribe `<nombre>.ini` —un AVD sin `.ini` no
151
+ * existe para el emulador, así que una copia a medias nunca aparece en la lista—. Un fallo o una
152
+ * cancelación BORRAN la carpeta a medias. Nunca lanza. `snapshots/` viaja con la identidad reescrita
153
+ * (`core/copiaDeAvd.ts`): sin ella un clon pierde lo que el original aún no había volcado al disco. La base tiene que estar apagada: lo comprueba
154
+ * quien llama (la medida de dispositivos), aquí solo se ve el disco.
155
+ */
156
+ export declare function clonarAvd(base: string, nombre: string, deps?: DependenciasDeInstalacion): Trabajo;