xonecode 0.36.3 → 0.38.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 (44) hide show
  1. package/apps/web/dist/assets/{EditorDeFichero-B9EyiuM6.js → EditorDeFichero-x5qYcQEQ.js} +1 -1
  2. package/apps/web/dist/assets/index-BE1a4adS.css +1 -0
  3. package/apps/web/dist/assets/index-DZea9YBh.js +506 -0
  4. package/apps/web/dist/assets/{php-DCP5mtTp.js → php-BNj56OOc.js} +1 -1
  5. package/apps/web/dist/assets/{ruby-B41ayseU.js → ruby-BtHXxdlK.js} +1 -1
  6. package/apps/web/dist/index.html +2 -2
  7. package/dist/agent/dispositivos/instalacionEnMaquina.js +0 -13
  8. package/dist/agent/dispositivos/instalacionEnMaquina.js.map +1 -1
  9. package/dist/agent/remoto/ngrokEnMaquina.js +77 -87
  10. package/dist/agent/remoto/ngrokEnMaquina.js.map +1 -1
  11. package/dist/agent/remoto/tunelNgrok.js +75 -162
  12. package/dist/agent/remoto/tunelNgrok.js.map +1 -1
  13. package/dist/agent/sesiones/gitSync.js +10 -4
  14. package/dist/agent/sesiones/gitSync.js.map +1 -1
  15. package/dist/agent/sesiones/parcheEnTexto.js +31 -0
  16. package/dist/agent/sesiones/parcheEnTexto.js.map +1 -0
  17. package/dist/agent/sesiones/sesionGit.js +7 -2
  18. package/dist/agent/sesiones/sesionGit.js.map +1 -1
  19. package/dist/core/actos.js +3 -2
  20. package/dist/core/actos.js.map +1 -1
  21. package/dist/core/codificacion.js +24 -0
  22. package/dist/core/codificacion.js.map +1 -1
  23. package/dist/core/dispositivos.js +0 -53
  24. package/dist/core/dispositivos.js.map +1 -1
  25. package/dist/core/notify.js +19 -2
  26. package/dist/core/notify.js.map +1 -1
  27. package/dist/core/remoto.js +38 -1
  28. package/dist/core/remoto.js.map +1 -1
  29. package/dist/core/tunel.js +34 -25
  30. package/dist/core/tunel.js.map +1 -1
  31. package/dist/core/turno.js +4 -0
  32. package/dist/core/turno.js.map +1 -1
  33. package/dist/web/servidor/arranque.js +46 -14
  34. package/dist/web/servidor/arranque.js.map +1 -1
  35. package/dist/web/servidor/puenteRemoto.js +1 -1
  36. package/dist/web/servidor/puenteRemoto.js.map +1 -1
  37. package/node_modules/@xone/xonecode-remoto/dist/contenido.d.ts +21 -0
  38. package/node_modules/@xone/xonecode-remoto/dist/contenido.js +15 -0
  39. package/node_modules/@xone/xonecode-remoto/web/assets/{index-qBo9eRDN.js → index-CGpR8WL1.js} +33 -33
  40. package/node_modules/@xone/xonecode-remoto/web/assets/{index-Bfa2gK3J.css → index-DDmoyp5d.css} +1 -1
  41. package/node_modules/@xone/xonecode-remoto/web/index.html +2 -2
  42. package/package.json +2 -1
  43. package/apps/web/dist/assets/index-C6MsC7A5.js +0 -506
  44. package/apps/web/dist/assets/index-DRNhZyYF.css +0 -1
@@ -53,7 +53,6 @@ import { detectarDispositivos, frameworkEnDispositivo } from "../../agent/dispos
53
53
  import { lanzarEnDispositivo, } from "../../agent/dispositivos/lanzamientoEnMaquina.js";
54
54
  import { motivoDeBloqueo, puedeLanzarse, } from "../../core/puedeLanzarse.js";
55
55
  import { PLATAFORMAS_DE_DISPOSITIVO, remotoEnVigor } from "../../core/settings.js";
56
- import { recetaDeNgrok } from "../../core/dispositivos.js";
57
56
  import { motivoDeDominioInaceptable } from "../../core/tunel.js";
58
57
  import { instalarHerramientaDeDispositivos, verificarDispositivo } from "../../agent/dispositivos/dispositivosEnMaquina.js";
