xonecode 0.8.17 → 0.8.23
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/README.md +2 -2
- package/apps/web/dist/assets/index-CtYEobZI.css +1 -0
- package/apps/web/dist/assets/index-mTaG_gr6.js +478 -0
- package/apps/web/dist/assets/{php-Cu6F_QCJ.js → php-BEI3vU5S.js} +1 -1
- package/apps/web/dist/assets/{ruby-BiqQPoC6.js → ruby-DCYozE_k.js} +1 -1
- package/apps/web/dist/index.html +3 -3
- package/dist/agent/cloudstudio/cloudstudioMcp.js +9 -4
- package/dist/agent/cloudstudio/cloudstudioMcp.js.map +1 -1
- package/dist/agent/config/mudanzaEnDisco.js +10 -8
- package/dist/agent/config/mudanzaEnDisco.js.map +1 -1
- package/dist/agent/config/settingsEnDisco.js +2 -62
- package/dist/agent/config/settingsEnDisco.js.map +1 -1
- package/dist/agent/raizDelPaquete.js +1 -1
- package/dist/agent/subagentes/escrituraDeCodex.js +2 -2
- package/dist/agent/subagentes/escrituraExterna.js +36 -9
- package/dist/agent/subagentes/escrituraExterna.js.map +1 -1
- package/dist/agent/subagentes/pluginDeSkills.js +1 -1
- package/dist/agent/subagentes/subagenteExterno.js +4 -4
- package/dist/agent/subagentes/subagenteOpencode.js +1 -1
- package/dist/agent/turno/turnoReal.js +35 -5
- package/dist/agent/turno/turnoReal.js.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/cli/consola.js +38 -48
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/main.js +40 -22
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/tui/sidebar.js +1 -1
- package/dist/core/dispositivos.js +3 -3
- package/dist/core/modoDeEscritura.js +115 -0
- package/dist/core/modoDeEscritura.js.map +1 -0
- package/dist/core/mudanzaDeWorkspace.js +8 -5
- package/dist/core/mudanzaDeWorkspace.js.map +1 -1
- package/dist/core/puedeLanzarse.js +3 -3
- package/dist/core/selectorDeCarpeta.js +2 -2
- package/dist/core/settings.js +0 -45
- package/dist/core/settings.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/web/servidor/arranque.js +102 -30
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/consolaDeTarea.js +1 -1
- package/dist/web/servidor/consolaDeTarea.js.map +1 -1
- package/dist/web/servidor/consolaWeb.js +7 -0
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/sesiones.js +27 -0
- package/dist/web/servidor/sesiones.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +22 -1
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/index-Boak51UP.css +0 -1
- package/apps/web/dist/assets/index-Cg28x6nG.js +0 -477
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAc,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqB3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAAU,CAAC;AAsBzG,2CAA2C;AAC3C,MAAM,UAAU,MAAM,CAAC,OAA0C,EAAE,UAAmC;IACpG,OAAO,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC;AACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/core/version.js
CHANGED
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export function lineaDeVersion(v) {
|
|
22
22
|
if (v.commit === undefined)
|
|
23
|
-
return `
|
|
23
|
+
return `XOneCode ${v.version}`;
|
|
24
24
|
const estado = v.sucio === true
|
|
25
25
|
? " + cambios sin commitear"
|
|
26
26
|
: v.sucio === undefined
|
|
27
27
|
? " (no se pudo mirar si hay cambios sin commitear)"
|
|
28
28
|
: "";
|
|
29
|
-
return `
|
|
29
|
+
return `XOneCode ${v.version} · ${v.commit}${estado}`;
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=version.js.map
|
|
@@ -63,7 +63,8 @@ import { borrarCredencial, guardarCredencial } from "../../agent/config/authEnDi
|
|
|
63
63
|
import { borrarProveedorPersonalizado, guardarProveedorPersonalizado, proveedoresPersonalizados, } from "../../agent/config/configEnDisco.js";
|
|
64
64
|
import { crearCheckpointerDeProyecto, hayCheckpoint, olvidarHilo, } from "../../agent/sesiones/checkpointer.js";
|
|
65
65
|
import { cargarSettings, guardarConcurrenciaDeTareas, guardarWorkspace as guardarWorkspaceEnDisco, guardarDispositivos, guardarEntorno as guardarEntornoEnDisco, } from "../../agent/config/settingsEnDisco.js";
|
|
66
|
-
import { dentroDelWorkspace, expandirConCasa, motivoDeWorkspaceInaceptable,
|
|
66
|
+
import { dentroDelWorkspace, expandirConCasa, motivoDeWorkspaceInaceptable, } from "../../core/settings.js";
|
|
67
|
+
import { esModoDeEscritura, MODO_POR_OMISION, } from "../../core/modoDeEscritura.js";
|
|
67
68
|
import { mudarWorkspaceLegado } from "../../agent/config/mudanzaEnDisco.js";
|
|
68
69
|
import { elegirCarpetaEnMaquina, haySelectorDeCarpeta } from "../../agent/config/selectorEnMaquina.js";
|
|
69
70
|
import { cloudstudioDelProyecto } from "../../agent/config/configEnDisco.js";
|
|
@@ -188,6 +189,9 @@ function tipoServido(mime) {
|
|
|
188
189
|
export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
189
190
|
const informar = opciones.informar ?? (() => { });
|
|
190
191
|
const hayCredencialDe = opciones.hayCredencial ?? (() => false);
|
|
192
|
+
// Se llama UNA vez, aquí: no cambia mientras el proceso vive, y es el mismo dato que ya se
|
|
193
|
+
// imprime por terminal al arrancar (`arrancarConsolaWeb`).
|
|
194
|
+
const version = opciones.version?.();
|
|
191
195
|
/** Los personalizados dados de alta AHORA: se relee en cada mensaje, porque esta misma
|
|
192
196
|
* ventana los da de alta y de baja sin reiniciar nada. */
|
|
193
197
|
const personalizados = () => opciones.proveedoresPersonalizados?.() ?? [];
|
|
@@ -441,29 +445,32 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
441
445
|
ramas,
|
|
442
446
|
proyectoAbierto,
|
|
443
447
|
...(modo === undefined ? {} : { modo }),
|
|
448
|
+
// Solo «XOneCode X.X.X», para el pie de la barra: ahí no hay sitio para el commit ni
|
|
449
|
+
// para si el árbol está sucio —eso es lo que ya dice `lineaDeVersion` por terminal—,
|
|
450
|
+
// así que no se reutiliza esa función y se compone la línea corta aquí.
|
|
451
|
+
...(version === undefined ? {} : { version: `XOneCode ${version.version}` }),
|
|
444
452
|
...(entornoElegido === undefined ? {} : { entornoActivo: entornoElegido }),
|
|
445
453
|
...(activo === undefined ? {} : { proyectoActivo: activo }),
|
|
446
454
|
...(abierto?.sesion === undefined ? {} : { sesionActiva: abierto.sesion }),
|
|
447
455
|
...(abierto?.dispositivo === undefined ? {} : { dispositivoActivo: abierto.dispositivo }),
|
|
448
456
|
...(abierto?.historica === true ? { historica: true } : {}),
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
: {}),
|
|
457
|
+
/**
|
|
458
|
+
* **El modo de escritura de la sesión abierta**: supervisado o autónomo.
|
|
459
|
+
*
|
|
460
|
+
* Viaja en el ALTA y no solo en el aviso del turno porque quien se sienta hoy tiene
|
|
461
|
+
* que saber en qué modo está ANTES de pedir nada — no después, con los ficheros ya
|
|
462
|
+
* cambiados. Y viaja el MODO, no un booleano «sin aprobación»: es el dato que la
|
|
463
|
+
* pastilla del compositor tiene que pintar, y derivar el booleano de él es trivial
|
|
464
|
+
* mientras que lo contrario no.
|
|
465
|
+
*
|
|
466
|
+
* **Ausente = no hay sesión abierta**, que es por qué la pastilla no se pinta: un
|
|
467
|
+
* control sin dato detrás no se pinta. Lo dice el SERVIDOR leyendo el estado de la
|
|
468
|
+
* consola abierta, igual que el modelo en vigor — releer un fichero contaría lo de
|
|
469
|
+
* antes para siempre, y aquí ya no hay fichero que releer.
|
|
470
|
+
*/
|
|
471
|
+
...(abierto === undefined
|
|
472
|
+
? {}
|
|
473
|
+
: { modoDeEscritura: abierto.estadoDeSesion.modo ?? MODO_POR_OMISION }),
|
|
467
474
|
// Solo si SE MIRÓ y había algo. Las otras tres respuestas —limpio, sin git, no se
|
|
468
475
|
// pudo— se callan: un mensaje en cada apertura limpia es ruido en casi todas, y el
|
|
469
476
|
// aviso dejaría de leerse justo el día que importa.
|
|
@@ -581,7 +588,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
581
588
|
* lo que aquello prometía es `restaurar`, y se dice en el mismo sitio donde se rechaza.
|
|
582
589
|
*/
|
|
583
590
|
if (mensaje.accion === "borrar" && mensaje.ambito === "global" && esDeSerie(mensaje.agente.nombre)) {
|
|
584
|
-
informar(`«${mensaje.agente.nombre}» lo trae
|
|
591
|
+
informar(`«${mensaje.agente.nombre}» lo trae XOneCode y no se borra: edítalo, o restaura el de serie si quieres el original`);
|
|
585
592
|
return;
|
|
586
593
|
}
|
|
587
594
|
/**
|
|
@@ -603,7 +610,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
603
610
|
* de los dos se queda sin la regla.
|
|
604
611
|
*/
|
|
605
612
|
if (renombrandoDe !== undefined && mensaje.ambito === "global" && esDeSerie(renombrandoDe)) {
|
|
606
|
-
informar(`«${renombrandoDe}» lo trae
|
|
613
|
+
informar(`«${renombrandoDe}» lo trae XOneCode y su nombre no se cambia: es lo que lo ata a la versión de serie`);
|
|
607
614
|
return;
|
|
608
615
|
}
|
|
609
616
|
if (mensaje.ambito === "proyecto" && abierto === undefined) {
|
|
@@ -752,7 +759,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
752
759
|
informar(borrarSkill(base, nombre)
|
|
753
760
|
? `skill «${nombre}» borrada`
|
|
754
761
|
: esDeSerieLaSkill(nombre)
|
|
755
|
-
? `la skill «${nombre}» la trae
|
|
762
|
+
? `la skill «${nombre}» la trae XOneCode y no se borra: cópiala si quieres partir de ella`
|
|
756
763
|
: `«${nombre}» no existía en ${mensaje.ambito}`);
|
|
757
764
|
emitirSkills();
|
|
758
765
|
return;
|
|
@@ -1740,12 +1747,21 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
1740
1747
|
/**
|
|
1741
1748
|
* Los proyectos de UN entorno, SIN hacerlo activo.
|
|
1742
1749
|
*
|
|
1743
|
-
* El hermano de `atenderEntornoActivo`, y lo que los separa es todo lo que este NO
|
|
1744
|
-
* no toca `entornoElegido`, ni `
|
|
1745
|
-
*
|
|
1746
|
-
*
|
|
1747
|
-
*
|
|
1748
|
-
* `
|
|
1750
|
+
* El hermano de `atenderEntornoActivo`, y lo que los separa es casi todo lo que este NO
|
|
1751
|
+
* hace: no toca `entornoElegido`, ni `ramas`, ni `proyectoElegido`, ni pone `aviso`. Es una
|
|
1752
|
+
* pregunta para las casillas de una pestaña de Ajustes, y mudar el entorno activo desde ahí
|
|
1753
|
+
* le cambiaría la barra —y los proyectos de los que se habla— a quien esté trabajando en
|
|
1754
|
+
* otro servidor. Por eso la aserción que sostiene el diseño en `arranque.test.ts` es que
|
|
1755
|
+
* `alta.entornoActivo` no cambia.
|
|
1756
|
+
*
|
|
1757
|
+
* **La excepción es `proyectos`, y solo cuando el entorno preguntado ES el activo**: esa
|
|
1758
|
+
* variable es la fuente de `alta.proyectos`, lo único que pinta la barra
|
|
1759
|
+
* (`Barra.tsx#alaVista`), así que sin refrescarla aquí un proyecto recién aparecido en
|
|
1760
|
+
* CloudStudio se podía MARCAR visible desde Ajustes y no verse nunca — `alta.proyectos`
|
|
1761
|
+
* seguía siendo la foto de cuando el entorno se activó, y el `filter` de la barra descarta
|
|
1762
|
+
* en silencio un id de `visibles` que no tiene proyecto con el que cruzar. No hace falta
|
|
1763
|
+
* para uno NO activo: ese hueco se cierra solo en cuanto se activa, que es cuando
|
|
1764
|
+
* `atenderEntornoActivo` pide la lista de verdad.
|
|
1749
1765
|
*
|
|
1750
1766
|
* No se cachea, a propósito: cada apertura de pestaña pregunta. Con caché, la pestaña
|
|
1751
1767
|
* podría contradecir a la barra en cuanto alguien cree un proyecto en Studio, y aquí hay
|
|
@@ -1758,6 +1774,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
1758
1774
|
const atenderProyectosDeEntorno = async (entorno) => {
|
|
1759
1775
|
try {
|
|
1760
1776
|
const suyos = await vestibulo.proyectosDe(entorno);
|
|
1777
|
+
if (entorno === entornoElegido)
|
|
1778
|
+
proyectos = suyos;
|
|
1761
1779
|
emitir({
|
|
1762
1780
|
clase: "proyectosDeEntorno",
|
|
1763
1781
|
entorno,
|
|
@@ -1765,8 +1783,11 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
1765
1783
|
id: p.id,
|
|
1766
1784
|
nombre: p.nombre,
|
|
1767
1785
|
...(p.compartido === undefined ? {} : { compartido: p.compartido }),
|
|
1786
|
+
...(p.ultimoAcceso === undefined ? {} : { ultimoAcceso: p.ultimoAcceso }),
|
|
1768
1787
|
})),
|
|
1769
1788
|
});
|
|
1789
|
+
if (entorno === entornoElegido)
|
|
1790
|
+
await anunciarAlta().catch(contar);
|
|
1770
1791
|
}
|
|
1771
1792
|
catch (error) {
|
|
1772
1793
|
contar(error);
|
|
@@ -2018,6 +2039,33 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
2018
2039
|
}
|
|
2019
2040
|
abierto.consola.encolar(`/esfuerzo ${nivel}`);
|
|
2020
2041
|
};
|
|
2042
|
+
/**
|
|
2043
|
+
* El MODO DE ESCRITURA de la sesión abierta.
|
|
2044
|
+
*
|
|
2045
|
+
* Se encola `/aprobacion`, que es el MISMO manejador que usa el terminal: la función se
|
|
2046
|
+
* comparte y la sintaxis no se exporta, igual que con `/modelo` y `/esfuerzo`. Y **no se
|
|
2047
|
+
* guarda ningún defecto**: el modo es de la sesión y solo de la sesión — un defecto
|
|
2048
|
+
* persistido es justo lo que se acaba de retirar, y no se vuelve a meter por inercia.
|
|
2049
|
+
*
|
|
2050
|
+
* Sin proyecto abierto no hay sesión a la que aplicárselo, y se DICE en vez de callarlo:
|
|
2051
|
+
* la pastilla solo se pinta con sesión, así que llegar aquí sin ella es un cliente
|
|
2052
|
+
* desincronizado y merece una frase, no un silencio.
|
|
2053
|
+
*/
|
|
2054
|
+
const atenderModoDeEscritura = (modo) => {
|
|
2055
|
+
const abierto = vestibulo.proyectoAbierto();
|
|
2056
|
+
if (abierto === undefined) {
|
|
2057
|
+
informar("no hay ninguna sesión abierta a la que cambiarle el modo de escritura");
|
|
2058
|
+
return;
|
|
2059
|
+
}
|
|
2060
|
+
// Se criba contra el vocabulario ANTES de encolar: lo que llega del cable acaba siendo
|
|
2061
|
+
// un parámetro, y el manejador ya lo rechazaría, pero su rechazo se imprimiría como una
|
|
2062
|
+
// línea de consola en vez de un aviso. Aquí se dice mejor.
|
|
2063
|
+
if (!esModoDeEscritura(modo)) {
|
|
2064
|
+
informar(`«${String(modo)}» no es un modo de escritura`);
|
|
2065
|
+
return;
|
|
2066
|
+
}
|
|
2067
|
+
abierto.consola.encolar(`/aprobacion ${modo}`);
|
|
2068
|
+
};
|
|
2021
2069
|
/**
|
|
2022
2070
|
* Pregunta a Ollama si el modelo en vigor piensa, y vuelve a emitir cuando conteste.
|
|
2023
2071
|
*
|
|
@@ -2921,7 +2969,22 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
2921
2969
|
// tocan disco), así que la única forma de enterarse es que el vestíbulo lo diga. Sin
|
|
2922
2970
|
// esto, el disparador del compositor seguiría enseñando el modelo con el que se abrió la
|
|
2923
2971
|
// sesión después de haberlo cambiado — una cifra con forma de verdad.
|
|
2924
|
-
vestibulo.alCambiarEstadoDeSesion(() =>
|
|
2972
|
+
vestibulo.alCambiarEstadoDeSesion(() => {
|
|
2973
|
+
emitirModelos();
|
|
2974
|
+
/**
|
|
2975
|
+
* **Y el ALTA, porque el modo de escritura viaja ahí y no en `modelos`.**
|
|
2976
|
+
*
|
|
2977
|
+
* `/aprobacion` cambia el modo dentro del lazo igual que `/modelo` cambia el modelo, y
|
|
2978
|
+
* sin esta línea la pastilla se quedaba en el valor de antes hasta el siguiente flanco
|
|
2979
|
+
* de turno: un control que MIENTE durante un turno entero, y justo el que decide si los
|
|
2980
|
+
* ficheros se escriben sin enseñarte el diff. No se mete el campo dentro de `modelos`
|
|
2981
|
+
* para ahorrarse esto, porque no es una propiedad del modelo.
|
|
2982
|
+
*
|
|
2983
|
+
* Se traga el fallo como los demás llamadores: un alta que no se pudo componer no puede
|
|
2984
|
+
* llevarse por delante un cambio de modelo que sí surtió efecto.
|
|
2985
|
+
*/
|
|
2986
|
+
void anunciarAlta().catch(contar);
|
|
2987
|
+
});
|
|
2925
2988
|
// El turno se emite solo (`consolaWeb.turno`), pero además hay que RECORDARLO: una pestaña
|
|
2926
2989
|
// que conecta a mitad no vio ese mensaje, y necesita saberlo para apagar su compositor.
|
|
2927
2990
|
/**
|
|
@@ -3583,6 +3646,12 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
3583
3646
|
respuesta.end();
|
|
3584
3647
|
return;
|
|
3585
3648
|
}
|
|
3649
|
+
if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "modoDeEscritura") {
|
|
3650
|
+
atenderModoDeEscritura(mensaje.modo);
|
|
3651
|
+
respuesta.writeHead(204);
|
|
3652
|
+
respuesta.end();
|
|
3653
|
+
return;
|
|
3654
|
+
}
|
|
3586
3655
|
if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "agente") {
|
|
3587
3656
|
atenderAgente(mensaje);
|
|
3588
3657
|
respuesta.writeHead(204);
|
|
@@ -3922,7 +3991,7 @@ function fotoDeDispositivo(dispositivo) {
|
|
|
3922
3991
|
* con «yo no puedo», que se arreglan en sitios distintos.
|
|
3923
3992
|
*/
|
|
3924
3993
|
const SIN_NOMBRE_DE_APP = "No se puede lanzar sin saber cómo se llama la app: el nombre sale del `name=` de app.ini, y ese fichero no está o no lo dice. Ábrelo en XOne Studio y vuelve a guardarlo.";
|
|
3925
|
-
const SIN_CAMINO_DE_LANZAMIENTO = "Esta ejecución de
|
|
3994
|
+
const SIN_CAMINO_DE_LANZAMIENTO = "Esta ejecución de XOneCode no puede lanzar apps —no tiene montado el lanzamiento—, así que el veredicto se puede mirar pero no ejecutar.";
|
|
3926
3995
|
/**
|
|
3927
3996
|
* Lo que la pestaña CloudStudio enseña: de qué rama es este proyecto y cuántos ficheros
|
|
3928
3997
|
* quedan por subir.
|
|
@@ -4423,6 +4492,9 @@ export async function arrancarConsolaWeb(opciones) {
|
|
|
4423
4492
|
// El tope de ventana, tal cual llega: es la misma función que la barra del terminal, y
|
|
4424
4493
|
// dos resoluciones serían dos porcentajes distintos para el mismo modelo.
|
|
4425
4494
|
...(opciones.topeDeContexto === undefined ? {} : { topeDeContexto: opciones.topeDeContexto }),
|
|
4495
|
+
// La misma función que ya usa la línea de terminal (`lineaDeVersion(version)` más abajo):
|
|
4496
|
+
// un proceso, una versión, un solo sitio que la calcula.
|
|
4497
|
+
...(opciones.version === undefined ? {} : { version: opciones.version }),
|
|
4426
4498
|
...(corredor === undefined ? {} : { revisarTareas: () => corredor.revisar() }),
|
|
4427
4499
|
// El PUERTO de disco y el corredor, no operaciones sueltas: `montarRutas` resuelve
|
|
4428
4500
|
// `crearTarea`/`accionDeTarea` con SU propio estado (`proyectos`, `entornoElegido`,
|