xonecode 0.33.0 → 0.34.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/apps/web/dist/assets/{EditorDeFichero-H_kGeZt2.js → EditorDeFichero-Cj0knNmP.js} +1 -1
- package/apps/web/dist/assets/index-Ga8fTlWp.js +499 -0
- package/apps/web/dist/assets/{index-CWBaotdZ.css → index-R3kXj69E.css} +1 -1
- package/apps/web/dist/assets/{php-CMFQiZgk.js → php-MVUx_K96.js} +1 -1
- package/apps/web/dist/assets/{ruby-Dj3BOBHc.js → ruby-n-r-AXdi.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/config/fuentesEnRed.js +80 -0
- package/dist/agent/config/fuentesEnRed.js.map +1 -0
- package/dist/agent/dispositivos/cajasDeMaqueta.js +90 -2
- package/dist/agent/dispositivos/cajasDeMaqueta.js.map +1 -1
- package/dist/agent/dispositivos/geometriaEnDisco.js +85 -3
- package/dist/agent/dispositivos/geometriaEnDisco.js.map +1 -1
- package/dist/agent/grafo/criticaVisual.js +43 -37
- package/dist/agent/grafo/criticaVisual.js.map +1 -1
- package/dist/agent/grafo/fuentesDeGoogle.js +133 -0
- package/dist/agent/grafo/fuentesDeGoogle.js.map +1 -0
- package/dist/agent/grafo/incorporarAdjunto.js +52 -42
- package/dist/agent/grafo/incorporarAdjunto.js.map +1 -1
- package/dist/agent/grafo/perfiles.js +2 -0
- package/dist/agent/grafo/perfiles.js.map +1 -1
- package/dist/agent/motores/trueforge/capacidades.js +9 -6
- package/dist/agent/motores/trueforge/capacidades.js.map +1 -1
- package/dist/agent/motores/trueforge/informesDeHijos.js +39 -7
- package/dist/agent/motores/trueforge/informesDeHijos.js.map +1 -1
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.js +75 -37
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.js.map +1 -1
- package/dist/agent/motores/trueforge/memoriaTrueforge.js +24 -4
- package/dist/agent/motores/trueforge/memoriaTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/modeloLangchain.js +28 -4
- package/dist/agent/motores/trueforge/modeloLangchain.js.map +1 -1
- package/dist/agent/motores/trueforge/proponerTareas.js +67 -0
- package/dist/agent/motores/trueforge/proponerTareas.js.map +1 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js +104 -11
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/sesiones/adjuntosDeSesion.js +68 -1
- package/dist/agent/sesiones/adjuntosDeSesion.js.map +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +12 -4
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
- package/dist/agent/tareas/aumentador.js +4 -3
- package/dist/agent/tareas/aumentador.js.map +1 -1
- package/dist/agent/turno/informeDeTraza.js +2 -1
- package/dist/agent/turno/informeDeTraza.js.map +1 -1
- package/dist/agent/turno/interrupts.js +12 -0
- package/dist/agent/turno/interrupts.js.map +1 -1
- package/dist/agent/turno/resumenDeTool.js +4 -0
- package/dist/agent/turno/resumenDeTool.js.map +1 -1
- package/dist/agent/turno/turnoReal.js +3 -0
- package/dist/agent/turno/turnoReal.js.map +1 -1
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/main.js +2 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/transcript.js +5 -0
- package/dist/cli/tui/transcript.js.map +1 -1
- package/dist/core/actos.js.map +1 -1
- package/dist/core/agentes.js +10 -0
- package/dist/core/agentes.js.map +1 -1
- package/dist/core/analisisDeSesion.js +1 -1
- package/dist/core/analisisDeSesion.js.map +1 -1
- package/dist/core/descripcionDePantalla.js +26 -13
- package/dist/core/descripcionDePantalla.js.map +1 -1
- package/dist/core/estiloMedido.js +21 -1
- package/dist/core/estiloMedido.js.map +1 -1
- package/dist/core/fuentes.js +174 -0
- package/dist/core/fuentes.js.map +1 -0
- package/dist/core/geometriaDePantalla.js +101 -1
- package/dist/core/geometriaDePantalla.js.map +1 -1
- package/dist/core/notify.js +4 -0
- package/dist/core/notify.js.map +1 -1
- package/dist/core/ports.js +35 -0
- package/dist/core/ports.js.map +1 -1
- package/dist/core/repartoDeEncargo.js +87 -0
- package/dist/core/repartoDeEncargo.js.map +1 -0
- package/dist/core/shellDeAgente.js +23 -0
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/core/tareas.js +7 -0
- package/dist/core/tareas.js.map +1 -1
- package/dist/core/turno.js +15 -0
- package/dist/core/turno.js.map +1 -1
- package/dist/web/servidor/arranque.js +117 -13
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/consolaWeb.js +5 -0
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/interrupcion.js +52 -0
- package/dist/web/servidor/interrupcion.js.map +1 -0
- package/dist/web/servidor/pielWeb.js +36 -0
- package/dist/web/servidor/pielWeb.js.map +1 -1
- package/dist/web/servidor/transporte.js +1 -0
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +30 -2
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +1 -1
- package/skills/xone-development/references/css/de-una-maqueta-a-xone.md +6 -4
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +4 -4
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +4 -4
- package/apps/web/dist/assets/index-DnGuOvbb.js +0 -499
package/dist/core/tareas.js
CHANGED
|
@@ -72,6 +72,8 @@ export const TOPE_DE_RONDAS_DE_TAREA = 20;
|
|
|
72
72
|
* misma pasada: comparten disco, índice de git, checkpointer y `sync`, y dos turnos a la
|
|
73
73
|
* vez sobre eso es una carrera con escrituras de por medio.
|
|
74
74
|
* - **Y GANA LA PERSONA**: ver `bloqueados`.
|
|
75
|
+
* - **Y las ENCADENADAS esperan a su anterior** (`Tarea.tras`) hasta que esté `terminada`, también si quedó en
|
|
76
|
+
* `requiere-atencion`. Igual que un bloqueado: no gasta hueco ni para la cola.
|
|
75
77
|
*/
|
|
76
78
|
export function siguientesAEjecutar(tareas, opciones) {
|
|
77
79
|
const corriendo = tareas.filter((t) => t.estado === "en-proceso");
|
|
@@ -87,6 +89,11 @@ export function siguientesAEjecutar(tareas, opciones) {
|
|
|
87
89
|
for (const t of candidatas) {
|
|
88
90
|
if (elegidas.length >= huecos)
|
|
89
91
|
break;
|
|
92
|
+
if (t.tras !== undefined) {
|
|
93
|
+
const anterior = tareas.find((x) => x.id === t.tras);
|
|
94
|
+
if (anterior !== undefined && anterior.estado !== "terminada")
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
90
97
|
if (ocupados.has(t.proyecto.raiz))
|
|
91
98
|
continue;
|
|
92
99
|
ocupados.add(t.proyecto.raiz);
|
package/dist/core/tareas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tareas.js","sourceRoot":"","sources":["../../src/core/tareas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB1C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAA8D;IACrF;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC1C,YAAY,EAAE,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAChD,+EAA+E;IAC/E,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAC3C,SAAS,EAAE,EAAE;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"tareas.js","sourceRoot":"","sources":["../../src/core/tareas.ts"],"names":[],"mappings":"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"}
|
package/dist/core/turno.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Bitacora } from "./bitacora.js";
|
|
2
2
|
import { Colapsador } from "./notify.js";
|
|
3
|
+
import { textoDePropuesta } from "./repartoDeEncargo.js";
|
|
3
4
|
import { pideLeerLaMemoria } from "./memoria.js";
|
|
4
5
|
/**
|
|
5
6
|
* Lo que la piel recibe de una línea del colapsador: su tool, su error y su origen. UNA función
|
|
@@ -178,6 +179,20 @@ export async function correrTurno(eventos, piel, opciones = {}) {
|
|
|
178
179
|
}
|
|
179
180
|
piel.consulta?.({ pregunta: ev.pregunta, opciones: ev.opciones });
|
|
180
181
|
break;
|
|
182
|
+
case "propuesta-de-tareas":
|
|
183
|
+
// No ha salido por `token`: sin el método, una línea; con él, la tarjeta (y la respuesta abierta se cierra
|
|
184
|
+
// antes, como con `consulta`, para que no quede pegada a ella).
|
|
185
|
+
if (piel.propuestaDeTareas !== undefined) {
|
|
186
|
+
if (abierta) {
|
|
187
|
+
piel.cerrarLinea();
|
|
188
|
+
abierta = false;
|
|
189
|
+
}
|
|
190
|
+
piel.propuestaDeTareas({ motivo: ev.motivo, tareas: ev.tareas });
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
escribirLinea(textoDePropuesta({ motivo: ev.motivo, tareas: ev.tareas }));
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
181
196
|
case "bloqueado":
|
|
182
197
|
bitacora.anota("bloqueado", ev.motivo);
|
|
183
198
|
escribirLinea(`⛔ bloqueado (${ev.motivo}): ${ev.explicacion}`);
|
package/dist/core/turno.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turno.js","sourceRoot":"","sources":["../../src/core/turno.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"turno.js","sourceRoot":"","sources":["../../src/core/turno.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
import { hayMemoriaDeHilo, olvidarMemoriaDeHilo } from "../../agent/sesiones/memoriaDeHilo.js";
|
|
31
31
|
import { existsSync, readFileSync } from "node:fs";
|
|
32
32
|
import { lineaDeVersion } from "../../core/version.js";
|
|
33
|
+
import { esperarInterrupcion } from "./interrupcion.js";
|
|
33
34
|
import { basename, dirname, join } from "node:path";
|
|
34
35
|
import { fileURLToPath } from "node:url";
|
|
35
36
|
import { randomUUID } from "node:crypto";
|
|
@@ -103,7 +104,8 @@ import { consolaParaTarea, crearCorredorDeTareas, revisionConGit, } from "./corr
|
|
|
103
104
|
import { CONCURRENCIA_POR_OMISION, conEstado, darPorBuenaAMano, tituloDeTarea, } from "../../core/tareas.js";
|
|
104
105
|
import { aplicarFeedback, TOPE_DE_ADJUNTO } from "../../agent/tareas/tareasEnDisco.js";
|
|
105
106
|
import { nombreDeAdjuntoAceptable } from "../../core/adjuntos.js";
|
|
106
|
-
import { guardarAdjuntoDeSesion, TOPE_DE_ADJUNTO_DE_SESION } from "../../agent/sesiones/adjuntosDeSesion.js";
|
|
107
|
+
import { copiarAdjuntosDeSesion, guardarAdjuntoDeSesion, TOPE_DE_ADJUNTO_DE_SESION, } from "../../agent/sesiones/adjuntosDeSesion.js";
|
|
108
|
+
import { motivoDePropuestaInaceptable, nombreDeAdjuntoPropuesto, propuestaPendiente, tareasEncadenadas, } from "../../core/repartoDeEncargo.js";
|
|
107
109
|
import { rutaMemoriaDeProyecto } from "../../agent/grafo/memoriaDeProyecto.js";
|
|
108
110
|
import { crearAumentador, invocarParaAumentar } from "../../agent/tareas/aumentador.js";
|
|
109
111
|
import { baseDeWorkspaceLegada, baseDeWorkspacePorOmision, conexionDeVestibulo, crearVestibulo, escribirProyectoEnDisco, esProyectoEnDisco, } from "./vestibulo.js";
|
|
@@ -1555,6 +1557,85 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
1555
1557
|
emitir({ clase: "tarea", accion: "augmentado", error: motivoLegible(error) });
|
|
1556
1558
|
}
|
|
1557
1559
|
};
|
|
1560
|
+
/**
|
|
1561
|
+
* La propuesta de tareas `propuestaId` del proyecto `proyectoId`, PENDIENTE, con la consola que la
|
|
1562
|
+
* tiene delante —la abierta en el foco, de ESE proyecto—, o el motivo de que no. Lo que se aumenta
|
|
1563
|
+
* y se encola sale de este acto, nunca del cliente: el cliente solo dice cuál.
|
|
1564
|
+
*/
|
|
1565
|
+
const propuestaDelFoco = (proyectoId, propuestaId) => {
|
|
1566
|
+
const proyecto = proyectoParaTarea(proyectoId);
|
|
1567
|
+
if (proyecto === undefined)
|
|
1568
|
+
return { motivo: `el proyecto «${proyectoId}» no se pudo resolver` };
|
|
1569
|
+
const abierta = vestibulo.proyectoAbierto();
|
|
1570
|
+
if (abierta === undefined || !mismaRuta(abierta.raiz, proyecto.raiz)) {
|
|
1571
|
+
return { motivo: "la conversación de esa propuesta ya no está abierta" };
|
|
1572
|
+
}
|
|
1573
|
+
const propuesta = propuestaPendiente(abierta.actos(), propuestaId);
|
|
1574
|
+
if (propuesta === undefined)
|
|
1575
|
+
return { motivo: "esa propuesta ya no está pendiente (se encoló o se descartó)" };
|
|
1576
|
+
return { proyecto, abierta, propuesta };
|
|
1577
|
+
};
|
|
1578
|
+
/**
|
|
1579
|
+
* Encola una propuesta EN ORDEN: una tarea por cada una de la propuesta, encadenadas por `tras`
|
|
1580
|
+
* (`core/repartoDeEncargo.ts#tareasEncadenadas`), con el encargo que la persona revisó.
|
|
1581
|
+
*
|
|
1582
|
+
* **Crear las tareas es la autorización** para que escriban sin preguntar, y por eso solo pasa por
|
|
1583
|
+
* aquí —el clic de la persona—, también en modo autónomo: la sesión solo PROPONE.
|
|
1584
|
+
*
|
|
1585
|
+
* **Los adjuntos se copian ANTES de guardar**, por lo mismo que el borrador de `atenderCrearTarea`:
|
|
1586
|
+
* guardar dispara `revisarTareas()` y el corredor puede arrancar la primera en el acto. Cada tarea
|
|
1587
|
+
* se lleva los suyos de la carpeta de la SESIÓN que propuso; un nombre que no está no tumba el
|
|
1588
|
+
* encolado, vuelve en `faltan`. Y la propuesta queda RESUELTA con los ids, para no encolarla dos
|
|
1589
|
+
* veces.
|
|
1590
|
+
*/
|
|
1591
|
+
const atenderCrearEncadenadas = (proyectoId, propuestaId, encargos) => {
|
|
1592
|
+
const cola = opciones.colaDeTareas;
|
|
1593
|
+
if (cola === undefined)
|
|
1594
|
+
return { motivo: "no hay cola de tareas" };
|
|
1595
|
+
const hallada = propuestaDelFoco(proyectoId, propuestaId);
|
|
1596
|
+
if ("motivo" in hallada)
|
|
1597
|
+
return hallada;
|
|
1598
|
+
const { proyecto, abierta, propuesta } = hallada;
|
|
1599
|
+
const motivo = motivoDePropuestaInaceptable(propuesta);
|
|
1600
|
+
if (motivo !== undefined)
|
|
1601
|
+
return { motivo };
|
|
1602
|
+
if (encargos.length !== propuesta.tareas.length || encargos.some((e) => typeof e !== "string")) {
|
|
1603
|
+
return { motivo: `hacen falta ${propuesta.tareas.length} encargos, uno por tarea` };
|
|
1604
|
+
}
|
|
1605
|
+
const nuevas = tareasEncadenadas({
|
|
1606
|
+
proyecto,
|
|
1607
|
+
tareas: propuesta.tareas.map((t, i) => ({ titulo: t.titulo, peticion: t.peticion, encargo: encargos[i] })),
|
|
1608
|
+
ahora: new Date(),
|
|
1609
|
+
id: randomUUID,
|
|
1610
|
+
});
|
|
1611
|
+
const faltan = [];
|
|
1612
|
+
for (const [i, nueva] of nuevas.entries()) {
|
|
1613
|
+
const nombres = (propuesta.tareas[i].adjuntos ?? []).map(nombreDeAdjuntoPropuesto);
|
|
1614
|
+
if (nombres.length === 0)
|
|
1615
|
+
continue;
|
|
1616
|
+
const carpeta = cola.carpetaDeAdjuntos?.(nueva.id);
|
|
1617
|
+
if (carpeta === undefined) {
|
|
1618
|
+
faltan.push(...nombres);
|
|
1619
|
+
continue;
|
|
1620
|
+
}
|
|
1621
|
+
faltan.push(...copiarAdjuntosDeSesion(abierta.raiz, abierta.idDeHilo, nombres, carpeta).faltan);
|
|
1622
|
+
// Del DISCO, como al crear una a mano.
|
|
1623
|
+
nueva.adjuntos = cola.listarAdjuntos(nueva.id);
|
|
1624
|
+
}
|
|
1625
|
+
cola.guardar([...cola.listar(), ...nuevas]);
|
|
1626
|
+
const encoladas = nuevas.map((t) => t.id);
|
|
1627
|
+
abierta.anotarActo?.({ tipo: "propuesta-resuelta", propuesta: propuestaId, encoladas });
|
|
1628
|
+
return { encoladas, faltan };
|
|
1629
|
+
};
|
|
1630
|
+
/** Descarta una propuesta pendiente: queda RESUELTA sin tareas, y la tarjeta deja de ofrecerla.
|
|
1631
|
+
* `enChat` = se descartó para hacerlo en esta conversación, y la tarjeta lo dice así. */
|
|
1632
|
+
const atenderDescartarPropuesta = (proyectoId, propuestaId, enChat) => {
|
|
1633
|
+
const hallada = propuestaDelFoco(proyectoId, propuestaId);
|
|
1634
|
+
if ("motivo" in hallada)
|
|
1635
|
+
return hallada.motivo;
|
|
1636
|
+
hallada.abierta.anotarActo?.({ tipo: "propuesta-resuelta", propuesta: propuestaId, ...(enChat ? { enChat: true } : {}) });
|
|
1637
|
+
return undefined;
|
|
1638
|
+
};
|
|
1558
1639
|
/**
|
|
1559
1640
|
* Reintentar, descartar o terminar una tarea existente.
|
|
1560
1641
|
*
|
|
@@ -5696,6 +5777,34 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
5696
5777
|
return;
|
|
5697
5778
|
}
|
|
5698
5779
|
if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "tarea") {
|
|
5780
|
+
if (mensaje.accion === "crearEncadenadas") {
|
|
5781
|
+
// Contesta en la PROPIA respuesta: la tarjeta tiene que saber si se encoló para cerrarse, y
|
|
5782
|
+
// un 409 con motivo es la negativa de siempre del cable.
|
|
5783
|
+
const resultado = mudandoWorkspace
|
|
5784
|
+
? { motivo: "se está cambiando la carpeta de los proyectos: encola las tareas cuando termine" }
|
|
5785
|
+
: atenderCrearEncadenadas(mensaje.proyecto, mensaje.propuesta, Array.isArray(mensaje.encargos) ? mensaje.encargos : []);
|
|
5786
|
+
if ("motivo" in resultado) {
|
|
5787
|
+
respuesta.writeHead(409, { "content-type": "application/json" });
|
|
5788
|
+
respuesta.end(JSON.stringify({ motivo: resultado.motivo }));
|
|
5789
|
+
return;
|
|
5790
|
+
}
|
|
5791
|
+
opciones.revisarTareas?.();
|
|
5792
|
+
emitirTareas();
|
|
5793
|
+
respuesta.writeHead(200, { "content-type": "application/json" });
|
|
5794
|
+
respuesta.end(JSON.stringify(resultado.faltan.length === 0 ? { encoladas: resultado.encoladas } : resultado));
|
|
5795
|
+
return;
|
|
5796
|
+
}
|
|
5797
|
+
if (mensaje.accion === "descartarPropuesta") {
|
|
5798
|
+
const motivo = atenderDescartarPropuesta(mensaje.proyecto, mensaje.propuesta, mensaje.enChat === true);
|
|
5799
|
+
if (motivo !== undefined) {
|
|
5800
|
+
respuesta.writeHead(409, { "content-type": "application/json" });
|
|
5801
|
+
respuesta.end(JSON.stringify({ motivo }));
|
|
5802
|
+
return;
|
|
5803
|
+
}
|
|
5804
|
+
respuesta.writeHead(204);
|
|
5805
|
+
respuesta.end();
|
|
5806
|
+
return;
|
|
5807
|
+
}
|
|
5699
5808
|
if (mensaje.accion === "crear" && mudandoWorkspace) {
|
|
5700
5809
|
// Una tarea creada a mitad de la mudanza guardaría la raíz VIEJA, que está a punto de
|
|
5701
5810
|
// borrarse. Se niega con motivo, como cualquier otra negativa del cable.
|
|
@@ -7390,7 +7499,13 @@ export async function arrancarConsolaWeb(opciones) {
|
|
|
7390
7499
|
escribir(`no se pudo abrir el navegador (${error instanceof Error ? error.message : String(error)}); abre la URL a mano\n`);
|
|
7391
7500
|
}
|
|
7392
7501
|
}
|
|
7393
|
-
|
|
7502
|
+
/**
|
|
7503
|
+
* La espera por omisión: hasta que alguien interrumpa. Sin ella `arrancarConsolaWeb`
|
|
7504
|
+
* devolvería en cuanto el servidor está en pie, y `bin.ts` hace `process.exit(codigo)` —
|
|
7505
|
+
* o sea que el servidor recién levantado moriría antes de servir una sola petición. Y una
|
|
7506
|
+
* señal repetida no puede matar el cierre que sigue: ver `interrupcion.ts`.
|
|
7507
|
+
*/
|
|
7508
|
+
await (opciones.esperarCierre ?? (() => esperarInterrupcion({ avisar: escribir })))();
|
|
7394
7509
|
/**
|
|
7395
7510
|
* El corredor PRIMERO, y el orden es load-bearing: `parar()` corta los turnos en vuelo y
|
|
7396
7511
|
* los deja aparcados diciendo que la consola se cerró a mitad. Al revés, el
|
|
@@ -7433,17 +7548,6 @@ export function modoDeProyecto(raiz) {
|
|
|
7433
7548
|
function esProyectoOffline(cwd) {
|
|
7434
7549
|
return modoDeProyecto(cwd) === "offline";
|
|
7435
7550
|
}
|
|
7436
|
-
/**
|
|
7437
|
-
* La espera por omisión: hasta que alguien interrumpa. Sin ella `arrancarConsolaWeb`
|
|
7438
|
-
* devolvería en cuanto el servidor está en pie, y `bin.ts` hace `process.exit(codigo)` —
|
|
7439
|
-
* o sea que el servidor recién levantado moriría antes de servir una sola petición.
|
|
7440
|
-
*/
|
|
7441
|
-
function esperarInterrupcion() {
|
|
7442
|
-
return new Promise((resolver) => {
|
|
7443
|
-
process.once("SIGINT", () => resolver());
|
|
7444
|
-
process.once("SIGTERM", () => resolver());
|
|
7445
|
-
});
|
|
7446
|
-
}
|
|
7447
7551
|
/** El vestíbulo con todas sus piezas reales. Se construye DESPUÉS del servidor porque el
|
|
7448
7552
|
* callback de OAuth necesita saber a qué URL devolver al navegador. */
|
|
7449
7553
|
function vestibuloReal(opciones, servidor, escribir, informar, conectores) {
|