59
58
  import { arrancarEmulador, pararEmulador } from "../../agent/dispositivos/arranqueDeEmulador.js";
@@ -85,7 +84,8 @@ import { nombreDePersona } from "../../agent/config/persona.js";
85
84
  import { cambiosDeSesion, fotoDeApertura, olvidarSesion, parcheDeSesion } from "../../agent/sesiones/sesionGit.js";
86
85
  import { commitDeTurno, cambiosPendientes, parcheDeSubida, pendientesDeSubida, sinSeguir, trabajoSinCommitear, } from "../../agent/sesiones/gitSync.js";
87
86
  import { marcarTareaDeSesion, sembrarConsumosPendientes } from "./sesiones.js";
88
- import { RUTA_ARTEFACTOS, esRutaDeArtefacto } from "../../core/artefactos.js";
87
+ import { RUTA_ARTEFACTOS, esRutaDeArtefacto, rutaRelativaDeArtefacto } from "../../core/artefactos.js";
88
+ import { MIMES_DE_ARTEFACTO_AL_MOVIL, TOPE_DE_ARTEFACTO_AL_MOVIL, trozosDeArtefacto } from "../../core/remoto.js";
89
89
  import { arbolDeProyecto, escribirFicheroDeProyecto, iconoDelProyecto, leerFicheroDeProyecto, mimeDeImagen, motivoDeRutaInaceptable, motivoParaNoEnsenar, } from "../../agent/grafo/arbolDeProyecto.js";
90
90
  import { baseDeFichero } from "../../agent/sesiones/baseDeFichero.js";
91
91
  import { modeloEnDisco } from "../../agent/navegacion/indiceEnDisco.js";
@@ -387,7 +387,6 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
387
387
  instalado: fotoDeNgrok.instalado,
388
388
  cuenta: fotoDeNgrok.cuenta,
389
389
  ...(ajustes?.dominio === undefined ? {} : { dominio: ajustes.dominio }),
390
- ...(fotoDeNgrok.instalado ? {} : { receta: recetaDeNgrok(process.platform, fotoDeNgrok) }),
391
390
  ...(motivoDeNgrok === undefined ? {} : { motivo: motivoDeNgrok }),
392
391
  },
393
392
  }),
@@ -4377,12 +4376,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
4377
4376
  ultimoProgreso = 0;
4378
4377
  emitirProgreso(resultado.estado, resultado.motivo);
4379
4378
  trabajo = undefined;
4380
- // Y la foto nueva es la que dice si el paso quedó hecho, no el código de salida. Instalar
4381
- // ngrok no cambia los aparatos: su foto se queda, y solo se vuelve a medir ngrok.
4382
- if (receta === "ngrok") {
4383
- await medirNgrokYAnunciar().catch(contar);
4384
- return;
4385
- }
4379
+ // Y la foto nueva es la que dice si el paso quedó hecho, no el código de salida.
4386
4380
  informeDeDispositivos = undefined;
4387
4381
  await atenderDispositivos().catch(contar);
4388
4382
  })();
@@ -4405,9 +4399,6 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
4405
4399
  trabajo?.cancelar();
4406
4400
  return;
4407
4401
  }
4408
- // La receta de ngrok es de la sesión remota: con el interruptor apagado no existe.
4409
- if (mensaje.id === "ngrok" && !remotoHabilitado())
4410
- return;
4411
4402
  if (trabajo !== undefined) {
4412
4403
  // Ya hay uno: se reenvía su estado en vez de lanzar otro.
4413
4404
  emitirProgreso("corriendo");
@@ -5625,6 +5616,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
5625
5616
  else
5626
5617
  darFeedbackATarea(m.tarea, m.texto);
5627
5618
  }
5619
+ else if (m.clase === "artefacto")
5620
+ void enviarArtefactoAlMovil(m.ruta);
5628
5621
  else
5629
5622
  recibirEnLaConsola(m);
5630
5623
  },
@@ -5647,6 +5640,44 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
5647
5640
  cliente(mensajeDeRemoto(e));
5648
5641
  },
5649
5642
  });
