xonecode 0.37.0 → 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 (34) hide show
  1. package/apps/web/dist/assets/{EditorDeFichero-DoFEF88O.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-D_qKPndv.js → php-BNj56OOc.js} +1 -1
  5. package/apps/web/dist/assets/{ruby-Dbo7pTDa.js → ruby-BtHXxdlK.js} +1 -1
  6. package/apps/web/dist/index.html +2 -2
  7. package/dist/agent/sesiones/gitSync.js +10 -4
  8. package/dist/agent/sesiones/gitSync.js.map +1 -1
  9. package/dist/agent/sesiones/parcheEnTexto.js +31 -0
  10. package/dist/agent/sesiones/parcheEnTexto.js.map +1 -0
  11. package/dist/agent/sesiones/sesionGit.js +7 -2
  12. package/dist/agent/sesiones/sesionGit.js.map +1 -1
  13. package/dist/core/actos.js +3 -2
  14. package/dist/core/actos.js.map +1 -1
  15. package/dist/core/codificacion.js +24 -0
  16. package/dist/core/codificacion.js.map +1 -1
  17. package/dist/core/notify.js +19 -2
  18. package/dist/core/notify.js.map +1 -1
  19. package/dist/core/remoto.js +38 -1
  20. package/dist/core/remoto.js.map +1 -1
  21. package/dist/core/turno.js +4 -0
  22. package/dist/core/turno.js.map +1 -1
  23. package/dist/web/servidor/arranque.js +42 -1
  24. package/dist/web/servidor/arranque.js.map +1 -1
  25. package/dist/web/servidor/puenteRemoto.js +1 -1
  26. package/dist/web/servidor/puenteRemoto.js.map +1 -1
  27. package/node_modules/@xone/xonecode-remoto/dist/contenido.d.ts +21 -0
  28. package/node_modules/@xone/xonecode-remoto/dist/contenido.js +15 -0
  29. package/node_modules/@xone/xonecode-remoto/web/assets/{index-qBo9eRDN.js → index-CGpR8WL1.js} +33 -33
  30. package/node_modules/@xone/xonecode-remoto/web/assets/{index-Bfa2gK3J.css → index-DDmoyp5d.css} +1 -1
  31. package/node_modules/@xone/xonecode-remoto/web/index.html +2 -2
  32. package/package.json +1 -1
  33. package/apps/web/dist/assets/index-DRNhZyYF.css +0 -1
  34. package/apps/web/dist/assets/index-WcouJw-n.js +0 -506
@@ -84,7 +84,8 @@ import { nombreDePersona } from "../../agent/config/persona.js";
84
84
  import { cambiosDeSesion, fotoDeApertura, olvidarSesion, parcheDeSesion } from "../../agent/sesiones/sesionGit.js";
85
85
  import { commitDeTurno, cambiosPendientes, parcheDeSubida, pendientesDeSubida, sinSeguir, trabajoSinCommitear, } from "../../agent/sesiones/gitSync.js";
86
86
  import { marcarTareaDeSesion, sembrarConsumosPendientes } from "./sesiones.js";
87
- 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";
88
89
  import { arbolDeProyecto, escribirFicheroDeProyecto, iconoDelProyecto, leerFicheroDeProyecto, mimeDeImagen, motivoDeRutaInaceptable, motivoParaNoEnsenar, } from "../../agent/grafo/arbolDeProyecto.js";
89
90
  import { baseDeFichero } from "../../agent/sesiones/baseDeFichero.js";
90
91
  import { modeloEnDisco } from "../../agent/navegacion/indiceEnDisco.js";
@@ -5615,6 +5616,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
5615
5616
  else
5616
5617
  darFeedbackATarea(m.tarea, m.texto);
5617
5618
  }
5619
+ else if (m.clase === "artefacto")
5620
+ void enviarArtefactoAlMovil(m.ruta);
5618
5621
  else
5619
5622
  recibirEnLaConsola(m);
5620
5623
  },
@@ -5637,6 +5640,44 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
5637
5640
  cliente(mensajeDeRemoto(e));
5638
5641
  },
5639
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
+ };
5640
5681
  /**
5641
5682
  * Apagar solo si hay algo ENCENDIDO. `apagar()` anuncia `{estado:"apagada"}` a todas las
5642
5683
  * pestañas, y `arrancarConsolaWeb` monta la opción SIEMPRE: con el interruptor apagado, un