xonecode 0.38.44 → 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.
- package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
- package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
- package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
- package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
- package/dist/agent/cloudstudio/crearRama.js +16 -0
- package/dist/agent/cloudstudio/crearRama.js.map +1 -0
- package/dist/agent/cloudstudio/descarga.d.ts +44 -0
- package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
- package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
- package/dist/agent/cloudstudio/subida.d.ts +61 -0
- package/dist/agent/cloudstudio/subida.js +7 -1
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
- package/dist/agent/cloudstudio/zip.d.ts +13 -0
- package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
- package/dist/agent/conectores/gestorJira.d.ts +50 -0
- package/dist/agent/conectores/gestorNotion.d.ts +45 -0
- package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
- package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
- package/dist/agent/config/authEnDisco.d.ts +43 -0
- package/dist/agent/config/catalogoModelos.d.ts +79 -0
- package/dist/agent/config/configEnDisco.d.ts +235 -0
- package/dist/agent/config/crearProyecto.d.ts +20 -0
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
- package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
- package/dist/agent/config/entorno.d.ts +83 -0
- package/dist/agent/config/fuentesEnRed.d.ts +12 -0
- package/dist/agent/config/gemini.d.ts +5 -0
- package/dist/agent/config/iconosEnRed.d.ts +10 -0
- package/dist/agent/config/identidadEnDisco.d.ts +27 -0
- package/dist/agent/config/modelos.d.ts +77 -0
- package/dist/agent/config/modelosDeMotor.d.ts +52 -0
- package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
- package/dist/agent/config/persona.d.ts +1 -0
- package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
- package/dist/agent/config/settingsEnDisco.d.ts +206 -0
- package/dist/agent/config/versionEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
- package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
- package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
- package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
- package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
- package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/hotswap.d.ts +194 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
- package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
- package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
- package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
- package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
- package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
- package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
- package/dist/agent/exportarPdf.d.ts +72 -0
- package/dist/agent/grafo/aprendido.d.ts +28 -0
- package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
- package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
- package/dist/agent/grafo/atributosXone.d.ts +31 -0
- package/dist/agent/grafo/buscarIcono.d.ts +32 -0
- package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
- package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
- package/dist/agent/grafo/compararCapturas.d.ts +22 -0
- package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
- package/dist/agent/grafo/criticaVisual.d.ts +60 -0
- package/dist/agent/grafo/describirImagen.d.ts +79 -0
- package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
- package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
- package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
- package/dist/agent/grafo/excluirTools.d.ts +37 -0
- package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
- package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
- package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
- package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
- package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
- package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
- package/dist/agent/grafo/navegacionXone.d.ts +60 -0
- package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
- package/dist/agent/grafo/perfiles.d.ts +225 -0
- package/dist/agent/grafo/proyecto.d.ts +450 -0
- package/dist/agent/grafo/skills.d.ts +181 -0
- package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
- package/dist/agent/grafo/unirSecciones.d.ts +20 -0
- package/dist/agent/grafo/validacionXone.d.ts +35 -0
- package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
- package/dist/agent/grafo/xoneAgent.d.ts +166 -0
- package/dist/agent/motores/motoresLocales.d.ts +87 -0
- package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
- package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
- package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
- package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
- package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
- package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
- package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
- package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
- package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
- package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
- package/dist/agent/motores/trueforge/notas.d.ts +48 -0
- package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
- package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
- package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
- package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
- package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
- package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
- package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
- package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
- package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
- package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
- package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
- package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
- package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
- package/dist/agent/planesEnDisco.d.ts +18 -0
- package/dist/agent/publicarPlan.d.ts +20 -0
- package/dist/agent/raizDelPaquete.d.ts +9 -0
- package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
- package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
- package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
- package/dist/agent/renombrarSobre.d.ts +14 -0
- package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
- package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
- package/dist/agent/sesiones/checkpointer.d.ts +146 -0
- package/dist/agent/sesiones/git.d.ts +66 -0
- package/dist/agent/sesiones/gitSync.d.ts +264 -0
- package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
- package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
- package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
- package/dist/agent/sesiones/sesionGit.d.ts +155 -0
- package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
- package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
- package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
- package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
- package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
- package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
- package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
- package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
- package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
- package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
- package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
- package/dist/agent/tareas/aumentador.d.ts +99 -0
- package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
- package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
- package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
- package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
- package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
- package/dist/agent/turno/depuracion.d.ts +1 -0
- package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
- package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
- package/dist/agent/turno/guionizado.d.ts +18 -0
- package/dist/agent/turno/informeDeTraza.d.ts +220 -0
- package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
- package/dist/agent/turno/instantanea.d.ts +16 -0
- package/dist/agent/turno/interrupts.d.ts +54 -0
- package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
- package/dist/agent/turno/mensajes.d.ts +23 -0
- package/dist/agent/turno/normalizar.d.ts +15 -0
- package/dist/agent/turno/puente.d.ts +196 -0
- package/dist/agent/turno/registroDeFallos.d.ts +39 -0
- package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
- package/dist/agent/turno/resumenDeTool.d.ts +33 -0
- package/dist/agent/turno/rubrica.d.ts +35 -0
- package/dist/agent/turno/sesionReal.d.ts +89 -0
- package/dist/agent/turno/textoDeTool.d.ts +19 -0
- package/dist/agent/turno/turnoReal.d.ts +210 -0
- package/dist/agent/turno/verificacion.d.ts +85 -0
- package/dist/agent/turno/verificador.d.ts +66 -0
- package/dist/bin.d.ts +2 -0
- package/dist/cli/acuseDeModelo.d.ts +18 -0
- package/dist/cli/aprobar.d.ts +162 -0
- package/dist/cli/config.d.ts +17 -0
- package/dist/cli/consola.d.ts +473 -0
- package/dist/cli/describe.d.ts +7 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/fuentesDeDisco.d.ts +25 -0
- package/dist/cli/main.d.ts +291 -0
- package/dist/cli/markdown.d.ts +126 -0
- package/dist/cli/panel.d.ts +38 -0
- package/dist/cli/podar.d.ts +38 -0
- package/dist/cli/run.d.ts +30 -0
- package/dist/cli/spinner.d.ts +37 -0
- package/dist/cli/stdio.d.ts +94 -0
- package/dist/cli/tema.d.ts +68 -0
- package/dist/cli/tokens.d.ts +16 -0
- package/dist/cli/traza.d.ts +19 -0
- package/dist/cli/tui/app.d.ts +23 -0
- package/dist/cli/tui/aprobarTui.d.ts +46 -0
- package/dist/cli/tui/barra.d.ts +43 -0
- package/dist/cli/tui/correrTui.d.ts +119 -0
- package/dist/cli/tui/entrada.d.ts +14 -0
- package/dist/cli/tui/filas.d.ts +13 -0
- package/dist/cli/tui/logo.d.ts +20 -0
- package/dist/cli/tui/pielTui.d.ts +15 -0
- package/dist/cli/tui/raton.d.ts +68 -0
- package/dist/cli/tui/sidebar.d.ts +63 -0
- package/dist/cli/tui/store.d.ts +102 -0
- package/dist/cli/tui/tarjeta.d.ts +8 -0
- package/dist/cli/tui/temaInk.d.ts +67 -0
- package/dist/cli/tui/transcript.d.ts +32 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/wizardInicial.d.ts +59 -0
- package/dist/core/actos.d.ts +437 -0
- package/dist/core/adjuntos.d.ts +77 -0
- package/dist/core/agentes.d.ts +353 -0
- package/dist/core/analisisDeSesion.d.ts +63 -0
- package/dist/core/aprendido.d.ts +41 -0
- package/dist/core/artefactos.d.ts +74 -0
- package/dist/core/atributosXone.d.ts +53 -0
- package/dist/core/bitacora.d.ts +21 -0
- package/dist/core/cloudstudio.d.ts +168 -0
- package/dist/core/codificacion.d.ts +81 -0
- package/dist/core/comandoExterno.d.ts +49 -0
- package/dist/core/compararCapturas.d.ts +136 -0
- package/dist/core/conectores.d.ts +296 -0
- package/dist/core/config.d.ts +148 -0
- package/dist/core/contextos.d.ts +54 -0
- package/dist/core/convertirAP.d.ts +56 -0
- package/dist/core/copiaDeAvd.d.ts +44 -0
- package/dist/core/cssBienFormado.d.ts +22 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/descargas.d.ts +61 -0
- package/dist/core/descripcionDePantalla.d.ts +121 -0
- package/dist/core/descriptoresDeApp.d.ts +108 -0
- package/dist/core/diagnosticoDeNode.d.ts +51 -0
- package/dist/core/diff.d.ts +26 -0
- package/dist/core/diffDeColecciones.d.ts +54 -0
- package/dist/core/disenoVinculado.d.ts +17 -0
- package/dist/core/dispositivoDeSesion.d.ts +22 -0
- package/dist/core/dispositivoElegido.d.ts +17 -0
- package/dist/core/dispositivos.d.ts +469 -0
- package/dist/core/entrega.d.ts +341 -0
- package/dist/core/entrelazar.d.ts +48 -0
- package/dist/core/esfuerzo.d.ts +120 -0
- package/dist/core/esqueleto.d.ts +38 -0
- package/dist/core/estiloMedido.d.ts +70 -0
- package/dist/core/estilos.d.ts +76 -0
- package/dist/core/events.d.ts +218 -0
- package/dist/core/exportacion.d.ts +88 -0
- package/dist/core/fallos.d.ts +79 -0
- package/dist/core/fondosSvg.d.ts +115 -0
- package/dist/core/fotoDeColecciones.d.ts +45 -0
- package/dist/core/fuentes.d.ts +96 -0
- package/dist/core/geometriaDePantalla.d.ts +171 -0
- package/dist/core/gestorDeTareas.d.ts +295 -0
- package/dist/core/hechosDelProyecto.d.ts +70 -0
- package/dist/core/hotswap.d.ts +30 -0
- package/dist/core/iconos.d.ts +86 -0
- package/dist/core/identidadDeProveedor.d.ts +20 -0
- package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
- package/dist/core/imagenesDeDocumento.d.ts +40 -0
- package/dist/core/jsParaRhino.d.ts +3 -0
- package/dist/core/juezDelTurno.d.ts +95 -0
- package/dist/core/logDeDispositivo.d.ts +67 -0
- package/dist/core/memoria.d.ts +18 -0
- package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
- package/dist/core/modelos.d.ts +198 -0
- package/dist/core/modoDeEscritura.d.ts +155 -0
- package/dist/core/motor.d.ts +43 -0
- package/dist/core/motoresLocales.d.ts +113 -0
- package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
- package/dist/core/navegacion.d.ts +172 -0
- package/dist/core/notify.d.ts +77 -0
- package/dist/core/nucleoXone.d.ts +28 -0
- package/dist/core/panorama.d.ts +68 -0
- package/dist/core/paqueteDeSoporte.d.ts +100 -0
- package/dist/core/planDeSubida.d.ts +56 -0
- package/dist/core/planes.d.ts +53 -0
- package/dist/core/podaDeCheckpoint.d.ts +75 -0
- package/dist/core/ports.d.ts +1034 -0
- package/dist/core/puedeLanzarse.d.ts +181 -0
- package/dist/core/puertosDeAvd.d.ts +59 -0
- package/dist/core/recargaEnCaliente.d.ts +52 -0
- package/dist/core/referenciasDeImagen.d.ts +36 -0
- package/dist/core/remoto.d.ts +76 -0
- package/dist/core/repartoDeEncargo.d.ts +80 -0
- package/dist/core/rubrica.d.ts +78 -0
- package/dist/core/rutaVirtual.d.ts +29 -0
- package/dist/core/selectorDeCarpeta.d.ts +59 -0
- package/dist/core/serieDeEscrituras.d.ts +58 -0
- package/dist/core/settings.d.ts +421 -0
- package/dist/core/shellDeAgente.d.ts +177 -0
- package/dist/core/skills.d.ts +129 -0
- package/dist/core/stitch.d.ts +114 -0
- package/dist/core/tareas.d.ts +412 -0
- package/dist/core/tareasDelPlan.d.ts +123 -0
- package/dist/core/tareasEnElGestor.d.ts +117 -0
- package/dist/core/textos.d.ts +8 -0
- package/dist/core/topeAgotado.d.ts +55 -0
- package/dist/core/traerDeLaMaquina.d.ts +33 -0
- package/dist/core/trazaDeErrores.d.ts +83 -0
- package/dist/core/tunel.d.ts +45 -0
- package/dist/core/turno.d.ts +154 -0
- package/dist/core/validacionDeEscritura.d.ts +95 -0
- package/dist/core/verificacionDeSubida.d.ts +14 -0
- package/dist/core/version.d.ts +35 -0
- package/dist/core/xmlBienFormado.d.ts +23 -0
- package/dist/core/zipDeAdjunto.d.ts +28 -0
- package/dist/core/zipDeSkill.d.ts +74 -0
- package/dist/lib/tareaAutonoma.d.ts +36 -0
- package/dist/lib/tareaAutonoma.js +259 -0
- package/dist/lib/tareaAutonoma.js.map +1 -0
- package/dist/lib.d.ts +31 -0
- package/dist/lib.js +28 -0
- package/dist/lib.js.map +1 -0
- package/dist/vendor/hitl.d.ts +69 -0
- package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
- package/dist/vendor/sqliteSaver.d.ts +22 -0
- package/dist/vendor/tokenTracking.d.ts +22 -0
- package/dist/web/servidor/arranque.d.ts +1372 -0
- package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
- package/dist/web/servidor/consolaWeb.d.ts +142 -0
- package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
- package/dist/web/servidor/datosDeCierre.d.ts +4 -0
- package/dist/web/servidor/interrupcion.d.ts +39 -0
- package/dist/web/servidor/pielWeb.d.ts +32 -0
- package/dist/web/servidor/puenteRemoto.d.ts +80 -0
- package/dist/web/servidor/servidor.d.ts +53 -0
- package/dist/web/servidor/sesiones.d.ts +342 -0
- package/dist/web/servidor/soporte.d.ts +65 -0
- package/dist/web/servidor/transporte.d.ts +2751 -0
- package/dist/web/servidor/vestibulo.d.ts +952 -0
- package/dist/web/servidor/visorOpenui.d.ts +33 -0
- package/package.json +9 -1
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué hay en la máquina para probar una app XOne: el sistema operativo, las herramientas
|
|
3
|
+
* de Android e iOS, y los dispositivos y simuladores a los que se llega.
|
|
4
|
+
*
|
|
5
|
+
* Aquí viven los TIPOS y los parsers PUROS —texto de una herramienta → datos—; quien lanza
|
|
6
|
+
* las herramientas es `agent/dispositivos/dispositivosEnMaquina.ts`. Separarlo así es lo que permite
|
|
7
|
+
* probar cada formato contra una salida real sin que `npm test` necesite ni adb ni Xcode.
|
|
8
|
+
*
|
|
9
|
+
* Tres estados por herramienta y no un booleano: «no encontrada», «falló» (con el motivo) y
|
|
10
|
+
* «bien». Un cuarto, «no aplica», para lo que no se puede detectar en este sistema —Xcode
|
|
11
|
+
* en Windows— y que no es lo mismo que «no hay»: el escritorio los pinta distintos, porque
|
|
12
|
+
* decir «sin iOS» en un Linux sería afirmar algo que la máquina no puede saber. Y un
|
|
13
|
+
* quinto, «desactivada», para el destino que la persona apagó en Ajustes
|
|
14
|
+
* (`core/settings.ts#AjustesDeDispositivos`) — ese no se consulta, y decir que su
|
|
15
|
+
* herramienta no está sería mentir sobre la máquina.
|
|
16
|
+
*/
|
|
17
|
+
export type SistemaOperativo = "mac" | "windows" | "linux" | "otro";
|
|
18
|
+
export type NombreDeHerramienta = "adb" | "emulator" | "xcrun" | "devicectl";
|
|
19
|
+
export interface Herramienta {
|
|
20
|
+
nombre: NombreDeHerramienta;
|
|
21
|
+
/**
|
|
22
|
+
* A qué plataforma sirve. **Es un DATO y no una adivinanza del nombre**: la ventana de
|
|
23
|
+
* Ajustes tiene una pestaña por plataforma y agrupa por esto. Deducirlo allí de
|
|
24
|
+
* «`adb` suena a Android» sería una segunda copia de una regla que ya está aquí — y el
|
|
25
|
+
* día que una herramienta sirviera a las dos, la copia callaría.
|
|
26
|
+
*/
|
|
27
|
+
plataforma: "android" | "ios";
|
|
28
|
+
/**
|
|
29
|
+
* Cinco estados, y los cinco dicen algo distinto: «ok», «no-encontrada», «fallo» (con el
|
|
30
|
+
* motivo), «no-aplica» —lo que este sistema no puede saber, iOS en Windows— y
|
|
31
|
+
* **«desactivada»**, que es el destino que la persona ha apagado en Ajustes.
|
|
32
|
+
*
|
|
33
|
+
* «desactivada» no se pliega en «no-aplica» ni en «no-encontrada»: una dice que la
|
|
34
|
+
* máquina no puede, la otra que falta el binario, y esta que no se ha mirado a propósito
|
|
35
|
+
* — y es la única de las tres que se arregla con un clic.
|
|
36
|
+
*/
|
|
37
|
+
estado: "ok" | "no-encontrada" | "fallo" | "no-aplica" | "desactivada";
|
|
38
|
+
/**
|
|
39
|
+
* Dónde se encontró, cuando se encontró. **Cruza el cable ENTERA solo para `adb` y
|
|
40
|
+
* `emulator`** — la segunda excepción declarada a `sinRutas`, igual que
|
|
41
|
+
* `Settings.workspace` (sin abreviar con `~`: se probó para el workspace y se descartó).
|
|
42
|
+
* Para `xcrun`/`devicectl` se queda en el host, como hasta ahora.
|
|
43
|
+
*/
|
|
44
|
+
ruta?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Cómo se instala, cuando falta y se sabe cómo. **El comando no puede llevar ninguna ruta
|
|
47
|
+
* de la máquina**: se pinta en la ventana y viaja por el cable, que puede ir por un túnel
|
|
48
|
+
* (`--anfitrion`) — es la misma regla por la que `ruta` se queda en el host (`sinRutas`).
|
|
49
|
+
* Por eso solo se propone lo que se resuelve por el PATH.
|
|
50
|
+
*
|
|
51
|
+
* `automatico` es si xonecode puede lanzarlo ÉL. Hoy solo `xcode-select --install`, que
|
|
52
|
+
* devuelve en el acto y abre el diálogo de Apple. Lo demás se ofrece para copiar, y **el
|
|
53
|
+
* motivo NO es la contraseña de administrador**: eso está desmentido —medido, `sudo` sin
|
|
54
|
+
* terminal de control falla en el acto en vez de colgarse, y por eso los `brew` de la
|
|
55
|
+
* RECETA sí se lanzan—. Es que este camino
|
|
56
|
+
* (`agent/dispositivos/dispositivosEnMaquina.ts#instalarHerramientaDeDispositivos`) no tiene canal de
|
|
57
|
+
* progreso: un `execFile` con su tope, sin log en vivo. `brew install --cask` tarda
|
|
58
|
+
* minutos, y un botón mudo durante diez se lee como que se ha colgado — que es justo lo
|
|
59
|
+
* que la fase de la receta existe para evitar.
|
|
60
|
+
*/
|
|
61
|
+
instalar?: {
|
|
62
|
+
comando: string;
|
|
63
|
+
automatico: boolean;
|
|
64
|
+
};
|
|
65
|
+
/** El motivo del fallo, o por qué no aplica. Nunca la salida cruda entera. */
|
|
66
|
+
detalle?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A qué plataforma sirve una herramienta, **en un solo sitio y exhaustivo por TIPO**.
|
|
70
|
+
*
|
|
71
|
+
* Es lo que rellena `Herramienta.plataforma`, y el `switch` sin `default` es lo que hace que
|
|
72
|
+
* una herramienta nueva no compile hasta que alguien decida de quién es. Escribir la
|
|
73
|
+
* plataforma a mano en cada fila de la medida habría sido la misma respuesta catorce veces,
|
|
74
|
+
* y bastaba con olvidarla en una para que esa fila cayera en la pestaña equivocada —o en
|
|
75
|
+
* ninguna— sin que nada diera error.
|
|
76
|
+
*/
|
|
77
|
+
export declare function plataformaDe(nombre: NombreDeHerramienta): "android" | "ios";
|
|
78
|
+
export interface Dispositivo {
|
|
79
|
+
/** El serial de adb, el UDID del simulador o el identificador de devicectl. */
|
|
80
|
+
id: string;
|
|
81
|
+
nombre: string;
|
|
82
|
+
plataforma: "android" | "ios";
|
|
83
|
+
clase: "emulador" | "simulador" | "fisico";
|
|
84
|
+
/**
|
|
85
|
+
* `conectado` y `arrancado` son los dos estados en que SE LLEGA al dispositivo; el resto
|
|
86
|
+
* son situaciones propias y se enseñan como tales, no se pliegan en «no».
|
|
87
|
+
*/
|
|
88
|
+
estado: "conectado" | "arrancado" | "apagado" | "sin-autorizar" | "offline" | "no-disponible";
|
|
89
|
+
/**
|
|
90
|
+
* De qué AVD es este emulador. Solo para `clase === "emulador"` de Android.
|
|
91
|
+
*
|
|
92
|
+
* **Es el único dato que ata un emulador en marcha a su definición**, y hay que MEDIRLO
|
|
93
|
+
* aparte: `adb devices -l` no lo dice por ningún lado —la imagen `google_apis` contesta
|
|
94
|
+
* `model:sdk_gphone64_arm64` mientras el AVD se llama `pixel8`—, así que emparejar por el
|
|
95
|
+
* nombre visible no puede acertar nunca. Sin este campo, el AVD arrancado se listaba
|
|
96
|
+
* ADEMÁS como apagado: dos filas para un aparato y una diciendo lo contrario de la verdad.
|
|
97
|
+
*
|
|
98
|
+
* Ausente es «no se pudo identificar», no «no tiene»: un emulador de terceros o una
|
|
99
|
+
* consola que no contesta. Quien empareja tiene que tratarlo como desconocido y no como
|
|
100
|
+
* «este AVD está apagado».
|
|
101
|
+
*/
|
|
102
|
+
avd?: string;
|
|
103
|
+
detalle?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Lo que contestó el dispositivo cuando alguien pidió VERIFICAR la conexión.
|
|
106
|
+
*
|
|
107
|
+
* Es otra pregunta que `estado`, y por eso es otro campo: `estado` sale de LISTAR
|
|
108
|
+
* (`adb devices`, `simctl list`), o sea de lo que el intermediario cree; esto sale de
|
|
109
|
+
* hablar CON el dispositivo y esperar respuesta. Un `adb devices` que dice «device» y un
|
|
110
|
+
* `adb shell` que se queda colgado son la situación que esto distingue.
|
|
111
|
+
*
|
|
112
|
+
* **Ausente es «nadie lo ha verificado», nunca «no responde».** Y vive con el informe, así
|
|
113
|
+
* que una medida nueva se lo lleva por construcción: una verificación de hace media hora
|
|
114
|
+
* pegada a una foto de ahora afirmaría algo que nadie ha comprobado.
|
|
115
|
+
*/
|
|
116
|
+
verificado?: {
|
|
117
|
+
ok: boolean;
|
|
118
|
+
/** Una línea: lo que contestó, o por qué no. Nunca la salida entera. */
|
|
119
|
+
detalle: string;
|
|
120
|
+
/** Cuándo se verificó (ISO). Se dice al lado: la foto y la verificación son dos horas. */
|
|
121
|
+
medido: string;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Un paso de una RECETA: lo que hay que hacer una vez para que una capacidad exista.
|
|
126
|
+
*
|
|
127
|
+
* Todos se pueden COPIAR; los que además se pueden LANZAR llevan `ejecutable`. La regla es
|
|
128
|
+
* «se ofrece ejecutar lo que se puede cumplir», aplicada por COMANDO y no por herramienta.
|
|
129
|
+
*
|
|
130
|
+
* **Y el criterio dejó de ser «puede pedir la contraseña» para ser «puede COLGARSE
|
|
131
|
+
* pidiéndola», que está medido.** Aquí decía que `brew` no se lanzaba porque un hijo sin
|
|
132
|
+
* terminal detrás se quedaría esperando la contraseña de administrador para siempre. Es
|
|
133
|
+
* falso con la forma en que este harness lanza: `sudo` lee la contraseña de `/dev/tty`, no
|
|
134
|
+
* de `stdin`, así que sin terminal de control **falla en el acto** — medido el 10-09-2026,
|
|
135
|
+
* `sudo -k true` con `stdio[0] = "ignore"` sale con código 1 en 57 ms diciendo «a terminal
|
|
136
|
+
* is required to read the password». O sea que el modo de fallo no es un botón colgado: es
|
|
137
|
+
* un botón que dice en dos segundos qué hace falta. Con eso, los pasos de `brew` pasan a
|
|
138
|
+
* ejecutables — y son justo los que faltaban para que la receta de Android tuviera algún
|
|
139
|
+
* botón vivo en una máquina nueva, porque los otros dos dependen de este.
|
|
140
|
+
*
|
|
141
|
+
* Lo que sigue siendo copiable es lo que pide entrada por un camino que NO falla rápido: un
|
|
142
|
+
* `sudo` escrito a mano en el comando (la licencia de Xcode) y una autorización que el
|
|
143
|
+
* sistema pide en una VENTANA (`xcodebuild -downloadPlatform`). Ahí un botón fallaría
|
|
144
|
+
* siempre, que es la otra forma del botón muerto.
|
|
145
|
+
*
|
|
146
|
+
* **Ningún comando puede llevar una ruta de la máquina.** Se pinta en la ventana y viaja por
|
|
147
|
+
* el cable, que puede ir por un túnel: es la misma regla por la que `Herramienta.ruta` se
|
|
148
|
+
* queda en el host. Por eso el prefijo de Homebrew se deriva con `$(brew --prefix)` en vez
|
|
149
|
+
* de escribirse — y de paso vale igual en Intel que en Apple Silicon, que lo tienen distinto.
|
|
150
|
+
*/
|
|
151
|
+
export interface PasoDeReceta {
|
|
152
|
+
/** Qué consigue este paso, en una frase. */
|
|
153
|
+
titulo: string;
|
|
154
|
+
/** Las líneas a pegar en un terminal, en orden. */
|
|
155
|
+
comandos: string[];
|
|
156
|
+
/** Lo que hay que saber ANTES de pegarlo: que pregunta algo, que pesa, qué se acepta. */
|
|
157
|
+
nota?: string;
|
|
158
|
+
/**
|
|
159
|
+
* ¿Ya está hecho? Sale de la MEDIDA, nunca de recordar que alguien pulsó: una marca
|
|
160
|
+
* guardada seguiría diciendo «hecho» después de que el usuario desinstalara el SDK, que
|
|
161
|
+
* es exactamente cuando hay que decirle que falta.
|
|
162
|
+
*/
|
|
163
|
+
hecho: boolean;
|
|
164
|
+
/**
|
|
165
|
+
* ¿Lo puede lanzar xonecode él, con log en vivo?
|
|
166
|
+
*
|
|
167
|
+
* Solo lo que no puede quedarse ESPERANDO a nadie. `sdkmanager` y `avdmanager` preguntan
|
|
168
|
+
* las licencias y el perfil de hardware, y las dos respuestas se alimentan por `stdin` de
|
|
169
|
+
* forma determinista; `brew` no pregunta nada en modo no interactivo y, si algo suyo
|
|
170
|
+
* pidiera la contraseña, sin terminal de control falla en el acto (medido, arriba).
|
|
171
|
+
*
|
|
172
|
+
* Un paso ejecutable lo es SI Y SOLO SI está en la tabla cerrada de
|
|
173
|
+
* `agent/dispositivos/instalacionEnMaquina.ts#PASOS_EJECUTABLES`: este campo dice que se ofrezca el
|
|
174
|
+
* botón, y esa tabla es la que decide qué se lanza. Que las dos coincidan lo ata un test.
|
|
175
|
+
*/
|
|
176
|
+
ejecutable: boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Por qué no se puede lanzar. Dos formas, y las dos se dicen: que falte otro paso —«hace
|
|
179
|
+
* falta el paso 1»— o que ese comando no se lance nunca desde aquí, como el `sudo` de la
|
|
180
|
+
* licencia de Xcode. Sin el motivo, un paso sin botón se lee como que la ventana está rota.
|
|
181
|
+
*/
|
|
182
|
+
porQueNo?: string;
|
|
183
|
+
/**
|
|
184
|
+
* Lo que se acepta al pulsar, si al pulsar se acepta algo. Va aparte del `nota` porque
|
|
185
|
+
* aceptar una licencia en nombre de alguien no puede ser un efecto de rebote de un botón
|
|
186
|
+
* que dice «Ejecutar»: se enseña al lado, y pulsar ES la aceptación.
|
|
187
|
+
*/
|
|
188
|
+
acepta?: string;
|
|
189
|
+
/**
|
|
190
|
+
* Con el paso YA HECHO, si volver a lanzarlo sirve para algo, cómo se llama entonces el
|
|
191
|
+
* botón. **Ausente significa que no se ofrece.**
|
|
192
|
+
*
|
|
193
|
+
* Medido en la ventana: un paso marcado como hecho seguía enseñando «Ejecutar este paso»,
|
|
194
|
+
* o sea que la receta ofrecía instalar lo que su propia marca decía que ya estaba. Eso es
|
|
195
|
+
* el botón muerto otra vez, y en la dirección que más desgasta: enseña a pulsar sin leer.
|
|
196
|
+
* Pero quitarlo de todos habría borrado la única vía de ACTUALIZAR: `sdkmanager --install`
|
|
197
|
+
* sobre un paquete instalado lo sube de versión, así que ahí repetir es una operación
|
|
198
|
+
* distinta y con otro nombre — y con su `porQue` al lado, porque un botón sobre un paso
|
|
199
|
+
* hecho, sin motivo, se lee como el mismo error al revés.
|
|
200
|
+
*/
|
|
201
|
+
repetir?: {
|
|
202
|
+
etiqueta: string;
|
|
203
|
+
porQue: string;
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Lo que va APARTE de los pasos: consejo que NO se mide, no se lanza desde aquí y **no
|
|
208
|
+
* decide si la receta está completa**.
|
|
209
|
+
*
|
|
210
|
+
* Existe por un paso que había aquí: «declarar las variables en tu shell» era un paso —con
|
|
211
|
+
* su número, su marca y su peso en `completa`— cuyo `hecho` se medía en el ENTORNO DE ESTE
|
|
212
|
+
* PROCESO y no en la shell de nadie, y cuya propia nota decía que xonecode no lo necesita.
|
|
213
|
+
* El resultado, medido en una máquina con el emulador ya instalado: la receta seguía abierta
|
|
214
|
+
* enseñando pasos hechos, y no podía cerrarse nunca por un consejo que nadie está obligado a
|
|
215
|
+
* seguir. El consejo se sigue dando —los `export` hacen falta para que `emulator` y `adb`
|
|
216
|
+
* funcionen en un terminal— pero deja de ser un requisito.
|
|
217
|
+
*/
|
|
218
|
+
export interface Aparte {
|
|
219
|
+
titulo: string;
|
|
220
|
+
comandos: string[];
|
|
221
|
+
/** Lo que hay que saber antes de pegarlo, igual que en un paso. */
|
|
222
|
+
nota?: string;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Cómo conseguir una capacidad que esta máquina no tiene. Hoy hay dos, las dos de macOS.
|
|
226
|
+
*
|
|
227
|
+
* El `id` es una UNIÓN y no una cadena: viaja por el cable y es la clave con que
|
|
228
|
+
* `agent/dispositivos/instalacionEnMaquina.ts` busca en su tabla cerrada de pasos ejecutables, así que un
|
|
229
|
+
* id nuevo tiene que aparecer aquí para que el compilador obligue a decidir qué se lanza y
|
|
230
|
+
* qué se copia.
|
|
231
|
+
*/
|
|
232
|
+
export interface Receta {
|
|
233
|
+
id: "android-emulador" | "ios-simulador";
|
|
234
|
+
/** A qué plataforma sirve. Dato, como en `Herramienta`: de aquí sale su pestaña. */
|
|
235
|
+
plataforma: "android" | "ios";
|
|
236
|
+
titulo: string;
|
|
237
|
+
descripcion: string;
|
|
238
|
+
pasos: PasoDeReceta[];
|
|
239
|
+
/** Todo hecho: la receta se pliega y se dice que ya está. */
|
|
240
|
+
completa: boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Consejo que NO es un paso y no cuenta para `completa`. Ver `Aparte`.
|
|
243
|
+
*
|
|
244
|
+
* Solo Android lo tiene hoy: son los `export` de la shell, que hacen falta para que el
|
|
245
|
+
* comando de `despues` funcione en un terminal pero que xonecode no necesita para nada.
|
|
246
|
+
*/
|
|
247
|
+
aparte?: Aparte;
|
|
248
|
+
/** Lo que viene DESPUÉS de instalar y que esta consola no hace por ti. */
|
|
249
|
+
despues: string;
|
|
250
|
+
}
|
|
251
|
+
/** Lo medido que decide qué pasos están hechos. Entra ya resuelto: esto es `core/`. */
|
|
252
|
+
export interface EstadoDeAndroid {
|
|
253
|
+
/** ¿Hay `brew`? Sin él la receta se puede leer igual, pero el primer paso no valdrá.
|
|
254
|
+
* Solo lo usa la receta de macOS. */
|
|
255
|
+
brew: boolean;
|
|
256
|
+
/**
|
|
257
|
+
* ¿Hay `adb`? En macOS lo trae el mismo cask que `sdkmanager`, así que no hacía falta
|
|
258
|
+
* aparte; en Windows es su PROPIO paso (una descarga independiente de las demás), y sin
|
|
259
|
+
* este campo ese paso no tendría de qué `hecho` colgarse.
|
|
260
|
+
*/
|
|
261
|
+
adb: boolean;
|
|
262
|
+
sdkmanager: boolean;
|
|
263
|
+
emulator: boolean;
|
|
264
|
+
/** Un JDK con el que correr `sdkmanager`, que es un programa Java. */
|
|
265
|
+
jdk: boolean;
|
|
266
|
+
avds: readonly string[];
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Las URLs de descarga de la receta de Windows, fijadas a mano y verificadas en vivo
|
|
270
|
+
* (2026-09-22): `platform-tools-latest-windows.zip` y la API de Adoptium son alias
|
|
271
|
+
* ESTABLES que Google/Adoptium mantienen sin cambiar nunca — los usan incontables scripts
|
|
272
|
+
* de CI. Las «command line tools» del SDK NO tienen alias estable (el número de build
|
|
273
|
+
* cambia de vez en cuando): se fija a mano, igual que ya está fijada a mano la imagen de
|
|
274
|
+
* sistema `system-images;android-35;…` de abajo. Si Google la retira, el paso de descarga
|
|
275
|
+
* falla con un mensaje claro (no en silencio) y esto se bump a mano cuando toque.
|
|
276
|
+
*/
|
|
277
|
+
export declare const URL_PLATFORM_TOOLS_WINDOWS = "https://dl.google.com/android/repository/platform-tools-latest-windows.zip";
|
|
278
|
+
export declare const URL_JDK_WINDOWS = "https://api.adoptium.net/v3/binary/latest/17/ga/windows/x64/jdk/hotspot/normal/eclipse";
|
|
279
|
+
export declare const URL_CMDLINE_TOOLS_WINDOWS = "https://dl.google.com/android/repository/commandlinetools-win-15859902_latest.zip";
|
|
280
|
+
/**
|
|
281
|
+
* La receta del emulador de Android, en macOS o en Windows.
|
|
282
|
+
*
|
|
283
|
+
* **Solo estos dos, y a propósito.** En Linux los gestores y las rutas son otros, así que
|
|
284
|
+
* sería otra receta; devolver esta con otro título sería el botón muerto de siempre, y el
|
|
285
|
+
* panel prefiere decir que aún no la hay.
|
|
286
|
+
*
|
|
287
|
+
* Sale de los pasos que el usuario verificó a mano en su máquina, no de la documentación.
|
|
288
|
+
* Los de macOS, en su propia sección (`recetaMacOs`); los de Windows en `recetaWindows`, con
|
|
289
|
+
* la MISMA forma pero un mecanismo de instalación distinto: macOS tiene Homebrew para
|
|
290
|
+
* instalar TODO de un tirón; Windows no tiene un gestor equivalente para esto, así que cada
|
|
291
|
+
* pieza (adb, el JDK, las herramientas del SDK) se descarga por su cuenta — de ahí que
|
|
292
|
+
* Windows tenga cinco pasos donde macOS tiene tres.
|
|
293
|
+
*/
|
|
294
|
+
export declare function recetaDeEmuladorAndroid(plataforma: string, estado: EstadoDeAndroid): Receta | undefined;
|
|
295
|
+
/** Lo medido que decide los pasos de la receta de iOS. Entra ya resuelto: esto es `core/`. */
|
|
296
|
+
export interface EstadoDeIos {
|
|
297
|
+
/**
|
|
298
|
+
* Xcode COMPLETO, no las Command Line Tools: `xcode-select -p` apunta dentro de un
|
|
299
|
+
* `Xcode.app`. La distinción es la mitad de esta receta — las CLT traen `xcrun` y
|
|
300
|
+
* `simctl`, así que `xcode-select -p` contesta y `xcrun simctl list` no falla, pero **no
|
|
301
|
+
* traen ni un simulador**. Sin separarlas, alguien con solo las CLT vería «Xcode: ok» y
|
|
302
|
+
* una lista de simuladores vacía sin nada que le dijera qué le falta.
|
|
303
|
+
*/
|
|
304
|
+
xcode: boolean;
|
|
305
|
+
/** La licencia aceptada y la ruta activa puesta: `xcodebuild -version` contesta. */
|
|
306
|
+
licencia: boolean;
|
|
307
|
+
/** Los runtime de iOS instalados, por versión (`xcrun simctl runtime list -j`). */
|
|
308
|
+
runtimes: readonly string[];
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* La receta del simulador de iOS en macOS.
|
|
312
|
+
*
|
|
313
|
+
* **Solo macOS, y no por elección**: los simuladores de iOS los da Xcode, que no existe en
|
|
314
|
+
* ningún otro sistema. Fuera de macOS la respuesta no es otra receta, es que no hay ninguna.
|
|
315
|
+
*
|
|
316
|
+
* Los tres pasos son COPIABLES y ninguno se lanza desde aquí, al contrario que la de
|
|
317
|
+
* Android. Es la regla de siempre —se ofrece ejecutar lo que se puede cumplir— aplicada a lo
|
|
318
|
+
* que cada comando necesita de verdad:
|
|
319
|
+
* - **Xcode se instala del App Store.** No hay comando que lo haga; lo que se da es el que
|
|
320
|
+
* abre su ficha. Un botón «Ejecutar este paso» que solo abriera una ventana del App Store
|
|
321
|
+
* diría que ha hecho el paso, y no lo ha hecho.
|
|
322
|
+
* - **La licencia lleva `sudo` escrito en el comando.** Sin terminal de control `sudo` falla
|
|
323
|
+
* en el acto (medido), así que el botón no se colgaría — fallaría SIEMPRE, que es la otra
|
|
324
|
+
* forma del botón muerto.
|
|
325
|
+
* - **El runtime pide autorización de administrador en una VENTANA del sistema.** Eso no se
|
|
326
|
+
* puede contestar por `stdin` ni fallar rápido: se queda esperando a alguien que está
|
|
327
|
+
* mirando el navegador, no el escritorio.
|
|
328
|
+
*
|
|
329
|
+
* Y hay que decir lo que se mide de esta máquina: aquí, el 10-09-2026, los tres pasos están
|
|
330
|
+
* hechos (Xcode 26.6, licencia aceptada, tres runtime de iOS), así que la receta sale
|
|
331
|
+
* `completa` y el panel dice «ya está» en vez de cuatro pasos que sobran.
|
|
332
|
+
*/
|
|
333
|
+
export declare function recetaDeSimuladorIos(plataforma: string, estado: EstadoDeIos): Receta | undefined;
|
|
334
|
+
export interface InformeDeDispositivos {
|
|
335
|
+
sistema: SistemaOperativo;
|
|
336
|
+
herramientas: Herramienta[];
|
|
337
|
+
dispositivos: Dispositivo[];
|
|
338
|
+
/** Los AVD de Android definidos (imágenes de emulador), estén arrancados o no. */
|
|
339
|
+
avds: string[];
|
|
340
|
+
/**
|
|
341
|
+
* Cómo conseguir lo que a esta máquina le falta. Vacío cuando no hay ninguna receta para
|
|
342
|
+
* este sistema —Windows y Linux son otras— o cuando no hace falta ninguna.
|
|
343
|
+
*/
|
|
344
|
+
recetas: Receta[];
|
|
345
|
+
/** Cuándo se midió (ISO). Lo que se enseña es una foto, no un estado en vivo. */
|
|
346
|
+
medido: string;
|
|
347
|
+
}
|
|
348
|
+
/** El sistema, a partir de `process.platform`. */
|
|
349
|
+
export declare function sistemaDe(platform: string): SistemaOperativo;
|
|
350
|
+
export declare function nombreDelSistema(sistema: SistemaOperativo): string;
|
|
351
|
+
/**
|
|
352
|
+
* `adb devices -l`. Formato estable desde hace años:
|
|
353
|
+
*
|
|
354
|
+
* List of devices attached
|
|
355
|
+
* emulator-5554 device product:sdk_gphone64_arm64 model:sdk_gphone64_arm64 device:emu64a transport_id:1
|
|
356
|
+
* R58M12ABCDE unauthorized transport_id:2
|
|
357
|
+
* 192.168.1.20:5555 offline
|
|
358
|
+
*
|
|
359
|
+
* El nombre sale de `model:` (con los guiones bajos como espacios) y, sin él, del serial.
|
|
360
|
+
* Un serial `emulator-N` es un emulador; lo demás, físico (incluido un dispositivo por red).
|
|
361
|
+
*/
|
|
362
|
+
export declare function parsearAdbDevices(texto: string): Dispositivo[];
|
|
363
|
+
/**
|
|
364
|
+
* `emulator -list-avds`: un nombre por línea. Las versiones recientes mezclan líneas
|
|
365
|
+
* `INFO | …` (van a stderr, pero por si acaso se descartan también aquí).
|
|
366
|
+
*/
|
|
367
|
+
export declare function parsearAvds(texto: string): string[];
|
|
368
|
+
/**
|
|
369
|
+
* El motivo de una verificación fallida, dicho sin vocabulario de máquina.
|
|
370
|
+
*
|
|
371
|
+
* Lo que devuelve `adb` viene con el SERIAL dentro —«adb: device 'emulator-5554' not found»— y
|
|
372
|
+
* eso acaba en una fila que se llama `pixel8`: el serial es un puerto que cambia entre
|
|
373
|
+
* arranques, es lo que esta interfaz esconde a propósito en todas partes, y encima deja al
|
|
374
|
+
* usuario leyendo dos nombres del mismo aparato. Se sustituye por el nombre que se le enseña.
|
|
375
|
+
*
|
|
376
|
+
* Y el caso de «no está» se DICE en vez de traducirse palabra por palabra: «not found» de adb
|
|
377
|
+
* significa que el aparato ya no aparece en su lista, o sea que se apagó o se desenchufó desde
|
|
378
|
+
* la última medida. Eso es lo accionable —la lista está vieja, vuelve a mirar— y es lo que
|
|
379
|
+
* explica por qué la fila decía «arrancado» mientras la verificación dice que no.
|
|
380
|
+
*/
|
|
381
|
+
export declare function motivoDeVerificacion(crudo: string, dispositivo: Pick<Dispositivo, "id" | "nombre">): string;
|
|
382
|
+
/**
|
|
383
|
+
* `adb -s <serial> emu avd name`: el nombre del AVD que hay detrás de un emulador en marcha.
|
|
384
|
+
*
|
|
385
|
+
* Forma MEDIDA con `pixel8` arrancado — son DOS líneas, el nombre y el acuse de la consola:
|
|
386
|
+
*
|
|
387
|
+
* pixel8
|
|
388
|
+
* OK
|
|
389
|
+
*
|
|
390
|
+
* Se usa la consola del emulador y no `getprop ro.boot.qemu.avd_name` (que contesta lo mismo,
|
|
391
|
+
* medido) porque `getprop` lee una propiedad de la IMAGEN y podría no estar en un emulador de
|
|
392
|
+
* terceros, mientras que la consola es el emulador mismo contestando.
|
|
393
|
+
*
|
|
394
|
+
* Fail-closed: `undefined` ante cualquier cosa que no sea un nombre de AVD. El nombre es una
|
|
395
|
+
* carpeta de `~/.android/avd`, así que no lleva espacios ni barras; y el `OK` del acuse se
|
|
396
|
+
* descarta explícitamente porque llegar a tomarlo por nombre sería emparejar por una cadena
|
|
397
|
+
* que no existe, o sea el mismo fallo de antes con otra forma.
|
|
398
|
+
*/
|
|
399
|
+
export declare function nombreDeAvdDeConsola(texto: string): string | undefined;
|
|
400
|
+
/**
|
|
401
|
+
* `xcrun simctl list -j devices available`. Forma MEDIDA en esta máquina (Xcode con iOS 26):
|
|
402
|
+
*
|
|
403
|
+
* { "devices": { "com.apple.CoreSimulator.SimRuntime.iOS-26-0": [
|
|
404
|
+
* { "udid": "EF39…", "isAvailable": true, "state": "Shutdown", "name": "iPhone 17 Pro", … } ] } }
|
|
405
|
+
*
|
|
406
|
+
* El runtime se lee de la clave: «iOS-26-0» → «iOS 26.0». `Booted` es el único estado en que
|
|
407
|
+
* se llega al simulador; `Shutdown` es apagado, y cualquier otro se enseña como no disponible
|
|
408
|
+
* con su valor.
|
|
409
|
+
*/
|
|
410
|
+
export declare function parsearSimctl(json: string): Dispositivo[];
|
|
411
|
+
/**
|
|
412
|
+
* Los runtime de iOS del simulador, del MISMO `xcrun simctl list -j` que ya trae los
|
|
413
|
+
* dispositivos: se le añade el dominio `runtimes` y con eso viene en la misma respuesta.
|
|
414
|
+
*
|
|
415
|
+
* Eso es lo que hace que saber si falta el runtime no cueste NI UN proceso más, que es la
|
|
416
|
+
* regla de esta pantalla: medir cuesta procesos en el equipo del usuario. La otra forma,
|
|
417
|
+
* `xcrun simctl runtime list -j`, existe y contesta lo mismo —medido: un objeto indexado por
|
|
418
|
+
* uuid con `platformIdentifier` y `state: "Ready"`— pero es una llamada aparte.
|
|
419
|
+
*
|
|
420
|
+
* Forma MEDIDA aquí (Xcode 26.6):
|
|
421
|
+
*
|
|
422
|
+
* { "runtimes": [ { "name": "iOS 26.0", "version": "26.0.1", "isAvailable": true,
|
|
423
|
+
* "platform": "iOS", "identifier": "…SimRuntime.iOS-26-0" } ],
|
|
424
|
+
* "devices": { … } }
|
|
425
|
+
*
|
|
426
|
+
* Solo los de **iOS** y solo los `isAvailable`: uno a medio descargar no arranca nada, y con
|
|
427
|
+
* watchOS o tvOS instalados la cifra diría que hay iOS cuando no lo hay. `isAvailable` se
|
|
428
|
+
* mira como booleano de verdad —la trampa del `"false"` de cadena— y **ausente cuenta como
|
|
429
|
+
* disponible**: este listado ya se pide con `available`, así que quien no lo esté no llega
|
|
430
|
+
* hasta aquí, y descartar lo que no lo declara diría que no hay runtime teniéndolos.
|
|
431
|
+
*/
|
|
432
|
+
export declare function parsearRuntimesDeIos(json: string): string[];
|
|
433
|
+
/**
|
|
434
|
+
* `xcrun devicectl list devices --json-output <fichero>`. Forma DOCUMENTADA (Xcode 15+),
|
|
435
|
+
* no medida: en esta máquina no hay ningún dispositivo iOS físico, y el fichero real
|
|
436
|
+
* trae `result.devices: []`. Campos: `identifier`, `deviceProperties.name`,
|
|
437
|
+
* `connectionProperties.tunnelState` («connected» | «unavailable» | …) y
|
|
438
|
+
* `hardwareProperties.platform`.
|
|
439
|
+
*/
|
|
440
|
+
export declare function parsearDevicectl(json: string): Dispositivo[];
|
|
441
|
+
/**
|
|
442
|
+
* La línea que EXPLICA un fallo de `simctl`, de entre las que escribe.
|
|
443
|
+
*
|
|
444
|
+
* Medido el 10-09-2026 con `xcrun simctl spawn <udid>` sobre un simulador apagado: la
|
|
445
|
+
* primera línea es papeleo y la segunda es lo que hay que leer.
|
|
446
|
+
*
|
|
447
|
+
* An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=405):
|
|
448
|
+
* Process spawn via launchd failed because device is not booted.
|
|
449
|
+
* Underlying error (domain=com.apple.SimLaunchHostService.RequestError, code=3):
|
|
450
|
+
*
|
|
451
|
+
* `describirFallo` se queda con la PRIMERA línea de stderr, que aquí es justo la que no dice
|
|
452
|
+
* nada —un dominio y un número—, así que esta elige la primera que no sea de papeleo. Sin
|
|
453
|
+
* esto, verificar un simulador apagado contestaba con un código de error en vez de con
|
|
454
|
+
* «no está arrancado».
|
|
455
|
+
*/
|
|
456
|
+
export declare function motivoDeSimctl(texto: string): string | undefined;
|
|
457
|
+
/**
|
|
458
|
+
* ¿Este estado es «se puede hablar con él»? El criterio vive AQUÍ y en un solo sitio.
|
|
459
|
+
*
|
|
460
|
+
* Estaba escrito a mano dentro de `alcanzables()`, y el veredicto de lanzamiento
|
|
461
|
+
* (`core/puedeLanzarse.ts`) necesitaba lo mismo: una segunda definición de «alcanzable» es un
|
|
462
|
+
* segundo sitio donde puede dejar de significar lo mismo —el día que un estado nuevo contara
|
|
463
|
+
* como llegada, uno de los dos se enteraría y el otro no—, que es como se ha roto este repo
|
|
464
|
+
* nueve veces. El test que ata las dos respuestas estado a estado es lo que impide que la copia
|
|
465
|
+
* vuelva.
|
|
466
|
+
*/
|
|
467
|
+
export declare function esAlcanzable(estado: Dispositivo["estado"]): boolean;
|
|
468
|
+
/** Con qué dispositivos SE LLEGA ahora mismo: es lo que el escritorio lista por nombre. */
|
|
469
|
+
export declare function alcanzables(informe: InformeDeDispositivos): Dispositivo[];
|