5643
+ /**
5644
+ * Un artefacto del hilo, al MÓVIL que lo pidió (petición suya: ver las capturas desde la web móvil).
5645
+ *
5646
+ * Las MISMAS barreras que `GET /artefacto`: la ruta por `esRutaDeArtefacto` y el lector, que la
5647
+ * comprueba contra el disco (texto y `realpath`), sobre la conversación del FOCO —que es la que el
5648
+ * móvil sigue—. Y dos más, propias del móvil: solo IMÁGENES (un HTML se sirve en el escritorio dentro
5649
+ * de dos capas de sandbox, y en la web móvil no hay con qué aislarlo) y con tope de tamaño. Va en
5650
+ * trozos porque una captura no cabe en un solo mensaje del puente (`trozosDeArtefacto`), y a todos los
5651
+ * móviles: siguen la misma conversación, y un id de quién lo pidió no viaja hasta aquí.
5652
+ *
5653
+ * Un fallo se DEVUELVE al móvil como `artefacto.error` con un texto FIJO nuestro, nunca el de Node.
5654
+ */
5655
+ const enviarArtefactoAlMovil = async (ruta) => {
5656
+ const fallo = (motivo) => sesionRemota?.difundir({ clase: "artefacto.error", ruta, motivo });
5657
+ if (!esRutaDeArtefacto(ruta))
5658
+ return fallo("esa ruta no es de un artefacto");
5659
+ const abierto = vestibulo.proyectoAbierto();
5660
+ if (abierto === undefined || opciones.leerArtefactoCrudo === undefined)
5661
+ return fallo("no hay ninguna conversación abierta");
5662
+ let leido;
5663
+ try {
5664
+ leido = await opciones.leerArtefactoCrudo(abierto.raiz, abierto.idDeHilo, rutaRelativaDeArtefacto(ruta));
5665
+ }
5666
+ catch (error) {
5667
+ informar(`sesión remota: no se pudo leer un artefacto para el móvil (${codigoDe(error)})`);
5668
+ return fallo("no se pudo leer");
5669
+ }
5670
+ if (!leido.ok) {
5671
+ const textos = { rechazado: "esa ruta no es de un artefacto", "no-existe": "ya no está", "demasiado-grande": "es demasiado grande" };
5672
+ return fallo(textos[leido.motivo]);
5673
+ }
5674
+ if (leido.mime === undefined || !MIMES_DE_ARTEFACTO_AL_MOVIL.has(leido.mime))
5675
+ return fallo("en el móvil solo se ven imágenes");
5676
+ if (leido.datos.length > TOPE_DE_ARTEFACTO_AL_MOVIL)
5677
+ return fallo("es demasiado grande para el móvil");
5678
+ for (const trozo of trozosDeArtefacto(ruta, leido.mime, leido.datos))
5679
+ sesionRemota?.difundir(trozo);
5680
+ };
5650
5681
  /**
5651
5682
  * Apagar solo si hay algo ENCENDIDO. `apagar()` anuncia `{estado:"apagada"}` a todas las
5652
5683
  * pestañas, y `arrancarConsolaWeb` monta la opción SIEMPRE: con el interruptor apagado, un
@@ -5677,7 +5708,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
5677
5708
  const medirNgrokAhora = (medir) => {
5678
5709
  const esta = medir()
5679
5710
  .then((foto) => {
5680
- fotoDeNgrok = { instalado: foto.instalado, cuenta: foto.cuenta, ...(foto.hayBrew === undefined ? {} : { hayBrew: foto.hayBrew }) };
5711
+ fotoDeNgrok = { instalado: foto.instalado, cuenta: foto.cuenta };
5681
5712
  anunciarRemoto();
5682
5713
  })
5683
5714
  .finally(() => {
@@ -7854,8 +7885,9 @@ export async function arrancarConsolaWeb(opciones) {
7854
7885
  },
7855
7886
  medirNgrok: opciones.medirNgrok ??
7856
7887
  (async () => {
7888
+ // ngrok viene con xonecode (el SDK): no hay receta de instalación que medir.
7857
7889
  const ngrok = await import("../../agent/remoto/ngrokEnMaquina.js");
7858
- return { ...(await ngrok.medirNgrok()), hayBrew: ngrok.hayBrew() };
7890
+ return ngrok.medirNgrok();
7859
7891
  }),
7860
7892
  guardarAuthtoken: opciones.guardarAuthtoken ??
7861
7893
  (async (token) => (await import("../../agent/remoto/ngrokEnMaquina.js")).guardarAuthtoken(token)),