xonecode 0.24.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/web/dist/assets/{EditorDeFichero-DP2FWRar.js → EditorDeFichero-BOMIz5Wx.js} +1 -1
- package/apps/web/dist/assets/index-DICdq4UC.css +1 -0
- package/apps/web/dist/assets/index-DTsPoUh_.js +499 -0
- package/apps/web/dist/assets/{php-fWJ9hMOH.js → php-BHWCwDKR.js} +1 -1
- package/apps/web/dist/assets/{ruby-CpEKEsYx.js → ruby-D3HLU4IP.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/cloudstudio/subida.js +22 -7
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/grafo/arbolDeProyecto.js +68 -1
- package/dist/agent/grafo/arbolDeProyecto.js.map +1 -1
- package/dist/agent/sesiones/gitSync.js +166 -1
- package/dist/agent/sesiones/gitSync.js.map +1 -1
- package/dist/cli/aprobar.js.map +1 -1
- package/dist/cli/consola.js +58 -9
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/main.js +13 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/core/actos.js.map +1 -1
- package/dist/core/cloudstudio.js +15 -1
- package/dist/core/cloudstudio.js.map +1 -1
- package/dist/core/descriptoresDeApp.js +27 -1
- package/dist/core/descriptoresDeApp.js.map +1 -1
- package/dist/core/imagenesDeDocumento.js +7 -0
- package/dist/core/imagenesDeDocumento.js.map +1 -1
- package/dist/web/servidor/arranque.js +185 -5
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/consolaWeb.js +32 -0
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/index-C-U_ay7l.css +0 -1
- package/apps/web/dist/assets/index-DT_LY-_I.js +0 -495
|
@@ -240,17 +240,43 @@ export function conexionesDeApp(xml) {
|
|
|
240
240
|
* una ambigüedad que resolver, son un fichero que alguien tocó.
|
|
241
241
|
*/
|
|
242
242
|
export function nombreDeApp(ini) {
|
|
243
|
+
return claveDeIni(ini, "name");
|
|
244
|
+
}
|
|
245
|
+
/** La primera `clave=` de un `.ini`, sin distinguir mayúsculas y recortada; vacía es `undefined`. */
|
|
246
|
+
function claveDeIni(ini, clave) {
|
|
243
247
|
for (const linea of ini.split("\n")) {
|
|
244
248
|
const corte = linea.indexOf("=");
|
|
245
249
|
if (corte < 0)
|
|
246
250
|
continue;
|
|
247
|
-
if (linea.slice(0, corte).trim().toLowerCase() !==
|
|
251
|
+
if (linea.slice(0, corte).trim().toLowerCase() !== clave)
|
|
248
252
|
continue;
|
|
249
253
|
const valor = linea.slice(corte + 1).trim();
|
|
250
254
|
return valor === "" ? undefined : valor;
|
|
251
255
|
}
|
|
252
256
|
return undefined;
|
|
253
257
|
}
|
|
258
|
+
/** El icono de la app (`icon=`/`Icon=` de `app.ini`), con las mismas reglas que `nombreDeApp`. */
|
|
259
|
+
export function iconoDeApp(ini) {
|
|
260
|
+
return claveDeIni(ini, "icon");
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Dónde puede estar el icono, en orden y como rutas RELATIVAS a la raíz del proyecto.
|
|
264
|
+
*
|
|
265
|
+
* **Dos sitios, porque el censo y la documentación no coinciden.** Los proyectos reales
|
|
266
|
+
* (ProyectoDieta, ProyectoPruebasXOneCode, mRED_Web) escriben `icon=icon.png` y dejan el fichero
|
|
267
|
+
* en la RAÍZ, junto a `splash.png`; la documentación y nuestro esqueleto dicen `Icon=app_icon.png`
|
|
268
|
+
* dentro de `IconFolder` (`icons/` por omisión). Se prueba primero lo que hacen los reales.
|
|
269
|
+
*
|
|
270
|
+
* Aquí no se decide nada de seguridad: un `icon=../.env` sale tal cual y lo para quien LEE
|
|
271
|
+
* (`leerFicheroDeProyecto`, texto y `realpath`), que es la misma barrera de Ficheros.
|
|
272
|
+
*/
|
|
273
|
+
export function candidatosDeIcono(ini) {
|
|
274
|
+
const icono = iconoDeApp(ini);
|
|
275
|
+
if (icono === undefined)
|
|
276
|
+
return [];
|
|
277
|
+
const carpeta = (claveDeIni(ini, "iconfolder") ?? "icons").replace(/[\\/]+$/, "");
|
|
278
|
+
return carpeta === "" ? [icono] : [icono, `${carpeta}/${icono}`];
|
|
279
|
+
}
|
|
254
280
|
/**
|
|
255
281
|
* ¿Este `connstring` es una RUTA del proyecto, o una cadena de proveedor?
|
|
256
282
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptoresDeApp.js","sourceRoot":"","sources":["../../src/core/descriptoresDeApp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AASnC,yDAAyD;AACzD,SAAS,gBAAgB,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/E,CAAC;AAED,2CAA2C;AAC3C,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW;IAC7D,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,MAAM,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC,CAAC,0CAA0C;YACtE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iGAAiG;AACjG,SAAS,SAAS,CAChB,GAAW,EACX,KAAa,EACb,GAAW;IAEX,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,qCAAqC;QAC3F,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,4FAA4F;IAC5F,MAAM,MAAM,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClB,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;YAAE,MAAM;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;YAAE,MAAM;QAC3C,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CACpB,GAAW,EACX,KAAa,EACb,GAAW;IAEX,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG;YAAE,MAAM;QACpB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,CAAC,EAAE,CAAC;YACJ,MAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,CAAC,EAAE,CAAC,CAAC,gDAAgD;YACrD,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,8EAA8E;YACnF,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACpD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,CAAC,GAAG,CAAC,CAAC,CAAC,4EAA4E;YACnF,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,MAAM;YAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;aACzC,IAAI,QAAQ,KAAK,YAAY;YAAE,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7D,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG;YAAE,MAAM;QAE/B,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,kDAAkD;YACzE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM;YACtB,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM;YACtB,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7B,wFAAwF;YACxF,wFAAwF;YACxF,gFAAgF;YAChF,mEAAmE;YACnE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAC3E,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM;YACtB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;QACvC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YAC1B,wFAAwF;YACxF,oFAAoF;YACpF,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,UAAU,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;YACjE,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC,GAAG,SAAS,CAAC;IAChB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS;QACxB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"descriptoresDeApp.js","sourceRoot":"","sources":["../../src/core/descriptoresDeApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,13 @@
|
|
|
17
17
|
* el cliente la lleva copiada (`apps/web/src/imagenesDelDocumento.ts`), como un tipo del cable.
|
|
18
18
|
*/
|
|
19
19
|
export const RUTA_IMAGEN_DEL_PROYECTO = "/imagen-del-proyecto";
|
|
20
|
+
/**
|
|
21
|
+
* La ruta HTTP que sirve el ICONO de la app de un proyecto bajado (`?id=<id del proyecto>`), para la
|
|
22
|
+
* barra y la cabecera de su panel. Lleva el ID y no una ruta: qué fichero es lo decide el servidor
|
|
23
|
+
* leyendo `app.ini` (`agent/grafo/arbolDeProyecto.ts#iconoDelProyecto`). Copiada en el cliente
|
|
24
|
+
* (`apps/web/src/imagenesDelDocumento.ts`).
|
|
25
|
+
*/
|
|
26
|
+
export const RUTA_ICONO_DEL_PROYECTO = "/icono-del-proyecto";
|
|
20
27
|
/** Un esquema de URL (`http:`, `data:`, `file:`…): eso no es una ruta del proyecto. */
|
|
21
28
|
const CON_ESQUEMA = /^[a-z][a-z0-9+.-]*:/i;
|
|
22
29
|
/** `` y ``. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagenesDeDocumento.js","sourceRoot":"","sources":["../../src/core/imagenesDeDocumento.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"imagenesDeDocumento.js","sourceRoot":"","sources":["../../src/core/imagenesDeDocumento.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,10 +75,10 @@ import { cloudstudioDelProyecto, guardarModoDeEscrituraDeProyecto, modoDeEscritu
|
|
|
75
75
|
import { abrirEnSistema, olvidarEntorno as olvidarCredencialesDeEntorno, rutaAuthPorDefecto } from "../../agent/cloudstudio/cloudstudioMcp.js";
|
|
76
76
|
import { nombreDePersona } from "../../agent/config/persona.js";
|
|
77
77
|
import { cambiosDeSesion, fotoDeApertura, olvidarSesion, parcheDeSesion } from "../../agent/sesiones/sesionGit.js";
|
|
78
|
-
import { commitDeTurno, cambiosPendientes, trabajoSinCommitear } from "../../agent/sesiones/gitSync.js";
|
|
78
|
+
import { commitDeTurno, cambiosPendientes, parcheDeSubida, pendientesDeSubida, sinSeguir, trabajoSinCommitear, } from "../../agent/sesiones/gitSync.js";
|
|
79
79
|
import { marcarTareaDeSesion, sembrarConsumosPendientes } from "./sesiones.js";
|
|
80
80
|
import { RUTA_ARTEFACTOS, esRutaDeArtefacto } from "../../core/artefactos.js";
|
|
81
|
-
import { arbolDeProyecto, escribirFicheroDeProyecto, leerFicheroDeProyecto, mimeDeImagen, motivoDeRutaInaceptable, } from "../../agent/grafo/arbolDeProyecto.js";
|
|
81
|
+
import { arbolDeProyecto, escribirFicheroDeProyecto, iconoDelProyecto, leerFicheroDeProyecto, mimeDeImagen, motivoDeRutaInaceptable, motivoParaNoEnsenar, } from "../../agent/grafo/arbolDeProyecto.js";
|
|
82
82
|
import { baseDeFichero } from "../../agent/sesiones/baseDeFichero.js";
|
|
83
83
|
import { modeloEnDisco } from "../../agent/navegacion/indiceEnDisco.js";
|
|
84
84
|
import { ficherosDelProyecto } from "../../agent/turno/ficherosDelProyecto.js";
|
|
@@ -86,7 +86,7 @@ import { fotoDeColecciones } from "../../core/fotoDeColecciones.js";
|
|
|
86
86
|
import { modeloDelCambio } from "../../agent/sesiones/modeloDelCambio.js";
|
|
87
87
|
import { planesDelProyecto } from "../../agent/planesEnDisco.js";
|
|
88
88
|
import { CSP_DE_OPENUI, documentoDeOpenui, esArtefactoOpenui, temaDeVisor } from "./visorOpenui.js";
|
|
89
|
-
import { RUTA_IMAGEN_DEL_PROYECTO } from "../../core/imagenesDeDocumento.js";
|
|
89
|
+
import { RUTA_ICONO_DEL_PROYECTO, RUTA_IMAGEN_DEL_PROYECTO } from "../../core/imagenesDeDocumento.js";
|
|
90
90
|
import { leerArtefactoCrudo, leerArtefactoDeSesion, } from "../../agent/grafo/artefactosEnDisco.js";
|
|
91
91
|
import { CatalogoModelos, baseUrlDeOllama, baseUrlDeOllamaCloud, capacidadesDeOllama, } from "../../agent/config/catalogoModelos.js";
|
|
92
92
|
import { Modelos } from "../../agent/config/modelos.js";
|
|
@@ -547,6 +547,22 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
547
547
|
return undefined;
|
|
548
548
|
}
|
|
549
549
|
};
|
|
550
|
+
/**
|
|
551
|
+
* Qué proyectos BAJADOS tienen icono de app, una vez por anuncio y antes de componerlo (la
|
|
552
|
+
* lista se compone síncrona). Por el cable solo viaja el booleano: qué fichero es lo vuelve a
|
|
553
|
+
* decidir `RUTA_ICONO_DEL_PROYECTO` al servirlo, y ninguna ruta sale del host.
|
|
554
|
+
*/
|
|
555
|
+
const conIcono = new Set();
|
|
556
|
+
const buscarIcono = opciones.iconoDelProyecto;
|
|
557
|
+
if (buscarIcono !== undefined) {
|
|
558
|
+
await Promise.all(proyectos.map(async (p) => {
|
|
559
|
+
if (!hayCopiaLocal(p.nombre))
|
|
560
|
+
return;
|
|
561
|
+
const raiz = raizDeProyectoOSilencio(p.nombre);
|
|
562
|
+
if (raiz !== undefined && (await buscarIcono(raiz).catch(() => undefined)) !== undefined)
|
|
563
|
+
conIcono.add(p.id);
|
|
564
|
+
}));
|
|
565
|
+
}
|
|
550
566
|
emitir({
|
|
551
567
|
clase: "alta",
|
|
552
568
|
pasos,
|
|
@@ -606,6 +622,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
606
622
|
const rama = raiz === undefined ? undefined : cloudstudioDelProyecto(raiz)?.rama;
|
|
607
623
|
return typeof rama === "string" && rama !== "" ? { rama } : {};
|
|
608
624
|
})(),
|
|
625
|
+
// El icono de la app, solo si la copia tiene uno que se pueda enseñar (ver `conIcono`).
|
|
626
|
+
...(conIcono.has(p.id) ? { icono: true } : {}),
|
|
609
627
|
};
|
|
610
628
|
}),
|
|
611
629
|
ramas,
|
|
@@ -2788,7 +2806,23 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
2788
2806
|
return;
|
|
2789
2807
|
}
|
|
2790
2808
|
const { via, ficheros, mezclados } = await opciones.cambiosDeSesion(abierto.raiz, sesion);
|
|
2791
|
-
|
|
2809
|
+
// Lo pendiente de subir se marca AQUÍ, en la misma foto que la lista: cruzarlo en el
|
|
2810
|
+
// cliente con el `sync` —que llega en otro momento— escondería lo recién escrito.
|
|
2811
|
+
const marcados = await marcarPendientes(abierto.raiz, ficheros);
|
|
2812
|
+
emitir({ clase: "revision", via, ficheros: marcados, ...(mezclados === undefined ? {} : { mezclados }) });
|
|
2813
|
+
};
|
|
2814
|
+
/**
|
|
2815
|
+
* Lo pendiente de subir del proyecto ABIERTO —el mismo que sincroniza `atenderSync`—: la
|
|
2816
|
+
* lista sin `ruta`, el diff de uno con ella. Las reglas viven en `lecturaDePendientesDeSubida`
|
|
2817
|
+
* y `lecturaDeParcheDeSubida`, exportadas y probadas contra git de verdad.
|
|
2818
|
+
*/
|
|
2819
|
+
const atenderPendientesDeSubida = async (ruta) => {
|
|
2820
|
+
const abierto = vestibulo.proyectoAbierto();
|
|
2821
|
+
if (abierto === undefined) {
|
|
2822
|
+
emitir({ clase: "pendientesDeSubida", error: "no hay ningún proyecto abierto" });
|
|
2823
|
+
return;
|
|
2824
|
+
}
|
|
2825
|
+
emitir(ruta === undefined ? await lecturaDePendientesDeSubida(abierto.raiz) : await lecturaDeParcheDeSubida(abierto.raiz, ruta));
|
|
2792
2826
|
};
|
|
2793
2827
|
/**
|
|
2794
2828
|
* La sincronización con CloudStudio del proyecto abierto, pedida desde un control
|
|
@@ -4726,6 +4760,63 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
4726
4760
|
});
|
|
4727
4761
|
respuesta.end(datos);
|
|
4728
4762
|
});
|
|
4763
|
+
/**
|
|
4764
|
+
* `GET RUTA_ICONO_DEL_PROYECTO?id=<id>` — el icono de la app de un proyecto BAJADO, para su fila
|
|
4765
|
+
* de la barra y la cabecera de su panel.
|
|
4766
|
+
*
|
|
4767
|
+
* Del cable llega el ID, nunca una ruta: el nombre sale del listado del SERVIDOR (como al borrar
|
|
4768
|
+
* la copia local), la raíz de `vestibulo.raizDeProyecto`, y el fichero lo decide `app.ini` con la
|
|
4769
|
+
* barrera de Ficheros (`iconoDelProyecto`). Se lee luego con `leerFichero`, que la vuelve a
|
|
4770
|
+
* aplicar. A diferencia de `RUTA_IMAGEN_DEL_PROYECTO`, vale para cualquier copia, no solo la
|
|
4771
|
+
* abierta: la barra enseña todas. Mismas cabeceras de seguridad (un `.svg` no ejecuta nada).
|
|
4772
|
+
*/
|
|
4773
|
+
servidor.registrarRuta("GET", RUTA_ICONO_DEL_PROYECTO, async (peticion, respuesta) => {
|
|
4774
|
+
const responder = (codigo, texto) => {
|
|
4775
|
+
respuesta.writeHead(codigo, { "Content-Type": "text/plain; charset=utf-8" });
|
|
4776
|
+
respuesta.end(texto);
|
|
4777
|
+
};
|
|
4778
|
+
const id = new URLSearchParams((peticion.url ?? "").split("?")[1] ?? "").get("id");
|
|
4779
|
+
if (id === null || id === "") {
|
|
4780
|
+
responder(400, "falta el proyecto");
|
|
4781
|
+
return;
|
|
4782
|
+
}
|
|
4783
|
+
const entorno = entornoElegido;
|
|
4784
|
+
const proyecto = proyectos.find((p) => p.id === id);
|
|
4785
|
+
const buscar = opciones.iconoDelProyecto;
|
|
4786
|
+
const leer = opciones.leerFichero;
|
|
4787
|
+
if (entorno === undefined || proyecto === undefined || buscar === undefined || leer === undefined || !hayCopiaLocal(proyecto.nombre)) {
|
|
4788
|
+
responder(404, "no hay icono");
|
|
4789
|
+
return;
|
|
4790
|
+
}
|
|
4791
|
+
let leido;
|
|
4792
|
+
try {
|
|
4793
|
+
const raiz = vestibulo.raizDeProyecto(entorno, proyecto.nombre);
|
|
4794
|
+
const ruta = await buscar(raiz);
|
|
4795
|
+
if (ruta === undefined) {
|
|
4796
|
+
responder(404, "no hay icono");
|
|
4797
|
+
return;
|
|
4798
|
+
}
|
|
4799
|
+
leido = await leer(raiz, ruta);
|
|
4800
|
+
}
|
|
4801
|
+
catch (error) {
|
|
4802
|
+
informar(`no se pudo servir el icono de «${proyecto.nombre}» (${codigoDe(error)})`);
|
|
4803
|
+
responder(500, "no se pudo leer");
|
|
4804
|
+
return;
|
|
4805
|
+
}
|
|
4806
|
+
if (leido.error !== undefined || leido.base64 === undefined || leido.mime === undefined) {
|
|
4807
|
+
responder(404, "no hay icono");
|
|
4808
|
+
return;
|
|
4809
|
+
}
|
|
4810
|
+
const datos = Buffer.from(leido.base64, "base64");
|
|
4811
|
+
respuesta.writeHead(200, {
|
|
4812
|
+
"Content-Type": leido.mime,
|
|
4813
|
+
"Content-Length": datos.length,
|
|
4814
|
+
"Content-Security-Policy": "sandbox",
|
|
4815
|
+
"X-Content-Type-Options": "nosniff",
|
|
4816
|
+
"Cache-Control": "no-store",
|
|
4817
|
+
});
|
|
4818
|
+
respuesta.end(datos);
|
|
4819
|
+
});
|
|
4729
4820
|
/**
|
|
4730
4821
|
* `GET RUTA_CALLBACK_MCP` — a donde vuelve el navegador tras autorizar un conector.
|
|
4731
4822
|
*
|
|
@@ -5205,6 +5296,13 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
5205
5296
|
respuesta.end();
|
|
5206
5297
|
return;
|
|
5207
5298
|
}
|
|
5299
|
+
if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "pendientesDeSubida") {
|
|
5300
|
+
const ruta = mensaje.ruta;
|
|
5301
|
+
void atenderPendientesDeSubida(typeof ruta === "string" ? ruta : undefined).catch(contar);
|
|
5302
|
+
respuesta.writeHead(204);
|
|
5303
|
+
respuesta.end();
|
|
5304
|
+
return;
|
|
5305
|
+
}
|
|
5208
5306
|
if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "revision") {
|
|
5209
5307
|
void atenderRevision(mensaje.ruta).catch(contar);
|
|
5210
5308
|
respuesta.writeHead(204);
|
|
@@ -6112,6 +6210,88 @@ export async function lecturaDeSync(raiz, sesion) {
|
|
|
6112
6210
|
};
|
|
6113
6211
|
}
|
|
6114
6212
|
}
|
|
6213
|
+
/**
|
|
6214
|
+
* TODO lo pendiente de subir del proyecto, como mensaje del cable (la pestaña Sincronización del
|
|
6215
|
+
* panel). Sin CloudStudio, o si la medida falla, lo DICE: «no se pudo medir» no es «nada».
|
|
6216
|
+
*/
|
|
6217
|
+
export async function lecturaDePendientesDeSubida(raiz) {
|
|
6218
|
+
const rama = cloudstudioDelProyecto(raiz)?.rama;
|
|
6219
|
+
if (rama === undefined || rama === "") {
|
|
6220
|
+
return { clase: "pendientesDeSubida", error: "este proyecto no está dado de alta en CloudStudio" };
|
|
6221
|
+
}
|
|
6222
|
+
try {
|
|
6223
|
+
return { clase: "pendientesDeSubida", ficheros: await pendientesDeSubida(raiz, rama) };
|
|
6224
|
+
}
|
|
6225
|
+
catch {
|
|
6226
|
+
return {
|
|
6227
|
+
clase: "pendientesDeSubida",
|
|
6228
|
+
error: "no se pudo medir lo que falta por subir: la copia local no se puede comparar con la rama",
|
|
6229
|
+
};
|
|
6230
|
+
}
|
|
6231
|
+
}
|
|
6232
|
+
/**
|
|
6233
|
+
* El diff de UN fichero pendiente, con las DOS guardas antes de tocar git:
|
|
6234
|
+
* - la ruta tiene que estar en la lista pendiente RECIÉN medida —una ruta inventada por el
|
|
6235
|
+
* cable no saca nada del disco—;
|
|
6236
|
+
* - y tiene que poder ENSEÑARSE con la MISMA regla del lector que Ficheros y Revisión
|
|
6237
|
+
* (`motivoParaNoEnsenar`, texto y `realpath`): un `.env` pendiente sale en la lista, pero su
|
|
6238
|
+
* diff NO viaja nunca.
|
|
6239
|
+
*/
|
|
6240
|
+
export async function lecturaDeParcheDeSubida(raiz, ruta) {
|
|
6241
|
+
const vacio = (negado) => ({
|
|
6242
|
+
clase: "parcheDeSubida",
|
|
6243
|
+
ruta,
|
|
6244
|
+
texto: "",
|
|
6245
|
+
recortado: false,
|
|
6246
|
+
...(negado === undefined ? {} : { negado }),
|
|
6247
|
+
});
|
|
6248
|
+
const rama = cloudstudioDelProyecto(raiz)?.rama;
|
|
6249
|
+
if (rama === undefined || rama === "")
|
|
6250
|
+
return vacio("el proyecto no está dado de alta en CloudStudio");
|
|
6251
|
+
let fichero;
|
|
6252
|
+
try {
|
|
6253
|
+
fichero = (await pendientesDeSubida(raiz, rama)).find((f) => f.ruta === ruta);
|
|
6254
|
+
}
|
|
6255
|
+
catch {
|
|
6256
|
+
return vacio("no se pudo medir lo que falta por subir");
|
|
6257
|
+
}
|
|
6258
|
+
if (fichero === undefined)
|
|
6259
|
+
return vacio("ya no está pendiente de subir");
|
|
6260
|
+
const motivo = await motivoParaNoEnsenar(raiz, ruta);
|
|
6261
|
+
if (motivo !== undefined)
|
|
6262
|
+
return vacio(motivo);
|
|
6263
|
+
const parche = await parcheDeSubida(raiz, rama, ruta, fichero.sinCommitear === true);
|
|
6264
|
+
return parche === undefined ? vacio() : { clase: "parcheDeSubida", ruta, ...parche };
|
|
6265
|
+
}
|
|
6266
|
+
/**
|
|
6267
|
+
* Marca cada fichero de la sesión con si sigue PENDIENTE de subir a CloudStudio.
|
|
6268
|
+
*
|
|
6269
|
+
* Revisión enseña solo lo de la sesión que falta por subir: lo ya subido no es nada que
|
|
6270
|
+
* revisar antes de subir. Se decide aquí y no en el cliente porque la lista (`revision`) y la
|
|
6271
|
+
* medida (`sync`) son dos mensajes que llegan en momentos distintos, y cruzar uno nuevo con
|
|
6272
|
+
* uno viejo escondería justo el fichero que el agente acaba de escribir —sin un solo error—.
|
|
6273
|
+
*
|
|
6274
|
+
* Misma medida que la banda (`cambiosPendientes` contra la ref de la bajada) y mismo cruce
|
|
6275
|
+
* por ruta exacta que `cuantosDeLaSesion`, **más lo que git aún no sigue** (`sinSeguir`): un
|
|
6276
|
+
* fichero recién creado a mitad de turno no sale en `git diff` y quedaría escondido justo
|
|
6277
|
+
* cuando más falta hace verlo. La regla: lo que la ref no confirma como subido, se enseña. **Sin CloudStudio, o si la medida falla, los
|
|
6278
|
+
* ficheros vuelven SIN la marca**: «no consta» no es «nada pendiente», y Revisión enseña
|
|
6279
|
+
* entonces todo. No va dentro de `cambiosDeSesion`, que usan también el comentario de cierre,
|
|
6280
|
+
* Soporte y `cuantosDeLaSesion`.
|
|
6281
|
+
*/
|
|
6282
|
+
export async function marcarPendientes(raiz, ficheros) {
|
|
6283
|
+
const rama = cloudstudioDelProyecto(raiz)?.rama;
|
|
6284
|
+
if (rama === undefined || rama === "" || ficheros.length === 0)
|
|
6285
|
+
return [...ficheros];
|
|
6286
|
+
try {
|
|
6287
|
+
const [cambios, nuevos] = await Promise.all([cambiosPendientes(raiz, rama), sinSeguir(raiz)]);
|
|
6288
|
+
const pendientes = new Set([...cambios.map((cambio) => cambio.ruta), ...nuevos]);
|
|
6289
|
+
return ficheros.map((fichero) => ({ ...fichero, pendiente: pendientes.has(fichero.ruta) }));
|
|
6290
|
+
}
|
|
6291
|
+
catch {
|
|
6292
|
+
return [...ficheros];
|
|
6293
|
+
}
|
|
6294
|
+
}
|
|
6115
6295
|
/**
|
|
6116
6296
|
* De los pendientes, cuántos tocó ESTA sesión — o `undefined` cuando no se puede atribuir.
|
|
6117
6297
|
*
|
|
@@ -6294,7 +6474,7 @@ export function ajusteDeWorkspaceCableado(opciones) {
|
|
|
6294
6474
|
* `montarRutas`, así que olvidarlo compila y pasa.
|
|
6295
6475
|
*/
|
|
6296
6476
|
export function ficherosCableados() {
|
|
6297
|
-
return { leerFichero: leerFicheroDeProyecto, escribirFichero: escribirFicheroDeProyecto, baseDeFichero };
|
|
6477
|
+
return { leerFichero: leerFicheroDeProyecto, escribirFichero: escribirFicheroDeProyecto, baseDeFichero, iconoDelProyecto };
|
|
6298
6478
|
}
|
|
6299
6479
|
/**
|
|
6300
6480
|
* Los siete puertos de los emuladores, cableados con las funciones de verdad — extraídos por el
|